changeset 4998:f37c7895eb8f HEAD

Delete all auth-worker.* files from Dovecot's base_dir when starting.
author Timo Sirainen <tss@iki.fi>
date Tue, 09 Jan 2007 22:30:25 +0200
parents b76f864f0e0b
children 53d69594ee04
files src/master/master-settings.c
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/master/master-settings.c	Tue Jan 09 22:19:32 2007 +0200
+++ b/src/master/master-settings.c	Tue Jan 09 22:30:25 2007 +0200
@@ -466,12 +466,13 @@
 	return FALSE;
 }
 
-static void unlink_auth_sockets(const char *path)
+static void unlink_auth_sockets(const char *path, const char *prefix)
 {
 	DIR *dirp;
 	struct dirent *dp;
 	struct stat st;
 	string_t *str;
+	unsigned int prefix_len;
 
 	dirp = opendir(path);
 	if (dirp == NULL) {
@@ -479,11 +480,15 @@
 		return;
 	}
 
+	prefix_len = strlen(prefix);
 	str = t_str_new(256);
 	while ((dp = readdir(dirp)) != NULL) {
 		if (dp->d_name[0] == '.')
 			continue;
 
+		if (strncmp(dp->d_name, prefix, prefix_len) != 0)
+			continue;
+
 		str_truncate(str, 0);
 		str_printfa(str, "%s/%s", path, dp->d_name);
 		if (lstat(str_c(str), &st) < 0) {
@@ -736,6 +741,9 @@
 			i_error("chmod(%s) failed: %m", set->base_dir);
 	}
 
+	/* remove auth worker sockets left by unclean exits */
+	unlink_auth_sockets(set->base_dir, "auth-worker.");
+
 	/* Make sure our permanent state directory exists */
 	if (mkdir_parents(PKG_STATEDIR, 0750) < 0 && errno != EEXIST) {
 		i_error("mkdir(%s) failed: %m", PKG_STATEDIR);
@@ -754,7 +762,7 @@
 				  "%s", set->login_dir);
 		}
 
-		unlink_auth_sockets(set->login_dir);
+		unlink_auth_sockets(set->login_dir, "");
 	}
 
 #ifdef HAVE_MODULES