s4-samba-tool: allow specification of targetdir when joining as (RO)DC
[Samba/gebeck_regimport.git] / source4 / scripting / python / samba / netcmd / join.py
blob70b750191a1e3ed7eac124644e09df6d21ef5fc4
1 #!/usr/bin/env python
3 # joins
4 #
5 # Copyright Jelmer Vernooij 2010
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 import samba.getopt as options
23 from samba.net import Net, LIBNET_JOIN_AUTOMATIC
24 from samba.netcmd import Command, CommandError, Option
25 from samba.dcerpc.misc import SEC_CHAN_WKSTA
26 from samba.join import join_RODC, join_DC
28 class cmd_join(Command):
29 """Joins domain as either member or backup domain controller [server connection needed]"""
31 synopsis = "%prog join <dnsdomain> [DC | RODC | MEMBER] [options]"
33 takes_optiongroups = {
34 "sambaopts": options.SambaOptions,
35 "versionopts": options.VersionOptions,
36 "credopts": options.CredentialsOptions,
39 takes_options = [
40 Option("--server", help="DC to join", type=str),
41 Option("--site", help="site to join", type=str),
42 Option("--targetdir", help="where to store provision", type=str),
45 takes_args = ["domain", "role?"]
47 def run(self, domain, role=None, sambaopts=None, credopts=None,
48 versionopts=None, server=None, site=None, targetdir=None):
49 lp = sambaopts.get_loadparm()
50 creds = credopts.get_credentials(lp)
51 net = Net(creds, lp, server=credopts.ipaddress)
53 if site is None:
54 site = "Default-First-Site-Name"
56 netbios_name = lp.get("netbios name")
58 if not role is None:
59 role = role.upper()
61 if role is None or role == "MEMBER":
62 secure_channel_type = SEC_CHAN_WKSTA
63 elif role == "DC":
64 join_DC(server=server, creds=creds, lp=lp, domain=domain,
65 site=site, netbios_name=netbios_name, targetdir=targetdir)
66 return
67 elif role == "RODC":
68 join_RODC(server=server, creds=creds, lp=lp, domain=domain,
69 site=site, netbios_name=netbios_name, targetdir=targetdir)
70 return
71 else:
72 raise CommandError("Invalid role %s (possible values: MEMBER, BDC, RODC)" % role)
74 (join_password, sid, domain_name) = net.join(domain,
75 netbios_name,
76 secure_channel_type,
77 LIBNET_JOIN_AUTOMATIC)
79 self.outf.write("Joined domain %s (%s)\n" % (domain_name, sid))