[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Tue Nov 29 03:01:03 MST 2011
The branch, master has been updated
via b94b7a2 selftest/Samba4: pass '--machinepass' to 'samba-tool domain join'
via f9f261c s4:python: add --machinepass option to 'samba-tool domain join'
via 4edbc71 s4:python/samba/join.py: add optional 'machinepass' parameter to join_*()
via 948f091 s4:python/samba/join.py: add optional 'machinepass' parameter to class dc_join
via f8fbc41 s4:py_net: add optional 'machinepass' parameter to py_net_join_member()
via fe69c58 s4:libnet: make it possible to join with a given machine password
via 677f524 s4:libnet/py_net: ZERO_STRUCT() struct libnet_Join_member in py_net_join_member()
via 1764607 s4:torture/rpc: use talloc_zero() in torture_join_domain()
via 5baa443 s4:libnet: use talloc_zero(struct libnet_JoinDomain) in libnet_Join_member()
from 2bff209 s4-samba-tool: Add --principal argument to samba-tool domain exportkeytab
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit b94b7a2fe106702dfd6bf039d70c10f6858d7954
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Nov 28 19:34:52 2011 +0100
selftest/Samba4: pass '--machinepass' to 'samba-tool domain join'
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Tue Nov 29 11:00:42 CET 2011 on sn-devel-104
commit f9f261cb6090aa26357d4949008763b098122902
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Nov 16 15:32:47 2011 +0100
s4:python: add --machinepass option to 'samba-tool domain join'
metze
commit 4edbc719e5aa63b617f170b51382592dd57aa7b7
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Nov 28 20:03:11 2011 +0100
s4:python/samba/join.py: add optional 'machinepass' parameter to join_*()
metze
commit 948f091a22a5e2bd348d2840e0fdff1d9c9baca7
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Nov 28 20:03:11 2011 +0100
s4:python/samba/join.py: add optional 'machinepass' parameter to class dc_join
metze
commit f8fbc4163b3f3e02bf15fb495b2d2b721a67162b
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Nov 28 19:49:54 2011 +0100
s4:py_net: add optional 'machinepass' parameter to py_net_join_member()
metze
commit fe69c589e8f3196f2f478adf611bc78a0ea66f50
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Nov 16 13:06:19 2011 +0100
s4:libnet: make it possible to join with a given machine password
metze
commit 677f5246f16c7c2dd4b0006202b2c7ec9f8c3520
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Nov 16 15:30:48 2011 +0100
s4:libnet/py_net: ZERO_STRUCT() struct libnet_Join_member in py_net_join_member()
metze
commit 17646071503f166eab31721edab9138141449db1
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Nov 16 15:29:03 2011 +0100
s4:torture/rpc: use talloc_zero() in torture_join_domain()
metze
commit 5baa44345f6b6fbf4c922f5bc60484517794da2d
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Nov 16 15:28:20 2011 +0100
s4:libnet: use talloc_zero(struct libnet_JoinDomain) in libnet_Join_member()
metze
-----------------------------------------------------------------------
Summary of changes:
selftest/target/Samba4.pm | 4 +++
source4/libnet/libnet_join.c | 21 +++++++++++++-----
source4/libnet/libnet_join.h | 2 +
source4/libnet/py_net.c | 9 +++++--
source4/scripting/python/samba/join.py | 26 +++++++++++++++-------
source4/scripting/python/samba/netcmd/domain.py | 16 +++++++++----
source4/torture/rpc/testjoin.c | 4 +-
7 files changed, 58 insertions(+), 24 deletions(-)
Changeset truncated at 500 lines:
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index d515089..9419921 100644
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -869,6 +869,7 @@ sub provision_member($$$)
$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
$cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} member";
$cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
+ $cmd .= " --machinepass=machine$ret->{password}";
unless (system($cmd) == 0) {
warn("Join failed\n$cmd");
@@ -937,6 +938,7 @@ sub provision_rpc_proxy($$$)
$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
$cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} member";
$cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD}";
+ $cmd .= " --machinepass=machine$ret->{password}";
unless (system($cmd) == 0) {
warn("Join failed\n$cmd");
@@ -1021,6 +1023,7 @@ sub provision_vampire_dc($$$)
$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
$cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $dcvars->{REALM} DC --realm=$dcvars->{REALM}";
$cmd .= " -U$dcvars->{DC_USERNAME}\%$dcvars->{DC_PASSWORD} --domain-critical-only";
+ $cmd .= " --machinepass=machine$ret->{password}";
unless (system($cmd) == 0) {
warn("Join failed\n$cmd");
@@ -1083,6 +1086,7 @@ sub provision_subdom_dc($$$)
$cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
$cmd .= "$samba_tool domain join $ret->{CONFIGURATION} $ctx->{realm} subdomain ";
$cmd .= "--parent-domain=$dcvars->{REALM} -U$dcvars->{DC_USERNAME}\@$dcvars->{REALM}\%$dcvars->{DC_PASSWORD}";
+ $cmd .= " --machinepass=machine$ret->{password}";
unless (system($cmd) == 0) {
warn("Join failed\n$cmd");
diff --git a/source4/libnet/libnet_join.c b/source4/libnet/libnet_join.c
index a1124fd..0977403 100644
--- a/source4/libnet/libnet_join.c
+++ b/source4/libnet/libnet_join.c
@@ -821,10 +821,19 @@ NTSTATUS libnet_JoinDomain(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru
if (NT_STATUS_IS_OK(status)) {
policy_min_pw_len = pwp.out.info->min_password_length;
}
-
- /* Grab a password of that minimum length */
-
- password_str = generate_random_password(tmp_ctx, MAX(8, policy_min_pw_len), 255);
+
+ if (r->in.account_pass != NULL) {
+ password_str = talloc_strdup(tmp_ctx, r->in.account_pass);
+ } else {
+ /* Grab a password of that minimum length */
+ password_str = generate_random_password(tmp_ctx,
+ MAX(8, policy_min_pw_len), 255);
+ }
+ if (!password_str) {
+ r->out.error_string = NULL;
+ talloc_free(tmp_ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
/* set full_name and reset flags */
ZERO_STRUCT(u_info21);
@@ -909,7 +918,7 @@ NTSTATUS libnet_Join_member(struct libnet_context *ctx,
return NT_STATUS_NO_MEMORY;
}
- r2 = talloc(tmp_mem, struct libnet_JoinDomain);
+ r2 = talloc_zero(tmp_mem, struct libnet_JoinDomain);
if (!r2) {
r->out.error_string = NULL;
talloc_free(tmp_mem);
@@ -939,13 +948,13 @@ NTSTATUS libnet_Join_member(struct libnet_context *ctx,
/*
* join the domain
*/
- ZERO_STRUCTP(r2);
r2->in.domain_name = r->in.domain_name;
r2->in.account_name = account_name;
r2->in.netbios_name = netbios_name;
r2->in.level = LIBNET_JOINDOMAIN_AUTOMATIC;
r2->in.acct_type = acct_type;
r2->in.recreate_account = false;
+ r2->in.account_pass = r->in.account_pass;
status = libnet_JoinDomain(ctx, r2, r2);
if (!NT_STATUS_IS_OK(status)) {
r->out.error_string = talloc_steal(mem_ctx, r2->out.error_string);
diff --git a/source4/libnet/libnet_join.h b/source4/libnet/libnet_join.h
index 6acf374..89f4d29 100644
--- a/source4/libnet/libnet_join.h
+++ b/source4/libnet/libnet_join.h
@@ -43,6 +43,7 @@ struct libnet_JoinDomain {
enum libnet_JoinDomain_level level;
uint32_t acct_type;
bool recreate_account;
+ const char *account_pass;
} in;
struct {
@@ -68,6 +69,7 @@ struct libnet_Join_member {
const char *domain_name;
const char *netbios_name;
enum libnet_Join_level level;
+ const char *account_pass;
} in;
struct {
diff --git a/source4/libnet/py_net.c b/source4/libnet/py_net.c
index cf37ccc..c710680 100644
--- a/source4/libnet/py_net.c
+++ b/source4/libnet/py_net.c
@@ -49,11 +49,14 @@ static PyObject *py_net_join_member(py_net_Object *self, PyObject *args, PyObjec
NTSTATUS status;
PyObject *result;
TALLOC_CTX *mem_ctx;
- const char *kwnames[] = { "domain_name", "netbios_name", "level", NULL };
+ const char *kwnames[] = { "domain_name", "netbios_name", "level", "machinepass", NULL };
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ssi:Join", discard_const_p(char *, kwnames),
+ ZERO_STRUCT(r);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ssi|z:Join", discard_const_p(char *, kwnames),
&r.in.domain_name, &r.in.netbios_name,
- &_level)) {
+ &_level,
+ &r.in.account_pass)) {
return NULL;
}
r.in.level = _level;
diff --git a/source4/scripting/python/samba/join.py b/source4/scripting/python/samba/join.py
index 3f1abe2..5f546a1 100644
--- a/source4/scripting/python/samba/join.py
+++ b/source4/scripting/python/samba/join.py
@@ -48,7 +48,8 @@ class dc_join(object):
'''perform a DC join'''
def __init__(ctx, server=None, creds=None, lp=None, site=None,
- netbios_name=None, targetdir=None, domain=None):
+ netbios_name=None, targetdir=None, domain=None,
+ machinepass=None):
ctx.creds = creds
ctx.lp = lp
ctx.site = site
@@ -90,7 +91,10 @@ class dc_join(object):
ctx.dc_dnsHostName = ctx.get_dnsHostName()
ctx.behavior_version = ctx.get_behavior_version()
- ctx.acct_pass = samba.generate_random_password(32, 40)
+ if machinepass is not None:
+ ctx.acct_pass = machinepass
+ else:
+ ctx.acct_pass = samba.generate_random_password(32, 40)
# work out the DNs of all the objects we will be adding
ctx.server_dn = "CN=%s,CN=Servers,CN=%s,CN=Sites,%s" % (ctx.myname, ctx.site, ctx.config_dn)
@@ -856,10 +860,12 @@ class dc_join(object):
def join_RODC(server=None, creds=None, lp=None, site=None, netbios_name=None,
- targetdir=None, domain=None, domain_critical_only=False):
+ targetdir=None, domain=None, domain_critical_only=False,
+ machinepass=None):
"""join as a RODC"""
- ctx = dc_join(server, creds, lp, site, netbios_name, targetdir, domain)
+ ctx = dc_join(server, creds, lp, site, netbios_name, targetdir, domain,
+ machinepass)
lp.set("workgroup", ctx.domain_name)
print("workgroup is %s" % ctx.domain_name)
@@ -908,9 +914,11 @@ def join_RODC(server=None, creds=None, lp=None, site=None, netbios_name=None,
def join_DC(server=None, creds=None, lp=None, site=None, netbios_name=None,
- targetdir=None, domain=None, domain_critical_only=False):
+ targetdir=None, domain=None, domain_critical_only=False,
+ machinepass=None):
"""join as a DC"""
- ctx = dc_join(server, creds, lp, site, netbios_name, targetdir, domain)
+ ctx = dc_join(server, creds, lp, site, netbios_name, targetdir, domain,
+ machinepass)
lp.set("workgroup", ctx.domain_name)
print("workgroup is %s" % ctx.domain_name)
@@ -936,9 +944,11 @@ def join_DC(server=None, creds=None, lp=None, site=None, netbios_name=None,
print "Joined domain %s (SID %s) as a DC" % (ctx.domain_name, ctx.domsid)
def join_subdomain(server=None, creds=None, lp=None, site=None, netbios_name=None,
- targetdir=None, parent_domain=None, dnsdomain=None, netbios_domain=None):
+ targetdir=None, parent_domain=None, dnsdomain=None, netbios_domain=None,
+ machinepass=None):
"""join as a DC"""
- ctx = dc_join(server, creds, lp, site, netbios_name, targetdir, parent_domain)
+ ctx = dc_join(server, creds, lp, site, netbios_name, targetdir, parent_domain,
+ machinepass)
ctx.subdomain = True
ctx.parent_domain_name = ctx.domain_name
ctx.domain_name = netbios_domain
diff --git a/source4/scripting/python/samba/netcmd/domain.py b/source4/scripting/python/samba/netcmd/domain.py
index 88d0d70..bd73b6c 100644
--- a/source4/scripting/python/samba/netcmd/domain.py
+++ b/source4/scripting/python/samba/netcmd/domain.py
@@ -115,13 +115,15 @@ class cmd_domain_join(Command):
Option("--domain-critical-only",
help="only replicate critical domain objects",
action="store_true"),
+ Option("--machinepass", type=str, metavar="PASSWORD",
+ help="choose machine password (otherwise random)")
]
takes_args = ["domain", "role?"]
def run(self, domain, role=None, sambaopts=None, credopts=None,
versionopts=None, server=None, site=None, targetdir=None,
- domain_critical_only=False, parent_domain=None):
+ domain_critical_only=False, parent_domain=None, machinepass=None):
lp = sambaopts.get_loadparm()
creds = credopts.get_credentials(lp)
net = Net(creds, lp, server=credopts.ipaddress)
@@ -137,26 +139,30 @@ class cmd_domain_join(Command):
if role is None or role == "MEMBER":
(join_password, sid, domain_name) = net.join_member(domain,
netbios_name,
- LIBNET_JOIN_AUTOMATIC)
+ LIBNET_JOIN_AUTOMATIC,
+ machinepass=machinepass)
self.outf.write("Joined domain %s (%s)\n" % (domain_name, sid))
return
elif role == "DC":
join_DC(server=server, creds=creds, lp=lp, domain=domain,
site=site, netbios_name=netbios_name, targetdir=targetdir,
- domain_critical_only=domain_critical_only)
+ domain_critical_only=domain_critical_only,
+ machinepass=machinepass)
return
elif role == "RODC":
join_RODC(server=server, creds=creds, lp=lp, domain=domain,
site=site, netbios_name=netbios_name, targetdir=targetdir,
- domain_critical_only=domain_critical_only)
+ domain_critical_only=domain_critical_only,
+ machinepass=machinepass)
return
elif role == "SUBDOMAIN":
netbios_domain = lp.get("workgroup")
if parent_domain is None:
parent_domain = ".".join(domain.split(".")[1:])
join_subdomain(server=server, creds=creds, lp=lp, dnsdomain=domain, parent_domain=parent_domain,
- site=site, netbios_name=netbios_name, netbios_domain=netbios_domain, targetdir=targetdir)
+ site=site, netbios_name=netbios_name, netbios_domain=netbios_domain, targetdir=targetdir,
+ machinepass=machinepass)
return
else:
raise CommandError("Invalid role '%s' (possible values: MEMBER, DC, RODC, SUBDOMAIN)" % role)
diff --git a/source4/torture/rpc/testjoin.c b/source4/torture/rpc/testjoin.c
index 48408ed..eb49b8e 100644
--- a/source4/torture/rpc/testjoin.c
+++ b/source4/torture/rpc/testjoin.c
@@ -430,10 +430,10 @@ _PUBLIC_ struct test_join *torture_join_domain(struct torture_context *tctx,
struct samr_SetUserInfo s;
union samr_UserInfo u;
- tj = talloc(tctx, struct test_join);
+ tj = talloc_zero(tctx, struct test_join);
if (!tj) return NULL;
- libnet_r = talloc(tj, struct libnet_JoinDomain);
+ libnet_r = talloc_zero(tj, struct libnet_JoinDomain);
if (!libnet_r) {
talloc_free(tj);
return NULL;
--
Samba Shared Repository
More information about the samba-cvs
mailing list