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; }
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; }
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; }
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; }
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; }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }