Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/libcli/resolve/resolve.c

    r414 r745  
    2828#include "lib/socket/socket.h"
    2929#include "../lib/util/dlinklist.h"
     30#include "lib/tsocket/tsocket.h"
     31#include "lib/util/util_net.h"
    3032
    3133struct resolve_state {
     
    138140struct composite_context *resolve_name_all_send(struct resolve_context *ctx,
    139141                                                TALLOC_CTX *mem_ctx,
    140                                                 uint32_t flags,
     142                                                uint32_t flags, /* RESOLVE_NAME_FLAG_* */
    141143                                                uint16_t port,
    142144                                                struct nbt_name *name,
     
    146148        struct resolve_state *state;
    147149
    148         if (ctx == NULL || event_ctx == NULL) {
     150        if (event_ctx == NULL) {
    149151                return NULL;
    150152        }
     
    222224}
    223225
     226struct composite_context *resolve_name_ex_send(struct resolve_context *ctx,
     227                                               TALLOC_CTX *mem_ctx,
     228                                               uint32_t flags, /* RESOLVE_NAME_FLAG_* */
     229                                               uint16_t port,
     230                                               struct nbt_name *name,
     231                                               struct tevent_context *event_ctx)
     232{
     233        return resolve_name_all_send(ctx, mem_ctx, flags, port, name, event_ctx);
     234}
     235
    224236struct composite_context *resolve_name_send(struct resolve_context *ctx,
    225237                                            TALLOC_CTX *mem_ctx,
     
    227239                                            struct tevent_context *event_ctx)
    228240{
    229         return resolve_name_all_send(ctx, mem_ctx, 0, 0, name, event_ctx);
     241        return resolve_name_ex_send(ctx, mem_ctx, 0, 0, name, event_ctx);
    230242}
    231243
     
    240252
    241253        if (NT_STATUS_IS_OK(status)) {
    242                 *reply_addr = talloc_steal(mem_ctx, addrs[0]->addr);
     254                struct tsocket_address *t_addr = socket_address_to_tsocket_address(addrs, addrs[0]);
     255                if (!t_addr) {
     256                        return NT_STATUS_NO_MEMORY;
     257                }
     258
     259                *reply_addr = tsocket_address_inet_addr_string(t_addr, mem_ctx);
    243260                talloc_free(addrs);
     261                if (!*reply_addr) {
     262                        return NT_STATUS_NO_MEMORY;
     263                }
    244264        }
    245265
     
    248268
    249269/*
     270  receive multiple responses from resolve_name_send()
     271 */
     272NTSTATUS resolve_name_multiple_recv(struct composite_context *c,
     273                                    TALLOC_CTX *mem_ctx,
     274                                    const char ***reply_addrs)
     275{
     276        NTSTATUS status;
     277        struct socket_address **addrs = NULL;
     278        int i;
     279
     280        status = resolve_name_all_recv(c, mem_ctx, &addrs, NULL);
     281        NT_STATUS_NOT_OK_RETURN(status);
     282
     283        /* count the addresses */
     284        for (i=0; addrs[i]; i++) ;
     285
     286        *reply_addrs = talloc_array(mem_ctx, const char *, i+1);
     287        NT_STATUS_HAVE_NO_MEMORY(*reply_addrs);
     288
     289        for (i=0; addrs[i]; i++) {
     290                struct tsocket_address *t_addr = socket_address_to_tsocket_address(addrs, addrs[i]);
     291                NT_STATUS_HAVE_NO_MEMORY(t_addr);
     292
     293                (*reply_addrs)[i] = tsocket_address_inet_addr_string(t_addr, *reply_addrs);
     294                NT_STATUS_HAVE_NO_MEMORY((*reply_addrs)[i]);
     295        }
     296        (*reply_addrs)[i] = NULL;
     297
     298        talloc_free(addrs);
     299
     300        return status;
     301}
     302
     303/*
    250304  general name resolution - sync call
    251305 */
     306NTSTATUS resolve_name_ex(struct resolve_context *ctx,
     307                         uint32_t flags, /* RESOLVE_NAME_FLAG_* */
     308                         uint16_t port,
     309                         struct nbt_name *name,
     310                         TALLOC_CTX *mem_ctx,
     311                         const char **reply_addr,
     312                         struct tevent_context *ev)
     313{
     314        struct composite_context *c = resolve_name_ex_send(ctx, mem_ctx, flags, port, name, ev);
     315        return resolve_name_recv(c, mem_ctx, reply_addr);
     316}
     317
     318
     319/*
     320  general name resolution - sync call
     321 */
    252322NTSTATUS resolve_name(struct resolve_context *ctx,
    253                           struct nbt_name *name,
    254                           TALLOC_CTX *mem_ctx,
    255                           const char **reply_addr,
    256                           struct tevent_context *ev)
    257 {
    258         struct composite_context *c = resolve_name_send(ctx, mem_ctx, name, ev);
    259         return resolve_name_recv(c, mem_ctx, reply_addr);
     323                      struct nbt_name *name,
     324                      TALLOC_CTX *mem_ctx,
     325                      const char **reply_addr,
     326                      struct tevent_context *ev)
     327{
     328        return resolve_name_ex(ctx, 0, 0, name, mem_ctx, reply_addr, ev);
    260329}
    261330
Note: See TracChangeset for help on using the changeset viewer.