about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2002-03-29 22:56:40 +0000
committerAlexander Barton <alex@barton.de>2002-03-29 22:56:40 +0000
commit07c3e62e1109b555e932a8e2a245ed34668a1724 (patch)
tree03928604f9393d70a9dbc901e11872117aec78ea /src
parent773d886df66e11359e840f42899aee21d03b34e5 (diff)
downloadngircd-07c3e62e1109b555e932a8e2a245ed34668a1724.tar.gz
ngircd-07c3e62e1109b555e932a8e2a245ed34668a1724.zip
- der Daemon kann nun seine UID und GID wechseln.
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/ngircd.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c
index e386812d..623b96c1 100644
--- a/src/ngircd/ngircd.c
+++ b/src/ngircd/ngircd.c
@@ -9,7 +9,7 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: ngircd.c,v 1.38 2002/03/29 20:59:22 alex Exp $
+ * $Id: ngircd.c,v 1.39 2002/03/29 22:56:40 alex Exp $
  *
  * ngircd.c: Hier beginnt alles ;-)
  */
@@ -247,6 +247,23 @@ GLOBAL int main( int argc, const char *argv[] )
 		Client_Init( );
 		Conn_Init( );
 
+		/* Wenn als root ausgefuehrt und eine andere UID
+		 * konfiguriert ist, jetzt zu dieser wechseln */
+		if( getuid( ) != 0 )
+		{
+			if( Conf_GID > 0 )
+			{
+				/* Neue Group-ID setzen */
+				if( setgid( Conf_GID ) != 0 ) Log( LOG_ERR, "Can't change Group-ID to %u: %s", Conf_GID, strerror( errno ));
+			}
+			if( Conf_UID > 0 )
+			{
+				/* Neue User-ID setzen */
+				if( setgid( Conf_UID ) != 0 ) Log( LOG_ERR, "Can't change User-ID to %u: %s", Conf_UID, strerror( errno ));
+			}
+		}
+		Log( LOG_INFO, "Running as user %ld, group %ld.", (INT32)getuid( ), (INT32)getgid( ));
+
 		/* Signal-Handler initialisieren */
 		Initialize_Signal_Handler( );
 
@@ -395,13 +412,13 @@ LOCAL VOID Initialize_Listen_Ports( VOID )
 	/* Ports, auf denen der Server Verbindungen entgegennehmen
 	 * soll, initialisieren */
 	
-	INT created, i;
+	UINT created, i;
 
 	created = 0;
 	for( i = 0; i < Conf_ListenPorts_Count; i++ )
 	{
 		if( Conn_NewListener( Conf_ListenPorts[i] )) created++;
-		else Log( LOG_ERR, "Can't listen on port %d!", Conf_ListenPorts[i] );
+		else Log( LOG_ERR, "Can't listen on port %u!", Conf_ListenPorts[i] );
 	}
 
 	if( created < 1 )