[dovecot-cvs] dovecot/src/master settings.c,1.33,1.34
cras at procontrol.fi
cras at procontrol.fi
Sat Dec 21 14:14:01 EET 2002
Update of /home/cvs/dovecot/src/master
In directory danu:/tmp/cvs-serv29177/src/master
Modified Files:
settings.c
Log Message:
If used base/login directories exist already, make sure they're with correct
permissions. Always delete contents in login directory at startup.
Added safe_mkdir(). changed unlink_directory() behaviour, and fixed a race
condition which could have made it follow symlinks to other directories and
delete them. Didn't really harm us so far, we never used it for deleting
unsafe directories.
Index: settings.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/settings.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- settings.c 20 Dec 2002 01:47:11 -0000 1.33
+++ settings.c 21 Dec 2002 12:13:59 -0000 1.34
@@ -2,13 +2,14 @@
#include "lib.h"
#include "istream.h"
+#include "safe-mkdir.h"
+#include "unlink-directory.h"
#include "settings.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <pwd.h>
-#include <sys/stat.h>
typedef enum {
SET_STR,
@@ -231,12 +232,19 @@
#endif
/* since they're under /var/run by default, they may have been
- deleted */
- (void)mkdir(PKG_RUNDIR, 0700);
- if (mkdir(set_login_dir, 0700) == 0)
- (void)chown(set_login_dir, set_login_uid, set_login_gid);
- if (access(set_login_dir, X_OK) < 0)
- i_fatal("Can't access login directory %s: %m", set_login_dir);
+ deleted. */
+ if (safe_mkdir(PKG_RUNDIR, 0700, 0, 0) == 0) {
+ i_warning("Corrected permissions for base directory %s",
+ PKG_RUNDIR);
+ }
+
+ /* wipe out contents of login directory, if it exists */
+ if (unlink_directory(set_login_dir, FALSE) < 0)
+ i_fatal("unlink_directory() failed for %s: %m", set_login_dir);
+
+ if (safe_mkdir(set_login_dir, 0700, set_login_uid, set_login_gid) == 0)
+ i_warning("Corrected permissions for login directory %s",
+ set_login_dir);
if (set_max_imap_processes < 1)
i_fatal("max_imap_processes must be at least 1");
More information about the dovecot-cvs
mailing list