free (ent->oldkey);
saved_first = FALSE; saved_oldkey = ent->oldkey; saved_oldlen = ent->oldkeylen;
getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer,		   size_t buflen){  struct parser_data *data = (void *) buffer;  char *domain, *outkey, *outval, *p, *p2;  int outkeylen, outvallen, parse_res;  size_t p2len;  if (yp_get_default_domain (&domain) != YPERR_SUCCESS)    {      ent->nis = 0;      give_pwd_free (&ent->pwd);      return NSS_STATUS_UNAVAIL;    }  p2len = pwd_need_buflen (&ent->pwd);  if (p2len > buflen)    {      __set_errno (ERANGE);      return NSS_STATUS_TRYAGAIN;    }  p2 = buffer + (buflen - p2len);  buflen -= p2len;  do    {      if (ent->first)	{	  if (yp_first (domain, "passwd.byname", &outkey, &outkeylen,			&outval, &outvallen) != YPERR_SUCCESS)	    {	      ent->nis = 0;	      give_pwd_free (&ent->pwd);	      return NSS_STATUS_UNAVAIL;	    }	  ent->oldkey = outkey;	  ent->oldkeylen = outkeylen;	  ent->first = FALSE;	}      else	{	  if (yp_next (domain, "passwd.byname", ent->oldkey, ent->oldkeylen,		       &outkey, &outkeylen, &outval, &outvallen)	      != YPERR_SUCCESS)	    {	      ent->nis = 0;	      give_pwd_free (&ent->pwd);	      return NSS_STATUS_NOTFOUND;	    }	  free (ent->oldkey);	  ent->oldkey = outkey;	  ent->oldkeylen = outkeylen;	}      /* Copy the found data to our buffer  */      p = strncpy (buffer, outval, buflen);      /* ...and free the data.  */      free (outval);      while (isspace (*p))	++p;      parse_res = _nss_files_parse_pwent (p, result, data, buflen);      if (parse_res &&	  in_blacklist (result->pw_name, strlen (result->pw_name), ent))	parse_res = 0;    }  while (!parse_res);  copy_pwd_changes (result, &ent->pwd, p2, p2len);  return NSS_STATUS_SUCCESS;}