From a1e72969d571d6b12f4cfa8c6dc16d7d982daa51 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 6 Apr 2007 18:52:30 +0000 Subject: r22104: BUG 4439: Fix the object picket on x64 WIndopws XP/2003. Enable the DsRoleGetPrimaryDomainInfo() server code. Tested by Win2000/XP/2003/Vista (x86) and WinXP (x64) (This used to be commit eab9ca7e7d8d7dc3e705720f8bc5dff5c8ec5f5f) --- source3/rpc_server/srv_lsa_ds_nt.c | 49 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 22 deletions(-) (limited to 'source3/rpc_server/srv_lsa_ds_nt.c') diff --git a/source3/rpc_server/srv_lsa_ds_nt.c b/source3/rpc_server/srv_lsa_ds_nt.c index b410af8ded..844a20eed4 100644 --- a/source3/rpc_server/srv_lsa_ds_nt.c +++ b/source3/rpc_server/srv_lsa_ds_nt.c @@ -46,49 +46,54 @@ static NTSTATUS fill_dsrole_dominfo_basic(TALLOC_CTX *ctx, DSROLE_PRIMARY_DOMAIN return NT_STATUS_NO_MEMORY; } - get_mydnsdomname(dnsdomain); - strlower_m(dnsdomain); - switch ( lp_server_role() ) { case ROLE_STANDALONE: basic->machine_role = DSROLE_STANDALONE_SRV; + basic->netbios_ptr = 1; + netbios_domain = get_global_sam_name(); break; case ROLE_DOMAIN_MEMBER: + basic->netbios_ptr = 1; + netbios_domain = lp_workgroup(); basic->machine_role = DSROLE_DOMAIN_MEMBER_SRV; break; case ROLE_DOMAIN_BDC: + basic->netbios_ptr = 1; + netbios_domain = get_global_sam_name(); basic->machine_role = DSROLE_BDC; - basic->flags = DSROLE_PRIMARY_DS_RUNNING|DSROLE_PRIMARY_DS_MIXED_MODE; - if ( secrets_fetch_domain_guid( lp_workgroup(), &basic->domain_guid ) ) - basic->flags |= DSROLE_PRIMARY_DOMAIN_GUID_PRESENT; break; case ROLE_DOMAIN_PDC: + basic->netbios_ptr = 1; + netbios_domain = get_global_sam_name(); basic->machine_role = DSROLE_PDC; - basic->flags = DSROLE_PRIMARY_DS_RUNNING|DSROLE_PRIMARY_DS_MIXED_MODE; - if ( secrets_fetch_domain_guid( lp_workgroup(), &basic->domain_guid ) ) - basic->flags |= DSROLE_PRIMARY_DOMAIN_GUID_PRESENT; break; } - basic->unknown = 0x6173; /* seen on the wire; maybe padding */ - /* always set netbios name */ - basic->netbios_ptr = 1; - netbios_domain = get_global_sam_name(); - init_unistr2( &basic->netbios_domain, netbios_domain, UNI_FLAGS_NONE); + init_unistr2( &basic->netbios_domain, netbios_domain, UNI_STR_TERMINATE); - basic->dnsname_ptr = 1; - init_unistr2( &basic->dns_domain, dnsdomain, UNI_FLAGS_NONE); - basic->forestname_ptr = 1; - init_unistr2( &basic->forest_domain, dnsdomain, UNI_FLAGS_NONE); - + if ( secrets_fetch_domain_guid( lp_workgroup(), &basic->domain_guid ) ) + basic->flags |= DSROLE_PRIMARY_DOMAIN_GUID_PRESENT; /* fill in some additional fields if we are a member of an AD domain */ - if ( lp_security() == SEC_ADS ) { - /* TODO */ - ;; + if ( lp_security() == SEC_ADS ) { + fstrcpy( dnsdomain, lp_realm() ); + strlower_m( dnsdomain ); + + basic->dnsname_ptr = 1; + init_unistr2( &basic->dns_domain, dnsdomain, UNI_STR_TERMINATE); + basic->forestname_ptr = 1; + init_unistr2( &basic->forest_domain, dnsdomain, UNI_STR_TERMINATE); + } else { + get_mydnsdomname(dnsdomain); + strlower_m(dnsdomain); + + basic->dnsname_ptr = 1; + init_unistr2( &basic->dns_domain, dnsdomain, UNI_FLAGS_NONE); + basic->forestname_ptr = 1; + init_unistr2( &basic->forest_domain, dnsdomain, UNI_FLAGS_NONE); } *info = basic; -- cgit