[PATCH] s4:provision - Added support for specifying FDS instance name.
Endi S. Dewata
edewata at redhat.com
Thu Jan 28 13:29:08 MST 2010
---
selftest/target/Samba4.pm | 33 ++++++++++++++------
source4/scripting/python/samba/provision.py | 3 +-
source4/scripting/python/samba/provisionbackend.py | 13 ++++++--
source4/setup/fedorads.inf | 24 +++++++-------
source4/setup/provision | 3 ++
5 files changed, 50 insertions(+), 26 deletions(-)
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index e6ed0ab..34f740f 100644
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -67,7 +67,7 @@ sub slapd_stop($$)
{
my ($self, $envvars) = @_;
if ($self->{ldap} eq "fedora-ds") {
- system("$envvars->{LDAPDIR}/slapd-samba4/stop-slapd");
+ system("$envvars->{LDAPDIR}/slapd-$envvars->{LDAP_INSTANCE}/stop-slapd");
} elsif ($self->{ldap} eq "openldap") {
open(IN, "<$envvars->{OPENLDAP_PIDFILE}") or
die("unable to open slapd pid file: $envvars->{OPENLDAP_PIDFILE}");
@@ -209,14 +209,14 @@ type: 0x3
");
}
-sub mk_fedora_ds($$)
+sub mk_fedora_ds($$$)
{
- my ($self, $ldapdir) = @_;
+ my ($self, $ldapdir, $ldap_instance) = @_;
#Make the subdirectory be as fedora DS would expect
- my $fedora_ds_dir = "$ldapdir/slapd-samba4";
+ my $fedora_ds_dir = "$ldapdir/slapd-$ldap_instance";
- my $pidfile = "$fedora_ds_dir/logs/slapd-samba4.pid";
+ my $pidfile = "$fedora_ds_dir/logs/slapd-$ldap_instance.pid";
return ($fedora_ds_dir, $pidfile);
}
@@ -680,6 +680,7 @@ nogroup:x:65534:nobody
REALM => $ctx->{realm},
PASSWORD => $ctx->{password},
LDAPDIR => $ctx->{ldapdir},
+ LDAP_INSTANCE => $ctx->{ldap_instance},
WINBINDD_SOCKET_DIR => $ctx->{winbindd_socket_dir},
NCALRPCDIR => $ctx->{ncalrpcdir},
LOCKDIR => $ctx->{lockdir},
@@ -711,9 +712,10 @@ sub provision_raw_step2($$$)
return $ret;
}
-sub provision($$$$$$$)
+sub provision($$$$$$$$$)
{
- my ($self, $prefix, $server_role, $netbiosname, $netbiosalias, $swiface, $password, $kdc_ipv4) = @_;
+ my ($self, $prefix, $server_role, $netbiosname, $netbiosalias, $swiface, $password, $kdc_ipv4,
+ $ldap_instance) = @_;
my $ctx = $self->provision_raw_prepare($prefix, $server_role,
$netbiosname, $netbiosalias,
@@ -788,6 +790,12 @@ sub provision($$$$$$$)
if ($self->{ldap} eq "fedora-ds") {
$ctx->{sid_generator} = "backend";
}
+
+ if (!$ldap_instance) {
+ $ctx->{ldap_instance} = "samba4";
+ } else {
+ $ctx->{ldap_instance} = $ldap_instance;
+ }
}
my $ret = $self->provision_raw_step1($ctx);
@@ -800,9 +808,12 @@ sub provision($$$$$$$)
($ret->{SLAPD_CONF_D}, $ret->{OPENLDAP_PIDFILE}) = $self->mk_openldap($ctx->{ldapdir}) or die("Unable to create openldap directories");
} elsif ($self->{ldap} eq "fedora-ds") {
+ if ($ctx->{ldap_instance}) {
+ push (@{$ctx->{provision_options}}, "--ldap-instance=\"$ctx->{ldap_instance}\"");
+ }
push (@{$ctx->{provision_options}}, "--slapd-path=" . "$ENV{FEDORA_DS_ROOT}/sbin/ns-slapd");
push (@{$ctx->{provision_options}}, "--setup-ds-path=" . "$ENV{FEDORA_DS_ROOT}/sbin/setup-ds.pl");
- ($ret->{FEDORA_DS_DIR}, $ret->{FEDORA_DS_PIDFILE}) = $self->mk_fedora_ds($ctx->{ldapdir}) or die("Unable to create fedora ds directories");
+ ($ret->{FEDORA_DS_DIR}, $ret->{FEDORA_DS_PIDFILE}) = $self->mk_fedora_ds($ctx->{ldapdir}, $ctx->{ldap_instance}) or die("Unable to create fedora ds directories");
}
}
@@ -823,7 +834,8 @@ sub provision_member($$$)
"localmember",
3,
"localmemberpass",
- $dcvars->{SERVER_IP});
+ $dcvars->{SERVER_IP},
+ "member");
$ret or die("Unable to provision");
@@ -857,7 +869,8 @@ sub provision_dc($$)
"localdc",
1,
"localdcpass",
- "127.0.0.1");
+ "127.0.0.1",
+ "dc");
$self->add_wins_config("$prefix/private") or
die("Unable to add wins configuration");
diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py
index 58c172f..3b98ba7 100644
--- a/source4/scripting/python/samba/provision.py
+++ b/source4/scripting/python/samba/provision.py
@@ -1111,7 +1111,7 @@ def provision(setup_dir, message, session_info,
dnspass=None, root=None, nobody=None, users=None,
wheel=None, backup=None, aci=None, serverrole=None,
dom_for_fun_level=None,
- ldap_backend_extra_port=None, backend_type=None,
+ ldap_backend_extra_port=None, backend_type=None, ldap_instance=None,
sitename=None,
ol_mmr_urls=None, ol_olc=None,
setup_ds_path=None, slapd_path=None, nosync=False,
@@ -1238,6 +1238,7 @@ def provision(setup_dir, message, session_info,
ldapadminpass=ldapadminpass,
slapd_path=slapd_path,
ldap_backend_extra_port=ldap_backend_extra_port,
+ ldap_instance=ldap_instance,
ldap_dryrun_mode=ldap_dryrun_mode,
root=root,
setup_ds_path=setup_ds_path)
diff --git a/source4/scripting/python/samba/provisionbackend.py b/source4/scripting/python/samba/provisionbackend.py
index 3dff6ed..fce4f59 100644
--- a/source4/scripting/python/samba/provisionbackend.py
+++ b/source4/scripting/python/samba/provisionbackend.py
@@ -532,6 +532,7 @@ class FDSBackend(LDAPBackend):
ldapadminpass=None,
slapd_path=None,
ldap_backend_extra_port=None,
+ ldap_instance=None,
ldap_dryrun_mode=False,
root=None,
setup_ds_path=None):
@@ -553,6 +554,11 @@ class FDSBackend(LDAPBackend):
self.root = root
self.setup_ds_path = setup_ds_path
+ if ldap_instance is None:
+ self.ldap_instance = "samba4";
+ else:
+ self.ldap_instance = ldap_instance
+
self.sambadn = "CN=Samba"
self.fedoradsinf = os.path.join(paths.ldapdir, "fedorads.inf")
@@ -597,6 +603,7 @@ class FDSBackend(LDAPBackend):
"DNSDOMAIN": self.names.dnsdomain,
"LDAPDIR": self.paths.ldapdir,
"DOMAINDN": self.names.domaindn,
+ "LDAP_INSTANCE": self.ldap_instance,
"LDAPMANAGERDN": self.names.ldapmanagerdn,
"LDAPMANAGERPASS": self.ldapadminpass,
"SERVERPORT": serverport})
@@ -671,7 +678,7 @@ class FDSBackend(LDAPBackend):
self.credentials.set_bind_dn(self.names.ldapmanagerdn)
# Destory the target directory, or else setup-ds.pl will complain
- fedora_ds_dir = os.path.join(self.paths.ldapdir, "slapd-samba4")
+ fedora_ds_dir = os.path.join(self.paths.ldapdir, "slapd-" + self.ldap_instance)
shutil.rmtree(fedora_ds_dir, True)
self.slapd_provision_command = [self.slapd_path, "-D", fedora_ds_dir, "-i", self.paths.slapdpid];
@@ -679,7 +686,7 @@ class FDSBackend(LDAPBackend):
self.slapd_provision_command.append("-d0")
#the command for the final run is the normal script
- self.slapd_command = [os.path.join(self.paths.ldapdir, "slapd-samba4", "start-slapd")]
+ self.slapd_command = [os.path.join(self.paths.ldapdir, "slapd-" + self.ldap_instance, "start-slapd")]
# If we were just looking for crashes up to this point, it's a
# good time to exit before we realise we don't have Fedora DS on
@@ -700,7 +707,7 @@ class FDSBackend(LDAPBackend):
# Load samba-admin
retcode = subprocess.call([
- os.path.join(self.paths.ldapdir, "slapd-samba4", "ldif2db"), "-s", self.sambadn, "-i", self.samba_ldif],
+ os.path.join(self.paths.ldapdir, "slapd-" + self.ldap_instance, "ldif2db"), "-s", self.sambadn, "-i", self.samba_ldif],
close_fds=True, shell=False)
if retcode != 0:
raise ProvisioningError("ldif2db failed")
diff --git a/source4/setup/fedorads.inf b/source4/setup/fedorads.inf
index f4f92a0..1243a06 100644
--- a/source4/setup/fedorads.inf
+++ b/source4/setup/fedorads.inf
@@ -8,20 +8,20 @@ ldapifilepath=${LDAPDIR}/ldapi
Suffix= ${DOMAINDN}
RootDN= ${LDAPMANAGERDN}
RootDNPwd= ${LDAPMANAGERPASS}
-ServerIdentifier= samba4
+ServerIdentifier= ${LDAP_INSTANCE}
${SERVERPORT}
-inst_dir= ${LDAPDIR}/slapd-samba4
-config_dir= ${LDAPDIR}/slapd-samba4
-schema_dir= ${LDAPDIR}/slapd-samba4/schema
-lock_dir= ${LDAPDIR}/slapd-samba4/lock
-log_dir= ${LDAPDIR}/slapd-samba4/logs
-run_dir= ${LDAPDIR}/slapd-samba4/logs
-db_dir= ${LDAPDIR}/slapd-samba4/db
-bak_dir= ${LDAPDIR}/slapd-samba4/bak
-tmp_dir= ${LDAPDIR}/slapd-samba4/tmp
-ldif_dir= ${LDAPDIR}/slapd-samba4/ldif
-cert_dir= ${LDAPDIR}/slapd-samba4
+inst_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}
+config_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}
+schema_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/schema
+lock_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/lock
+log_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/logs
+run_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/logs
+db_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/db
+bak_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/bak
+tmp_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/tmp
+ldif_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}/ldif
+cert_dir= ${LDAPDIR}/slapd-${LDAP_INSTANCE}
start_server= 0
install_full_schema= 0
diff --git a/source4/setup/provision b/source4/setup/provision
index 1ae52d2..99f9840 100755
--- a/source4/setup/provision
+++ b/source4/setup/provision
@@ -95,6 +95,8 @@ parser.add_option("--ldap-backend-extra-port", type="int", metavar="LDAP-BACKEND
parser.add_option("--ldap-backend-type", type="choice", metavar="LDAP-BACKEND-TYPE",
help="LDAP backend type (fedora-ds or openldap)",
choices=["fedora-ds", "openldap"])
+parser.add_option("--ldap-instance", type="string", metavar="LDAP-INSTANCE",
+ help="LDAP instance name")
parser.add_option("--ldap-backend-nosync", help="Configure LDAP backend not to call fsync() (for performance in test environments)", action="store_true")
parser.add_option("--server-role", type="choice", metavar="ROLE",
choices=["domain controller", "dc", "member server", "member", "standalone"],
@@ -239,6 +241,7 @@ provision(setup_dir, message,
serverrole=server_role, dom_for_fun_level=dom_for_fun_level,
ldap_backend_extra_port=opts.ldap_backend_extra_port,
backend_type=opts.ldap_backend_type,
+ ldap_instance=opts.ldap_instance,
ldapadminpass=opts.ldapadminpass, ol_mmr_urls=opts.ol_mmr_urls,
slapd_path=opts.slapd_path, setup_ds_path=opts.setup_ds_path,
nosync=opts.nosync,ldap_dryrun_mode=opts.ldap_dryrun_mode,useeadb=eadb)
--
1.6.6
------=_Part_60912_106766552.1265660638740--
More information about the samba-technical
mailing list