The branch, master has been updated
       via  59887ed s3: Remove unused name_queries
       via  809e5ea s3: Fix some type-punned warnings
       via  f811e89 s3: Add name_resolve_bcast_send/recv
      from  bc3261f s3: Fix a memleak in name_resolve_bcast

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 59887edd1d8ea1baefa3c884a80eafdb9691f095
Author: Volker Lendecke <[email protected]>
Date:   Sun Jun 19 13:06:11 2011 +0200

    s3: Remove unused name_queries
    
    Autobuild-User: Volker Lendecke <[email protected]>
    Autobuild-Date: Sun Jun 19 15:14:38 CEST 2011 on sn-devel-104

commit 809e5ea5ba0b78663b495e34dea45bb9add75f18
Author: Volker Lendecke <[email protected]>
Date:   Sun Jun 19 13:06:00 2011 +0200

    s3: Fix some type-punned warnings

commit f811e894c42fc829d6fb82ba6f7316a9d852d85c
Author: Volker Lendecke <[email protected]>
Date:   Sun Jun 19 13:05:29 2011 +0200

    s3: Add name_resolve_bcast_send/recv

-----------------------------------------------------------------------

Summary of changes:
 source3/include/proto.h    |    7 ++
 source3/libsmb/namequery.c |  166 ++++++++++++++++++++++++++++----------------
 2 files changed, 112 insertions(+), 61 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 98445d8..aa99d1c 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1044,6 +1044,13 @@ NTSTATUS name_query(const char *name, int name_type,
                    TALLOC_CTX *mem_ctx,
                    struct sockaddr_storage **addrs,
                    int *num_addrs, uint8_t *flags);
