The branch, master has been updated
       via  2f339f7... s4:wb_cmd_getdcname.c - fix s4 winbind up regarding the 
new correct "GetAnyDCName" behaviour
       via  2654e34... s4:netr_DsRAddressToSitenames[Ex]W calls - implement 
them correctly with the client site information
       via  bb91afe... Revert "s4:netr_DsRAddressToSitenames[Ex]W calls - 
implement them correctly with the client site information"
       via  581f86b... Revert "s4-netlogon: fixed breakage of 
dcesrv_netr_GetAnyDCName in sites patch"
      from  280d06f... s4-libnet: cope with an empty client site name from CLDAP

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


- Log -----------------------------------------------------------------
commit 2f339f71bd40484959a7008982b243cef0b06bea
Author: Matthias Dieter Wallnöfer <m...@samba.org>
Date:   Mon Apr 26 20:19:36 2010 +0200

    s4:wb_cmd_getdcname.c - fix s4 winbind up regarding the new correct 
"GetAnyDCName" behaviour
    
    We get back "NO_SUCH_DOMAIN" when we query the PDC. This is fine and 
therefore
    we use the "logon_server" variable as "dcname".

commit 2654e34cf092f1ec49e1462b67a10c681da4d3df
Author: Matthias Dieter Wallnöfer <m...@samba.org>
Date:   Tue Apr 13 22:49:48 2010 +0200

    s4:netr_DsRAddressToSitenames[Ex]W calls - implement them correctly with 
the client site information
    
    This behaviour should be similar to the one of Windows Server (in my case 
2008)

commit bb91afe50c2fb1ab8dc102ddef339bd7d46ff84a
Author: Matthias Dieter Wallnöfer <m...@samba.org>
Date:   Tue Apr 27 08:08:42 2010 +0200

    Revert "s4:netr_DsRAddressToSitenames[Ex]W calls - implement them correctly 
with the client site information"
    
    This reverts commit 908d982980846257b65ab576d31131e8793e9399.
    
    I need to merge the improved version of this commit.

commit 581f86ba73b773f08996d473aaf0fad3e94ae2f3
Author: Matthias Dieter Wallnöfer <m...@samba.org>
Date:   Tue Apr 27 08:07:19 2010 +0200

    Revert "s4-netlogon: fixed breakage of dcesrv_netr_GetAnyDCName in sites 
patch"
    
    This reverts commit e88a54a87e185b44e2d216bd853e6a87bf950be6.
    
    This isn't the correct behaviour. See MS-NRPC documentation under the
    "GetAnyDCName" section.

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

Summary of changes:
 source4/rpc_server/netlogon/dcerpc_netlogon.c |   17 ++++++++++++++---
 source4/winbind/wb_cmd_getdcname.c            |    5 +++++
 2 files changed, 19 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c 
b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index 8681e68..a62a2ac 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -1019,6 +1019,12 @@ static WERROR dcesrv_netr_GetAnyDCName(struct 
dcesrv_call_state *dce_call, TALLO
        }
 
        if (strcasecmp(r->in.domainname, lp_workgroup(lp_ctx)) == 0) {
+               /* well we asked for a DC of our own domain */
+               if (samdb_is_pdc(sam_ctx)) {
+                       /* we are the PDC of the specified domain */
+                       return WERR_NO_SUCH_DOMAIN;
+               }
+
                *r->out.dcname = talloc_asprintf(mem_ctx, "\\%s",
                                                lp_netbios_name(lp_ctx));
                W_ERROR_HAVE_NO_MEMORY(*r->out.dcname);
@@ -1665,8 +1671,12 @@ static WERROR 
dcesrv_netr_DsRAddressToSitenamesExW(struct dcesrv_call_state *dce
        struct loadparm_context *lp_ctx = dce_call->conn->dce_ctx->lp_ctx;
        uint16_t sin_family;
        struct sockaddr_in *addr;
+#ifdef HAVE_IPV6
        struct sockaddr_in6 *addr6;
        char addr_str[INET6_ADDRSTRLEN];
+#else
+       char addr_str[INET_ADDRSTRLEN];
+#endif
        char *subnet_name;
        const char *res;
        uint32_t i;
@@ -1706,6 +1716,7 @@ static WERROR dcesrv_netr_DsRAddressToSitenamesExW(struct 
dcesrv_call_state *dce
                        res = inet_ntop(AF_INET, &addr->sin_addr,
                                        addr_str, sizeof(addr_str));
                        break;
+#ifdef HAVE_IPV6
                case AF_INET6:
                        if (r->in.addresses[i].size < sizeof(struct 
sockaddr_in6)) {
                                continue;
@@ -1714,9 +1725,9 @@ static WERROR dcesrv_netr_DsRAddressToSitenamesExW(struct 
dcesrv_call_state *dce
                        res = inet_ntop(AF_INET6, &addr6->sin6_addr,
                                        addr_str, sizeof(addr_str));
                        break;
+#endif
                default:
                        continue;
-               break;
                }
 
                if (res == NULL) {
@@ -1755,8 +1766,6 @@ static WERROR dcesrv_netr_DsRAddressToSitenamesW(struct 
dcesrv_call_state *dce_c
        r2.out.ctr = talloc(mem_ctx, struct netr_DsRAddressToSitenamesExWCtr *);
        W_ERROR_HAVE_NO_MEMORY(r2.out.ctr);
 
-       werr = dcesrv_netr_DsRAddressToSitenamesExW(dce_call, mem_ctx, &r2);
-
        ctr = talloc(mem_ctx, struct netr_DsRAddressToSitenamesWCtr);
        W_ERROR_HAVE_NO_MEMORY(ctr);
 
@@ -1766,6 +1775,8 @@ static WERROR dcesrv_netr_DsRAddressToSitenamesW(struct 
dcesrv_call_state *dce_c
        ctr->sitename = talloc_array(ctr, struct lsa_String, ctr->count);
        W_ERROR_HAVE_NO_MEMORY(ctr->sitename);
 
+       werr = dcesrv_netr_DsRAddressToSitenamesExW(dce_call, mem_ctx, &r2);
+
        for (i=0; i<ctr->count; i++) {
                ctr->sitename[i].string   = (*r2.out.ctr)->sitename[i].string;
        }
diff --git a/source4/winbind/wb_cmd_getdcname.c 
b/source4/winbind/wb_cmd_getdcname.c
index f1398cd..f3c2482 100644
--- a/source4/winbind/wb_cmd_getdcname.c
+++ b/source4/winbind/wb_cmd_getdcname.c
@@ -114,6 +114,11 @@ NTSTATUS wb_cmd_getdcname_recv(struct composite_context *c,
        struct cmd_getdcname_state *state =
                talloc_get_type(c->private_data, struct cmd_getdcname_state);
        NTSTATUS status = composite_wait(c);
+       if (NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_DOMAIN)) {
+               /* special case: queried DC is PDC */
+               state->g.out.dcname = &state->g.in.logon_server;
+               status = NT_STATUS_OK;
+       }
        if (NT_STATUS_IS_OK(status)) {
                const char *p = *(state->g.out.dcname);
                if (*p == '\\') p += 1;


-- 
Samba Shared Repository

Reply via email to