static NSS_STATUS
_nss_winbind_getpwent_solwrap (nss_backend_t* be, void *args)
{
	NSS_STATUS ret;
	char* buffer = NSS_ARGS(args)->buf.buffer;
	int buflen = NSS_ARGS(args)->buf.buflen;
	struct passwd* result = (struct passwd*) NSS_ARGS(args)->buf.result;
	int* errnop = &NSS_ARGS(args)->erange;
	char logmsg[80];

	ret = _nss_winbind_getpwent_r(result, buffer, 
				      buflen, errnop);

	if(ret == NSS_STATUS_SUCCESS)
		{
			snprintf(logmsg, 79, "_nss_winbind_getpwent_solwrap: Returning user: %s\n",
				 result->pw_name);
			NSS_DEBUG(logmsg);
			NSS_ARGS(args)->returnval = (void*) result;
		} else {
			snprintf(logmsg, 79, "_nss_winbind_getpwent_solwrap: Returning error: %d.\n",ret);
			NSS_DEBUG(logmsg);
		}
    
	return ret;
}
Beispiel #2
0
static nss_status_t read_hoststring(TFILE *fp,nss_XbyY_args_t *args,int erronempty)
{
  struct hostent result;
  nss_status_t retv;
  char *buffer;
  size_t buflen;
  int i;
  /* read the hostent */
  if (erronempty)
    retv=read_hostent_erronempty(fp,NSS_ARGS(args)->key.hostaddr.type,&result,NSS_ARGS(args)->buf.buffer,args->buf.buflen,&errno,&(NSS_ARGS(args)->h_errno));
  else
    retv=read_hostent_nextonempty(fp,NSS_ARGS(args)->key.hostaddr.type,&result,NSS_ARGS(args)->buf.buffer,args->buf.buflen,&errno,&(NSS_ARGS(args)->h_errno));
  if (retv!=NSS_STATUS_SUCCESS)
    return retv;
  /* allocate a temporary buffer */
  buflen=args->buf.buflen;
  buffer=(char *)malloc(buflen);
  /* build the formatted string */
  /* FIXME: implement proper buffer size checking */
  if (result.h_addr_list)
  {
    struct in_addr in;
    (void)memcpy(&in.s_addr,result.h_addr_list[0],sizeof(in.s_addr));
    sprintf(buffer,"%s %s",inet_ntoa(in),result.h_name);
    if (result.h_aliases)
    {
      int j;
      for (j=0;result.h_aliases[j];j++)
      {
        strcat(buffer,"  ");
        strcat(buffer,result.h_aliases[j]);
      }
    }
    for (i=1;result.h_addr_list[i];i++)
    {
      (void)memcpy(&in.s_addr,result.h_addr_list[i],sizeof(in.s_addr));
      strcat(buffer,"\n");
      strcat(buffer,inet_ntoa(in));
      strcat(buffer," ");
      strcat(buffer,result.h_name);
      /* TODO: aliases only supplied to the first address */
      /* need review */
    }
  }
  /* copy the result back to the result buffer and free the temporary one */
  strcpy(NSS_ARGS(args)->buf.buffer,buffer);
  free(buffer);
  NSS_ARGS(args)->returnval=NSS_ARGS(args)->buf.buffer;
  NSS_ARGS(args)->returnlen=strlen(NSS_ARGS(args)->buf.buffer);
  return NSS_STATUS_SUCCESS;
}
Beispiel #3
0
static nss_status_t read_passwdstring(TFILE *fp,nss_XbyY_args_t *args)
{
  struct passwd result;
  nss_status_t retv;
  char *buffer;
  size_t buflen;
  /* read the passwd */
  retv=read_passwd(fp,&result,NSS_ARGS(args)->buf.buffer,args->buf.buflen,&errno);
  if (retv!=NSS_STATUS_SUCCESS)
    return retv;
  /* allocate a temporary buffer */
  buflen=args->buf.buflen;
  buffer=(char *)malloc(buflen);
  /* build the formatted string */
  /* FIXME: implement proper buffer size checking */
   sprintf(buffer,"%s:%s:%d:%d:%s:%s:%s",
     result.pw_name,result.pw_passwd,(int)result.pw_uid,(int)result.pw_gid,result.pw_gecos,
     result.pw_dir,result.pw_shell);
  /* copy the result back to the result buffer and free the temporary one */
  strcpy(NSS_ARGS(args)->buf.buffer,buffer);
  free(buffer);
  NSS_ARGS(args)->returnval=NSS_ARGS(args)->buf.buffer;
  NSS_ARGS(args)->returnlen=strlen(NSS_ARGS(args)->buf.buffer);
  return NSS_STATUS_SUCCESS;
}
Beispiel #4
0
static NSS_RET _nss_rfs_sol_getgrgid_r(nss_backend_t *be, void *args)
{
    NSS_RET status;
    uid_t          uid     =  NSS_ARGS(args)->key.uid;
    struct group  *result  =  NSS_ARGS(args)->buf.result;
    char          *buffer  =  NSS_ARGS(args)->buf.buffer;
    size_t         buflen  =  NSS_ARGS(args)->buf.buflen;
    int           *errnop  = &NSS_ARGS(args)->erange;
    status = _nss_rfs_getgrgid_r(uid, result, buffer, buflen, errnop);

    if (status == NSS_SUCCESS)
        NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result;
    return status;
}
Beispiel #5
0
static NSS_RET _nss_rfs_sol_getpwent_r(nss_backend_t *be, void *args)
{
    NSS_RET status;
    const char    *name   =  NSS_ARGS(args)->key.name;
    struct passwd *result =  NSS_ARGS(args)->buf.result;
    char          *buffer =  NSS_ARGS(args)->buf.buffer;
    size_t         buflen =  NSS_ARGS(args)->buf.buflen;
    int           *errnop = &NSS_ARGS(args)->erange;
    status = _nss_rfs_getpwent_r(result, buffer, buflen, errnop);

    if (status == NSS_SUCCESS)
        NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result;
    return status;
}
static NSS_STATUS
_nss_winbind_getpwuid_solwrap(nss_backend_t* be, void* args)
{
	NSS_STATUS ret;
	struct passwd* result = (struct passwd*) NSS_ARGS(args)->buf.result;
  
	NSS_DEBUG("_nss_winbind_getpwuid_solwrap");
	ret = _nss_winbind_getpwuid_r (NSS_ARGS(args)->key.uid,
				       result,
				       NSS_ARGS(args)->buf.buffer,
				       NSS_ARGS(args)->buf.buflen,
				       &NSS_ARGS(args)->erange);
	if(ret == NSS_STATUS_SUCCESS)
		NSS_ARGS(args)->returnval = (void*) result;
  
	return ret;
}
Beispiel #7
0
static nss_status_t passwd_getpwuid(nss_backend_t UNUSED(*be),void *args)
{
  NSS_BYTYPE(NSLCD_ACTION_PASSWD_BYUID,
             NSS_ARGS(args)->key.uid,uid_t,
             READ_RESULT(fp));
}
Beispiel #8
0
static nss_status_t passwd_getpwnam(nss_backend_t UNUSED(*be),void *args)
{
  NSS_BYNAME(NSLCD_ACTION_PASSWD_BYNAME,
             NSS_ARGS(args)->key.name,
             READ_RESULT(fp));
}
Beispiel #9
0
static nss_status_t passwd_getpwuid(nss_backend_t UNUSED(*be), void *args)
{
  NSS_GETONE(NSLCD_ACTION_PASSWD_BYUID,
             WRITE_INT32(fp, NSS_ARGS(args)->key.uid),
             read_result(fp, args));
}
Beispiel #10
0
static nss_status_t passwd_getpwnam(nss_backend_t UNUSED(*be), void *args)
{
  NSS_GETONE(NSLCD_ACTION_PASSWD_BYNAME,
             WRITE_STRING(fp, NSS_ARGS(args)->key.name),
             read_result(fp, args));
}
Beispiel #11
0
static nss_status_t hosts_gethostbyaddr(nss_backend_t UNUSED(*be),void *args)
{
  NSS_BYGEN(NSLCD_ACTION_HOST_BYADDR,
            WRITE_ADDRESS(fp,NSS_ARGS(args)->key.hostaddr.type,NSS_ARGS(args)->key.hostaddr.len,NSS_ARGS(args)->key.hostaddr.addr),
            READ_RESULT_ERRONEMPTY(fp));
}
Beispiel #12
0
static nss_status_t hosts_gethostbyname(nss_backend_t UNUSED(*be),void *args)
{
  NSS_BYNAME(NSLCD_ACTION_HOST_BYNAME,
             NSS_ARGS(args)->key.name,
             READ_RESULT_ERRONEMPTY(fp));
}