[Initng-svn] r3164 - in initng/tags/0.5.4.1/plugins: find suid

svn at initng.thinktux.net svn at initng.thinktux.net
Wed Mar 1 02:47:36 CET 2006


Author: deac
Date: Wed Mar  1 02:47:36 2006
New Revision: 3164

Modified:
   initng/tags/0.5.4.1/plugins/find/initng_find.c
   initng/tags/0.5.4.1/plugins/suid/initng_suid.c
Log:
0.5.4.1: suid, find updated

Modified: initng/tags/0.5.4.1/plugins/find/initng_find.c
==============================================================================
--- initng/tags/0.5.4.1/plugins/find/initng_find.c	(original)
+++ initng/tags/0.5.4.1/plugins/find/initng_find.c	Wed Mar  1 02:47:36 2006
@@ -14,8 +14,8 @@
  *
  * You should have received a copy of the GNU Lesser General
  * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
  */
 
 #include "../../src/initng.h"
@@ -29,7 +29,7 @@
 #include <assert.h>
 #include <sys/types.h>
 #include <dirent.h>
-                                                                                                     /*#include <dirent.h> *//* opendir() closedir() */
+                                                                                                                                                                                                     /*#include <dirent.h> *//* opendir() closedir() */
 
 #include "../../src/initng_global.h"
 #include "../../src/initng_string_tools.h"
@@ -145,19 +145,13 @@
             continue;
         }
 
-        printf("parse row \"%s\"\n", point);
         /* check if first word is a match */
         if (strncasecmp(point, from, from_len) != 0)
         {
-            printf("Not the one");
             JUMP_TO_NEXT_ROW(point);
             continue;
         }
 
-        printf("point[from_len]='%c', point[from_len+1]='%c'\n",
-               point[from_len], point[from_len + 1]);
-
-
         if (!point[from_len] || !point[from_len + 1]
             || point[from_len] != '=')
         {
@@ -175,7 +169,6 @@
         ret = i_strndup(point_result, i);
 
         free(file_content);
-        printf("ret=\"%s\", len=%i\n", ret, i);
         return (ret);
     }
     free(file_content);

Modified: initng/tags/0.5.4.1/plugins/suid/initng_suid.c
==============================================================================
--- initng/tags/0.5.4.1/plugins/suid/initng_suid.c	(original)
+++ initng/tags/0.5.4.1/plugins/suid/initng_suid.c	Wed Mar  1 02:47:36 2006
@@ -55,38 +55,35 @@
     assert(service->name);
     assert(process);
 
-    tmp = initng_active_db_get_string(&SUID, service);
-    username = fix_variables(tmp, service);
-    free((void*)tmp);
-
-    i = strcspn(username, ":");
-    if (username[i] == ':')
-    {
-        groupname = strdup(username + i + 1);
-        username[i] = 0;
-    }
-    else if ((tmp = initng_active_db_get_string(&SGID, service)))
+    if ((tmp = initng_active_db_get_string(&SGID, service)))
     {
         groupname = fix_variables(tmp, service);
     }
-    free((void*)tmp);
 
-    group = getgrnam(groupname);
-    passwd = getpwnam(username);
+    tmp = initng_active_db_get_string(&SUID, service);
+    if (tmp)
+        username = fix_variables(tmp, service);
 
-    if (group)
-        gid = group->gr_gid;
-    else if (groupname)
+    if (username && !groupname)
     {
-        F_("GROUP \"%s\" not found!\n", groupname);
-        ret += 1;
+        i = strcspn(username, ":");
+        if (username[i] == ':')
+        {
+            groupname = strdup(username + i + 1);
+            username[i] = 0;
+        }
     }
 
+
+    if (groupname)
+        group = getgrnam(groupname);
+    if (username)
+        passwd = getpwnam(username);
+
     if (passwd)
     {
         uid = passwd->pw_uid;
-        if (!gid)
-            gid = passwd->pw_gid;
+        gid = passwd->pw_gid;
     }
     else if (username)
     {
@@ -94,13 +91,22 @@
         ret += 2;
     }
 
+    if (group)
+        gid = group->gr_gid;
+    else if (groupname)
+    {
+        F_("GROUP \"%s\" not found!\n", groupname);
+        ret += 1;
+    }
+
     if (gid)
     {
         D_("Change to gid %i", gid);
         setgid(gid);
     }
 
-    initgroups(passwd->pw_name, passwd->pw_gid);
+    if (passwd)
+        initgroups(passwd->pw_name, passwd->pw_gid);
 
     if (uid)
     {
@@ -108,10 +114,11 @@
         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