X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fuserspec.c;h=a96b63a003b364f8aa5007ff04f91bd648890a71;hb=4470580881a7b821b52fb5635102ef3e27aa5af4;hp=fa2f26fa097286d941ec11d66c9fda72309abebd;hpb=42956c5d101d677aa660e1cdd5df3d8ab1a1d348;p=gnulib.git diff --git a/lib/userspec.c b/lib/userspec.c index fa2f26fa0..a96b63a00 100644 --- a/lib/userspec.c +++ b/lib/userspec.c @@ -1,5 +1,5 @@ /* userspec.c -- Parse a user and group string. - Copyright (C) 1989-1992, 1997-1998, 2000, 2002-2009 Free Software + Copyright (C) 1989-1992, 1997-1998, 2000, 2002-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -80,7 +80,7 @@ POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless it's important to use the locale's definition of `digit' even when the host does not conform to POSIX. */ -#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) +# define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) /* Return true if STR represents an unsigned decimal integer. */ @@ -169,7 +169,7 @@ parse_with_separator (char const *spec, char const *separator, { 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 @@ parse_with_separator (char const *spec, char const *separator, 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; @@ -253,7 +254,7 @@ parse_user_spec (char const *spec, uid_t *uid, gid_t *gid, if (!colon && error_msg) { /* If there's no colon but there is a dot, and if looking up the - whole spec failed (i.e., the spec is not a owner name that + whole spec failed (i.e., the spec is not an owner name that includes a dot), then try again, but interpret the dot as a separator. This is a compatible extension to POSIX, since the POSIX-required behavior is always tried first. */