2 exec smbscript "$0" ${1+"$@"}
4 set a user's password on a Samba4 server
5 Copyright Andrew Tridgell 2005
6 Copyright Andrew Bartlett 2006
7 Released under the GNU GPL v2 or later
10 options = GetOptions(ARGV,
16 "POPT_COMMON_VERSION",
17 "POPT_COMMON_CREDENTIALS",
20 if (options == undefined) {
21 println("Failed to parse options");
25 libinclude("base.js");
26 libinclude("provision.js");
29 print a message if quiet is not set
33 if (options["quiet"] == undefined) {
34 print(vsprintf(arguments));
47 --username USERNAME username
48 --filter LDAPFILTER LDAP Filter to set password on
49 --newpassword PASSWORD set password
51 You must provide either a filter or a username, as well as password
56 if (options['username'] == undefined && options['filter'] == undefined) {
60 if (options['newpassword'] == undefined) {
64 var lp = loadparm_init();
65 var samdb = lp.get("sam database");
68 ldb.session_info = system_session();
69 ldb.credentials = options.get_credentials();
71 /* connect to the sam */
72 var ok = ldb.connect(samdb);
75 ldb.transaction_start();
77 /* find the DNs for the domain and the domain users group */
78 var attrs = new Array("defaultNamingContext");
79 var attrs2 = new Array("cn");
80 res = ldb.search("defaultNamingContext=*", "", ldb.SCOPE_BASE, attrs);
81 assert(res.error == 0);
82 assert(res.msgs.length == 1 && res.msgs[0].defaultNamingContext != undefined);
83 var domain_dn = res.msgs[0].defaultNamingContext;
84 assert(domain_dn != undefined);
86 if (options['filter'] != undefined) {
87 var res = ldb.search(options['filter'],
88 domain_dn, ldb.SCOPE_SUBTREE, attrs2);
89 if (res.error != 0 || res.msgs.length != 1) {
90 message("Failed to find record for filter %s\n", options['filter']);
94 var res = ldb.search(sprintf("samAccountName=%s", options['username']),
95 domain_dn, ldb.SCOPE_SUBTREE, attrs2);
96 if (res.error != 0 || res.msgs.length != 1) {
97 message("Failed to find record for user %s\n", options['username']);
105 replace: sambaPassword
108 res[0].dn, options['newpassword']);
109 var ok = ldb.modify(mod);
111 message("set password for %s failed - %s\n",
112 res[0].dn, ok.errstr);
113 ldb.transaction_cancel();
116 message("set password for %s (%s) succeded\n",
117 res[0].dn, res[0].cn);
119 ldb.transaction_commit();