svn commit: samba r16768 - in branches/SAMBA_4_0/source/setup: .
abartlet at samba.org
abartlet at samba.org
Mon Jul 3 01:04:15 GMT 2006
Author: abartlet
Date: 2006-07-03 01:04:14 +0000 (Mon, 03 Jul 2006)
New Revision: 16768
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16768
Log:
Add a simple script to set a user's password. This should grow into a
real smbpasswd command some day.
Andrew Bartlett
Added:
branches/SAMBA_4_0/source/setup/setpassword
Changeset:
Added: branches/SAMBA_4_0/source/setup/setpassword
===================================================================
--- branches/SAMBA_4_0/source/setup/setpassword 2006-07-02 22:05:02 UTC (rev 16767)
+++ branches/SAMBA_4_0/source/setup/setpassword 2006-07-03 01:04:14 UTC (rev 16768)
@@ -0,0 +1,122 @@
+#!/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.length == 1 && res[0].defaultNamingContext != undefined);
+var domain_dn = res[0].defaultNamingContext;
+assert(domain_dn != undefined);
+
+if (options['filter'] != undefined) {
+ var res = ldb.search(options['filter'],
+ domain_dn, ldb.SCOPE_SUBTREE, attrs2);
+ if (res.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.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) {
+ message("set password for %s failed - %s\n",
+ res[0].dn, ldb.errstring());
+ 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;
More information about the samba-cvs
mailing list