1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-28 07:21:54 +03:00
samba-mirror/source4/setup/setpassword
Simo Sorce 7ca399c075 r21351: Change ldb ejs bindings return codes.
We were returning just true/false and discarding error number and string.

This checking probably breaks swat, will fix it in next round as swat
is what made me look into this as I had no way to get back error messages
to show to the users.

Simo.
(This used to be commit 35886b4ae6)
2007-10-10 14:48:18 -05:00

124 lines
2.7 KiB
Plaintext

#!/bin/sh
exec smbscript "$0" ${1+"$@"}
/*
set a user's password on a Samba4 server
Copyright Andrew Tridgell 2005
Copyright Andrew Bartlett 2006
Released under the GNU GPL v2 or later
*/
options = GetOptions(ARGV,
"POPT_AUTOHELP",
'username=s',
'filter=s',
'newpassword=s',
"POPT_COMMON_SAMBA",
"POPT_COMMON_VERSION",
"POPT_COMMON_CREDENTIALS",
'quiet');
if (options == undefined) {
println("Failed to parse options");
return -1;
}
libinclude("base.js");
libinclude("provision.js");
/*
print a message if quiet is not set
*/
function message()
{
if (options["quiet"] == undefined) {
print(vsprintf(arguments));
}
}
/*
show some help
*/
function ShowHelp()
{
print("
Samba4 newuser
newuser [options]
--username USERNAME username
--filter LDAPFILTER LDAP Filter to set password on
--newpassword PASSWORD set password
You must provide either a filter or a username, as well as password
");
exit(1);
}
if (options['username'] == undefined && options['filter'] == undefined) {
ShowHelp();
}
if (options['newpassword'] == undefined) {
ShowHelp();
}
var lp = loadparm_init();
var samdb = lp.get("sam database");
var ldb = ldb_init();
random_init(local);
ldb.session_info = system_session();
ldb.credentials = options.get_credentials();
/* connect to the sam */
var ok = ldb.connect(samdb);
assert(ok);
ldb.transaction_start();
/* find the DNs for the domain and the domain users group */
var attrs = new Array("defaultNamingContext");
var attrs2 = new Array("cn");
res = ldb.search("defaultNamingContext=*", "", ldb.SCOPE_BASE, attrs);
assert(res.error == 0);
assert(res.msgs.length == 1 && res.msgs[0].defaultNamingContext != undefined);
var domain_dn = res.msgs[0].defaultNamingContext;
assert(domain_dn != undefined);
if (options['filter'] != undefined) {
var res = ldb.search(options['filter'],
domain_dn, ldb.SCOPE_SUBTREE, attrs2);
if (res.error != 0 || res.msgs.length != 1) {
message("Failed to find record for filter %s\n", options['filter']);
exit(1);
}
} else {
var res = ldb.search(sprintf("samAccountName=%s", options['username']),
domain_dn, ldb.SCOPE_SUBTREE, attrs2);
if (res.error != 0 || res.msgs.length != 1) {
message("Failed to find record for user %s\n", options['username']);
exit(1);
}
}
var mod = sprintf("
dn: %s
changetype: modify
replace: sambaPassword
sambaPassword: %s
",
res[0].dn, options['newpassword']);
var ok = ldb.modify(mod);
if (ok.error != 0) {
message("set password for %s failed - %s\n",
res[0].dn, ok.errstr);
ldb.transaction_cancel();
exit(1);
} else {
message("set password for %s (%s) succeded\n",
res[0].dn, res[0].cn);
ldb.transaction_commit();
}
return 0;