From 9af8d02b2230f78e4842106b918ff278dadd1d59 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 8 Apr 2010 23:58:15 +0200 Subject: s4-net: Convert machinepw command to python. --- source4/scripting/python/samba/netcmd/__init__.py | 2 + source4/scripting/python/samba/netcmd/join.py | 59 ++++++++++++++++++++ source4/scripting/python/samba/netcmd/machinepw.py | 53 ++++++++++++++++++ source4/scripting/python/samba/netcmd/vampire.py | 63 ---------------------- 4 files changed, 114 insertions(+), 63 deletions(-) create mode 100644 source4/scripting/python/samba/netcmd/join.py create mode 100644 source4/scripting/python/samba/netcmd/machinepw.py (limited to 'source4/scripting') diff --git a/source4/scripting/python/samba/netcmd/__init__.py b/source4/scripting/python/samba/netcmd/__init__.py index 8164bbbe81..528262ec9e 100644 --- a/source4/scripting/python/samba/netcmd/__init__.py +++ b/source4/scripting/python/samba/netcmd/__init__.py @@ -155,3 +155,5 @@ from samba.netcmd.user import cmd_user commands["user"] = cmd_user() from samba.netcmd.vampire import cmd_vampire commands["vampire"] = cmd_vampire() +from samba.netcmd.machinepw import cmd_machinepw +commands["machinepw"] = cmd_machinepw() diff --git a/source4/scripting/python/samba/netcmd/join.py b/source4/scripting/python/samba/netcmd/join.py new file mode 100644 index 0000000000..981161d8ba --- /dev/null +++ b/source4/scripting/python/samba/netcmd/join.py @@ -0,0 +1,59 @@ +#!/usr/bin/python +# +# joins +# +# Copyright Jelmer Vernooij 2010 +# +# 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 . +# + +import samba.getopt as options + +from samba.net import Net, LIBNET_JOIN_AUTOMATIC +from samba.netcmd import Command, CommandError +from samba.dcerpc.netr import SEC_CHAN_WKSTA, SEC_CHAN_BDC + + +class cmd_join(Command): + """Joins domain as either member or backup domain controller.""" + + synopsis = "%prog join [BDC | MEMBER] [options]" + + takes_optiongroups = { + "sambaopts": options.SambaOptions, + "versionopts": options.VersionOptions, + "credopts": options.CredentialsOptions, + } + + takes_args = ["domain", "role?"] + + def run(self, domain, role=None, sambaopts=None, credopts=None, + versionopts=None): + lp = sambaopts.get_loadparm() + creds = credopts.get_credentials(lp) + net = Net(creds, lp) + + if role is None: + secure_channel_type = SEC_CHAN_WKSTA + elif role == "BDC": + secure_channel_type = SEC_CHAN_BDC + elif role == "MEMBER": + secure_channel_type = SEC_CHAN_WKSTA + else: + raise CommandError("Invalid role %s (possible values: MEMBER, BDC)" % role) + + (join_password, sid, domain_name) = net.join(domain, + lp.get("netbios name"), SEC_CHAN_WKSTA, LIBNET_JOIN_AUTOMATIC) + + self.outf.write("Joined domain %s (%s)\n" % (domain_name, sid)) diff --git a/source4/scripting/python/samba/netcmd/machinepw.py b/source4/scripting/python/samba/netcmd/machinepw.py new file mode 100644 index 0000000000..8788e06a60 --- /dev/null +++ b/source4/scripting/python/samba/netcmd/machinepw.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +# +# Machine passwords +# Copyright Jelmer Vernooij 2010 +# +# 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 . +# + +import samba.getopt as options + +from samba import Ldb +from samba.auth import system_session +from samba.netcmd import Command, CommandError + + +class cmd_machinepw(Command): + """Get a machine password out of our SAM.""" + + synopsis = "%prog machinepw " + + takes_optiongroups = { + "sambaopts": options.SambaOptions, + "versionopts": options.VersionOptions, + "credopts": options.CredentialsOptions, + } + + takes_args = ["secret"] + + def run(self, secret, sambaopts=None, credopts=None, versionopts=None): + lp = sambaopts.get_loadparm() + creds = credopts.get_credentials(lp) + url = lp.get("secrets database") + secretsdb = Ldb(url=url, session_info=system_session(), + credentials=creds, lp=lp) + + result = secretsdb.search(attrs=["secret"], + expression="(&(objectclass=primaryDomain)(samaccountname=%s))" % secret) + + if len(result) != 1: + raise CommandError("search returned %d records, expected 1" % len(result)) + + self.outf.write("%s\n" % result[0]["secret"]) diff --git a/source4/scripting/python/samba/netcmd/vampire.py b/source4/scripting/python/samba/netcmd/vampire.py index f5598cff62..fcf969490a 100644 --- a/source4/scripting/python/samba/netcmd/vampire.py +++ b/source4/scripting/python/samba/netcmd/vampire.py @@ -50,66 +50,3 @@ class cmd_vampire(Command): net = Net(creds, lp) (domain_name, domain_sid) = net.vampire(domain=domain, target_dir=target_dir) self.outf.write("Vampired domain %s (%s)\n" % (domain_name, domain_sid)) - - -class cmd_samdump_keytab(Command): - """Dumps kerberos keys of a domain into a keytab.""" - - synopsis = "%prog samdump keytab [options] " - - takes_optiongroups = { - "sambaopts": options.SambaOptions, - "credopts": options.CredentialsOptions, - "versionopts": options.VersionOptions, - } - - takes_args = ["keytab"] - - def run(self, keytab, credopts=None, sambaopts=None, versionopts=None): - lp = sambaopts.get_loadparm() - creds = credopts.get_credentials(lp) - net = Net(creds, lp) - net.samdump_keytab(keytab) - - -class cmd_samsync_ldb(Command): - """Synchronise into the local ldb the SAM of a domain.""" - - synopsis = "%prog samsync" - - takes_optiongroups = { - "sambaopts": options.SambaOptions, - "credopts": options.CredentialsOptions, - "versionopts": options.VersionOptions, - } - - def run(self, credopts=None, sambaopts=None, versionopts=None): - lp = sambaopts.get_loadparm() - creds = credopts.get_credentials(lp) - net = Net(creds, lp) - net.samdump() - - -class cmd_samsync(SuperCommand): - - commands = { - "ldb": cmd_samsync_ldb() - } - - -class cmd_samdump(Command): - """Dump the sam database.""" - - synopsis = "%prog samdump" - - takes_optiongroups = { - "sambaopts": options.SambaOptions, - "credopts": options.CredentialsOptions, - "versionopts": options.VersionOptions, - } - - def run(self, credopts=None, sambaopts=None, versionopts=None): - lp = sambaopts.get_loadparm() - creds = credopts.get_credentials(lp) - net = Net(creds, lp) - net.samdump() -- cgit