Skip to content

Commit

Permalink
s3: Remove "struct ip_service" from resolve_wins
Browse files Browse the repository at this point in the history
  • Loading branch information
vlendec committed Jun 12, 2011
1 parent eb16915 commit ebf04d7
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 33 deletions.
15 changes: 7 additions & 8 deletions nsswitch/wins.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,9 @@ static void nss_wins_init(void)
static struct in_addr *lookup_byname_backend(const char *name, int *count)
{
TALLOC_CTX *frame = talloc_stackframe();
struct ip_service *address = NULL;
struct sockaddr_storage *address = NULL;
struct in_addr *ret = NULL;
NTSTATUS status;
int j;

if (!initialised) {
Expand All @@ -71,21 +72,20 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
*count = 0;

/* always try with wins first */
if (NT_STATUS_IS_OK(resolve_wins(name,0x00,&address,count))) {
status = resolve_wins(name, 0x00, talloc_tos(),
&address, count);
if (NT_STATUS_IS_OK(status)) {
if ( (ret = SMB_MALLOC_P(struct in_addr)) == NULL ) {
free( address );
TALLOC_FREE(frame);
return NULL;
}
if (address[0].ss.ss_family != AF_INET) {
free(address);
if (address[0].ss_family != AF_INET) {
free(ret);
TALLOC_FREE(frame);
return NULL;
}
*ret = ((struct sockaddr_in *)(void *)&address[0].ss)
*ret = ((struct sockaddr_in *)(void *)address)
->sin_addr;
free( address );
TALLOC_FREE(frame);
return ret;
}
Expand All @@ -95,7 +95,6 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count)
const struct in_addr *bcast = iface_n_bcast_v4(j);
struct sockaddr_storage ss;
struct sockaddr_storage *pss;
NTSTATUS status;

if (!bcast) {
continue;
Expand Down
3 changes: 2 additions & 1 deletion source3/include/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -1052,7 +1052,8 @@ NTSTATUS name_resolve_bcast(const char *name,
int *return_count);
NTSTATUS resolve_wins(const char *name,
int name_type,
struct ip_service **return_iplist,
TALLOC_CTX *mem_ctx,
struct sockaddr_storage **return_iplist,
int *return_count);
NTSTATUS internal_resolve_name(const char *name,
int name_type,
Expand Down
22 changes: 13 additions & 9 deletions source3/libsmb/namequery.c
Original file line number Diff line number Diff line change
Expand Up @@ -1799,12 +1799,13 @@ NTSTATUS name_resolve_bcast(const char *name,

NTSTATUS resolve_wins(const char *name,
int name_type,
struct ip_service **return_iplist,
TALLOC_CTX *mem_ctx,
struct sockaddr_storage **return_iplist,
int *return_count)
{
int t, i;
char **wins_tags;
struct sockaddr_storage src_ss, *ss_list = NULL;
struct sockaddr_storage src_ss;
struct in_addr src_ip;
NTSTATUS status;

Expand Down Expand Up @@ -1882,8 +1883,8 @@ NTSTATUS resolve_wins(const char *name,
false,
true,
&wins_ss,
talloc_tos(),
&ss_list,
mem_ctx,
return_iplist,
return_count,
NULL);

Expand Down Expand Up @@ -1914,10 +1915,6 @@ NTSTATUS resolve_wins(const char *name,
success:

status = NT_STATUS_OK;
if (!convert_ss2service(return_iplist, ss_list, *return_count))
status = NT_STATUS_INVALID_PARAMETER;

TALLOC_FREE(ss_list);
wins_srv_tags_free(wins_tags);

return status;
Expand Down Expand Up @@ -2314,11 +2311,18 @@ NTSTATUS internal_resolve_name(const char *name,
}
} else if(strequal( tok, "wins")) {
/* don't resolve 1D via WINS */
struct sockaddr_storage *ss_list;
if (name_type != 0x1D) {
status = resolve_wins(name, name_type,
return_iplist,
talloc_tos(),
&ss_list,
return_count);
if (NT_STATUS_IS_OK(status)) {
if (!convert_ss2service(return_iplist,
ss_list,
*return_count)) {
status = NT_STATUS_NO_MEMORY;
}
goto done;
}
}
Expand Down
18 changes: 3 additions & 15 deletions source3/winbindd/winbindd_wins.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,29 +31,17 @@ static struct sockaddr_storage *lookup_byname_backend(TALLOC_CTX *mem_ctx,
const char *name,
int *count)
{
struct ip_service *ret = NULL;
struct sockaddr_storage *return_ss = NULL;
int j, i;
int j;
NTSTATUS status;

*count = 0;

/* always try with wins first */
if (NT_STATUS_IS_OK(resolve_wins(name,0x20,&ret,count))) {
status = resolve_wins(name, 0x20, mem_ctx, &return_ss, count);
if (NT_STATUS_IS_OK(status)) {
if ( *count == 0 )
return NULL;
return_ss = talloc_array(mem_ctx, struct sockaddr_storage,
*count);
if (return_ss == NULL ) {
free( ret );
return NULL;
}

/* copy the IP addresses */
for ( i=0; i<(*count); i++ )
return_ss[i] = ret[i].ss;

free( ret );
return return_ss;
}

Expand Down

0 comments on commit ebf04d7

Please sign in to comment.