svn commit: samba r22104 - in branches: SAMBA_3_0/source/include
SAMBA_3_0/source/rpc_parse SAMBA_3_0/source/rpc_server
SAMBA_3_0_25/source/include SAMBA_3_0_25/source/rpc_parse
SAMBA_3_0_25/source/rpc_server
jerry at samba.org
jerry at samba.org
Fri Apr 6 18:52:30 GMT 2007
Author: jerry
Date: 2007-04-06 18:52:30 +0000 (Fri, 06 Apr 2007)
New Revision: 22104
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22104
Log:
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)
Modified:
branches/SAMBA_3_0/source/include/rpc_ds.h
branches/SAMBA_3_0/source/rpc_parse/parse_ds.c
branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds.c
branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds_nt.c
branches/SAMBA_3_0_25/source/include/rpc_ds.h
branches/SAMBA_3_0_25/source/rpc_parse/parse_ds.c
branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds.c
branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds_nt.c
Changeset:
Modified: branches/SAMBA_3_0/source/include/rpc_ds.h
===================================================================
--- branches/SAMBA_3_0/source/include/rpc_ds.h 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0/source/include/rpc_ds.h 2007-04-06 18:52:30 UTC (rev 22104)
@@ -44,6 +44,7 @@
/* machine role */
+#define DSROLE_DOMAIN_MEMBER_WKS 1
#define DSROLE_STANDALONE_SRV 2
#define DSROLE_DOMAIN_MEMBER_SRV 3
#define DSROLE_BDC 4
@@ -60,18 +61,13 @@
typedef struct
{
uint16 machine_role;
- uint16 unknown; /* 0x6173 -- maybe just alignment? */
-
- uint32 flags;
-
+ uint32 flags;
uint32 netbios_ptr;
uint32 dnsname_ptr;
uint32 forestname_ptr;
- struct GUID domain_guid;
-
+ struct GUID domain_guid;
UNISTR2 netbios_domain;
-
UNISTR2 dns_domain; /* our dns domain */
UNISTR2 forest_domain; /* root domain of the forest to which we belong */
} DSROLE_PRIMARY_DOMAIN_INFO_BASIC;
Modified: branches/SAMBA_3_0/source/rpc_parse/parse_ds.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_parse/parse_ds.c 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0/source/rpc_parse/parse_ds.c 2007-04-06 18:52:30 UTC (rev 22104)
@@ -37,7 +37,7 @@
if ( !prs_uint16("machine_role", ps, depth, &p->machine_role) )
return False;
- if ( !prs_uint16("unknown", ps, depth, &p->unknown) )
+ if ( !prs_align(ps) )
return False;
if ( !prs_uint32("flags", ps, depth, &p->flags) )
Modified: branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds.c 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds.c 2007-04-06 18:52:30 UTC (rev 22104)
@@ -25,9 +25,7 @@
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_RPC_SRV
-#if 0 /* disabled */
/*******************************************************************
- api_reg_open_entry
********************************************************************/
static BOOL api_dsrole_get_primary_dominfo(pipes_struct *p)
@@ -41,18 +39,17 @@
ZERO_STRUCT(r_u);
/* grab the request */
- if ( !ds_io_q_getprimdominfo("", data, 0, &q_u) )
+ if ( !ds_io_q_getprimdominfo("", &q_u, data, 0) )
return False;
/* construct reply. */
r_u.status = _dsrole_get_primary_dominfo( p, &q_u, &r_u );
- if ( !ds_io_r_getprimdominfo("", rdata, 0, &r_u) )
+ if ( !ds_io_r_getprimdominfo("", &r_u, rdata, 0) )
return False;
return True;
}
-#endif
/*******************************************************************
stub functions for unimplemented RPC
@@ -70,12 +67,8 @@
array of \PIPE\lsass (new windows 2000 UUID) operations
********************************************************************/
static struct api_struct api_lsa_ds_cmds[] = {
- { "DS_NOP", DS_NOP, api_dsrole_stub }
-
-#if 0 /* disabled due to breakage with viewing domain users and groups
- on a Samba PDC from win2k clients --jerry CIFS 2003 */
+ { "DS_NOP", DS_NOP, api_dsrole_stub },
{ "DS_GETPRIMDOMINFO", DS_GETPRIMDOMINFO, api_dsrole_get_primary_dominfo }
-#endif
};
Modified: branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds_nt.c 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0/source/rpc_server/srv_lsa_ds_nt.c 2007-04-06 18:52:30 UTC (rev 22104)
@@ -46,49 +46,54 @@
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;
Modified: branches/SAMBA_3_0_25/source/include/rpc_ds.h
===================================================================
--- branches/SAMBA_3_0_25/source/include/rpc_ds.h 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0_25/source/include/rpc_ds.h 2007-04-06 18:52:30 UTC (rev 22104)
@@ -44,6 +44,7 @@
/* machine role */
+#define DSROLE_DOMAIN_MEMBER_WKS 1
#define DSROLE_STANDALONE_SRV 2
#define DSROLE_DOMAIN_MEMBER_SRV 3
#define DSROLE_BDC 4
@@ -60,18 +61,13 @@
typedef struct
{
uint16 machine_role;
- uint16 unknown; /* 0x6173 -- maybe just alignment? */
-
- uint32 flags;
-
+ uint32 flags;
uint32 netbios_ptr;
uint32 dnsname_ptr;
uint32 forestname_ptr;
- struct GUID domain_guid;
-
+ struct GUID domain_guid;
UNISTR2 netbios_domain;
-
UNISTR2 dns_domain; /* our dns domain */
UNISTR2 forest_domain; /* root domain of the forest to which we belong */
} DSROLE_PRIMARY_DOMAIN_INFO_BASIC;
Modified: branches/SAMBA_3_0_25/source/rpc_parse/parse_ds.c
===================================================================
--- branches/SAMBA_3_0_25/source/rpc_parse/parse_ds.c 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0_25/source/rpc_parse/parse_ds.c 2007-04-06 18:52:30 UTC (rev 22104)
@@ -37,7 +37,7 @@
if ( !prs_uint16("machine_role", ps, depth, &p->machine_role) )
return False;
- if ( !prs_uint16("unknown", ps, depth, &p->unknown) )
+ if ( !prs_align(ps) )
return False;
if ( !prs_uint32("flags", ps, depth, &p->flags) )
Modified: branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds.c
===================================================================
--- branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds.c 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds.c 2007-04-06 18:52:30 UTC (rev 22104)
@@ -25,9 +25,7 @@
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_RPC_SRV
-#if 0 /* disabled */
/*******************************************************************
- api_reg_open_entry
********************************************************************/
static BOOL api_dsrole_get_primary_dominfo(pipes_struct *p)
@@ -41,18 +39,17 @@
ZERO_STRUCT(r_u);
/* grab the request */
- if ( !ds_io_q_getprimdominfo("", data, 0, &q_u) )
+ if ( !ds_io_q_getprimdominfo("", &q_u, data, 0) )
return False;
/* construct reply. */
r_u.status = _dsrole_get_primary_dominfo( p, &q_u, &r_u );
- if ( !ds_io_r_getprimdominfo("", rdata, 0, &r_u) )
+ if ( !ds_io_r_getprimdominfo("", &r_u, rdata, 0) )
return False;
return True;
}
-#endif
/*******************************************************************
stub functions for unimplemented RPC
@@ -70,12 +67,8 @@
array of \PIPE\lsass (new windows 2000 UUID) operations
********************************************************************/
static struct api_struct api_lsa_ds_cmds[] = {
- { "DS_NOP", DS_NOP, api_dsrole_stub }
-
-#if 0 /* disabled due to breakage with viewing domain users and groups
- on a Samba PDC from win2k clients --jerry CIFS 2003 */
+ { "DS_NOP", DS_NOP, api_dsrole_stub },
{ "DS_GETPRIMDOMINFO", DS_GETPRIMDOMINFO, api_dsrole_get_primary_dominfo }
-#endif
};
Modified: branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds_nt.c
===================================================================
--- branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds_nt.c 2007-04-06 16:42:37 UTC (rev 22103)
+++ branches/SAMBA_3_0_25/source/rpc_server/srv_lsa_ds_nt.c 2007-04-06 18:52:30 UTC (rev 22104)
@@ -46,49 +46,54 @@
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;
More information about the samba-cvs
mailing list