+struct tevent_req *name_resolve_bcast_send(TALLOC_CTX *mem_ctx,
+                                          struct tevent_context *ev,
+                                          const char *name,
+                                          int name_type);
+NTSTATUS name_resolve_bcast_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                                struct sockaddr_storage **addrs,
+                                int *num_addrs);
 NTSTATUS name_resolve_bcast(const char *name,
                        int name_type,
                        TALLOC_CTX *mem_ctx,
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index 988840a..8d84374 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -1099,7 +1099,8 @@ static int remove_duplicate_addrs2(struct ip_service 
*iplist, int count )
                }
 
                for ( j=i+1; j<count; j++ ) {
-                       if (sockaddr_equal((struct sockaddr *)&iplist[i].ss, 
(struct sockaddr *)&iplist[j].ss) &&
+                       if (sockaddr_equal((struct sockaddr *)(void 
*)&iplist[i].ss,
+                                          (struct sockaddr *)(void 
*)&iplist[j].ss) &&
                                        iplist[i].port == iplist[j].port) {
                                zero_sockaddr(&iplist[j].ss);
                        }
@@ -1352,8 +1353,8 @@ static bool name_query_validator(struct packet_struct *p, 
void *private_data)
 
                for (j=0; j<state->num_addrs; j++) {
                        if (sockaddr_equal(
-                                   (struct sockaddr *)&addr,
-                                   (struct sockaddr *)&state->addrs[j])) {
+                                   (struct sockaddr *)(void *)&addr,
+                                   (struct sockaddr *)(void 
*)&state->addrs[j])) {
                                break;
                        }
                }
@@ -1722,72 +1723,51 @@ static NTSTATUS name_queries_recv(struct tevent_req 
*req, TALLOC_CTX *mem_ctx,
        return NT_STATUS_OK;
 }
 
-static NTSTATUS name_queries(const char *name, int name_type,
-                            bool bcast, bool recurse,
-                            const struct sockaddr_storage *addrs,
-                            int num_addrs, int wait_msec, int timeout_msec,
-                            TALLOC_CTX *mem_ctx,
-                            struct sockaddr_storage **result_addrs,
-                            int *num_result_addrs, uint8_t *flags,
-                            int *received_index)
-{
-       TALLOC_CTX *frame = talloc_stackframe();
-       struct event_context *ev;
-       struct tevent_req *req;
-       NTSTATUS status = NT_STATUS_NO_MEMORY;
-
-       ev = event_context_init(frame);
-       if (ev == NULL) {
-               goto fail;
-       }
-       req = name_queries_send(frame, ev, name, name_type, bcast,
-                               recurse, addrs, num_addrs, wait_msec,
-                               timeout_msec);
-       if (req == NULL) {
-               goto fail;
-       }
-       if (!tevent_req_poll_ntstatus(req, ev, &status)) {
-               goto fail;
-       }
-       status = name_queries_recv(req, mem_ctx, result_addrs,
-                                  num_result_addrs, flags, received_index);
- fail:
-       TALLOC_FREE(frame);
-       return status;
-}
-
 /********************************************************
  Resolve via "bcast" method.
 *********************************************************/
 
-NTSTATUS name_resolve_bcast(const char *name,
-                       int name_type,
-                       TALLOC_CTX *mem_ctx,
-                       struct sockaddr_storage **return_iplist,
-                       int *return_count)
+struct name_resolve_bcast_state {
+       struct sockaddr_storage *addrs;
+       int num_addrs;
+};
+
+static void name_resolve_bcast_done(struct tevent_req *subreq);
+
+struct tevent_req *name_resolve_bcast_send(TALLOC_CTX *mem_ctx,
+                                          struct tevent_context *ev,
+                                          const char *name,
+                                          int name_type)
 {
+       struct tevent_req *req, *subreq;
+       struct name_resolve_bcast_state *state;
        struct sockaddr_storage *bcast_addrs;
        int i, num_addrs, num_bcast_addrs;
-       NTSTATUS status;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct name_resolve_bcast_state);
+       if (req == NULL) {
+               return NULL;
+       }
 
        if (lp_disable_netbios()) {
-               DEBUG(5,("name_resolve_bcast(%s#%02x): netbios is disabled\n",
-                                       name, name_type));
-               return NT_STATUS_INVALID_PARAMETER;
+               DEBUG(5, ("name_resolve_bcast(%s#%02x): netbios is disabled\n",
+                         name, name_type));
+               tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
+               return tevent_req_post(req, ev);
        }
 
        /*
         * "bcast" means do a broadcast lookup on all the local interfaces.
         */
 
-       DEBUG(3,("name_resolve_bcast: Attempting broadcast lookup "
-               "for name %s<0x%x>\n", name, name_type));
+       DEBUG(3, ("name_resolve_bcast: Attempting broadcast lookup "
+                 "for name %s<0x%x>\n", name, name_type));
 
        num_addrs = iface_count();
-       bcast_addrs = talloc_array(talloc_tos(), struct sockaddr_storage,
-                                  num_addrs);
-       if (bcast_addrs == NULL) {
-               return NT_STATUS_NO_MEMORY;
+       bcast_addrs = talloc_array(state, struct sockaddr_storage, num_addrs);
+       if (tevent_req_nomem(bcast_addrs, req)) {
+               return tevent_req_post(req, ev);
        }
 
        /*
@@ -1806,11 +1786,75 @@ NTSTATUS name_resolve_bcast(const char *name,
                num_bcast_addrs += 1;
        }
 
-       status = name_queries(name, name_type, true, true,
-                             bcast_addrs, num_bcast_addrs, 0, 1000,
-                             mem_ctx, return_iplist, return_count,
-                             NULL, NULL);
-       TALLOC_FREE(bcast_addrs);
+       subreq = name_queries_send(state, ev, name, name_type, true, true,
+                                  bcast_addrs, num_bcast_addrs, 0, 1000);
+       if (tevent_req_nomem(subreq, req)) {
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq, name_resolve_bcast_done, req);
+       return req;
+}
+
+static void name_resolve_bcast_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct name_resolve_bcast_state *state = tevent_req_data(
+               req, struct name_resolve_bcast_state);
+       NTSTATUS status;
+
+       status = name_queries_recv(subreq, state,
+                                  &state->addrs, &state->num_addrs,
+                                  NULL, NULL);
+       TALLOC_FREE(subreq);
+       if (tevent_req_nterror(req, status)) {
+               return;
+       }
+       tevent_req_done(req);
+}
+
+NTSTATUS name_resolve_bcast_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+                                struct sockaddr_storage **addrs,
+                                int *num_addrs)
+{
+       struct name_resolve_bcast_state *state = tevent_req_data(
+               req, struct name_resolve_bcast_state);
+       NTSTATUS status;
+
+       if (tevent_req_is_nterror(req, &status)) {
+               return status;
+       }
+       *addrs = talloc_move(mem_ctx, &state->addrs);
+       *num_addrs = state->num_addrs;
+       return NT_STATUS_OK;
+}
+
+NTSTATUS name_resolve_bcast(const char *name,
+                       int name_type,
+                       TALLOC_CTX *mem_ctx,
+                       struct sockaddr_storage **return_iplist,
+                       int *return_count)
+{
+       TALLOC_CTX *frame = talloc_stackframe();
+       struct event_context *ev;
+       struct tevent_req *req;
+       NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+       ev = event_context_init(frame);
+       if (ev == NULL) {
+               goto fail;
+       }
+       req = name_resolve_bcast_send(frame, ev, name, name_type);
+       if (req == NULL) {
+               goto fail;
+       }
+       if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+               goto fail;
+       }
+       status = name_resolve_bcast_recv(req, mem_ctx, return_iplist,
+                                        return_count);
+ fail:
+       TALLOC_FREE(frame);
        return status;
 }
 
@@ -2670,7 +2714,7 @@ bool resolve_name(const char *name,
                if (prefer_ipv4) {
                        for (i=0; i<count; i++) {
                                if (!is_zero_addr(&ss_list[i].ss) &&
-                                               !is_broadcast_addr((struct 
sockaddr *)&ss_list[i].ss) &&
+                                   !is_broadcast_addr((struct sockaddr *)(void 
*)&ss_list[i].ss) &&
                                                (ss_list[i].ss.ss_family == 
AF_INET)) {
                                        *return_ss = ss_list[i].ss;
                                        SAFE_FREE(ss_list);
@@ -2683,7 +2727,7 @@ bool resolve_name(const char *name,
                /* only return valid addresses for TCP connections */
                for (i=0; i<count; i++) {
                        if (!is_zero_addr(&ss_list[i].ss) &&
-                                       !is_broadcast_addr((struct sockaddr 
*)&ss_list[i].ss)) {
+                           !is_broadcast_addr((struct sockaddr *)(void 
*)&ss_list[i].ss)) {
                                *return_ss = ss_list[i].ss;
                                SAFE_FREE(ss_list);
                                SAFE_FREE(sitename);
@@ -2747,7 +2791,7 @@ NTSTATUS resolve_name_list(TALLOC_CTX *ctx,
        /* only return valid addresses for TCP connections */
        for (i=0, num_entries = 0; i<count; i++) {
                if (!is_zero_addr(&ss_list[i].ss) &&
-                               !is_broadcast_addr((struct sockaddr 
*)&ss_list[i].ss)) {
+                   !is_broadcast_addr((struct sockaddr *)(void 
*)&ss_list[i].ss)) {
                        num_entries++;
                }
        }
@@ -2766,7 +2810,7 @@ NTSTATUS resolve_name_list(TALLOC_CTX *ctx,
 
        for (i=0, num_entries = 0; i<count; i++) {
                if (!is_zero_addr(&ss_list[i].ss) &&
-                               !is_broadcast_addr((struct sockaddr 
*)&ss_list[i].ss)) {
+                   !is_broadcast_addr((struct sockaddr *)(void 
*)&ss_list[i].ss)) {
                        (*return_ss_arr)[num_entries++] = ss_list[i].ss;
                }
        }


-- 
Samba Shared Repository

Reply via email to