Author: abartlet
Date: 2005-08-03 19:58:58 +0000 (Wed, 03 Aug 2005)
New Revision: 9015

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9015

Log:
Fix access to BUILTIN again.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c     2005-08-03 
19:18:05 UTC (rev 9014)
+++ branches/SAMBA_4_0/source/rpc_server/samr/dcesrv_samr.c     2005-08-03 
19:58:58 UTC (rev 9015)
@@ -271,14 +271,14 @@
                int ret;
                array->entries[i].idx = start_i + i;
                /* try and find the domain */
-               ret = gendb_search(c_state->sam_ctx, mem_ctx, NULL, &ref_msgs, 
ref_attrs, 
+               ret = gendb_search(c_state->sam_ctx, mem_ctx, NULL, 
+                                  &ref_msgs, ref_attrs, 
                                   "(&(objectClass=crossRef)(ncName=%s))", 
-                                  dom_msgs[0]->dn);
+                                  dom_msgs[i]->dn);
                if (ret == 1) {
                        array->entries[i].name.string = 
samdb_result_string(ref_msgs[0], "nETBIOSName", NULL);
                } else {
-                       /* Builtin? If we can't find the reference, punt */
-                       array->entries[i].name.string = 
samdb_result_string(dom_msgs[0], "cn", NULL);
+                       array->entries[i].name.string = 
samdb_result_string(dom_msgs[i], "cn", NULL);
                }
        }
 
@@ -300,7 +300,7 @@
        const char *domain_name;
        struct samr_connect_state *c_state;
        struct samr_domain_state *d_state;
-       const char * const dom_attrs[] = { NULL};
+       const char * const dom_attrs[] = { "cn", NULL};
        const char * const ref_attrs[] = { "nETBIOSName", NULL};
        struct ldb_message **dom_msgs;
        struct ldb_message **ref_msgs;
@@ -318,25 +318,38 @@
 
        ret = gendb_search(c_state->sam_ctx,
                           mem_ctx, NULL, &dom_msgs, dom_attrs,
-                          "(&(objectSid=%s)(objectclass=domain))", 
+                          
"(&(objectSid=%s)(&(objectclass=domain)(!(objectClass=builtinDomain))))",
                           ldap_encode_ndr_dom_sid(mem_ctx, r->in.sid));
-       if (ret != 1) {
-               return NT_STATUS_NO_SUCH_DOMAIN;
-       }
+       if (ret == -1) {
+               return NT_STATUS_INTERNAL_DB_CORRUPTION;
+       } else if (ret == 0) {
+               ret = gendb_search(c_state->sam_ctx,
+                                  mem_ctx, NULL, &dom_msgs, dom_attrs,
+                                  
"(&(objectSid=%s)(objectClass=builtinDomain))", 
+                                  ldap_encode_ndr_dom_sid(mem_ctx, r->in.sid));
+               if (ret != 1) {
+                       return NT_STATUS_NO_SUCH_DOMAIN;
+               }
 
-       ret = gendb_search(c_state->sam_ctx,
-                          mem_ctx, NULL, &ref_msgs, ref_attrs,
-                          
"(&(&(nETBIOSName=*)(objectclass=crossRef))(ncName=%s))", 
-                          dom_msgs[0]->dn);
-       if (ret != 1) {
-               return NT_STATUS_NO_SUCH_DOMAIN;
+               domain_name = ldb_msg_find_string(dom_msgs[0], "cn", NULL);
+               if (domain_name == NULL) {
+                       return NT_STATUS_NO_SUCH_DOMAIN;
+               }
+       } else {
+               ret = gendb_search(c_state->sam_ctx,
+                                  mem_ctx, NULL, &ref_msgs, ref_attrs,
+                                  
"(&(&(nETBIOSName=*)(objectclass=crossRef))(ncName=%s))", 
+                                  dom_msgs[0]->dn);
+               if (ret != 1) {
+                       return NT_STATUS_NO_SUCH_DOMAIN;
+               }
+               
+               domain_name = ldb_msg_find_string(ref_msgs[0], "nETBIOSName", 
NULL);
+               if (domain_name == NULL) {
+                       return NT_STATUS_NO_SUCH_DOMAIN;
+               }
        }
 
-       domain_name = ldb_msg_find_string(ref_msgs[0], "nETBIOSName", NULL);
-       if (domain_name == NULL) {
-               return NT_STATUS_NO_SUCH_DOMAIN;
-       }
-
        d_state = talloc(c_state, struct samr_domain_state);
        if (!d_state) {
                return NT_STATUS_NO_MEMORY;
@@ -406,10 +419,8 @@
                                   struct samr_DomInfo2 *info)
 {
        const char * const dom_attrs[] = { "comment", NULL };
-       const char * const ref_attrs[] = { "nETBIOSName", NULL };
        int ret;
        struct ldb_message **dom_msgs;
-       struct ldb_message **ref_msgs;
        const char *domain_name;
        
        ret = gendb_search_dn(state->sam_ctx, mem_ctx,
@@ -418,15 +429,7 @@
                return NT_STATUS_INTERNAL_DB_CORRUPTION;
        }
 
-       ret = gendb_search(state->sam_ctx,
-                          mem_ctx, NULL, &ref_msgs, ref_attrs,
-                          
"(&(&(nETBIOSName=*)(objectclass=crossRef))(ncName=%s))", 
-                          dom_msgs[0]->dn);
-       if (ret != 1) {
-               return NT_STATUS_NO_SUCH_DOMAIN;
-       }
-
-       domain_name = ldb_msg_find_string(ref_msgs[0], "nETBIOSName", NULL);
+       domain_name = state->domain_name;
        /* where is this supposed to come from? is it settable? */
        info->force_logoff_time = 0x8000000000000000LL;
 

Reply via email to