[PATCHES] samba-tool: add --site parameter to provision command

Bjoern Baumbach bb at sernet.de
Wed Jun 4 06:25:44 MDT 2014


Hi!

Currently there is no option specify the Domain Controllers site when
setting up a new DC in a new forest. There is also no samba-tool command
to move a DC to another site.

Please review the attached patches that add the --site option to the
samba-tool domain provision command. This offers the option to specify a
default initial site name.

Best regards
Björn

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de
-------------- next part --------------
From 207b3d128770a1b4fbb5326c2598bd3526781e43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= <bb at sernet.de>
Date: Mon, 26 May 2014 16:17:50 +0200
Subject: [PATCH 1/3] samba-tool: add --site parameter to provision command

This new parameter offers the option to specify a default initial site name.
Otherwise it will be "Default-First-Site-Name".

Signed-off-by: Björn Baumbach <bb at sernet.de>
---
 python/samba/netcmd/domain.py      |    5 ++++-
 python/samba/provision/__init__.py |   10 +++++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/python/samba/netcmd/domain.py b/python/samba/netcmd/domain.py
index 0e00bd5..b37ca1a 100644
--- a/python/samba/netcmd/domain.py
+++ b/python/samba/netcmd/domain.py
@@ -167,6 +167,8 @@ class cmd_domain_provision(Command):
                 help="set IPv4 ipaddress"),
          Option("--host-ip6", type="string", metavar="IP6ADDRESS",
                 help="set IPv6 ipaddress"),
+         Option("--site", type="string", metavar="SITENAME",
+                help="set site name"),
          Option("--adminpass", type="string", metavar="PASSWORD",
                 help="choose admin password (otherwise random)"),
          Option("--krbtgtpass", type="string", metavar="PASSWORD",
@@ -244,6 +246,7 @@ class cmd_domain_provision(Command):
             host_ip=None,
             host_ip6=None,
             adminpass=None,
+            site=None,
             krbtgtpass=None,
             machinepass=None,
             dns_backend=None,
@@ -411,7 +414,7 @@ class cmd_domain_provision(Command):
                   domainguid=domain_guid, domainsid=domain_sid,
                   hostname=host_name,
                   hostip=host_ip, hostip6=host_ip6,
-                  ntdsguid=ntds_guid,
+                  sitename=site, ntdsguid=ntds_guid,
                   invocationid=invocationid, adminpass=adminpass,
                   krbtgtpass=krbtgtpass, machinepass=machinepass,
                   dns_backend=dns_backend, dns_forwarder=dns_forwarder,
diff --git a/python/samba/provision/__init__.py b/python/samba/provision/__init__.py
index 0acd6f4..ff27b9c 100644
--- a/python/samba/provision/__init__.py
+++ b/python/samba/provision/__init__.py
@@ -1749,7 +1749,7 @@ def interface_ips_v6(lp):
 def provision_fill(samdb, secrets_ldb, logger, names, paths,
                    domainsid, schema=None,
                    targetdir=None, samdb_fill=FILL_FULL,
-                   hostip=None, hostip6=None,
+                   hostip=None, hostip6=None, sitename=None,
                    next_rid=1000, dc_rid=None, adminpass=None, krbtgtpass=None,
                    domainguid=None, policyguid=None, policyguid_dc=None,
                    invocationid=None, machinepass=None, ntdsguid=None,
@@ -1823,10 +1823,13 @@ def provision_fill(samdb, secrets_ldb, logger, names, paths,
                 # It might be that this attribute does not exist in this schema
                 raise
 
+        if sitename is None:
+            sitename = DEFAULTSITE
+
         setup_ad_dns(samdb, secrets_ldb, domainsid, names, paths, lp, logger,
                      hostip=hostip, hostip6=hostip6, dns_backend=dns_backend,
                      dnspass=dnspass, os_level=dom_for_fun_level,
-                     targetdir=targetdir, site=DEFAULTSITE, fill_level=samdb_fill)
+                     targetdir=targetdir, site=sitename, fill_level=samdb_fill)
 
         domainguid = samdb.searchone(basedn=samdb.get_default_basedn(),
                                      attribute="objectGUID")
@@ -2152,7 +2155,8 @@ def provision(logger, session_info, smbconf=None,
         if samdb_fill == FILL_FULL:
             provision_fill(samdb, secrets_ldb, logger, names, paths,
                     schema=schema, targetdir=targetdir, samdb_fill=samdb_fill,
-                    hostip=hostip, hostip6=hostip6, domainsid=domainsid,
+                    hostip=hostip, hostip6=hostip6, sitename=sitename,
+                    domainsid=domainsid,
                     next_rid=next_rid, dc_rid=dc_rid, adminpass=adminpass,
                     krbtgtpass=krbtgtpass, domainguid=domainguid,
                     policyguid=policyguid, policyguid_dc=policyguid_dc,
-- 
1.7.9.5


From 566d6d71e10e57f76688e1dabe9fd4b13fa9f88a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= <bb at sernet.de>
Date: Wed, 28 May 2014 17:56:48 +0200
Subject: [PATCH 2/3] samba-tool domain: remove duplicate check if site is set

Signed-off-by: Björn Baumbach <bb at sernet.de>
---
 python/samba/netcmd/domain.py |    3 ---
 1 file changed, 3 deletions(-)

diff --git a/python/samba/netcmd/domain.py b/python/samba/netcmd/domain.py
index b37ca1a..2e7a9c7 100644
--- a/python/samba/netcmd/domain.py
+++ b/python/samba/netcmd/domain.py
@@ -512,9 +512,6 @@ class cmd_domain_dcpromo(Command):
         else:
             logger.setLevel(logging.INFO)
 
-        if site is None:
-            site = "Default-First-Site-Name"
-
         netbios_name = lp.get("netbios name")
 
         if not role is None:
-- 
1.7.9.5


From 3dd90ebf4930d03dd66dc33cf6b1c5b16fa64eb6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= <bb at sernet.de>
Date: Wed, 28 May 2014 17:57:35 +0200
Subject: [PATCH 3/3] samba-tool domain: define DEFAULTSITE globally and use
 it

Signed-off-by: Björn Baumbach <bb at sernet.de>
---
 python/samba/netcmd/domain.py |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/python/samba/netcmd/domain.py b/python/samba/netcmd/domain.py
index 2e7a9c7..ecfb513 100644
--- a/python/samba/netcmd/domain.py
+++ b/python/samba/netcmd/domain.py
@@ -76,6 +76,8 @@ from samba.provision.common import (
     FILL_DRS
 )
 
+DEFAULTSITE = "Default-First-Site-Name"
+
 def get_testparm_var(testparm, smbconf, varname):
     cmd = "%s -s -l --parameter-name='%s' %s 2>/dev/null" % (testparm, varname, smbconf)
     output = os.popen(cmd, 'r').readline()
@@ -502,7 +504,7 @@ class cmd_domain_dcpromo(Command):
         net = Net(creds, lp, server=credopts.ipaddress)
 
         if site is None:
-            site = "Default-First-Site-Name"
+            site = DEFAULTSITE
 
         logger = self.get_logger()
         if verbose:
@@ -581,7 +583,7 @@ class cmd_domain_join(Command):
         net = Net(creds, lp, server=credopts.ipaddress)
 
         if site is None:
-            site = "Default-First-Site-Name"
+            site = DEFAULTSITE
 
         logger = self.get_logger()
         if verbose:
-- 
1.7.9.5


More information about the samba-technical mailing list