[dovecot-cvs] dovecot/src/master auth-process.c,1.18,1.19 imap-process.c,1.15,1.16 login-process.c,1.20,1.21 main.c,1.18,1.19 settings.c,1.30,1.31 ssl-init.c,1.4,1.5

cras at procontrol.fi cras at procontrol.fi
Wed Dec 18 17:15:44 EET 2002


Update of /home/cvs/dovecot/src/master
In directory danu:/tmp/cvs-serv3676/src/master

Modified Files:
	auth-process.c imap-process.c login-process.c main.c 
	settings.c ssl-init.c 
Log Message:
Marked all non-trivial buffer modifications with @UNSAFE tag. Several
cleanups and a couple of minor bugfixes.



Index: auth-process.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/auth-process.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- auth-process.c	18 Dec 2002 04:00:01 -0000	1.18
+++ auth-process.c	18 Dec 2002 15:15:42 -0000	1.19
@@ -163,7 +163,8 @@
 
 	o_stream_unref(p->output);
 	io_remove(p->io);
-	(void)close(p->fd);
+	if (close(p->fd) < 0)
+		i_error("close(auth) failed: %m");
 	i_free(p->name);
 	i_free(p);
 }
@@ -205,6 +206,7 @@
 	path = t_strconcat(set_login_dir, "/", config->name, NULL);
 	(void)unlink(path);
         (void)umask(0177); /* we want 0600 mode for the socket */
+
 	listen_fd = net_listen_unix(path);
 	if (listen_fd < 0)
 		i_fatal("Can't listen in UNIX socket %s: %m", path);
@@ -212,11 +214,14 @@
 	i_assert(listen_fd > 2);
 
 	/* set correct permissions */
-	(void)chown(path, set_login_uid, set_login_gid);
+	if (chown(path, set_login_uid, set_login_gid) < 0) {
+		i_fatal("login: chown(%s, %d, %d) failed: %m",
+			path, (int)set_login_uid, (int)set_login_gid);
+	}
 
 	/* move master communication handle to 0 */
 	if (dup2(fd[1], 0) < 0)
-		i_fatal("login: dup2() failed: %m");
+		i_fatal("login: dup2(0) failed: %m");
 
 	(void)close(fd[0]);
 	(void)close(fd[1]);
@@ -224,9 +229,9 @@
 	/* set /dev/null handle into 1 and 2, so if something is printed into
 	   stdout/stderr it can't go anywhere where it could cause harm */
 	if (dup2(null_fd, 1) < 0)
-		i_fatal("login: dup2() failed: %m");
+		i_fatal("login: dup2(1) failed: %m");
 	if (dup2(null_fd, 2) < 0)
-		i_fatal("login: dup2() failed: %m");
+		i_fatal("login: dup2(2) failed: %m");
 
 	clean_child_process();
 

