[Initng-svn] r3159 - initng/trunk/plugins/suid

svn at initng.thinktux.net svn at initng.thinktux.net
Wed Mar 1 01:49:46 CET 2006


Author: makomk
Date: Wed Mar  1 01:49:46 2006
New Revision: 3159

Modified:
   initng/trunk/plugins/suid/initng_suid.c
Log:
Fix suid plugin; initng now actually *works* again (please test code before checking 
it in; this had several null-pointer dereferences and free()d some static data 
structures...)


Modified: initng/trunk/plugins/suid/initng_suid.c
==============================================================================
--- initng/trunk/plugins/suid/initng_suid.c	(original)
+++ initng/trunk/plugins/suid/initng_suid.c	Wed Mar  1 01:49:46 2006
@@ -56,23 +56,24 @@
     assert(process);
 
     tmp = initng_active_db_get_string(&SUID, service);
-    username = fix_variables(tmp, service);
-    free((void*)tmp);
+    if(tmp) username = fix_variables(tmp, service);
 
-    i = strcspn(username, ":");
-    if (username[i] == ':')
+    if(username)
     {
-        groupname = strdup(username + i + 1);
-        username[i] = 0;
+        i = strcspn(username, ":");
+        if (username[i] == ':')
+	{
+	    groupname = strdup(username + i + 1);
+	    username[i] = 0;
+	}
+        else if ((tmp = initng_active_db_get_string(&SGID, service)))
+	{
+	    groupname = fix_variables(tmp, service);
+	}
     }
-    else if ((tmp = initng_active_db_get_string(&SGID, service)))
-    {
-        groupname = fix_variables(tmp, service);
-    }
-    free((void*)tmp);
 
-    group = getgrnam(groupname);
-    passwd = getpwnam(username);
+    if(groupname) group = getgrnam(groupname);
+    if(username) passwd = getpwnam(username);
 
     if (group)
         gid = group->gr_gid;
@@ -100,7 +101,7 @@
         setgid(gid);
     }
 
-    initgroups(passwd->pw_name, passwd->pw_gid);
+    if (passwd) initgroups(passwd->pw_name, passwd->pw_gid);
 
     if (uid)
     {
@@ -108,10 +109,9 @@
         setuid(uid);
     }
 
-    free(groupname);
-    free(username);
-    free(group);
-    free(passwd);
+    if(groupname) free(groupname);
+    if(username) free(username);
+    /* group and passwd are static data structures - don't free */
     return ret;
 }
 


More information about the Initng-svn mailing list