summaryrefslogtreecommitdiff
path: root/source3/nsswitch/winbindd_wins.c
diff options
context:
space:
mode:
authorHerb Lewis <herb@samba.org>2002-03-29 15:37:39 +0000
committerHerb Lewis <herb@samba.org>2002-03-29 15:37:39 +0000
commit93af72fe45a92148af3e3e3197cd7c481894cfa8 (patch)
tree3ea3356c70b0c86f53eb14d43910be5f24d31223 /source3/nsswitch/winbindd_wins.c
parent14f0beb21cebe319c34e25dbb685c6b30fe10561 (diff)
downloadsamba-93af72fe45a92148af3e3e3197cd7c481894cfa8.tar.gz
samba-93af72fe45a92148af3e3e3197cd7c481894cfa8.tar.bz2
samba-93af72fe45a92148af3e3e3197cd7c481894cfa8.zip
merge winbindd WINS changes from 2.2
(This used to be commit 205399dc17e464360b0152538329b9e111b0e7f4)
Diffstat (limited to 'source3/nsswitch/winbindd_wins.c')
-rw-r--r--source3/nsswitch/winbindd_wins.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/source3/nsswitch/winbindd_wins.c b/source3/nsswitch/winbindd_wins.c
index 0aab4ddd65..af624170eb 100644
--- a/source3/nsswitch/winbindd_wins.c
+++ b/source3/nsswitch/winbindd_wins.c
@@ -94,7 +94,7 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
return NULL;
p = wins_srv_ip();
- if( !zero_ip(p) ) {
+ if( !is_zero_ip(p) ) {
ret = name_query(fd,name,0x20,False,True, p, count);
goto out;
}
@@ -124,43 +124,42 @@ 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;
+ fstring response;
+ int i, count, maxlen, size;
struct node_status *status;
DEBUG(3, ("[%5d]: wins_byip %s\n", state->pid,
- state->request.data.name));
+ state->request.data.winsreq));
*response = '\0';
- len = sizeof(response) - 2;
+ maxlen = sizeof(response) - 1;
- if ((status = lookup_byaddr_backend(state->request.data.name, &count))){
- size = strlen(state->request.data.name) + 1;
- if (size > len) {
+ if ((status = lookup_byaddr_backend(state->request.data.winsreq, &count))){
+ size = strlen(state->request.data.winsreq);
+ if (size > maxlen) {
SAFE_FREE(status);
return WINBINDD_ERROR;
}
- len -= size;
- safe_strcat(response,state->request.data.name,size);
- safe_strcat(response,"\t",1);
+ safe_strcat(response,state->request.data.winsreq,maxlen);
+ safe_strcat(response,"\t",maxlen);
for (i = 0; i < count; i++) {
/* ignore group names */
if (status[i].flags & 0x80) continue;
if (status[i].type == 0x20) {
- size = sizeof(status[i].name) + 1;
- if (size > len) {
+ size = sizeof(status[i].name) + strlen(response);
+ if (size > maxlen) {
SAFE_FREE(status);
return WINBINDD_ERROR;
}
- len -= size;
- safe_strcat(response, status[i].name, size);
- safe_strcat(response, " ", 1);
+ safe_strcat(response, status[i].name, maxlen);
+ safe_strcat(response, " ", maxlen);
}
}
+ /* make last character a newline */
response[strlen(response)-1] = '\n';
SAFE_FREE(status);
}
- fstrcpy(state->response.data.name.name,response);
+ fstrcpy(state->response.data.winsresp,response);
return WINBINDD_OK;
}
@@ -169,42 +168,43 @@ 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;
- char response[1024];
+ int i, count, maxlen, size;
+ fstring response;
char * addr;
DEBUG(3, ("[%5d]: wins_byname %s\n", state->pid,
- state->request.data.name));
+ state->request.data.winsreq));
*response = '\0';
- len = sizeof(response) - 2;
+ maxlen = sizeof(response) - 1;
- if ((ip_list = lookup_byname_backend(state->request.data.name,&count))){
+ if ((ip_list = lookup_byname_backend(state->request.data.winsreq,&count))){
for (i = count; i ; i--) {
addr = inet_ntoa(ip_list[i-1]);
- size = strlen(addr) + 1;
- if (size > len) {
+ size = strlen(addr);
+ if (size > maxlen) {
SAFE_FREE(ip_list);
return WINBINDD_ERROR;
}
- len -= size;
- if (i != 0)
- response[strlen(response)-1] = ' ';
- safe_strcat(response,addr,size);
- safe_strcat(response,"\t",1);
+ if (i != 0) {
+ /* Clear out the newline character */
+ response[strlen(response)-1] = ' ';
+ }
+ safe_strcat(response,addr,maxlen);
+ safe_strcat(response,"\t",maxlen);
}
- size = strlen(state->request.data.name) + 1;
- if (size > len) {
+ size = strlen(state->request.data.winsreq) + strlen(response);
+ if (size > maxlen) {
SAFE_FREE(ip_list);
return WINBINDD_ERROR;
}
- safe_strcat(response,state->request.data.name,size);
- safe_strcat(response,"\n",1);
+ safe_strcat(response,state->request.data.winsreq,maxlen);
+ safe_strcat(response,"\n",maxlen);
SAFE_FREE(ip_list);
} else
return WINBINDD_ERROR;
- fstrcpy(state->response.data.name.name,response);
+ fstrcpy(state->response.data.winsresp,response);
return WINBINDD_OK;
}