blacklist_store_name (&result->sp_namp[1], ent);
memcpy (buf, &result->sp_namp[1], len);
getspent_next_file (struct spwd *result, ent_t *ent,		    char *buffer, size_t buflen, int *errnop){  struct parser_data *data = (void *) buffer;  while (1)    {      fpos_t pos;      int parse_res = 0;      char *p;      do	{	  fgetpos (ent->stream, &pos);	  buffer[buflen - 1] = '\xff';	  p = fgets_unlocked (buffer, buflen, ent->stream);	  if (p == NULL && feof_unlocked (ent->stream))	    return NSS_STATUS_NOTFOUND;	  if (p == NULL || buffer[buflen - 1] != '\xff')	    {	      fsetpos (ent->stream, &pos);	      *errnop = ERANGE;	      return NSS_STATUS_TRYAGAIN;	    }	  /* Skip leading blanks.  */	  while (isspace (*p))	    ++p;	}      while (*p == '\0' || *p == '#'	/* Ignore empty and comment lines.  */	     /* Parse the line.  If it is invalid, loop to	        get the next line of the file to parse.  */	     || !(parse_res = _nss_files_parse_spent (p, result, data,						      buflen, errnop)));      if (parse_res == -1)	{	  /* The parser ran out of space.  */	  fsetpos (ent->stream, &pos);	  *errnop = ERANGE;	  return NSS_STATUS_TRYAGAIN;	}      if (result->sp_namp[0] != '+' && result->sp_namp[0] != '-')	/* This is a real entry.  */	break;      /* -@netgroup */      if (result->sp_namp[0] == '-' && result->sp_namp[1] == '@'	  && result->sp_namp[2] != '\0')	{	  /* XXX Do not use fixed length buffers.  */	  char buf2[1024];	  char *user, *host, *domain;	  struct __netgrent netgrdata;	  bzero (&netgrdata, sizeof (struct __netgrent));	  __internal_setnetgrent (&result->sp_namp[2], &netgrdata);	  while (__internal_getnetgrent_r (&host, &user, &domain,					   &netgrdata, buf2, sizeof (buf2),					   errnop))	    {	      if (user != NULL && user[0] != '-')		blacklist_store_name (user, ent);	    }	  __internal_endnetgrent (&netgrdata);	  continue;	}      /* +@netgroup */      if (result->sp_namp[0] == '+' && result->sp_namp[1] == '@'	  && result->sp_namp[2] != '\0')	{	  int status;	  ent->netgroup = TRUE;	  ent->first = TRUE;	  copy_spwd_changes (&ent->pwd, result, NULL, 0);	  status = getspent_next_nss_netgr (NULL, result, ent,					    &result->sp_namp[2],					    buffer, buflen, errnop);	  if (status == NSS_STATUS_RETURN)	    continue;	  else	    return status;	}      /* -user */      if (result->sp_namp[0] == '-' && result->sp_namp[1] != '\0'	  && result->sp_namp[1] != '@')	{	  blacklist_store_name (&result->sp_namp[1], ent);	  continue;	}      /* +user */      if (result->sp_namp[0] == '+' && result->sp_namp[1] != '\0'	  && result->sp_namp[1] != '@')	{	  enum nss_status status;	  /* Store the User in the blacklist for the "+" at the end of	     /etc/passwd */	  blacklist_store_name (&result->sp_namp[1], ent);	  status = getspnam_plususer (&result->sp_namp[1], result, ent,				      buffer, buflen, errnop);	  if (status == NSS_STATUS_SUCCESS)	/* We found the entry. */	    break;	  else if (status == NSS_STATUS_RETURN	/* We couldn't parse the entry */		   || status == NSS_STATUS_NOTFOUND)	/* entry doesn't exist */	    continue;	  else	    {	      if (status == NSS_STATUS_TRYAGAIN)		{		  fsetpos (ent->stream, &pos);		  *errnop = ERANGE;		}	      return status;	    }	}      /* +:... */      if (result->sp_namp[0] == '+' && result->sp_namp[1] == '\0')	{	  ent->files = FALSE;	  ent->first = TRUE;	  copy_spwd_changes (&ent->pwd, result, NULL, 0);	  return getspent_next_nss (result, ent, buffer, buflen, errnop);	}    }  return NSS_STATUS_SUCCESS;}