[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
rpms/shadow-utils/devel shadow-4.0.17-UID_GID.patch,NONE,1.1
- From: fedora-cvs-commits redhat com
- To: fedora-cvs-commits redhat com
- Subject: rpms/shadow-utils/devel shadow-4.0.17-UID_GID.patch,NONE,1.1
- Date: Fri, 4 Aug 2006 09:58:00 -0400
Author: pvrabec
Update of /cvs/dist/rpms/shadow-utils/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv30905
Added Files:
shadow-4.0.17-UID_GID.patch
Log Message:
add UID_GID.patch patch
shadow-4.0.17-UID_GID.patch:
groupadd.c | 29 +++++++++++++++++++----------
groupmod.c | 35 +++++++++++++++++++++++------------
useradd.c | 55 ++++++++++++++++++++++++++++++-------------------------
usermod.c | 58 +++++++++++++++++++++++++++++++---------------------------
4 files changed, 103 insertions(+), 74 deletions(-)
--- NEW FILE shadow-4.0.17-UID_GID.patch ---
--- shadow-4.0.17/src/groupadd.c.UID_GID 2006-07-27 13:35:46.000000000 +0200
+++ shadow-4.0.17/src/groupadd.c 2006-07-27 13:40:19.000000000 +0200
@@ -89,6 +89,7 @@
static void close_files (void);
static void open_files (void);
static void fail_exit (int);
+static gid_t get_gid (const char *gidstr);
/*
* usage - display usage message and exit
@@ -377,6 +378,23 @@
}
/*
+ * get_id - validate and get group ID
+ */
+static gid_t get_gid (const char *gidstr)
+{
+ long val;
+ char *errptr;
+
+ val = strtol (gidstr, &errptr, 10);
+ if (*errptr || errno == ERANGE || val < 0) {
+ fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+ gidstr);
+ exit (E_BAD_ARG);
+ }
+ return val;
+}
+
+/*
* main - groupadd command
*/
@@ -441,16 +459,7 @@
break;
case 'g':
gflg++;
- if (!isdigit (optarg[0]))
- usage ();
-
- group_id = strtoul (optarg, &cp, 10);
- if (*cp != '\0') {
- fprintf (stderr,
- _("%s: invalid group %s\n"),
- Prog, optarg);
- fail_exit (E_BAD_ARG);
- }
+ group_id = get_gid (optarg);
break;
case 'h':
usage ();
--- shadow-4.0.17/src/groupmod.c.UID_GID 2006-07-27 13:35:46.000000000 +0200
+++ shadow-4.0.17/src/groupmod.c 2006-07-27 13:46:50.000000000 +0200
@@ -89,6 +89,7 @@
static void process_flags (int, char **);
static void close_files (void);
static void open_files (void);
+static gid_t get_gid (const char *gidstr);
/*
* usage - display usage message and exit
@@ -310,6 +311,23 @@
}
/*
+ * get_id - validate and get group ID
+ */
+static gid_t get_gid (const char *gidstr)
+{
+ long val;
+ char *errptr;
+
+ val = strtol (gidstr, &errptr, 10);
+ if (*errptr || errno == ERANGE || val < 0) {
+ fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+ gidstr);
+ exit (E_BAD_ARG);
+ }
+ return val;
+}
+
+/*
* process_flags - perform command line argument setting
*
* process_flags() interprets the command line arguments and sets the
@@ -318,25 +336,18 @@
*/
static void process_flags (int argc, char **argv)
{
- char *end;
int arg;
while ((arg = getopt (argc, argv, "g:n:o")) != EOF) {
switch (arg) {
case 'g':
gflg++;
- group_newid = strtoul (optarg, &end, 10);
- if (*end != '\0') {
- fprintf (stderr,
- _("%s: invalid group %s\n"),
- Prog, optarg);
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "modifying group", NULL,
- group_newid, 0);
+ group_newid = get_gid (optarg);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK,
+ Prog, "modifying group",
+ NULL, group_newid, 0);
#endif
- exit (E_BAD_ARG);
- }
break;
case 'n':
nflg++;
--- shadow-4.0.17/src/useradd.c.UID_GID 2006-07-27 13:35:46.000000000 +0200
+++ shadow-4.0.17/src/useradd.c 2006-07-27 13:40:19.000000000 +0200
@@ -201,42 +201,47 @@
exit (code);
}
-static struct group *getgr_nam_gid (const char *name)
+static struct group *getgr_nam_gid (const char *grname)
{
- gid_t gid;
- char *ep;
-
- gid = strtoul (name, &ep, 10);
- if (*name != '\0' && *ep == '\0') /* valid numeric GID */
- return getgrgid (gid);
+ long gid;
+ char *errptr;
- return getgrnam (name);
+ gid = strtol (grname, &errptr, 10);
+ if (*errptr || errno == ERANGE || gid < 0) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"), Prog, grname);
+ exit (E_BAD_ARG);
+ }
+ return getgrnam (grname);
}
-static long get_number (const char *cp)
+static long get_number (const char *numstr)
{
long val;
- char *ep;
-
- val = strtol (cp, &ep, 10);
- if (*cp != '\0' && *ep == '\0') /* valid number */
- return val;
+ char *errptr;
- fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog, cp);
- exit (E_BAD_ARG);
+ val = strtol (numstr, &errptr, 10);
+ if (*errptr || errno == ERANGE) {
+ fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+ numstr);
+ exit (E_BAD_ARG);
+ }
+ return val;
}
-static uid_t get_uid (const char *cp)
+static uid_t get_uid (const char *uidstr)
{
- uid_t val;
- char *ep;
-
- val = strtoul (cp, &ep, 10);
- if (*cp != '\0' && *ep == '\0') /* valid number */
- return val;
+ long val;
+ char *errptr;
- fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog, cp);
- exit (E_BAD_ARG);
+ val = strtol (uidstr, &errptr, 10);
+ if (*errptr || errno == ERANGE || val < 0) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"), Prog,
+ uidstr);
+ exit (E_BAD_ARG);
+ }
+ return val;
}
#define MATCH(x,y) (strncmp((x),(y),strlen(y)) == 0)
--- shadow-4.0.17/src/usermod.c.UID_GID 2006-07-27 13:35:46.000000000 +0200
+++ shadow-4.0.17/src/usermod.c 2006-07-27 13:40:19.000000000 +0200
@@ -68,12 +68,12 @@
#define E_USAGE 2 /* invalid command syntax */
#define E_BAD_ARG 3 /* invalid argument to option */
#define E_UID_IN_USE 4 /* UID already in use (and no -o) */
-/* #define E_BAD_PWFILE 5 *//* passwd file contains errors */
+/* #define E_BAD_PWFILE 5 *//* passwd file contains errors */
#define E_NOTFOUND 6 /* specified user/group doesn't exist */
#define E_USER_BUSY 8 /* user to modify is logged in */
#define E_NAME_IN_USE 9 /* username already in use */
#define E_GRP_UPDATE 10 /* can't update group file */
-/* #define E_NOSPACE 11 *//* insufficient space to move home dir */
+/* #define E_NOSPACE 11*//* insufficient space to move home dir */
#define E_HOMEDIR 12 /* unable to complete home dir move */
#define VALID(s) (strcspn (s, ":\n") == strlen (s))
/*
@@ -160,16 +160,18 @@
* "56k-family"... ergh.
* --Pac.
*/
-static struct group *getgr_nam_gid (const char *name)
+static struct group *getgr_nam_gid (const char *grname)
{
- gid_t gid;
- char *ep;
-
- gid = strtoul (name, &ep, 10);
- if (*name != '\0' && *ep == '\0') /* valid numeric GID */
- return getgrgid (gid);
+ long val;
+ char *errptr;
- return getgrnam (name);
+ val = strtol (grname, &errptr, 10);
+ if (*errptr || errno == ERANGE || val < 0) {
+ fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+ grname);
+ exit (E_BAD_ARG);
+ }
+ return getgrnam (grname);
}
/*
@@ -803,30 +805,32 @@
return ret;
}
-static long get_number (const char *cp)
+static long get_number (const char *numstr)
{
long val;
- char *ep;
-
- val = strtol (cp, &ep, 10);
- if (*cp != '\0' && *ep == '\0') /* valid number */
- return val;
+ char *errptr;
- fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog, cp);
- exit (E_BAD_ARG);
+ val = strtol (numstr, &errptr, 10);
+ if (*errptr || errno == ERANGE) {
+ fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+ numstr);
+ exit (E_BAD_ARG);
+ }
+ return val;
}
-static uid_t get_id (const char *cp)
+static uid_t get_id (const char *uidstr)
{
- uid_t val;
- char *ep;
-
- val = strtoul (cp, &ep, 10);
- if (*cp != '\0' && *ep == '\0') /* valid number */
- return val;
+ long val;
+ char *errptr;
- fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog, cp);
- exit (E_BAD_ARG);
+ val = strtol (uidstr, &errptr, 10);
+ if (*errptr || errno == ERANGE || val < 0) {
+ fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
+ uidstr);
+ exit (E_BAD_ARG);
+ }
+ return val;
}
/*
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]