dsgetdcname: use existing messaging_context if possible.
authorGünther Deschner <gd@samba.org>
Thu, 8 May 2008 16:32:22 +0000 (18:32 +0200)
committerKarolin Seeger <kseeger@samba.org>
Thu, 22 May 2008 18:01:08 +0000 (20:01 +0200)
Guenther
(cherry picked from commit 7889516a384c155a9045aad4409c041fddd0d98d)

source/lib/netapi/getdc.c
source/lib/netapi/joindomain.c
source/libnet/libnet_join.c
source/librpc/gen_ndr/libnet_join.h
source/librpc/idl/libnet_join.idl
source/libsmb/dsgetdcname.c
source/rpc_server/srv_wkssvc_nt.c
source/utils/net_lookup.c
source/winbindd/winbindd_locator.c

index 38aaf0ef85c2ed122ced81b42e9bf6472f37c6a1..c1d021b1d48acfd8273d02a9c761d86f43080baa 100644 (file)
@@ -118,6 +118,7 @@ WERROR DsGetDcName_l(struct libnetapi_ctx *ctx,
        NTSTATUS status;
 
        status = dsgetdcname(ctx,
+                            NULL,
                             r->in.domain_name,
                             r->in.domain_guid,
                             r->in.site_name,
index b7c9fa5acce13235a2d4f3615ac3fc0933c7c00a..66f7cfb13ff8ee7fbc1cd88051eab1d0fbd318a3 100644 (file)
@@ -51,7 +51,7 @@ WERROR NetJoinDomain_l(struct libnetapi_ctx *mem_ctx,
                uint32_t flags = DS_DIRECTORY_SERVICE_REQUIRED |
                                 DS_WRITABLE_REQUIRED |
                                 DS_RETURN_DNS_NAME;
-               status = dsgetdcname(mem_ctx, r->in.domain,
+               status = dsgetdcname(mem_ctx, NULL, r->in.domain,
                                     NULL, NULL, flags, &info);
                if (!NT_STATUS_IS_OK(status)) {
                        libnetapi_set_error_string(mem_ctx,
@@ -180,7 +180,7 @@ WERROR NetUnjoinDomain_l(struct libnetapi_ctx *mem_ctx,
                uint32_t flags = DS_DIRECTORY_SERVICE_REQUIRED |
                                 DS_WRITABLE_REQUIRED |
                                 DS_RETURN_DNS_NAME;
-               status = dsgetdcname(mem_ctx, domain,
+               status = dsgetdcname(mem_ctx, NULL, domain,
                                     NULL, NULL, flags, &info);
                if (!NT_STATUS_IS_OK(status)) {
                        libnetapi_set_error_string(mem_ctx,
@@ -360,7 +360,7 @@ WERROR NetGetJoinableOUs_l(struct libnetapi_ctx *ctx,
        uint32_t flags = DS_DIRECTORY_SERVICE_REQUIRED |
                         DS_RETURN_DNS_NAME;
 
-       status = dsgetdcname(ctx, r->in.domain,
+       status = dsgetdcname(ctx, NULL, r->in.domain,
                             NULL, NULL, flags, &info);
        if (!NT_STATUS_IS_OK(status)) {
                libnetapi_set_error_string(ctx, "%s",
index c073a4ae2e7612f1b4c193ea5a01785fde370aa0..922da0db60b0e9bfcffff43a10962baca141155c 100644 (file)
@@ -1621,6 +1621,7 @@ static WERROR libnet_DomainJoin(TALLOC_CTX *mem_ctx,
                struct netr_DsRGetDCNameInfo *info;
                const char *dc;
                status = dsgetdcname(mem_ctx,
+                                    r->in.msg_ctx,
                                     r->in.domain_name,
                                     NULL,
                                     NULL,
@@ -1777,6 +1778,7 @@ static WERROR libnet_DomainUnjoin(TALLOC_CTX *mem_ctx,
                struct netr_DsRGetDCNameInfo *info;
                const char *dc;
                status = dsgetdcname(mem_ctx,
+                                    r->in.msg_ctx,
                                     r->in.domain_name,
                                     NULL,
                                     NULL,
index 0415f030b451ff5d0c8e33e45e089a9bac534cdd..e5ec438bb5842234cb9d1b553213e5e27bb7f557 100644 (file)
@@ -28,6 +28,7 @@ struct libnet_JoinCtx {
                struct ads_struct *ads;/* [ref] */
                uint8_t debug;
                enum netr_SchannelType secure_channel_type;
+               struct messaging_context *msg_ctx;/* [noprint,ref] */
        } in;
 
        struct {
@@ -59,6 +60,7 @@ struct libnet_UnjoinCtx {
                struct dom_sid *domain_sid;/* [ref] */
                struct ads_struct *ads;/* [ref] */
                uint8_t debug;
+               struct messaging_context *msg_ctx;/* [noprint,ref] */
        } in;
 
        struct {
index 3975d83a808a216e9e786ae2122913f141394d82..7f6e3464556bb7fc789a265337a1cb7a455119d8 100644 (file)
@@ -31,6 +31,7 @@ interface libnetjoin
                [in] ads_struct *ads,
                [in] boolean8 debug,
                [in] netr_SchannelType secure_channel_type,
+               [in,noprint] messaging_context *msg_ctx,
                [out] string account_name,
                [out] string netbios_domain_name,
                [out] string dns_domain_name,
@@ -54,6 +55,7 @@ interface libnetjoin
                [in] dom_sid *domain_sid,
                [in] ads_struct *ads,
                [in] boolean8 debug,
+               [in,noprint] messaging_context *msg_ctx,
                [out] string netbios_domain_name,
                [out] string dns_domain_name,
                [out] boolean8 modified_config,
index 8021f8f054dd74b4ed11a7279e16a06ba87ffc05..d414d24783457823a43f9b3a68d4e2dc89279d45 100644 (file)
@@ -330,6 +330,7 @@ static NTSTATUS store_cldap_reply(TALLOC_CTX *mem_ctx,
 ****************************************************************/
 
 static NTSTATUS dsgetdcname_cache_refresh(TALLOC_CTX *mem_ctx,
+                                         struct messaging_context *msg_ctx,
                                          const char *domain_name,
                                          struct GUID *domain_guid,
                                          uint32_t flags,
@@ -339,6 +340,7 @@ static NTSTATUS dsgetdcname_cache_refresh(TALLOC_CTX *mem_ctx,
        struct netr_DsRGetDCNameInfo *dc_info;
 
        return dsgetdcname(mem_ctx,
+                          msg_ctx,
                           domain_name,
                           domain_guid,
                           site_name,
@@ -494,6 +496,7 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
 ****************************************************************/
 
 static NTSTATUS dsgetdcname_cached(TALLOC_CTX *mem_ctx,
+                                  struct messaging_context *msg_ctx,
                                   const char *domain_name,
                                   struct GUID *domain_guid,
                                   uint32_t flags,
@@ -516,7 +519,8 @@ static NTSTATUS dsgetdcname_cached(TALLOC_CTX *mem_ctx,
        }
 
        if (expired) {
-               status = dsgetdcname_cache_refresh(mem_ctx, domain_name,
+               status = dsgetdcname_cache_refresh(mem_ctx, msg_ctx,
+                                                  domain_name,
                                                   domain_guid, flags,
                                                   site_name, *info);
                if (!NT_STATUS_IS_OK(status)) {
@@ -1119,6 +1123,7 @@ static struct messaging_context *msg_context(TALLOC_CTX *mem_ctx)
 ****************************************************************/
 
 static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx,
+                                  struct messaging_context *msg_ctx,
                                   const char *domain_name,
                                   uint32_t flags,
                                   struct ip_service_name *dclist,
@@ -1132,12 +1137,15 @@ static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx,
        int i;
        const char *dc_name = NULL;
        fstring tmp_dc_name;
-       struct messaging_context *msg_ctx = msg_context(mem_ctx);
        union nbt_cldap_netlogon *r = NULL;
        uint32_t nt_version = NETLOGON_VERSION_1 |
                              NETLOGON_VERSION_5 |
                              NETLOGON_VERSION_5EX_WITH_IP;
 
+       if (!msg_ctx) {
+               msg_ctx = msg_context(mem_ctx);
+       }
+
        if (flags & DS_PDC_REQUIRED) {
                name_type = NBT_NAME_PDC;
        }
@@ -1221,6 +1229,7 @@ static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx,
 ****************************************************************/
 
 static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
+                                      struct messaging_context *msg_ctx,
                                       const char *domain_name,
                                       struct GUID *domain_guid,
                                       uint32_t flags,
@@ -1239,7 +1248,7 @@ static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
                                             &dclist, &num_dcs);
                NT_STATUS_NOT_OK_RETURN(status);
 
-               return process_dc_netbios(mem_ctx, domain_name, flags,
+               return process_dc_netbios(mem_ctx, msg_ctx, domain_name, flags,
                                          dclist, num_dcs, info);
        }
 
@@ -1269,7 +1278,7 @@ static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
                                     &num_dcs);
        NT_STATUS_NOT_OK_RETURN(status);
 
-       return process_dc_netbios(mem_ctx, domain_name, flags, dclist,
+       return process_dc_netbios(mem_ctx, msg_ctx, domain_name, flags, dclist,
                                  num_dcs, info);
 }
 
@@ -1280,6 +1289,7 @@ static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
 ********************************************************************/
 
 NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
+                    struct messaging_context *msg_ctx,
                     const char *domain_name,
                     struct GUID *domain_guid,
                     const char *site_name,
@@ -1306,7 +1316,7 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
                goto rediscover;
        }
 
-       status = dsgetdcname_cached(mem_ctx, domain_name, domain_guid,
+       status = dsgetdcname_cached(mem_ctx, msg_ctx, domain_name, domain_guid,
                                    flags, site_name, &myinfo);
        if (NT_STATUS_IS_OK(status)) {
                *info = myinfo;
@@ -1318,7 +1328,7 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
        }
 
  rediscover:
-       status = dsgetdcname_rediscover(mem_ctx, domain_name,
+       status = dsgetdcname_rediscover(mem_ctx, msg_ctx, domain_name,
                                        domain_guid, flags, site_name,
                                        &myinfo);
 
index 3c006fd65543df538feb540e10963c95819c655d..3c64abfcdf26a5b87ca7f50e44ee52977afab877 100644 (file)
@@ -341,6 +341,7 @@ WERROR _wkssvc_NetrJoinDomain2(pipes_struct *p,
        j->in.admin_password    = cleartext_pwd;
        j->in.debug             = true;
        j->in.modify_config     = lp_config_backend_is_registry();
+       j->in.msg_ctx           = smbd_messaging_context();
 
        become_root();
        werr = libnet_Join(p->mem_ctx, j);
@@ -407,6 +408,7 @@ WERROR _wkssvc_NetrUnjoinDomain2(pipes_struct *p,
        u->in.admin_password    = cleartext_pwd;
        u->in.debug             = true;
        u->in.modify_config     = lp_config_backend_is_registry();
+       u->in.msg_ctx           = smbd_messaging_context();
 
        become_root();
        werr = libnet_Unjoin(p->mem_ctx, u);
index e5d83bc8912a2dfadba6317ef15b52f04c1502be..ba4e32ae84ef04b504dd701dfc1c2a37b283a3c5 100644 (file)
@@ -402,7 +402,7 @@ static int net_lookup_dsgetdcname(int argc, const char **argv)
                site_name = sitename_fetch(domain_name);
        }
 
-       status = dsgetdcname(mem_ctx, domain_name, NULL, site_name,
+       status = dsgetdcname(mem_ctx, NULL, domain_name, NULL, site_name,
                             flags, &info);
        if (!NT_STATUS_IS_OK(status)) {
                d_printf("failed with: %s\n", nt_errstr(status));
index f154f36c8518450ca8727f9cee10976f023ae86b..709fbcc5d158306a3522a69322751efdaff4e7c2 100644 (file)
@@ -67,7 +67,8 @@ static enum winbindd_result dual_dsgetdcname(struct winbindd_domain *domain,
        DEBUG(3, ("[%5lu]: dsgetdcname for %s\n", (unsigned long)state->pid,
                  state->request.domain_name));
 
-       result = dsgetdcname(state->mem_ctx, state->request.domain_name,
+       result = dsgetdcname(state->mem_ctx, winbind_messaging_context(),
+                            state->request.domain_name,
                             NULL, NULL, state->request.flags, &info);
 
        if (!NT_STATUS_IS_OK(result)) {