New modules unistr/u*-mbsnlen.
[gnulib.git] / lib / userspec.c
index 4dbaee0..c1f580a 100644 (file)
@@ -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
@@ -41,7 +41,6 @@
 
 #include "intprops.h"
 #include "inttostr.h"
-#include "strdup.h"
 #include "xalloc.h"
 #include "xstrtol.h"
 
@@ -156,7 +155,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 +196,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;