X-Git-Url: http://git.samba.org/samba.git/?p=samba.git;a=blobdiff_plain;f=source3%2Frpc_server%2Fwkssvc%2Fsrv_wkssvc_nt.c;fp=source3%2Frpc_server%2Fwkssvc%2Fsrv_wkssvc_nt.c;h=84318cf35bec8bdc12e6516e95b124db6b91e363;hp=120993dbfaeec308aafd487c21610ab1466681e4;hb=76c1b77e79c273db4c768a899fa8383e9630dc59;hpb=aa147153c10b94e2db40d772677efacd5d0b31ee diff --git a/source3/rpc_server/wkssvc/srv_wkssvc_nt.c b/source3/rpc_server/wkssvc/srv_wkssvc_nt.c index 120993dbfae..84318cf35be 100644 --- a/source3/rpc_server/wkssvc/srv_wkssvc_nt.c +++ b/source3/rpc_server/wkssvc/srv_wkssvc_nt.c @@ -65,7 +65,7 @@ static int usr_info_cmp(const struct usrinfo *usr1, const struct usrinfo *usr2) Get a list of the names of all users logged into this machine ********************************************************************/ -static char **get_logged_on_userlist(TALLOC_CTX *mem_ctx) +static int get_logged_on_userlist(TALLOC_CTX *mem_ctx, char ***pusers) { char **users; int i, num_users = 0; @@ -94,7 +94,7 @@ static char **get_logged_on_userlist(TALLOC_CTX *mem_ctx) if (tmp == NULL) { TALLOC_FREE(tmp); endutxent(); - return NULL; + return ENOMEM; } usr_infos = tmp; usr_infos[num_users].name = talloc_strdup(usr_infos, @@ -102,7 +102,7 @@ static char **get_logged_on_userlist(TALLOC_CTX *mem_ctx) if (usr_infos[num_users].name == NULL) { TALLOC_FREE(usr_infos); endutxent(); - return NULL; + return ENOMEM; } usr_infos[num_users].login_time.tv_sec = u->ut_tv.tv_sec; usr_infos[num_users].login_time.tv_usec = u->ut_tv.tv_usec; @@ -120,15 +120,16 @@ static char **get_logged_on_userlist(TALLOC_CTX *mem_ctx) } TALLOC_FREE(usr_infos); endutxent(); - errno = 0; - return users; + *pusers = users; + return 0; } #else -static char **get_logged_on_userlist(TALLOC_CTX *mem_ctx) +static int get_logged_on_userlist(TALLOC_CTX *mem_ctx, char ***pusers) { - return NULL; + *pusers = NULL; + return 0; } #endif @@ -316,6 +317,7 @@ static struct wkssvc_NetWkstaInfo102 *create_wks_info_102(TALLOC_CTX *mem_ctx) { struct wkssvc_NetWkstaInfo102 *info102; char **users; + int ret; info102 = talloc(mem_ctx, struct wkssvc_NetWkstaInfo102); if (info102 == NULL) { @@ -332,7 +334,12 @@ static struct wkssvc_NetWkstaInfo102 *create_wks_info_102(TALLOC_CTX *mem_ctx) info102, "%s", lp_workgroup()); info102->lan_root = ""; - users = get_logged_on_userlist(talloc_tos()); + ret = get_logged_on_userlist(talloc_tos(), &users); + if (ret != 0) { + TALLOC_FREE(info102); + errno = ret; + return NULL; + } info102->logged_on_users = talloc_array_length(users); TALLOC_FREE(users); @@ -428,18 +435,20 @@ static struct wkssvc_NetWkstaEnumUsersCtr0 *create_enum_users0( { struct wkssvc_NetWkstaEnumUsersCtr0 *ctr0; char **users; - int i, num_users; + int i, num_users, ret; ctr0 = talloc(mem_ctx, struct wkssvc_NetWkstaEnumUsersCtr0); if (ctr0 == NULL) { return NULL; } - users = get_logged_on_userlist(talloc_tos()); - if (users == NULL && errno != 0) { - DEBUG(1,("get_logged_on_userlist error %d: %s\n", - errno, strerror(errno))); + ret = get_logged_on_userlist(talloc_tos(), &users); + if (ret != 0) { + DBG_WARNING("get_logged_on_userlist error %d: %s\n", + ret, + strerror(ret)); TALLOC_FREE(ctr0); + errno = ret; return NULL; } @@ -478,18 +487,20 @@ static struct wkssvc_NetWkstaEnumUsersCtr1 *create_enum_users1( struct dom_usr *dom_users; const char *pwd_server; char *pwd_tmp; - int i, j, num_users, num_dom_users; + int i, j, num_users, num_dom_users, ret; ctr1 = talloc(mem_ctx, struct wkssvc_NetWkstaEnumUsersCtr1); if (ctr1 == NULL) { return NULL; } - users = get_logged_on_userlist(talloc_tos()); - if (users == NULL && errno != 0) { - DEBUG(1,("get_logged_on_userlist error %d: %s\n", - errno, strerror(errno))); + ret = get_logged_on_userlist(talloc_tos(), &users); + if (ret != 0) { + DBG_WARNING("get_logged_on_userlist error %d: %s\n", + ret, + strerror(ret)); TALLOC_FREE(ctr1); + errno = ret; return NULL; } num_users = talloc_array_length(users);