X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fdirectory.c;h=5c55a4524b66e8a4baff930898a0b137830c7b2b;hb=4c0a7a9cb02f9904c2e890f77ff8ce3a6beb25f4;hp=ad15ae88e6f291bc994b0a3ade48ac4f9778cc04;hpb=ff790e47f2de6f4d6d48148e1d5a67da8e93c446;p=user%2Fhenk%2Fcode%2Fexim.git 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