[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