changeset 7909:23cd146c58fd

* 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 "+".
author Jim Meyering <jim@meyering.net>
date Sat, 20 Jan 2007 08:46:44 +0000
parents d41d48e822b4
children 6fdc6bdf5e75
files ChangeLog lib/userspec.c
diffstat 2 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-01-20  Jim Meyering  <jim@meyering.net>
+
+	* 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  <eggert@cs.ucla.edu>
 
 	* lib/poll.c: Include sys/time.h and time.h unconditionally,
--- 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 @@
 
   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 @@
   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;