X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/ff790e47f2de6f4d6d48148e1d5a67da8e93c446..cb63e7df39c6b128c36754295490316a18104fd2:/src/src/directory.c diff --git a/src/src/directory.c b/src/src/directory.c index ad15ae88e..5c55a4524 100644 --- a/src/src/directory.c +++ b/src/src/directory.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/directory.c,v 1.3 2005/06/22 15:44:38 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. */ #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