From bbdcfead98c6d3536215c3f0f603e4f92a28d26b Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sat, 20 Jan 2007 08:46:44 +0000 Subject: [PATCH] * lib/userspec.c (parse_with_separator): If a user or group string starts with "+", skip the corresponding name-to-ID look-up, since such a look-up must fail: user and group names may not include "+". --- ChangeLog | 6 ++++++ lib/userspec.c | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f0bae7edb..108f28928 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-01-20 Jim Meyering + + * lib/userspec.c (parse_with_separator): If a user or group string + starts with "+", skip the corresponding name-to-ID look-up, since + such a look-up must fail: user and group names may not include "+". + 2007-01-19 Paul Eggert * lib/poll.c: Include sys/time.h and time.h unconditionally, diff --git a/lib/userspec.c b/lib/userspec.c index 4dbaee0a3..5f4f2af31 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-2006 Free Software + Copyright (C) 1989-1992, 1997-1998, 2000, 2002-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -156,7 +156,8 @@ parse_with_separator (char const *spec, char const *separator, if (u != NULL) { - pwd = getpwnam (u); + /* If it starts with "+", skip the look-up. */ + pwd = (*u == '+' ? NULL : getpwnam (u)); if (pwd == NULL) { bool use_login_group = (separator != NULL && g == NULL); @@ -196,7 +197,8 @@ parse_with_separator (char const *spec, char const *separator, if (g != NULL && error_msg == NULL) { /* Explicit group. */ - grp = getgrnam (g); + /* If it starts with "+", skip the look-up. */ + grp = (*g == '+' ? NULL : getgrnam (g)); if (grp == NULL) { unsigned long int tmp; -- 2.11.0