Index: imap-process.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/imap-process.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- imap-process.c	18 Dec 2002 04:00:01 -0000	1.15
+++ imap-process.c	18 Dec 2002 15:15:42 -0000	1.16
@@ -109,9 +109,10 @@
 				      const char *login_tag)
 {
 	static char *argv[] = { NULL, NULL, NULL };
-	char host[MAX_IP_LEN], title[1024];
+	const char *host;
+	char title[1024];
 	pid_t pid;
-	int i, j, err;
+	int i, err;
 
 	if (imap_process_count == set_max_imap_processes) {
 		i_error("Maximum number of imap processes exceeded");
@@ -134,7 +135,8 @@
 		/* master */
 		imap_process_count++;
 		PID_ADD_PROCESS_TYPE(pid, PROCESS_TYPE_IMAP);
-		(void)close(socket);
+		if (close(socket) < 0)
+			i_error("close(imap client) failed: %m");
 		return MASTER_RESULT_SUCCESS;
 	}
 
@@ -142,15 +144,12 @@
 
 	/* move the imap socket into stdin, stdout and stderr fds */
 	for (i = 0; i < 3; i++) {
-		if (dup2(socket, i) < 0) {
-			err = errno;
-			for (j = 0; j < i; j++)
-				(void)close(j);
-			(void)close(socket);
-			i_fatal("imap: dup2() failed: %m");
-		}
+		if (dup2(socket, i) < 0)
+			i_fatal("imap: dup2(%d) failed: %m", i);
 	}
-	(void)close(socket);
+
+	if (close(socket) < 0)
+		i_error("imap: close(imap client) failed: %m");
 
 	/* setup environment - set the most important environment first
 	   (paranoia about filling up environment without noticing) */
@@ -197,7 +196,11 @@
 	env_put(t_strconcat("USER=", virtual_user, NULL));
 	env_put(t_strconcat("LOGIN_TAG=", login_tag, NULL));
 
-	if (set_verbose_proctitle && net_ip2host(ip, host) == 0) {
+	if (set_verbose_proctitle) {
+		host = net_ip2host(ip);
+		if (host == NULL)
+			host = "??";
+
 		i_snprintf(title, sizeof(title), "[%s %s]", virtual_user, host);
 		argv[1] = title;
 	}

Index: login-process.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/login-process.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- login-process.c	18 Dec 2002 04:00:01 -0000	1.20
+++ login-process.c	18 Dec 2002 15:15:42 -0000	1.21
@@ -79,7 +79,8 @@
 	if (o_stream_send(process->output, &reply, sizeof(reply)) < 0)
 		login_process_destroy(process);
 
-	(void)close(request->fd);
+	if (close(request->fd) < 0)
+		i_error("close(imap client) failed: %m");
 	login_process_unref(process);
 	i_free(request);
 }
@@ -212,7 +213,8 @@
 
 	o_stream_close(p->output);
 	io_remove(p->io);
-	(void)close(p->fd);
+	if (close(p->fd) < 0)
+		i_error("close(login) failed: %m");
 
 	if (!p->listening)
 		login_process_remove_from_lists(p);
@@ -270,17 +272,17 @@
 
 	/* move communication handle */
 	if (dup2(fd[1], LOGIN_MASTER_SOCKET_FD) < 0)
-		i_fatal("login: dup2() failed: %m");
+		i_fatal("login: dup2(master) failed: %m");
 	fd_close_on_exec(LOGIN_MASTER_SOCKET_FD, FALSE);
 
 	/* move the listen handle */
 	if (dup2(imap_fd, LOGIN_IMAP_LISTEN_FD) < 0)
-		i_fatal("login: dup2() failed: %m");
+		i_fatal("login: dup2(imap) failed: %m");
 	fd_close_on_exec(LOGIN_IMAP_LISTEN_FD, FALSE);
 
 	/* move the SSL listen handle */
 	if (dup2(imaps_fd, LOGIN_IMAPS_LISTEN_FD) < 0)
-		i_fatal("login: dup2() failed: %m");
+		i_fatal("login: dup2(imaps) failed: %m");
 	fd_close_on_exec(LOGIN_IMAPS_LISTEN_FD, FALSE);
 
 	/* imap_fd and imaps_fd are closed by clean_child_process() */
@@ -297,10 +299,8 @@
 
 	if (!set_login_chroot) {
 		/* no chrooting, but still change to the directory */
-		if (chdir(set_login_dir) < 0) {
-			i_fatal("chdir(%s) failed: %m",
-				set_login_dir);
-		}
+		if (chdir(set_login_dir) < 0)
+			i_fatal("chdir(%s) failed: %m", set_login_dir);
 	}
 
 	if (!set_ssl_disable) {

Index: main.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/main.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- main.c	18 Dec 2002 04:00:01 -0000	1.18
+++ main.c	18 Dec 2002 15:15:42 -0000	1.19
@@ -164,9 +164,12 @@
 		return ip;
 	}
 
+	/* Return the first IP if there happens to be multiple. */
 	ret = net_gethostbyname(name, &ip, &ips_count);
-	if (ret != 0)
-		i_fatal("Can't resolve address: %s", name);
+	if (ret != 0) {
+		i_fatal("Can't resolve address %s: %s",
+			name, net_gethosterror(ret));
+	}
 
 	if (ips_count < 1)
 		i_fatal("No IPs for address: %s", name);
@@ -245,9 +248,12 @@
 
 	timeout_remove(to);
 
-	(void)close(null_fd);
-	(void)close(imap_fd);
-	(void)close(imaps_fd);
+	if (close(null_fd) < 0)
+		i_error("close(null_fd) failed: %m");
+	if (close(imap_fd) < 0)
+		i_error("close(imap_fd) failed: %m");
+	if (close(imaps_fd) < 0)
+		i_error("close(imaps_fd) failed: %m");
 
 	hash_destroy(pids);
 	closelog();

Index: settings.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/settings.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- settings.c	16 Dec 2002 14:38:38 -0000	1.30
+++ settings.c	18 Dec 2002 15:15:42 -0000	1.31
@@ -457,6 +457,8 @@
 		}
 		linenum++;
 
+		/* @UNSAFE: line is modified */
+
 		/* skip whitespace */
 		while (IS_WHITE(*line))
 			line++;

Index: ssl-init.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/ssl-init.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- ssl-init.c	16 Dec 2002 08:27:58 -0000	1.4
+++ ssl-init.c	18 Dec 2002 15:15:42 -0000	1.5
@@ -32,7 +32,7 @@
 	_ssl_generate_parameters(fd, temp_fname);
 
 	if (close(fd) < 0)
-		i_fatal("close() failed for %s: %m", temp_fname);
+		i_fatal("close(%s) failed: %m", temp_fname);
 
 	if (rename(temp_fname, fname) < 0)
 		i_fatal("rename(%s, %s) failed: %m", temp_fname, fname);




More information about the dovecot-cvs mailing list