Use strtoul instead of atol.
authordrepper <drepper>
Tue, 27 Nov 2001 03:43:41 +0000 (03:43 +0000)
committerdrepper <drepper>
Tue, 27 Nov 2001 03:43:41 +0000 (03:43 +0000)
nscd/grpcache.c
nscd/pwdcache.c
nss/getent.c

index 93a7a0d..05ba40e 100644 (file)
@@ -246,8 +246,18 @@ addgrbygid (struct database *db, int fd, request_header *req,
   char *buffer = alloca (buflen);
   struct group resultbuf;
   struct group *grp;
-  gid_t gid = atol (key);
   uid_t oldeuid = 0;
+  char *ep;
+  gid_t gid = strtoul ((char *)key, &ep, 10); 
+  
+  if (*(char*)key == '\0' || *ep != '\0')  /* invalid numeric gid */
+    {
+      if (debug_level > 0)
+        dbg_log (_("Invalid numeric gid \"%s\"!"), (char *)key);
+
+      errno = EINVAL;
+      return;
+    }
 
   if (debug_level > 0)
     dbg_log (_("Haven't found \"%d\" in group cache!"), gid);
index 94d8bd2..cae3303 100644 (file)
@@ -242,8 +242,18 @@ addpwbyuid (struct database *db, int fd, request_header *req,
   char *buffer = alloca (buflen);
   struct passwd resultbuf;
   struct passwd *pwd;
-  uid_t uid = atol (key);
   uid_t oldeuid = 0;
+  char *ep;
+  uid_t uid = strtoul ((char*) key, &ep, 10); 
+  
+  if (*(char*)key == '\0' || *ep != '\0')  /* invalid numeric uid */
+    {
+      if (debug_level > 0) 
+        dbg_log (_("Invalid numeric uid \"%s\"!"), (char *)key);
+
+      errno = EINVAL;
+      return;
+    }
 
   if (debug_level > 0)
     dbg_log (_("Haven't found \"%d\" in password cache!"), uid);
index 1ddd67a..7a755f8 100644 (file)
@@ -207,7 +207,15 @@ group_keys (int number, char *key[])
   for (i = 0; i < number; ++i)
     {
       if (isdigit (key[i][0]))
-       grp = getgrgid (atol (key[i]));
+       {
+           char *ep;
+           gid_t arg_gid = strtoul (key[i], &ep, 10); 
+
+           if (*key[i] != '\0' && *ep == '\0')  /* valid numeric uid */
+             grp = getgrgid (arg_gid);
+           else
+             grp = NULL;
+       }
       else
        grp = getgrnam (key[i]);
 
@@ -404,7 +412,15 @@ passwd_keys (int number, char *key[])
   for (i = 0; i < number; ++i)
     {
       if (isdigit (key[i][0]))
-       pwd = getpwuid (atol (key[i]));
+        {
+          char *ep;
+          uid_t arg_uid = strtoul (key[i], &ep, 10); 
+
+           if (*key[i] != '\0' && *ep == '\0')  /* valid numeric uid */
+            pwd = getpwuid (arg_uid);
+           else
+             pwd = NULL;
+        }
       else
        pwd = getpwnam (key[i]);