changeset 12373:3cbb46b89edf

userspec: disallow an ID that maps to (uid_t)-1 or (gid_t)-1 * lib/userspec.c (parse_with_separator): Do not accept a user ID number of MAXUID when it evaluates to (uid_t) -1. Likewise for group ID. Reported by Matt McCutchen in <http://savannah.gnu.org/bugs/?28113>
author Jim Meyering <meyering@redhat.com>
date Sat, 28 Nov 2009 07:33:16 +0100
parents d3dfa66dec26
children 5a0b2165f31b
files ChangeLog lib/userspec.c
diffstat 2 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-11-28  Jim Meyering  <meyering@redhat.com>
 
+	userspec: disallow an ID that maps to (uid_t)-1 or (gid_t)-1
+	* lib/userspec.c (parse_with_separator): Do not accept a user ID
+	number of MAXUID when it evaluates to (uid_t) -1.
+	Likewise for group ID.  Reported by Matt McCutchen in
+	<http://savannah.gnu.org/bugs/?28113>
+
 	userspec: reformat to use spaces, not TABs
 	* lib/userspec.c: Expand TABs to spaces.
 	Add Emacs' "indent-tabs-mode: nil" hint.
--- a/lib/userspec.c
+++ b/lib/userspec.c
@@ -169,7 +169,7 @@
             {
               unsigned long int tmp;
               if (xstrtoul (u, NULL, 10, &tmp, "") == LONGINT_OK
-                  && tmp <= MAXUID)
+                  && tmp <= MAXUID && (uid_t) tmp != (uid_t) -1)
                 unum = tmp;
               else
                 error_msg = E_invalid_user;
@@ -200,7 +200,8 @@
       if (grp == NULL)
         {
           unsigned long int tmp;
-          if (xstrtoul (g, NULL, 10, &tmp, "") == LONGINT_OK && tmp <= MAXGID)
+          if (xstrtoul (g, NULL, 10, &tmp, "") == LONGINT_OK
+              && tmp <= MAXGID && (gid_t) tmp != (gid_t) -1)
             gnum = tmp;
           else
             error_msg = E_invalid_group;