]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
lib/: Don't open-code get_gid()
authorAlejandro Colomar <alx@kernel.org>
Tue, 9 Jan 2024 14:48:55 +0000 (15:48 +0100)
committerAlejandro Colomar <alx@kernel.org>
Sat, 29 Jun 2024 18:00:18 +0000 (20:00 +0200)
These functions were open-coding get_gid().  Use the actual function.

Reviewed-by: "Serge E. Hallyn" <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/getgr_nam_gid.c
lib/prefix_flag.c
src/useradd.c

index fd0c2171e056ff2649c9e6150a2f200deb256c7a..58f3853435b176a71b6c308de23ce3cae1714911 100644 (file)
@@ -1,11 +1,10 @@
-/*
- * SPDX-FileCopyrightText: 1991 - 1994, Julianne Frances Haugh
- * SPDX-FileCopyrightText: 1996 - 2000, Marek Michałkiewicz
- * SPDX-FileCopyrightText: 2000 - 2006, Tomasz Kłoczko
- * SPDX-FileCopyrightText: 2007 - 2009, Nicolas François
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
+// SPDX-FileCopyrightText: 1991-1994, Julianne Frances Haugh
+// SPDX-FileCopyrightText: 1996-2000, Marek Michałkiewicz
+// SPDX-FileCopyrightText: 2000-2006, Tomasz Kłoczko
+// SPDX-FileCopyrightText: 2007-2009, Nicolas François
+// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
 
 #include <config.h>
 
 #include <stdlib.h>
 #include <errno.h>
 #include <grp.h>
+#include <sys/types.h>
+
+#include "atoi/getnum.h"
 #include "prototypes.h"
 
+
 /*
  * getgr_nam_gid - Return a pointer to the group specified by a string.
  * The string may be a valid GID or a valid groupname.
  * If the group does not exist on the system, NULL is returned.
  */
-extern /*@only@*//*@null@*/struct group *getgr_nam_gid (/*@null@*/const char *grname)
+extern /*@only@*//*@null@*/struct group *
+getgr_nam_gid(/*@null@*/const char *grname)
 {
-       char       *end;
-       long long  gid;
+       gid_t  gid;
 
-       if (NULL == grname) {
+       if (NULL == grname)
                return NULL;
-       }
-
-       errno = 0;
-       gid = strtoll(grname, &end, 10);
-       if (   ('\0' != *grname)
-           && ('\0' == *end)
-           && (0 == errno)
-           && (/*@+longintegral@*/gid == (gid_t)gid)/*@=longintegral@*/) {
-               return xgetgrgid (gid);
-       }
-       return xgetgrnam (grname);
+
+       if (get_gid(grname, &gid) == 0)
+               return xgetgrgid(gid);
+       return xgetgrnam(grname);
 }
 
index bba7102b82e8b985c6e623874e7e14d72a781803..c1245d6aa470707cfaed48201cec1552e879ab8d 100644 (file)
@@ -12,6 +12,7 @@
 #include <stdio.h>
 #include <assert.h>
 
+#include "atoi/getnum.h"
 #include "defines.h"
 #include "alloc.h"
 #include "prototypes.h"
@@ -334,8 +335,7 @@ extern void prefix_endgrent(void)
 
 extern struct group *prefix_getgr_nam_gid(const char *grname)
 {
-       char          *end;
-       long long     gid;
+       gid_t         gid;
        struct group  *g;
 
        if (NULL == grname) {
@@ -345,15 +345,8 @@ extern struct group *prefix_getgr_nam_gid(const char *grname)
        if (!group_db_file)
                return getgr_nam_gid(grname);
 
-       errno = 0;
-       gid = strtoll(grname, &end, 10);
-       if (   ('\0' != *grname)
-           && ('\0' == *end)
-           && (0 == errno)
-           && (gid == (gid_t)gid))
-       {
+       if (get_gid(grname, &gid) == 0)
                return prefix_getgrgid(gid);
-       }
 
        g = prefix_getgrnam(grname);
        return g ? __gr_dup(g) : NULL;
index 347334a6dbe43ae079a91a4a04e4a3e12dec2f74..14ab511c9e3de68c5b7fe01c479badb8e2129b69 100644 (file)
@@ -38,6 +38,7 @@
 
 #include "alloc.h"
 #include "atoi/str2i.h"
+#include "atoi/getnum.h"
 #include "chkname.h"
 #include "defines.h"
 #include "faillog.h"
@@ -853,21 +854,14 @@ static int get_groups (char *list)
  */
 static struct group * get_local_group(char * grp_name)
 {
-       char  *end;
-       const struct group *grp;
-       struct group *result_grp = NULL;
-       long long  gid;
+       gid_t               gid;
+       struct group        *result_grp = NULL;
+       const struct group  *grp;
 
-       gid = strtoll(grp_name, &end, 10);
-       if (   ('\0' != *grp_name)
-               && ('\0' == *end)
-               && (ERANGE != errno)
-               && (gid == (gid_t)gid)) {
-               grp = gr_locate_gid (gid);
-       }
-       else {
+       if (get_gid(grp_name, &gid) == 0)
+               grp = gr_locate_gid(gid);
+       else
                grp = gr_locate(grp_name);
-       }
 
        if (grp != NULL) {
                result_grp = __gr_dup (grp);