X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fdbfn.c;h=4a1c20fe629d150bc831a2668d5b3232a3ad1815;hb=cb46fd2b91514ce49ad0e13788127d756ed35145;hp=36110f3e9d6b24259e6f060a44cb53d1682d0b17;hpb=8187c3f305da2db645e8d0aabb3597c6e012dcf9;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/dbfn.c b/src/src/dbfn.c index 36110f3e9..4a1c20fe6 100644 --- a/src/src/dbfn.c +++ b/src/src/dbfn.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/dbfn.c,v 1.4 2005/06/22 14:45:05 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -80,6 +78,10 @@ Returns: NULL if the open failed, or the locking failed. After locking On success, dbblock is returned. This contains the dbm pointer and the fd of the locked lock file. + +There are some calls that use O_RDWR|O_CREAT for the flags. Having discovered +this in December 2005, I'm not sure if this is correct or not, but for the +moment I haven't changed them. */ open_db * @@ -138,10 +140,10 @@ alarm(0); if (sigalrm_seen) errno = ETIMEDOUT; if (rc < 0) { - log_write(0, LOG_MAIN, "Failed to get %s lock for %s: %s", - ((flags & O_RDONLY) != 0)? "read" : "write", buffer, + log_write(0, LOG_MAIN|LOG_PANIC, "Failed to get %s lock for %s: %s", + read_only? "read" : "write", buffer, (errno == ETIMEDOUT)? "timed out" : strerror(errno)); - close(dbblock->lockfd); + (void)close(dbblock->lockfd); errno = 0; /* Indicates locking failure */ return NULL; } @@ -206,7 +208,8 @@ if (created && geteuid() == root_uid) if (Ustat(buffer, &statbuf) >= 0 && statbuf.st_uid != exim_uid) { DEBUG(D_hints_lookup) debug_printf("ensuring %s is owned by exim\n", buffer); - Uchown(buffer, exim_uid, exim_gid); + if (Uchown(buffer, exim_uid, exim_gid)) + DEBUG(D_hints_lookup) debug_printf("failed setting %s to owned by exim\n", buffer); } } } @@ -229,13 +232,15 @@ if (dbblock->dbptr == NULL) debug_printf("%s", CS string_open_failed(save_errno, "DB file %s\n", buffer)); } - close(dbblock->lockfd); + (void)close(dbblock->lockfd); errno = save_errno; return NULL; } DEBUG(D_hints_lookup) - 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" : "??"); /* Pass back the block containing the opened database handle and the open fd for the lock. */ @@ -261,7 +266,7 @@ void dbfn_close(open_db *dbblock) { EXIM_DBCLOSE(dbblock->dbptr); -close(dbblock->lockfd); +(void)close(dbblock->lockfd); }