libnet_become_dc.c

来自「samba最新软件」· C语言 代码 · 共 2,239 行 · 第 1/5 页

C
2,239
字号
/*   Unix SMB/CIFS implementation.   Copyright (C) Stefan Metzmacher <metze@samba.org> 2006   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 3 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program.  If not, see <http://www.gnu.org/licenses/>.*/#include "includes.h"#include "libnet/libnet.h"#include "libcli/composite/composite.h"#include "libcli/cldap/cldap.h"#include "lib/ldb/include/ldb.h"#include "lib/ldb/include/ldb_errors.h"#include "lib/ldb_wrap.h"#include "dsdb/samdb/samdb.h"#include "dsdb/common/flags.h"#include "librpc/gen_ndr/ndr_drsuapi_c.h"#include "libcli/security/security.h"#include "librpc/gen_ndr/ndr_misc.h"#include "librpc/gen_ndr/ndr_security.h"#include "librpc/gen_ndr/ndr_nbt.h"#include "librpc/gen_ndr/ndr_drsuapi.h"#include "auth/gensec/gensec.h"#include "param/param.h"/***************************************************************************** * Windows 2003 (w2k3) does the following steps when changing the server role * from domain member to domain controller * * We mostly do the same. *****************************************************************************//* * lookup DC: * - using nbt name<1C> request and a samlogon mailslot request * or * - using a DNS SRV _ldap._tcp.dc._msdcs. request and a CLDAP netlogon request * * see: becomeDC_recv_cldap() and becomeDC_send_cldap() *//* * Open 1st LDAP connection to the DC using admin credentials * * see: becomeDC_connect_ldap1() and becomeDC_ldap_connect() *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_rootdse() * * Request: *	basedn:	"" *	scope:	base *	filter:	(objectClass=*) *	attrs:	* * Result: *      "" *		currentTime:		20061202155100.0Z *		subschemaSubentry:	CN=Aggregate,CN=Schema,CN=Configuration,<domain_partition> *		dsServiceName:		CN=<netbios_name>,CN=Servers,CN=<site_name>,CN=Sites,CN=Configuration,<domain_partition> *		namingContexts:		<domain_partition> *					CN=Configuration,<domain_partition> *					CN=Schema,CN=Configuration,<domain_partition> *		defaultNamingContext:	<domain_partition> *		schemaNamingContext:	CN=Schema,CN=Configuration,<domain_partition> *		configurationNamingContext:CN=Configuration,<domain_partition> *		rootDomainNamingContext:<domain_partition> *		supportedControl:	... *		supportedLDAPVersion:	3 *					2 *		supportedLDAPPolicies:	... *		highestCommitedUSN:	... *		supportedSASLMechanisms:GSSAPI *					GSS-SPNEGO *					EXTERNAL *					DIGEST-MD5 *		dnsHostName:		<dns_host_name> *		ldapServiceName:	<domain_dns_name>:<netbios_name>$@<REALM> *		serverName:		CN=Servers,CN=<site_name>,CN=Sites,CN=Configuration,<domain_partition> *		supportedCapabilities:	... *		isSyncronized:		TRUE *		isGlobalCatalogReady:	TRUE *		domainFunctionality:	0 *		forestFunctionality:	0 *		domainControllerFunctionality: 2 *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_crossref_behavior_version() * * Request: *	basedn:	CN=Configuration,<domain_partition> *	scope:	one *	filter:	(cn=Partitions) *	attrs:	msDS-Behavior-Version * Result: *      CN=Partitions,CN=Configuration,<domain_partition> *		msDS-Behavior-Version:	0 *//* * LDAP search 1st LDAP connection: * * NOTE: this seems to be a bug! as the messageID of the LDAP message is corrupted! * * not implemented here *  * Request: *	basedn:	CN=Schema,CN=Configuration,<domain_partition> *	scope:	one *	filter:	(cn=Partitions) *	attrs:	msDS-Behavior-Version * Result: *	<none> * *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_domain_behavior_version() *  * Request: *	basedn:	<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	msDS-Behavior-Version * Result: *	<domain_partition> *		msDS-Behavior-Version:	0 *//* * LDAP search 1st LDAP connection: *  * see: becomeDC_ldap1_schema_object_version() * * Request: *	basedn:	CN=Schema,CN=Configuration,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	objectVersion * Result: *	CN=Schema,CN=Configuration,<domain_partition> *		objectVersion:	30 *//* * LDAP search 1st LDAP connection: *  * not implemented, because the information is already there * * Request: *	basedn:	"" *	scope:	base *	filter:	(objectClass=*) *	attrs:	defaultNamingContext *		dnsHostName * Result: *	"" *		defaultNamingContext:	<domain_partition> *		dnsHostName:		<dns_host_name> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_infrastructure_fsmo() *  * Request: *	basedn:	<WKGUID=2fbac1870ade11d297c400c04fd8d5cd,domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	1.1 * Result: *	CN=Infrastructure,<domain_partition> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_w2k3_update_revision() * * Request: *	basedn:	CN=Windows2003Update,CN=DomainUpdates,CN=System,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	revision * Result: *      CN=Windows2003Update,CN=DomainUpdates,CN=System,<domain_partition> *		revision:	8 *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_infrastructure_fsmo() * * Request: *	basedn:	CN=Infrastructure,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	fSMORoleOwner * Result: *      CN=Infrastructure,<domain_partition> *		fSMORoleOwner:	CN=NTDS Settings,<infrastructure_fsmo_server_object> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_infrastructure_fsmo() * * Request: *	basedn:	<infrastructure_fsmo_server_object> *	scope:	base *	filter:	(objectClass=*) *	attrs:	dnsHostName * Result: *      <infrastructure_fsmo_server_object> *		dnsHostName:	<dns_host_name> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_infrastructure_fsmo() * * Request: *	basedn:	CN=NTDS Settings,<infrastructure_fsmo_server_object> *	scope:	base *	filter:	(objectClass=*) *	attrs:	objectGUID * Result: *      CN=NTDS Settings,<infrastructure_fsmo_server_object> *		objectGUID:	<object_guid> *//* * LDAP search 1st LDAP connection: *  * see: becomeDC_ldap1_rid_manager_fsmo() * * Request: *	basedn:	<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	rIDManagerReference * Result: *	<domain_partition> *		rIDManagerReference:	CN=RID Manager$,CN=System,<domain_partition> *//* * LDAP search 1st LDAP connection: *  * see: becomeDC_ldap1_rid_manager_fsmo() * * Request: *	basedn:	CN=RID Manager$,CN=System,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	fSMORoleOwner * Result: *      CN=Infrastructure,<domain_partition> *		fSMORoleOwner:	CN=NTDS Settings,<rid_manager_fsmo_server_object> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_rid_manager_fsmo() * * Request: *	basedn:	<rid_manager_fsmo_server_object> *	scope:	base *	filter:	(objectClass=*) *	attrs:	dnsHostName * Result: *      <rid_manager_fsmo_server_object> *		dnsHostName:	<dns_host_name> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_rid_manager_fsmo() * * Request: *	basedn:	CN=NTDS Settings,<rid_manager_fsmo_server_object> *	scope:	base *	filter:	(objectClass=*) *	attrs:	msDs-ReplicationEpoch * Result: *      CN=NTDS Settings,<rid_manager_fsmo_server_object> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_site_object() * * Request: *	basedn:	CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs: * Result: *      CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition> *		objectClass:	top *				site *		cn:		<new_dc_site_name> *		distinguishedName:CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition> *		instanceType:	4 *		whenCreated:	... *		whenChanged:	... *		uSNCreated:	... *		uSNChanged:	... *		showInAdvancedViewOnly:	TRUE *		name:		<new_dc_site_name> *		objectGUID:	<object_guid> *		systemFlags:	1107296256 <0x42000000> *		objectCategory:	CN=Site,C=Schema,CN=Configuration,<domain_partition> *//*************************************************************** * Add this stage we call the check_options() callback function * of the caller, to see if he wants us to continue * * see: becomeDC_check_options() ***************************************************************//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_computer_object() * * Request: *	basedn:	<domain_partition> *	scope:	sub *	filter:	(&(|(objectClass=user)(objectClass=computer))(sAMAccountName=<new_dc_account_name>)) *	attrs:	distinguishedName *		userAccountControl * Result: *      CN=<new_dc_netbios_name>,CN=Computers,<domain_partition> *		distinguishedName:	CN=<new_dc_netbios_name>,CN=Computers,<domain_partition> *		userAccoountControl:	4096 <0x1000> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_server_object_1() * * Request: *	basedn:	CN=<new_dc_netbios_name>,CN=Servers,CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs: * Result: *      <noSuchObject> *	<matchedDN:CN=Servers,CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition>> *//* * LDAP search 1st LDAP connection: * * see: becomeDC_ldap1_server_object_2() *  * Request: *	basedn:	CN=<new_dc_netbios_name>,CN=Computers,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs:	serverReferenceBL *	typesOnly: TRUE!!! * Result: *      CN=<new_dc_netbios_name>,CN=Computers,<domain_partition> *//* * LDAP add 1st LDAP connection: *  * see: becomeDC_ldap1_server_object_add() * * Request: *	CN=<new_dc_netbios_name>,CN=Computers,<domain_partition> *	objectClass:	server *	systemFlags:	50000000 <0x2FAF080> *	serverReference:CN=<new_dc_netbios_name>,CN=Computers,<domain_partition> * Result: *      <success> *//* * LDAP search 1st LDAP connection: * * not implemented, maybe we can add that later * * Request: *	basedn:	CN=NTDS Settings,CN=<new_dc_netbios_name>,CN=Servers,CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition> *	scope:	base *	filter:	(objectClass=*) *	attrs: * Result: *      <noSuchObject> *	<matchedDN:CN=<new_dc_netbios_name>,CN=Servers,CN=<new_dc_site_name>,CN=Sites,CN=Configuration,<domain_partition>> *//* * LDAP search 1st LDAP connection: * * not implemented because it gives no new information *  * Request: *	basedn:	CN=Partitions,CN=Configuration,<domain_partition> *	scope:	sub *	filter:	(nCName=<domain_partition>) *	attrs:	nCName *		dnsRoot *	controls: LDAP_SERVER_EXTENDED_DN_OID:critical=false * Result: *      <GUID=<hex_guid>>;CN=<domain_netbios_name>,CN=Partitions,<domain_partition>> *		nCName:		<GUID=<hex_guid>>;<SID=<hex_sid>>;<domain_partition>> *		dnsRoot:	<domain_dns_name> *//* * LDAP modify 1st LDAP connection: * * see: becomeDC_ldap1_server_object_modify() *  * Request (add):

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?