diff options
Diffstat (limited to 'source/nsswitch/winbindd_wins.c')
-rw-r--r-- | source/nsswitch/winbindd_wins.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/source/nsswitch/winbindd_wins.c b/source/nsswitch/winbindd_wins.c index 0aab4ddd650..ca21ccb4853 100644 --- a/source/nsswitch/winbindd_wins.c +++ b/source/nsswitch/winbindd_wins.c @@ -1,5 +1,6 @@ /* - Unix SMB/CIFS implementation. + Unix SMB/Netbios implementation. + Version 2.0 Winbind daemon - WINS related functions @@ -125,14 +126,14 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count) enum winbindd_result winbindd_wins_byip(struct winbindd_cli_state *state) { char response[1024]; - int i, count, len, size; + int i, count, len, size, maxsize; struct node_status *status; DEBUG(3, ("[%5d]: wins_byip %s\n", state->pid, state->request.data.name)); *response = '\0'; - len = sizeof(response) - 2; + maxsize = len = sizeof(response) - 1; if ((status = lookup_byaddr_backend(state->request.data.name, &count))){ size = strlen(state->request.data.name) + 1; @@ -141,8 +142,8 @@ enum winbindd_result winbindd_wins_byip(struct winbindd_cli_state *state) return WINBINDD_ERROR; } len -= size; - safe_strcat(response,state->request.data.name,size); - safe_strcat(response,"\t",1); + safe_strcat(response,state->request.data.name,maxsize); + safe_strcat(response,"\t",maxsize); for (i = 0; i < count; i++) { /* ignore group names */ if (status[i].flags & 0x80) continue; @@ -153,11 +154,10 @@ enum winbindd_result winbindd_wins_byip(struct winbindd_cli_state *state) return WINBINDD_ERROR; } len -= size; - safe_strcat(response, status[i].name, size); - safe_strcat(response, " ", 1); + safe_strcat(response, status[i].name, maxsize); + safe_strcat(response, " ", maxsize); } } - response[strlen(response)-1] = '\n'; SAFE_FREE(status); } fstrcpy(state->response.data.name.name,response); @@ -169,7 +169,7 @@ enum winbindd_result winbindd_wins_byip(struct winbindd_cli_state *state) enum winbindd_result winbindd_wins_byname(struct winbindd_cli_state *state) { struct in_addr *ip_list; - int i, count, len, size; + int i, count, len, size, maxsize; char response[1024]; char * addr; @@ -177,7 +177,7 @@ enum winbindd_result winbindd_wins_byname(struct winbindd_cli_state *state) state->request.data.name)); *response = '\0'; - len = sizeof(response) - 2; + maxsize = len = sizeof(response) - 1; if ((ip_list = lookup_byname_backend(state->request.data.name,&count))){ for (i = count; i ; i--) { @@ -188,18 +188,16 @@ enum winbindd_result winbindd_wins_byname(struct winbindd_cli_state *state) return WINBINDD_ERROR; } len -= size; - if (i != 0) - response[strlen(response)-1] = ' '; - safe_strcat(response,addr,size); - safe_strcat(response,"\t",1); + safe_strcat(response,addr,maxsize); + safe_strcat(response," ",maxsize); } size = strlen(state->request.data.name) + 1; if (size > len) { SAFE_FREE(ip_list); return WINBINDD_ERROR; } - safe_strcat(response,state->request.data.name,size); - safe_strcat(response,"\n",1); + response[strlen(response)-1] = '\t'; + safe_strcat(response,state->request.data.name,maxsize); SAFE_FREE(ip_list); } else return WINBINDD_ERROR; |