diff src/lmtp/main.c @ 11282:70cfc89a3936 HEAD

lmtp: Set user/group at startup as specified in service block.
author Timo Sirainen <tss@iki.fi>
date Wed, 12 May 2010 15:23:48 +0200
parents cc3f6adc1e0b
children b8d3c96e61a7
line wrap: on
line diff
--- a/src/lmtp/main.c	Wed May 12 13:16:16 2010 +0200
+++ b/src/lmtp/main.c	Wed May 12 15:23:48 2010 +0200
@@ -33,6 +33,21 @@
 	(void)client_create(conn->fd, conn->fd, conn);
 }
 
+static void drop_privileges(void)
+{
+	struct restrict_access_settings set;
+	const char *error;
+
+	/* by default we don't drop any privileges, but keep running as root. */
+	restrict_access_get_env(&set);
+	if (set.uid != 0) {
+		/* open config connection before dropping privileges */
+		(void)master_service_settings_read_simple(master_service,
+							  NULL, &error);
+	}
+	restrict_access_by_env(NULL, FALSE);
+}
+
 static void main_init(void)
 {
 	struct master_service_connection conn;
@@ -84,6 +99,8 @@
 			return FATAL_DEFAULT;
 		}
 	}
+
+	drop_privileges();
 	master_service_init_finish(master_service);
 	master_service_init_log(master_service,
 				t_strdup_printf("lmtp(%s): ", my_pid));