summaryrefslogtreecommitdiff
path: root/source/nsswitch/winbindd_wins.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/nsswitch/winbindd_wins.c')
-rw-r--r--source/nsswitch/winbindd_wins.c30
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;