X-Git-Url: https://vcs.fsf.org/?p=exim.git;a=blobdiff_plain;f=src%2Fsrc%2Fdirectory.c;h=5c55a4524b66e8a4baff930898a0b137830c7b2b;hp=42fedd6f3cc14ac0eb3a64f3b873fe45a1f00de0;hb=42427533718a750c21e3bc03df94c6f93581eaec;hpb=184e88237dea64ce48076cdd0184612d057cbafd diff --git a/src/src/directory.c b/src/src/directory.c index 42fedd6f3..5c55a4524 100644 --- a/src/src/directory.c +++ b/src/src/directory.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/directory.c,v 1.5 2007/01/08 10:50:18 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2007 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ #include "exim.h" @@ -36,10 +34,12 @@ Returns: panic on failure if panic is set; otherwise return FALSE; */ BOOL -directory_make(uschar *parent, uschar *name, int mode, BOOL panic) +directory_make(const uschar *parent, const uschar *name, + int mode, BOOL panic) { BOOL use_chown = parent == spool_directory && geteuid() == root_uid; -uschar *p, *slash; +uschar *p; +const uschar *slash; int c = 1; struct stat statbuf; uschar buffer[256]; @@ -47,7 +47,7 @@ uschar buffer[256]; if (parent == NULL) { p = buffer + 1; - slash = parent = US""; + slash = parent = CUS""; } else { @@ -74,7 +74,12 @@ while (c != 0 && *p != 0) /* Set the ownership if necessary. */ - if (use_chown) (void)Uchown(buffer, exim_uid, exim_gid); + if (use_chown && Uchown(buffer, exim_uid, exim_gid)) + { + if (!panic) return FALSE; + log_write(0, LOG_MAIN|LOG_PANIC_DIE, + "Failed to set owner on directory \"%s\": %s\n", buffer, strerror(errno)); + } /* It appears that any mode bits greater than 0777 are ignored by mkdir(), at least on some operating systems. Therefore, if the mode