summaryrefslogtreecommitdiff
path: root/source4/setup
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-04-05 07:03:31 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:11:26 -0500
commitcf52d62ec998ae30f4460e75817b0503894aff5d (patch)
tree6b22b0c3acfae28bc57bf45937a143a25e1aa0a5 /source4/setup
parentf9b3a8d3b9a0d83b47f2de6229db59221b4dd68d (diff)
downloadsamba-cf52d62ec998ae30f4460e75817b0503894aff5d.tar.gz
samba-cf52d62ec998ae30f4460e75817b0503894aff5d.tar.bz2
samba-cf52d62ec998ae30f4460e75817b0503894aff5d.zip
r6207: - clean up source topdir
- move provision stuff to setup/ - remove unused scripts metze (This used to be commit c35887ca649675f28ca986713a08082420418d74)
Diffstat (limited to 'source4/setup')
-rwxr-xr-xsource4/setup/dcpromo.pl225
-rw-r--r--source4/setup/hklm.ldif32
-rwxr-xr-xsource4/setup/newuser.pl145
-rw-r--r--source4/setup/provision.ldif1246
-rwxr-xr-xsource4/setup/provision.pl443
-rw-r--r--source4/setup/provision.zone32
-rw-r--r--source4/setup/rootdse.ldif32
-rwxr-xr-xsource4/setup/rootdse.pl152
-rw-r--r--source4/setup/secrets.ldif30
9 files changed, 2337 insertions, 0 deletions
diff --git a/source4/setup/dcpromo.pl b/source4/setup/dcpromo.pl
new file mode 100755
index 0000000000..56461ae825
--- /dev/null
+++ b/source4/setup/dcpromo.pl
@@ -0,0 +1,225 @@
+#!/usr/bin/perl -w
+
+###################################################
+# package to generate samba ads configuration
+# Copyright metze@samba.org 2004
+
+# released under the GNU GPL
+
+use strict;
+use Data::Dumper;
+
+sub print_options($$) {
+ my $ads = shift;
+ my $ctx = shift;
+ my @arr;
+ my $i;
+ my $len;
+
+ print "options:\n";
+
+ @arr = @{$ctx};
+ $len = $#arr;
+ for($i = 0; $i <= $len; $i++) {
+ my $val = $ctx->[$i];
+ print "\t".$i.": ".$val->{TEXT}."\n";
+ }
+
+ print "choise []:";
+}
+
+sub read_option($$) {
+ my $ads = shift;
+ my $ctx = shift;
+ my $val;
+
+ $val = <STDIN>;
+
+ return $val;
+}
+
+sub call_option($$$) {
+ my $ads = shift;
+ my $ctx = shift;
+ my $switch = shift;
+ my $val;
+ my $funcref;
+
+ $val = $ctx->[$switch];
+
+ $funcref = $val->{ACTION};
+
+ &$funcref($ads);
+}
+
+sub ask_option($$) {
+ my $ads = shift;
+ my $ctx = shift;
+ my $ret;
+
+ print_options($ads, $ctx);
+
+ $ret = read_option($ads, $ctx);
+
+ call_option($ads, $ctx, $ret);
+}
+
+sub create_ads_tree($) {
+ my $ads = shift;
+
+ print "Create ADS Domain:\n";
+ print Dumper($ads);
+}
+
+sub do_new_domain_in_entire_structure($) {
+ my $ads;
+ my $domain_dns;
+ my $domain_netbios;
+
+ $ads->{NEW_DOMAIN} = 1;
+ $ads->{NEW_FOREST} = 1;
+
+ print "full dns name of the new domain []:";
+ $domain_dns = <STDIN>;
+ chomp $domain_dns;
+ $ads->{FULL_DNS_NAME} = $domain_dns;
+
+ print "netbios name of the new domain []:";
+ $domain_netbios = <STDIN>;
+ chomp $domain_netbios;
+ $ads->{NETBIOS} = $domain_netbios;
+
+ create_ads_tree($ads);
+}
+
+sub do_sub_domain_in_existing_structure($) {
+ my $ads = shift;
+ my $user_name;
+ my $user_domain;
+ my $user_password;
+ my $top_dns;
+ my $domain_dns;
+ my $domain_netbios;
+ my $db_folder;
+ my $db_logs;
+ my $sysvol_folder;
+ my $admin_password1;
+ my $admin_password2;
+
+ $ads->{NEW_DOMAIN} = 1;
+ $ads->{NEW_FOREST} = 0;
+
+ print "User Name []:";
+ $user_name = <STDIN>;
+ chomp $user_name;
+ $ads->{USER}{NAME} = $user_name;
+
+ print "User Domain []:";
+ $user_domain = <STDIN>;
+ chomp $user_domain;
+ $ads->{USER}{DOMAIN} = $user_domain;
+
+ print "User Password []:";
+ $user_password = <STDIN>;
+ chomp $user_password;
+ $ads->{USER}{PASSWORD} = $user_password;
+
+ print "full dns name of the top domain []:";
+ $top_dns = <STDIN>;
+ chomp $top_dns;
+ $ads->{TOP_DNS_NAME} = $top_dns;
+
+ print "suffix of the new domain []:";
+ $domain_dns = <STDIN>;
+ chomp $domain_dns;
+ $ads->{FULL_DNS_NAME} = $domain_dns.".".$top_dns;
+
+ print "netbios name of the new domain []:";
+ $domain_netbios = <STDIN>;
+ chomp $domain_netbios;
+ $ads->{NETBIOS} = $domain_netbios;
+
+ print "folder for database files []:";
+ $db_folder = <STDIN>;
+ chomp $db_folder;
+ $ads->{DB_FOLDER} = $db_folder;
+
+ print "folder for database logs []:";
+ $db_logs = <STDIN>;
+ chomp $db_logs;
+ $ads->{DB_LOGS} = $db_logs;
+
+ print "folder for SYSVOL []:";
+ $sysvol_folder = <STDIN>;
+ chomp $sysvol_folder;
+ $ads->{SYSVOL_FOLDER} = $sysvol_folder;
+
+ #
+ # test DNS here
+ #
+
+ #
+ # test mixed/native here
+ #
+
+ print "Administrator password []:";
+ $admin_password1 = <STDIN>;
+ chomp $admin_password1;
+ print "retype Administrator password []:";
+ $admin_password2 = <STDIN>;
+ chomp $admin_password2;
+ if ($admin_password1 eq $admin_password2) {
+ $ads->{ADMIN_PASSWORD} = $admin_password1;
+ } else {
+ $ads->{ADMIN_PASSWORD} = "";
+ }
+
+ create_ads_tree($ads);
+}
+
+sub do_sub_structure_in_global_structure($) {
+ print "go on with do_sub_structure_in_global_structure\n";
+}
+
+sub do_new_domain($) {
+ my $ads = shift;
+ my $ctx;
+
+ $ctx->[0]{TEXT} = "new domain in entire structure";
+ $ctx->[0]{ACTION} = \&do_new_domain_in_entire_structure;
+
+ $ctx->[1]{TEXT} = "sub domain in existing structure";
+ $ctx->[1]{ACTION} = \&do_sub_domain_in_existing_structure;
+
+ $ctx->[2]{TEXT} = "sub structure in global structure";
+ $ctx->[2]{ACTION} = \&do_sub_structure_in_global_structure;
+
+ ask_option($ads ,$ctx);
+}
+
+sub do_existing_domain($) {
+ print "go on with do existing domain\n";
+}
+
+sub ask_new_or_exist_domain($) {
+ my $ads = shift;
+ my $ctx;
+
+ $ctx->[0]{TEXT} = "new domain";
+ $ctx->[0]{ACTION} = \&do_new_domain;
+
+ $ctx->[1]{TEXT} = "existing domain";
+ $ctx->[1]{ACTION} = \&do_existing_domain;
+
+ ask_option($ads, $ctx);
+}
+
+sub main {
+ my $ads;
+
+ $ads->{ADS_TREE} = 1;
+
+ ask_new_or_exist_domain($ads);
+}
+
+main();
diff --git a/source4/setup/hklm.ldif b/source4/setup/hklm.ldif
new file mode 100644
index 0000000000..a4ab32e233
--- /dev/null
+++ b/source4/setup/hklm.ldif
@@ -0,0 +1,32 @@
+dn: @INDEXLIST
+@IDXATTR: key
+
+dn: key=control,key=currentcontrolset,key=system,hive=
+key: control
+
+dn: key=services,key=control,key=currentcontrolset,key=system,hive=
+key: services
+
+dn: value=ProductType,key=productoptions,key=control,key=currentcontrolset,key=system,hive=
+value: ProductType
+data: LanmanNT
+type: 1
+
+dn: key=productoptions,key=control,key=currentcontrolset,key=system,hive=
+key: productoptions
+
+dn: key=system,hive=
+key: system
+
+dn: key=netlogon,key=services,key=currentcontrolset,key=system,hive=
+key: netlogon
+
+dn: key=services,key=currentcontrolset,key=system,hive=
+key: services
+
+dn: key=print,key=control,key=currentcontrolset,key=system,hive=
+key: print
+
+dn: key=currentcontrolset,key=system,hive=
+key: currentcontrolset
+
diff --git a/source4/setup/newuser.pl b/source4/setup/newuser.pl
new file mode 100755
index 0000000000..6ddda5028e
--- /dev/null
+++ b/source4/setup/newuser.pl
@@ -0,0 +1,145 @@
+#!/usr/bin/perl -w
+# simple hack script to add a new user for Samba4
+
+
+use strict;
+use Socket;
+use Getopt::Long;
+
+my $opt_password;
+my $opt_username;
+my $opt_unixname;
+my $opt_samdb = "/usr/local/samba/private/sam.ldb";
+
+
+# generate a random guid. Not a good algorithm.
+sub randguid()
+{
+ my $r1 = int(rand(2**32));
+ my $r2 = int(rand(2**16));
+ my $r3 = int(rand(2**16));
+ my $r4 = int(rand(2**16));
+ my $r5 = int(rand(2**32));
+ my $r6 = int(rand(2**16));
+ return sprintf("%08x-%04x-%04x-%04x-%08x%04x", $r1, $r2, $r3, $r4, $r5, $r6);
+}
+
+# generate a random password. Poor algorithm :(
+sub randpass()
+{
+ my $pass = "";
+ my $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%\$!~";
+ for (my $i=0;$i<8;$i++) {
+ my $c = int(rand(length($chars)));
+ $pass .= substr($chars, $c, 1);
+ }
+ return $pass;
+}
+
+sub search($$)
+{
+ my $expr = shift;
+ my $attrib = shift;
+ my $res = `ldbsearch \"$expr\" $attrib | grep ^$attrib | cut -d' ' -f2- | head -1`;
+ chomp $res;
+ return $res;
+}
+
+############################################
+# show some help
+sub ShowHelp()
+{
+ print "
+Samba4 newuser
+
+newuser.pl [options]
+ --username USERNAME choose new username
+ --password PASSWORD set password
+ --samdb DBPATH path to sam.ldb
+
+You must provide at least a username
+
+";
+ exit(1);
+}
+
+my $opt_help;
+
+GetOptions(
+ 'help|h|?' => \$opt_help,
+ 'username=s' => \$opt_username,
+ 'unixname=s' => \$opt_unixname,
+ 'password=s' => \$opt_password,
+ 'samdb=s' => \$opt_samdb
+ );
+
+if ($opt_help || !$opt_username) {
+ ShowHelp();
+}
+
+if (!$opt_password) {
+ $opt_password = randpass();
+ print "chose random password '$opt_password'\n";
+}
+
+if (!$opt_unixname) {
+ $opt_unixname = $opt_username;
+}
+
+my $res = "";
+
+# allow provisioning to be run from the source directory
+$ENV{"PATH"} .= ":bin:../bin";
+
+$ENV{"LDB_URL"} = $opt_samdb;
+
+my $domain_sid = search("(objectClass=domainDNS)", "objectSid");
+my $domain_dn = search("(objectClass=domainDNS)", "dn");
+
+my $ldif = `ldbsearch 'cn=TemplateUser' | grep -v Template | grep -v '^#'`;
+chomp $ldif;
+
+my $sid;
+
+# crude way of working out a rid
+for (my $i=1001;$i<1100;$i++) {
+ if (search("objectSid=$domain_sid-$i","objectSid") eq "") {
+ $sid = "$domain_sid-$i";
+ last;
+ }
+}
+
+print "Chose new SID $sid\n";
+
+my $dom_users = search("name=Domain Users", "dn");
+
+
+$ldif .= "sAMAccountName: $opt_username\n";
+$ldif .= "name: $opt_username\n";
+$ldif .= "objectSid: $sid\n";
+$ldif .= "objectGUID: " . randguid() . "\n";
+$ldif .= "memberOf: $dom_users\n";
+$ldif .= "userAccountControl: 0x10200\n";
+$ldif .= "sAMAccountType: 0x30000000\n";
+$ldif .= "objectClass: user\n";
+$ldif .= "unicodePwd: $opt_password\n";
+$ldif .= "unixName: $opt_unixname\n";
+
+my $user_dn = "CN=$opt_username,CN=Users,$domain_dn";
+
+open FILE, ">newuser.ldif";
+print FILE "dn: $user_dn";
+print FILE "$ldif\n";
+close FILE;
+
+open FILE, ">modgroup.ldif";
+print FILE "
+dn: CN=Domain Users,CN=Users,$domain_dn
+changetype: modify
+add: member
+member: $user_dn
+";
+close FILE;
+
+system("ldbadd newuser.ldif");
+system("ldbmodify modgroup.ldif");
diff --git a/source4/setup/provision.ldif b/source4/setup/provision.ldif
new file mode 100644
index 0000000000..f6cce3e285
--- /dev/null
+++ b/source4/setup/provision.ldif
@@ -0,0 +1,1246 @@
+dn: @INDEXLIST
+@IDXATTR: name
+@IDXATTR: sAMAccountName
+@IDXATTR: objectSid
+@IDXATTR: objectClass
+@IDXATTR: member
+@IDXATTR: unixID
+@IDXATTR: unixName
+@IDXATTR: privilege
+
+dn: @ATTRIBUTES
+realm: CASE_INSENSITIVE
+userPrincipalName: CASE_INSENSITIVE
+servicePrincipalName: CASE_INSENSITIVE
+cn: CASE_INSENSITIVE
+dc: CASE_INSENSITIVE
+name: CASE_INSENSITIVE WILDCARD
+dn: CASE_INSENSITIVE WILDCARD
+sAMAccountName: CASE_INSENSITIVE WILDCARD
+objectClass: CASE_INSENSITIVE
+unicodePwd: HIDDEN
+ntPwdHash: HIDDEN
+ntPwdHistory: HIDDEN
+lmPwdHash: HIDDEN
+lmPwdHistory: HIDDEN
+createTimestamp: HIDDEN
+modifyTimestamp: HIDDEN
+
+dn: @SUBCLASSES
+top: domain
+top: person
+top: group
+domain: domainDNS
+domain: builtinDomain
+person: organizationalPerson
+organizationalPerson: user
+user: computer
+template: userTemplate
+template: groupTemplate
+
+#Add modules to the list to activate them by default
+#beware often order is important
+dn: @MODULES
+@LIST: samldb,timestamps
+
+###############################
+# Domain Naming Context
+###############################
+dn: ${BASEDN}
+objectClass: top
+objectClass: domain
+objectClass: domainDNS
+name: ${DOMAIN}
+realm: ${REALM}
+dnsDomain: ${DNSDOMAIN}
+dc: ${DOMAIN}
+objectGUID: ${DOMAINGUID}
+creationTime: ${NTTIME}
+forceLogoff: 0x8000000000000000
+lockoutDuration: -18000000000
+lockOutObservationWindow: -18000000000
+lockoutThreshold: 0
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+maxPwdAge: -37108517437440
+minPwdAge: 0
+minPwdLength: 7
+modifiedCountAtLastProm: 0
+nextRid: 1001
+pwdProperties: 1
+pwdHistoryLength: 24
+objectSid: ${DOMAINSID}
+serverState: 1
+nTMixedDomain: 1
+msDS-Behavior-Version: 0
+ridManagerReference: CN=RID Manager$,CN=System,${BASEDN}
+uASCompat: 1
+modifiedCount: 1
+objectCategory: CN=Domain-DNS,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+subRefs: CN=Configuration,${BASEDN}
+subRefs: CN=Schema,CN=Configuration,${BASEDN}
+
+dn: CN=Users,${BASEDN}
+objectClass: top
+objectClass: container
+cn: Users
+description: Default container for upgraded user accounts
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: FALSE
+name: Users
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Computers,${BASEDN}
+objectClass: top
+objectClass: container
+cn: Computers
+description: Default container for upgraded computer accounts
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: FALSE
+name: Computers
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: OU=Domain Controllers,${BASEDN}
+objectClass: top
+objectClass: organizationalUnit
+ou: Domain Controllers
+description: Default container for domain controllers
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: FALSE
+name: Domain Controllers
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Organizational-Unit,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=ForeignSecurityPrincipals,${BASEDN}
+objectClass: top
+objectClass: container
+cn: ForeignSecurityPrincipals
+description: Default container for security identifiers (SIDs) associated with objects from external, trusted domains
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: FALSE
+name: ForeignSecurityPrincipals
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=System,${BASEDN}
+objectClass: top
+objectClass: container
+cn: System
+description: Builtin system settings
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: System
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=RID Manager$,CN=System,${BASEDN}
+objectclass: top
+objectclass: rIDManager
+cn: RID Manager$
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: RID Manager$
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=RID-Manager,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+fSMORoleOwner: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+rIDAvailablePool: 4611686014132423217
+
+dn: CN=DomainUpdates,CN=System,${BASEDN}
+objectClass: top
+objectClass: container
+cn: DomainUpdates
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: DomainUpdates
+objectGUID: ${NEWGUID}
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+
+dn: CN=Windows2003Update,CN=DomainUpdates,CN=System,${BASEDN}
+objectClass: top
+objectClass: container
+cn: Windows2003Update
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: Windows2003Update
+objectGUID: ${NEWGUID}
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+revision: 8
+
+dn: CN=Infrastructure,${BASEDN}
+objectclass: top
+objectclass: infrastructureUpdate
+cn: Infrastructure
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: Infrastructure
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Infrastructure-Update,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+fSMORoleOwner: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+
+dn: CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: builtinDomain
+cn: Builtin
+instanceType: 4
+showInAdvancedViewOnly: FALSE
+name: Builtin
+forceLogoff: 0x8000000000000000
+lockoutDuration: -18000000000
+lockOutObservationWindow: -18000000000
+lockoutThreshold: 0
+maxPwdAge: -37108517437440
+minPwdAge: 0
+minPwdLength: 0
+modifiedCountAtLastProm: 0
+nextRid: 1000
+pwdProperties: 0
+pwdHistoryLength: 0
+objectSid: S-1-5-32
+serverState: 1
+uASCompat: 1
+modifiedCount: 1
+objectCategory: CN=Builtin-Domain,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Administrator,CN=Users,${BASEDN}
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: user
+cn: Administrator
+description: Built-in account for administering the computer/domain
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+memberOf: CN=Group Policy Creator Owners,CN=Users,${BASEDN}
+memberOf: CN=Domain Admins,CN=Users,${BASEDN}
+memberOf: CN=Enterprise Admins,CN=Users,${BASEDN}
+memberOf: CN=Schema Admins,CN=Users,${BASEDN}
+memberOf: CN=Administrators,CN=Builtin,${BASEDN}
+uSNChanged: 1
+name: Administrator
+objectGUID: ${NEWGUID}
+userAccountControl: 0x10200
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 0
+primaryGroupID: 513
+objectSid: ${DOMAINSID}-500
+adminCount: 1
+accountExpires: -1
+logonCount: 0
+sAMAccountName: Administrator
+sAMAccountType: 0x30000000
+objectCategory: CN=Person,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unicodePwd: ${ADMINPASS}
+unixName: root
+
+dn: CN=Guest,CN=Users,${BASEDN}
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: user
+cn: Guest
+description: Built-in account for guest access to the computer/domain
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+memberOf: CN=Guests,CN=Builtin,${BASEDN}
+uSNChanged: 1
+name: Guest
+objectGUID: ${NEWGUID}
+userAccountControl: 0x10222
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 0
+primaryGroupID: 514
+objectSid: ${DOMAINSID}-501
+accountExpires: -1
+logonCount: 0
+sAMAccountName: Guest
+sAMAccountType: 0x30000000
+objectCategory: CN=Person,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Administrators,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Administrators
+description: Administrators have complete and unrestricted access to the computer/domain
+member: CN=Domain Admins,CN=Users,${BASEDN}
+member: CN=Enterprise Admins,CN=Users,${BASEDN}
+member: CN=Administrator,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Administrators
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-544
+adminCount: 1
+sAMAccountName: Administrators
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${WHEEL}
+privilege: SeSecurityPrivilege
+privilege: SeBackupPrivilege
+privilege: SeRestorePrivilege
+privilege: SeSystemtimePrivilege
+privilege: SeShutdownPrivilege
+privilege: SeRemoteShutdownPrivilege
+privilege: SeTakeOwnershipPrivilege
+privilege: SeDebugPrivilege
+privilege: SeSystemEnvironmentPrivilege
+privilege: SeSystemProfilePrivilege
+privilege: SeProfileSingleProcessPrivilege
+privilege: SeIncreaseBasePriorityPrivilege
+privilege: SeLoadDriverPrivilege
+privilege: SeCreatePagefilePrivilege
+privilege: SeIncreaseQuotaPrivilege
+privilege: SeChangeNotifyPrivilege
+privilege: SeUndockPrivilege
+privilege: SeManageVolumePrivilege
+privilege: SeImpersonatePrivilege
+privilege: SeCreateGlobalPrivilege
+privilege: SeEnableDelegationPrivilege
+privilege: SeInteractiveLogonRight
+privilege: SeNetworkLogonRight
+privilege: SeRemoteInteractiveLogonRight
+
+
+dn: CN=Users,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Users
+description: Users are prevented from making accidental or intentional system-wide changes. Thus, Users can run certified applications, but not most legacy applications
+member: CN=Domain Users,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Users
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-545
+sAMAccountName: Users
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Guests,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Guests
+description: Guests have the same access as members of the Users group by default, except for the Guest account which is further restricted
+member: CN=Domain Guests,CN=Users,${BASEDN}
+member: CN=Guest,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Guests
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-546
+sAMAccountName: Guests
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${NOGROUP}
+
+dn: CN=Print Operators,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Print Operators
+description: Members can administer domain printers
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Print Operators
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-550
+adminCount: 1
+sAMAccountName: Print Operators
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+privilege: SeLoadDriverPrivilege
+privilege: SeShutdownPrivilege
+privilege: SeInteractiveLogonRight
+
+dn: CN=Backup Operators,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Backup Operators
+description: Backup Operators can override security restrictions for the sole purpose of backing up or restoring files
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Backup Operators
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-551
+adminCount: 1
+sAMAccountName: Backup Operators
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+privilege: SeBackupPrivilege
+privilege: SeRestorePrivilege
+privilege: SeShutdownPrivilege
+privilege: SeInteractiveLogonRight
+
+dn: CN=Replicator,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Replicator
+description: Supports file replication in a domain
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Replicator
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-552
+adminCount: 1
+sAMAccountName: Replicator
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Remote Desktop Users,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Remote Desktop Users
+description: Members in this group are granted the right to logon remotely
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Remote Desktop Users
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-555
+sAMAccountName: Remote Desktop Users
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Network Configuration Operators,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Network Configuration Operators
+description: Members in this group can have some administrative privileges to manage configuration of networking features
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Network Configuration Operators
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-556
+sAMAccountName: Network Configuration Operators
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Performance Monitor Users,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Performance Monitor Users
+description: Members of this group have remote access to monitor this computer
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Performance Monitor Users
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-558
+sAMAccountName: Performance Monitor Users
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Performance Log Users,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Performance Log Users
+description: Members of this group have remote access to schedule logging of performance counters on this computer
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Performance Log Users
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-559
+sAMAccountName: Performance Log Users
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=${NETBIOSNAME},OU=Domain Controllers,${BASEDN}
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: user
+objectClass: computer
+cn: ${NETBIOSNAME}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: ${NETBIOSNAME}
+objectGUID: ${HOSTGUID}
+userAccountControl: 532480
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 127273269057298624
+localPolicyFlags: 0
+pwdLastSet: 127258826171655328
+primaryGroupID: 516
+objectSid: ${DOMAINSID}-1000
+accountExpires: 9223372036854775807
+logonCount: 30
+sAMAccountName: ${NETBIOSNAME}$
+sAMAccountType: 805306369
+operatingSystem: Samba
+operatingSystemVersion: 4.0
+dNSHostName: ${DNSNAME}
+objectCategory: CN=Computer,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unicodePwd: ${JOINPASS}
+servicePrincipalName: HOST/${DNSNAME}
+servicePrincipalName: HOST/${NETBIOSNAME}
+servicePrincipalName: CIFS/${DNSNAME}
+servicePrincipalName: CIFS/${NETBIOSNAME}
+servicePrincipalName: LDAP/${DNSNAME}
+servicePrincipalName: LDAP/${NETBIOSNAME}
+
+dn: CN=krbtgt,CN=Users,${BASEDN}
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: user
+cn: krbtgt
+description: Key Distribution Center Service Account
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: krbtgt
+objectGUID: ${NEWGUID}
+userAccountControl: 514
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 127258826179466560
+primaryGroupID: 513
+objectSid: ${DOMAINSID}-502
+adminCount: 1
+accountExpires: 9223372036854775807
+logonCount: 0
+sAMAccountName: krbtgt
+sAMAccountType: 805306368
+servicePrincipalName: kadmin/changepw
+objectCategory: CN=Person,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unicodePwd: ${RANDPASS}
+
+dn: CN=Domain Computers,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Domain Computers
+description: All workstations and servers joined to the domain
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Domain Computers
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-515
+sAMAccountName: Domain Computers
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Domain Controllers,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Domain Controllers
+description: All domain controllers in the domain
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Domain Controllers
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-516
+adminCount: 1
+sAMAccountName: Domain Controllers
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Schema Admins,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Schema Admins
+description: Designated administrators of the schema
+member: CN=Administrator,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Schema Admins
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-518
+adminCount: 1
+sAMAccountName: Schema Admins
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${WHEEL}
+
+dn: CN=Enterprise Admins,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Enterprise Admins
+description: Designated administrators of the enterprise
+member: CN=Administrator,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+memberOf: CN=Administrators,CN=Builtin,${BASEDN}
+uSNChanged: 1
+name: Enterprise Admins
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-519
+adminCount: 1
+sAMAccountName: Enterprise Admins
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${WHEEL}
+
+dn: CN=Cert Publishers,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Cert Publishers
+description: Members of this group are permitted to publish certificates to the Active Directory
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Cert Publishers
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-517
+sAMAccountName: Cert Publishers
+sAMAccountType: 0x20000000
+groupType: 0x80000004
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Domain Admins,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Domain Admins
+description: Designated administrators of the domain
+member: CN=Administrator,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+memberOf: CN=Administrators,CN=Builtin,${BASEDN}
+uSNChanged: 1
+name: Domain Admins
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-512
+adminCount: 1
+sAMAccountName: Domain Admins
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${WHEEL}
+
+dn: CN=Domain Users,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Domain Users
+description: All domain users
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+memberOf: CN=Users,CN=Builtin,${BASEDN}
+uSNChanged: 1
+name: Domain Users
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-513
+sAMAccountName: Domain Users
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${USERS}
+
+dn: CN=Domain Guests,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Domain Guests
+description: All domain guests
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+memberOf: CN=Guests,CN=Builtin,${BASEDN}
+uSNChanged: 1
+name: Domain Guests
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-514
+sAMAccountName: Domain Guests
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Group Policy Creator Owners,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Group Policy Creator Owners
+description: Members in this group can modify group policy for the domain
+member: CN=Administrator,CN=Users,${BASEDN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Group Policy Creator Owners
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-520
+sAMAccountName: Group Policy Creator Owners
+sAMAccountType: 0x10000000
+groupType: 0x80000002
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+unixName: ${WHEEL}
+
+dn: CN=RAS and IAS Servers,CN=Users,${BASEDN}
+objectClass: top
+objectClass: group
+cn: RAS and IAS Servers
+description: Servers in this group can access remote access properties of users
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: RAS and IAS Servers
+objectGUID: ${NEWGUID}
+objectSid: ${DOMAINSID}-553
+sAMAccountName: RAS and IAS Servers
+sAMAccountType: 0x20000000
+groupType: 0x80000004
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+dn: CN=Server Operators,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Server Operators
+description: Members can administer domain servers
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Server Operators
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-549
+adminCount: 1
+sAMAccountName: Server Operators
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+privilege: SeBackupPrivilege
+privilege: SeSystemtimePrivilege
+privilege: SeRemoteShutdownPrivilege
+privilege: SeRestorePrivilege
+privilege: SeShutdownPrivilege
+privilege: SeInteractiveLogonRight
+
+dn: CN=Account Operators,CN=Builtin,${BASEDN}
+objectClass: top
+objectClass: group
+cn: Account Operators
+description: Members can administer domain user and group accounts
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+name: Account Operators
+objectGUID: ${NEWGUID}
+objectSid: S-1-5-32-548
+adminCount: 1
+sAMAccountName: Account Operators
+sAMAccountType: 0x20000000
+systemFlags: 0x8c000000
+groupType: 0x80000005
+objectCategory: CN=Group,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+privilege: SeInteractiveLogonRight
+
+dn: CN=Templates,${BASEDN}
+objectClass: top
+objectClass: container
+cn: Templates
+description: Container for SAM account templates
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: Templates
+objectGUID: ${NEWGUID}
+systemFlags: 0x8c000000
+objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
+isCriticalSystemObject: TRUE
+
+###
+# note! the template users must not match normal searches. Be careful
+# with what classes you put them in
+###
+
+dn: CN=TemplateUser,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: person
+objectClass: organizationalPerson
+objectClass: Template
+objectClass: userTemplate
+cn: TemplateUser
+name: TemplateUser
+instanceType: 4
+userAccountControl: 0x202
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 0
+primaryGroupID: 513
+accountExpires: -1
+logonCount: 0
+sAMAccountType: 0x30000000
+
+dn: CN=TemplateMemberServer,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: Template
+objectClass: userTemplate
+cn: TemplateMemberServer
+name: TemplateMemberServer
+instanceType: 4
+userAccountControl: 0x1002
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 0
+primaryGroupID: 513
+accountExpires: -1
+logonCount: 0
+sAMAccountType: 0x30000001
+
+dn: CN=TemplateDomainController,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: Template
+objectClass: userTemplate
+cn: TemplateDomainController
+name: TemplateDomainController
+instanceType: 4
+userAccountControl: 0x2002
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 0
+primaryGroupID: 513
+accountExpires: -1
+logonCount: 0
+sAMAccountType: 0x30000001
+
+dn: CN=TemplateTrustingDomain,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: Template
+objectClass: userTemplate
+cn: TemplateTrustingDomain
+name: TemplateTrustingDomain
+instanceType: 4
+userAccountControl: 0x820
+badPwdCount: 0
+codePage: 0
+countryCode: 0
+badPasswordTime: 0
+lastLogoff: 0
+lastLogon: 0
+pwdLastSet: 0
+primaryGroupID: 513
+accountExpires: -1
+logonCount: 0
+sAMAccountType: 0x30000002
+
+dn: CN=TemplateGroup,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: Template
+objectClass: groupTemplate
+cn: TemplateGroup
+name: TemplateGroup
+instanceType: 4
+groupType: 0x80000002
+sAMAccountType: 0x10000000
+
+dn: CN=TemplateAlias,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: Template
+objectClass: aliasTemplate
+cn: TemplateAlias
+name: TemplateAlias
+instanceType: 4
+groupType: 0x80000004
+sAMAccountType: 0x10000000
+
+dn: CN=TemplateForeignSecurityPrincipal,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: Template
+objectClass: foreignSecurityPrincipalTemplate
+cn: TemplateForeignSecurityPrincipal
+name: TemplateForeignSecurityPrincipal
+
+dn: CN=TemplateSecret,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: leaf
+objectClass: Template
+objectClass: secretTemplate
+cn: TemplateSecret
+name: TemplateSecret
+instanceType: 4
+
+dn: CN=TemplateTrustedDomain,CN=Templates,${BASEDN}
+objectClass: top
+objectClass: leaf
+objectClass: Template
+objectClass: trustedDomainTemplate
+cn: TemplateTrustedDomain
+name: TemplateTrustedDomain
+instanceType: 4
+
+###############################
+# Configuration Naming Context
+###############################
+dn: CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: configuration
+cn: Configuration
+instanceType: 13
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Configuration
+objectGUID: ${NEWGUID}
+objectCategory: CN=Configuration,CN=Schema,CN=Configuration,${BASEDN}
+subRefs: CN=Schema,CN=Configuration,${BASEDN}
+masteredBy: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+msDs-masteredBy: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+
+dn: CN=Partitions,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: crossRefContainer
+cn: Partitions
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Partitions
+objectGUID: ${NEWGUID}
+systemFlags: 0x80000000
+objectCategory: CN=Cross-Ref-Container,CN=Schema,CN=Configuration,${BASEDN}
+msDS-Behavior-Version: 0
+fSMORoleOwner: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+
+dn: CN=Enterprise Configuration,CN=Partitions,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: crossRef
+cn: Enterprise Configuration
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Enterprise Configuration
+objectGUID: ${NEWGUID}
+systemFlags: 0x00000001
+objectCategory: CN=Cross-Ref,CN=Schema,CN=Configuration,${BASEDN}
+nCName: CN=Configuration,${BASEDN}
+dnsRoot: ${DNSDOMAIN}
+
+dn: CN=Enterprise Schema,CN=Partitions,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: crossRef
+cn: Enterprise Schema
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Enterprise Schema
+objectGUID: ${NEWGUID}
+systemFlags: 0x00000001
+objectCategory: CN=Cross-Ref,CN=Schema,CN=Configuration,${BASEDN}
+nCName: CN=Schema,CN=Configuration,${BASEDN}
+dnsRoot: ${DNSDOMAIN}
+
+dn: CN=${DOMAIN},CN=Partitions,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: crossRef
+cn: ${DOMAIN}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: ${DOMAIN}
+objectGUID: ${NEWGUID}
+systemFlags: 0x00000003
+objectCategory: CN=Cross-Ref,CN=Schema,CN=Configuration,${BASEDN}
+nCName: ${BASEDN}
+nETBIOSName: ${DOMAIN}
+dnsRoot: ${DNSDOMAIN}
+
+dn: CN=Sites,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: sitesContainer
+cn: Sites
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Sites
+objectGUID: ${NEWGUID}
+systemFlags: 0x82000000
+objectCategory: CN=Sites-Container,CN=Schema,CN=Configuration,${BASEDN}
+
+dn: CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: site
+cn: Sites
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Sites
+objectGUID: ${NEWGUID}
+systemFlags: 0x82000000
+objectCategory: CN=Site,CN=Schema,CN=Configuration,${BASEDN}
+
+dn: CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: serversContainer
+cn: Servers
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Servers
+objectGUID: ${NEWGUID}
+systemFlags: 0x82000000
+objectCategory: CN=Servers-Container,CN=Schema,CN=Configuration,${BASEDN}
+
+dn: CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: server
+cn: ${NETBIOSNAME}
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: ${NETBIOSNAME}
+objectGUID: ${NEWGUID}
+systemFlags: 0x52000000
+objectCategory: CN=Server,CN=Schema,CN=Configuration,${BASEDN}
+dNSHostName: ${DNSNAME}
+serverReference: CN=${NETBIOSNAME},OU=Domain Controllers,${BASEDN}
+
+dn: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: applicationSettings
+objectClass: nTDSDSA
+cn: NTDS Settings
+instanceType: 4
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: NTDS Settings
+systemFlags: 0x02000000
+objectCategory: CN=NTDS-DSA,CN=Schema,CN=Configuration,${BASEDN}
+dMDLocation: CN=Schema,CN=Configuration,${BASEDN}
+objectGUID: ${INVOCATIONID}
+invocationId: ${INVOCATIONID}
+msDS-Behavior-Version: 2
+
+###############################
+# Schema Naming Context
+###############################
+dn: CN=Schema,CN=Configuration,${BASEDN}
+objectClass: top
+objectClass: dMD
+cn: Schema
+instanceType: 13
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+uSNCreated: ${USN}
+uSNChanged: ${USN}
+showInAdvancedViewOnly: TRUE
+name: Schema
+objectGUID: ${NEWGUID}
+objectCategory: CN=DMD,CN=Schema,CN=Configuration,${BASEDN}
+masteredBy: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+msDs-masteredBy: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+fSMORoleOwner: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=${DEFAULTSITE},CN=Sites,CN=Configuration,${BASEDN}
+objectVersion: 30
diff --git a/source4/setup/provision.pl b/source4/setup/provision.pl
new file mode 100755
index 0000000000..4000ac3bde
--- /dev/null
+++ b/source4/setup/provision.pl
@@ -0,0 +1,443 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Socket;
+use Getopt::Long;
+
+my $opt_hostname = `hostname`;
+chomp $opt_hostname;
+my $opt_hostip;
+my $opt_realm;
+my $opt_domain;
+my $opt_adminpass;
+my $opt_nobody;
+my $opt_nogroup;
+my $opt_wheel;
+my $opt_users;
+my $dnsdomain;
+my $netbiosname;
+my $dnsname;
+my $basedn;
+my $defaultsite = "Default-First-Site-Name";
+my $usn = 1;
+
+# return the current NTTIME as an integer
+sub nttime()
+{
+ my $t = time();
+ $t += (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60));
+ $t *= 1.0e7;
+ return sprintf("%lld", $t);
+}
+
+# generate a random guid. Not a good algorithm.
+sub randguid()
+{
+ my $r1 = int(rand(2**32));
+ my $r2 = int(rand(2**16));
+ my $r3 = int(rand(2**16));
+ my $r4 = int(rand(2**16));
+ my $r5 = int(rand(2**32));
+ my $r6 = int(rand(2**16));
+ return sprintf("%08x-%04x-%04x-%04x-%08x%04x", $r1, $r2, $r3, $r4, $r5, $r6);
+}
+
+my $opt_domainguid = randguid();
+my $opt_hostguid = randguid();
+my $opt_invocationid = randguid();
+
+sub randsid()
+{
+ return sprintf("S-1-5-21-%d-%d-%d",
+ int(rand(10**8)), int(rand(10**8)), int(rand(10**8)));
+}
+
+my $opt_domainsid = randsid();
+
+# generate a random password. Poor algorithm :(
+sub randpass()
+{
+ my $pass = "";
+ my $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%\$!~";
+ for (my $i=0;$i<8;$i++) {
+ my $c = int(rand(length($chars)));
+ $pass .= substr($chars, $c, 1);
+ }
+ return $pass;
+}
+
+my $joinpass = randpass();
+
+sub ldaptime()
+{
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);
+ return sprintf "%04u%02u%02u%02u%02u%02u.0Z",
+ $year+1900, $mon+1, $mday, $hour, $min, $sec;
+}
+
+#######################
+# substitute a single variable
+sub substitute($)
+{
+ my $var = shift;
+
+ if ($var eq "BASEDN") {
+ return $basedn;
+ }
+
+ if ($var eq "DOMAINSID") {
+ return $opt_domainsid;
+ }
+
+ if ($var eq "DOMAIN") {
+ return $opt_domain;
+ }
+
+ if ($var eq "REALM") {
+ return $opt_realm;
+ }
+
+ if ($var eq "DNSDOMAIN") {
+ return $dnsdomain;
+ }
+
+ if ($var eq "HOSTNAME") {
+ return $opt_hostname;
+ }
+
+ if ($var eq "NETBIOSNAME") {
+ return $netbiosname;
+ }
+
+ if ($var eq "DNSNAME") {
+ return $dnsname;
+ }
+
+ if ($var eq "HOSTIP") {
+ return $opt_hostip;
+ }
+
+ if ($var eq "LDAPTIME") {
+ return ldaptime();
+ }
+
+ if ($var eq "NEWGUID") {
+ return randguid();
+ }
+
+ if ($var eq "NEWSCHEMAGUID") {
+ return randguid();
+ }
+
+ if ($var eq "DOMAINGUID") {
+ return $opt_domainguid;
+ }
+
+ if ($var eq "HOSTGUID") {
+ return $opt_hostguid;
+ }
+
+ if ($var eq "INVOCATIONID") {
+ return $opt_invocationid;
+ }
+
+ if ($var eq "DEFAULTSITE") {
+ return $defaultsite;
+ }
+
+ if ($var eq "ADMINPASS") {
+ return $opt_adminpass;
+ }
+
+ if ($var eq "RANDPASS") {
+ return randpass();
+ }
+
+ if ($var eq "JOINPASS") {
+ return $joinpass;
+ }
+
+ if ($var eq "NTTIME") {
+ return "" . nttime();
+ }
+
+ if ($var eq "WHEEL") {
+ return $opt_wheel;
+ }
+
+ if ($var eq "NOBODY") {
+ return $opt_nobody;
+ }
+
+ if ($var eq "NOGROUP") {
+ return $opt_nogroup;
+ }
+
+ if ($var eq "USERS") {
+ return $opt_users;
+ }
+
+ if ($var eq "USN") {
+ my $ret = $usn;
+ $usn = $ret + 1;
+ return $ret;
+ }
+
+ die "ERROR: Uknown substitution variable $var\n";
+}
+
+
+####################################################################
+# substitute all variables in a string
+sub apply_substitutions($)
+{
+ my $data = shift;
+ my $res = "";
+ while ($data =~ /(.*?)\$\{(\w*)\}(.*)/s) {
+ my $sub = substitute($2);
+ $res .= "$1$sub";
+ $data = $3;
+ }
+ $res .= $data;
+ return $res;
+}
+
+
+#####################################################################
+# write a string into a file
+sub FileSave($$)
+{
+ my($filename) = shift;
+ my($v) = shift;
+ local(*FILE);
+ open(FILE, ">$filename") || die "can't open $filename";
+ print FILE $v;
+ close(FILE);
+}
+
+#####################################################################
+# read a file into a string
+sub FileLoad($)
+{
+ my($filename) = shift;
+ local(*INPUTFILE);
+ open(INPUTFILE, $filename) || return undef;
+ my($saved_delim) = $/;
+ undef $/;
+ my($data) = <INPUTFILE>;
+ close(INPUTFILE);
+ $/ = $saved_delim;
+ return $data;
+}
+
+#######################################################################
+# add a foreign security principle
+sub add_foreign($$$)
+{
+ my $sid = shift;
+ my $desc = shift;
+ my $unixname = shift;
+ return "
+dn: CN=$sid,CN=ForeignSecurityPrincipals,\${BASEDN}
+objectClass: top
+objectClass: foreignSecurityPrincipal
+cn: $sid
+description: $desc
+instanceType: 4
+whenCreated: \${LDAPTIME}
+whenChanged: \${LDAPTIME}
+uSNCreated: 1
+uSNChanged: 1
+showInAdvancedViewOnly: TRUE
+name: $sid
+objectGUID: \${NEWGUID}
+objectSid: $sid
+objectCategory: CN=Foreign-Security-Principal,CN=Schema,CN=Configuration,\${BASEDN}
+unixName: $unixname
+
+";
+}
+
+############################################
+# show some help
+sub ShowHelp()
+{
+ print "
+Samba4 provisioning
+
+provision.pl [options]
+ --realm REALM set realm
+ --domain DOMAIN set domain
+ --domain-guid GUID set domainguid (otherwise random)
+ --domain-sid SID set domainsid (otherwise random)
+ --host-name HOSTNAME set hostname
+ --host-ip IPADDRESS set ipaddress
+ --host-guid GUID set hostguid (otherwise random)
+ --invocationid GUID set invocationid (otherwise random)
+ --adminpass PASSWORD choose admin password (otherwise random)
+ --nobody USERNAME choose 'nobody' user
+ --nogroup GROUPNAME choose 'nogroup' group
+ --wheel GROUPNAME choose 'wheel' privileged group
+ --users GROUPNAME choose 'users' group
+
+You must provide at least a realm and domain
+
+";
+ exit(1);
+}
+
+my $opt_help;
+
+GetOptions(
+ 'help|h|?' => \$opt_help,
+ 'realm=s' => \$opt_realm,
+ 'domain=s' => \$opt_domain,
+ 'domain-guid=s' => \$opt_domainguid,
+ 'domain-sid=s' => \$opt_domainsid,
+ 'host-name=s' => \$opt_hostname,
+ 'host-ip=s' => \$opt_hostip,
+ 'host-guid=s' => \$opt_hostguid,
+ 'invocationid=s' => \$opt_invocationid,
+ 'adminpass=s' => \$opt_adminpass,
+ 'nobody=s' => \$opt_nobody,
+ 'nogroup=s' => \$opt_nogroup,
+ 'wheel=s' => \$opt_wheel,
+ 'users=s' => \$opt_users,
+ );
+
+if ($opt_help ||
+ !$opt_realm ||
+ !$opt_domain ||
+ !$opt_hostname) {
+ ShowHelp();
+}
+
+$opt_realm=uc($opt_realm);
+$opt_domain=uc($opt_domain);
+$opt_hostname=lc($opt_hostname);
+$netbiosname=uc($opt_hostname);
+
+if (!$opt_hostip) {
+ my $hip = gethostbyname($opt_hostname);
+ if (defined $hip) {
+ $opt_hostip = inet_ntoa($hip);
+ } else {
+ $opt_hostip = "<0.0.0.0>";
+ }
+}
+
+print "Provisioning host '$opt_hostname'[$opt_hostip] for domain '$opt_domain' in realm '$opt_realm'\n";
+
+if (!$opt_nobody) {
+ if (defined getpwnam("nobody")) {
+ $opt_nobody = "nobody";
+ }
+}
+
+if (!$opt_nogroup) {
+ if (defined getgrnam("nogroup")) {
+ $opt_nogroup = "nogroup";
+ } elsif (defined getgrnam("nobody")) {
+ $opt_nogroup = "nobody";
+ }
+}
+
+if (!$opt_wheel) {
+ if (defined getgrnam("wheel")) {
+ $opt_wheel = "wheel";
+ } elsif (defined getgrnam("root")) {
+ $opt_wheel = "root";
+ }
+}
+
+if (!$opt_users) {
+ if (defined getgrnam("users")) {
+ $opt_users = "users";
+ }
+}
+
+$opt_nobody || die "Unable to determine a user for 'nobody'\n";
+$opt_nogroup || die "Unable to determine a group for 'nogroup'\n";
+$opt_users || die "Unable to determine a group for 'users'\n";
+$opt_wheel || die "Unable to determine a group for 'wheel'\n";
+
+print "Using nobody='$opt_nobody' nogroup='$opt_nogroup' wheel='$opt_wheel' users='$opt_users'\n";
+
+print "generating ldif ...\n";
+
+$dnsdomain = lc($opt_realm);
+$dnsname = lc($opt_hostname).".".$dnsdomain;
+$basedn = "DC=" . join(",DC=", split(/\./, $opt_realm));
+
+my $data = FileLoad("provision.ldif") || die "Unable to load provision.ldif\n";
+
+$data .= add_foreign("S-1-5-7", "Anonymous", "\${NOBODY}");
+$data .= add_foreign("S-1-1-0", "World", "\${NOGROUP}");
+$data .= add_foreign("S-1-5-2", "Network", "\${NOGROUP}");
+$data .= add_foreign("S-1-5-18", "System", "root");
+$data .= add_foreign("S-1-5-11", "Authenticated Users", "\${USERS}");
+
+if (!$opt_adminpass) {
+ $opt_adminpass = randpass();
+ print "chose random Administrator password '$opt_adminpass'\n";
+}
+
+# allow provisioning to be run from the source directory
+$ENV{"PATH"} .= ":bin:../bin";
+
+
+my $res = apply_substitutions($data);
+
+my $newdb = "newdb." . int(rand(1000));
+
+print "Putting new database files in $newdb\n";
+
+mkdir($newdb) || die "Unable to create temporary directory $newdb\n";
+
+FileSave("$newdb/sam.ldif", $res);
+
+print "creating $newdb/sam.ldb ...\n";
+
+system("ldbadd -H $newdb/sam.ldb $newdb/sam.ldif") == 0 || die "Failed to create sam.ldb\n";
+
+$data = FileLoad("rootdse.ldif") || die "Unable to load rootdse.ldif\n";
+
+$res = apply_substitutions($data);
+
+FileSave("$newdb/rootdse.ldif", $res);
+
+print "creating $newdb/rootdse.ldb ...\n";
+
+system("ldbadd -H $newdb/rootdse.ldb $newdb/rootdse.ldif") == 0 || die "Failed to create rootdse.ldb\n";
+
+$data = FileLoad("secrets.ldif") || die "Unable to load secrets.ldif\n";
+
+$res = apply_substitutions($data);
+
+FileSave("$newdb/secrets.ldif", $res);
+
+print "creating $newdb/secrets.ldb ...\n";
+
+system("ldbadd -H $newdb/secrets.ldb $newdb/secrets.ldif") == 0 || die "Failed to create secrets.ldb\n";
+
+$data = FileLoad("provision.zone") || die "Unable to load provision.zone\n";
+
+$res = apply_substitutions($data);
+
+print "saving dns zone to $newdb/$dnsdomain.zone ...\n";
+
+FileSave("$newdb/$dnsdomain.zone", $res);
+
+print "creating $newdb/hklm.ldb ... \n";
+
+system("ldbadd -H $newdb/hklm.ldb hklm.ldif") == 0 || die "Failed to create hklm.ldb\n";
+
+print "
+
+Installation:
+- Please move $newdb/*.ldb to the private/ directory of your
+ Samba4 installation
+- Please use $newdb/$dnsdomain.zone in BIND on your dns server
+";
+
+
diff --git a/source4/setup/provision.zone b/source4/setup/provision.zone
new file mode 100644
index 0000000000..c0b941c822
--- /dev/null
+++ b/source4/setup/provision.zone
@@ -0,0 +1,32 @@
+; generate by provision.pl
+$ORIGIN ${DNSDOMAIN}
+$TTL 1W
+@ IN SOA @ hostmaster (
+ 42 ; serial (d. adams)
+ 2D ; refresh
+ 4H ; retry
+ 6W ; expiry
+ 1W ) ; minimum
+ IN NS ${HOSTNAME}
+ IN A ${HOSTIP}
+;
+${HOSTNAME} IN A ${HOSTIP}
+${HOSTGUID}._msdcs IN CNAME ${HOSTNAME}
+;
+; global catalog servers
+_gc._tcp IN SRV 0 100 3268 ${HOSTNAME}
+_ldap._tcp.gc._msdcs IN SRV 0 100 389 ${HOSTNAME}
+_ldap._tcp.${DEFAULTSITE}._sites.gc._msdcs IN SRV 0 100 389 ${HOSTNAME}
+;
+; ldap servers
+_ldap._tcp IN SRV 0 100 389 ${HOSTNAME}
+_ldap._tcp.dc._msdcs IN SRV 0 100 389 ${HOSTNAME}
+_ldap._tcp.pdc._msdcs IN SRV 0 100 389 ${HOSTNAME}
+_ldap._tcp.${DOMAINGUID}.domains._msdcs IN SRV 0 100 389 ${HOSTNAME}
+_ldap._tcp.${DEFAULTSITE}._sites.dc._msdcs IN SRV 0 100 389 ${HOSTNAME}
+;
+; krb5 servers
+_kerberos._tcp IN SRV 0 100 88 ${HOSTNAME}
+_kerberos._tcp.dc._msdcs IN SRV 0 100 389 ${HOSTNAME}
+_kerberos._tcp.${DEFAULTSITE}._sites.dc._msdcs IN SRV 0 100 88 ${HOSTNAME}
+_kerberos._udp IN SRV 0 100 88 ${HOSTNAME}
diff --git a/source4/setup/rootdse.ldif b/source4/setup/rootdse.ldif
new file mode 100644
index 0000000000..534249859a
--- /dev/null
+++ b/source4/setup/rootdse.ldif
@@ -0,0 +1,32 @@
+dn: @INDEXLIST
+
+dn: @ATTRIBUTES
+createTimestamp: HIDDEN
+modifyTimestamp: HIDDEN
+
+dn: @SUBCLASSES
+
+dn: @MODULES
+@MODULE: timestamps
+
+dn: cn=rootDSE
+currentTime: _DYNAMIC_
+subschemaSubentry: CN=Aggregate,CN=Schema,CN=Configuration,${BASEDN}
+dsServiceName: CN=NTDS Settings,CN=${NETBIOSNAME},CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,${BASEDN}
+namingContexts: ${BASEDN}
+namingContexts: CN=Configuration,${BASEDN}
+namingContexts: CN=Schema,CN=Configuration,${BASEDN}
+defaultNamingContext: ${BASEDN}
+rootDomainNamingContext: ${BASEDN}
+configurationNamingContext: CN=Configuration,${BASEDN}
+schemaNamingContext: CN=Schema,CN=Configuration,${BASEDN}
+supportedLDAPVersion: 3
+highestCommittedUSN: _DYNAMIC_
+supportedSASLMechanisms: GSS-SPNEGO
+dnsHostName: ${DNSNAME}
+ldapServiceName: ${DNSDOMAIN}:${NETBIOSNAME}$@${DNSDOMAIN}
+serverName: CN=${NETBIOSNAME},CN=Servers,CN=Default-First-Site,CN=Sites,CN=Configuration,${BASEDN}
+isSynchronized: _DYNAMIC_
+domainFunctionality: 0
+forestFunctionality: 0
+domainControllerFunctionality: 2
diff --git a/source4/setup/rootdse.pl b/source4/setup/rootdse.pl
new file mode 100755
index 0000000000..799019fad8
--- /dev/null
+++ b/source4/setup/rootdse.pl
@@ -0,0 +1,152 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Getopt::Long;
+
+my $opt_hostname = `hostname`;
+chomp $opt_hostname;
+my $netbiosname;
+my $opt_realm;
+my $opt_domain;
+my $dnsdomain;
+my $dnsname;
+my $basedn;
+
+sub ldaptime()
+{
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);
+ return sprintf "%04u%02u%02u%02u%02u%02u.0Z",
+ $year+1900, $mon+1, $mday, $hour, $min, $sec;
+}
+
+#######################
+# substitute a single variable
+sub substitute($)
+{
+ my $var = shift;
+
+ if ($var eq "BASEDN") {
+ return $basedn;
+ }
+
+ if ($var eq "NETBIOSNAME") {
+ return $netbiosname;
+ }
+
+ if ($var eq "DNSNAME") {
+ return $dnsname;
+ }
+
+ if ($var eq "DNSDOMAIN") {
+ return $dnsdomain;
+ }
+
+ die "ERROR: Uknown substitution variable $var\n";
+}
+
+#####################################################################
+# write a string into a file
+sub FileSave($$)
+{
+ my($filename) = shift;
+ my($v) = shift;
+ local(*FILE);
+ open(FILE, ">$filename") || die "can't open $filename";
+ print FILE $v;
+ close(FILE);
+}
+
+#####################################################################
+# read a file into a string
+sub FileLoad($)
+{
+ my($filename) = shift;
+ local(*INPUTFILE);
+ open(INPUTFILE, $filename) || return undef;
+ my($saved_delim) = $/;
+ undef $/;
+ my($data) = <INPUTFILE>;
+ close(INPUTFILE);
+ $/ = $saved_delim;
+ return $data;
+}
+
+############################################
+# show some help
+sub ShowHelp()
+{
+ print "
+Samba4 provisioning
+
+rootdse.pl [options]
+ --realm REALM set realm
+ --domain DOMAIN set domain
+ --hostname HOSTNAME set hostname
+
+You must provide at least a realm and domain
+
+";
+ exit(1);
+}
+
+my $opt_help;
+
+GetOptions(
+ 'help|h|?' => \$opt_help,
+ 'realm=s' => \$opt_realm,
+ 'domain=s' => \$opt_domain,
+ 'hostname=s' => \$opt_hostname,
+ );
+
+if ($opt_help ||
+ !$opt_realm ||
+ !$opt_domain ||
+ !$opt_hostname) {
+ ShowHelp();
+}
+
+$opt_realm=uc($opt_realm);
+$opt_domain=uc($opt_domain);
+$opt_hostname=lc($opt_hostname);
+$netbiosname=uc($opt_hostname);
+
+print "Provisioning host '$opt_hostname' with netbios name '$netbiosname' for domain '$opt_domain' in realm '$opt_realm'\n";
+
+print "generating ldif ...\n";
+
+$dnsdomain = lc($opt_realm);
+$dnsname = $opt_hostname.".".$dnsdomain;
+$basedn = "DC=" . join(",DC=", split(/\./, $opt_realm));
+
+my $data = FileLoad("rootdse.ldif") || die "Unable to load rootdse.ldif\n";
+
+my $res = "";
+
+print "applying substitutions ...\n";
+
+while ($data =~ /(.*?)\$\{(\w*)\}(.*)/s) {
+ my $sub = substitute($2);
+ $res .= "$1$sub";
+ $data = $3;
+}
+$res .= $data;
+
+print "saving ldif to newrootdse.ldif ...\n";
+
+FileSave("newrootdse.ldif", $res);
+
+unlink("newrootdse.ldb");
+
+print "creating newrootdse.ldb ...\n";
+
+# allow provisioning to be run from the source directory
+$ENV{"PATH"} .= ":bin:../bin";
+
+system("ldbadd -H newrootdse.ldb newrootdse.ldif");
+
+print "done
+
+Please move newrootdse.ldb to rootdse.ldb in the private/ directory of your
+Samba4 installation
+";
+
diff --git a/source4/setup/secrets.ldif b/source4/setup/secrets.ldif
new file mode 100644
index 0000000000..f44521a07b
--- /dev/null
+++ b/source4/setup/secrets.ldif
@@ -0,0 +1,30 @@
+dn: @INDEXLIST
+@IDXATTR: cn
+@IDXATTR: flatname
+@IDXATTR: realm
+
+dn: @ATTRIBUTES
+realm: CASE_INSENSITIVE
+flatname: CASE_INSENSITIVE
+sAMAccountName: CASE_INSENSITIVE
+
+dn: CN=LSA Secrets
+objectClass: top
+objectClass: container
+cn: LSA Secrets
+
+dn: CN=Primary Domains
+objectClass: top
+objectClass: container
+cn: Primary Domains
+
+dn: flatname=${DOMAIN},CN=Primary Domains
+objectClass: top
+objectClass: primaryDomain
+flatname: ${DOMAIN}
+realm: ${REALM}
+secret: ${JOINPASS}
+sAMAccountName: ${NETBIOSNAME}$
+whenCreated: ${LDAPTIME}
+whenChanged: ${LDAPTIME}
+