[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



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]