On success, dbblock is returned. This contains the dbm pointer and
the fd of the locked lock file.
On success, dbblock is returned. This contains the dbm pointer and
the fd of the locked lock file.
log_write(0, LOG_MAIN, "Failed to get %s lock for %s: %s",
((flags & O_RDONLY) != 0)? "read" : "write", buffer,
(errno == ETIMEDOUT)? "timed out" : strerror(errno));
log_write(0, LOG_MAIN, "Failed to get %s lock for %s: %s",
((flags & O_RDONLY) != 0)? "read" : "write", buffer,
(errno == ETIMEDOUT)? "timed out" : strerror(errno));
exclusive access to the database, so we can go ahead and open it. If we are
expected to create it, don't do so at first, again so that we can detect
whether we need to change its ownership (see comments about the lock file
exclusive access to the database, so we can go ahead and open it. If we are
expected to create it, don't do so at first, again so that we can detect
whether we need to change its ownership (see comments about the lock file
sprintf(CS buffer, "%s/db/%s", spool_directory, name);
sprintf(CS buffer, "%s/db/%s", spool_directory, name);
EXIM_DBOPEN(buffer, flags, EXIMDB_MODE, &(dbblock->dbptr));
EXIM_DBOPEN(buffer, flags, EXIMDB_MODE, &(dbblock->dbptr));
debug_printf("%s appears not to exist: trying to create\n", buffer);
created = TRUE;
EXIM_DBOPEN(buffer, flags|O_CREAT, EXIMDB_MODE, &(dbblock->dbptr));
debug_printf("%s appears not to exist: trying to create\n", buffer);
created = TRUE;
EXIM_DBOPEN(buffer, flags|O_CREAT, EXIMDB_MODE, &(dbblock->dbptr));
if (Ustat(buffer, &statbuf) >= 0 && statbuf.st_uid != exim_uid)
{
DEBUG(D_hints_lookup) debug_printf("ensuring %s is owned by exim\n", buffer);
if (Ustat(buffer, &statbuf) >= 0 && statbuf.st_uid != exim_uid)
{
DEBUG(D_hints_lookup) debug_printf("ensuring %s is owned by exim\n", buffer);
debug_printf("%s", CS string_open_failed(save_errno, "DB file %s\n",
buffer));
}
debug_printf("%s", CS string_open_failed(save_errno, "DB file %s\n",
buffer));
}
- debug_printf("opened hints database %s: flags=%x\n", buffer, flags);
+ debug_printf("opened hints database %s: flags=%s\n", buffer,
+ (flags == O_RDONLY)? "O_RDONLY" : (flags == O_RDWR)? "O_RDWR" :
+ (flags == (O_RDWR|O_CREAT))? "O_RDWR|O_CREAT" : "??");