X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fuserspec.c;h=d4554f8d8d56664c04959802c539b9350f7aedb9;hb=676fc6f6594c7b81d26b22226514a512ca0f4bc3;hp=fa2f26fa097286d941ec11d66c9fda72309abebd;hpb=42956c5d101d677aa660e1cdd5df3d8ab1a1d348;p=gnulib.git diff --git a/lib/userspec.c b/lib/userspec.c index fa2f26fa0..d4554f8d8 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-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -79,8 +79,8 @@ - It's typically faster. 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) + of "digit" even when the host does not conform to POSIX. */ +# define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) /* Return true if STR represents an unsigned decimal integer. */ @@ -145,7 +145,7 @@ parse_with_separator (char const *spec, char const *separator, #ifdef __DJGPP__ /* Pretend that we are the user U whose group is G. This makes - pwd and grp functions ``know'' about the UID and GID of these. */ + pwd and grp functions "know" about the UID and GID of these. */ if (u && !is_number (u)) setenv ("USER", u, 1); if (g && !is_number (g)) @@ -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; @@ -231,10 +232,10 @@ parse_with_separator (char const *spec, char const *separator, Either user or group, or both, must be present. If the group is omitted but the separator is given, use the given user's login group. - If SPEC contains a `:', then use that as the separator, ignoring - any `.'s. If there is no `:', but there is a `.', then first look + If SPEC contains a ':', then use that as the separator, ignoring + any '.'s. If there is no ':', but there is a '.', then first look up the entire SPEC as a login name. If that look-up fails, then - try again interpreting the `.' as a separator. + try again interpreting the '.' as a separator. USERNAME and GROUPNAME will be in newly malloc'd memory. Either one might be NULL instead, indicating that it was not @@ -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. */