svn commit: samba r16513 - in branches/SOC/sree: .
sree at samba.org
sree at samba.org
Sun Jun 25 21:43:59 GMT 2006
Author: sree
Date: 2006-06-25 21:43:59 +0000 (Sun, 25 Jun 2006)
New Revision: 16513
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16513
Log:
new function user_rename(), renames a user
moved test code out of usermgmt.js to new file test.js
deleted some leftover code in user_delete()
Added:
branches/SOC/sree/test.js
Modified:
branches/SOC/sree/usermgmt.js
Changeset:
Added: branches/SOC/sree/test.js
===================================================================
--- branches/SOC/sree/test.js 2006-06-25 20:02:11 UTC (rev 16512)
+++ branches/SOC/sree/test.js 2006-06-25 21:43:59 UTC (rev 16513)
@@ -0,0 +1,36 @@
+#!/usr/local/samba/bin/smbscript
+
+libinclude("usermgmt.js");
+
+// --- MAIN ---
+
+var options = GetOptions(ARGV, "POPT_COMMON_CREDENTIALS");
+
+var system_session = system_session();
+var creds = options.get_credentials();
+
+sam = user_init(system_session, creds);
+
+if(user_add(sam, "sree", "Sreepathi Pai",
+ "First Test User", "simple", 0, "sree"))
+ print("User successfully added!\n");
+else
+ print("Failed to add user!\n");
+
+printVars(user_get(sam, "sree", new Array("useraccountcontrol")));
+
+if(user_rename(sam, "sree", "sreetest"))
+ print("User successfully renamed!\n");
+else
+ print("User rename failed!\n")
+
+printVars(user_get(sam, "sreetest", new Array("useraccountcontrol")));
+
+if(user_delete(sam, "sreetest"))
+ print("User successfully deleted!\n");
+else
+ print("Failed to delete user!\n");
+
+print("\n");
+
+user_deinit(sam);
Property changes on: branches/SOC/sree/test.js
___________________________________________________________________
Name: svn:executable
+ *
Modified: branches/SOC/sree/usermgmt.js
===================================================================
--- branches/SOC/sree/usermgmt.js 2006-06-25 20:02:11 UTC (rev 16512)
+++ branches/SOC/sree/usermgmt.js 2006-06-25 21:43:59 UTC (rev 16513)
@@ -1,8 +1,13 @@
-#!/usr/local/samba/bin/smbscript
+/*
+ Must be placed in /usr/local/samba/shared/js
+*/
+if (global["HAVE_USERMGMT_JS"] != undefined) {
+ return;
+}
+HAVE_USERMGMT_JS=1
libinclude("base.js");
-
// userAccountFlags constants, decl here for now
var UF_ACCOUNTDISABLE = 0x2;
var UF_PASSWORD_CANT_CHANGE = 0x40;
@@ -56,13 +61,6 @@
var user_dn = sprintf("CN=%s,CN=Users,%s",
username, sam.domain_dn);
- var ldifmod = sprintf("
-dn: %s
-delete: member
-member: %s
-",
- sam.domain_users_dn, user_dn);
-
sam.ldb.transaction_start();
user = user_get(sam, username, new Array("memberOf"))
@@ -200,28 +198,79 @@
}
}
-// --- MAIN ---
-var options = GetOptions(ARGV, "POPT_COMMON_CREDENTIALS");
+// rename a user
+// quite similar to delete
+function user_rename(sam, username, newusername)
+{
+ var user_dn = sprintf("CN=%s,CN=Users,%s",
+ username, sam.domain_dn);
-var system_session = system_session();
-var creds = options.get_credentials();
+ var newuser_dn = sprintf("CN=%s,CN=Users,%s",
+ newusername, sam.domain_dn);
-sam = user_init(system_session, creds);
+ var replace_attrs = new Array("sAMAccountName", "name", "unixName");
-if(user_add(sam, "sree", "Sreepathi Pai",
- "First Test User", "simple", 0, "sree"))
- print("User successfully added!\n");
-else
- print("Failed to add user!\n");
+ sam.ldb.transaction_start();
-printVars(user_get(sam, "sree", new Array("useraccountcontrol")));
+ user = user_get(sam, username, new Array("memberOf"))
+ if(user == false)
+ {
+ print("Failed to get user's groups, no such user?\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
-if(user_delete(sam, "sree"))
- print("User successfully deleted!\n");
-else
- print("Failed to delete user!\n");
+ var ldifmod;
+ for(i = 0; i < user["memberOf"].length; i++)
+ {
+ ldifmod = sprintf("
+dn: %s
+changetype: modify
+delete: member
+member: %s
+-
+add: member
+member: %s
+", user["memberOf"][i], user_dn, newuser_dn);
+
+ if(sam.ldb.modify(ldifmod) != true)
+ {
+ print("Failed to rename user in group!\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
+ }
-user_deinit(sam);
+ if(sam.ldb.rename(user_dn, newuser_dn) != true)
+ {
+ print("Failed to rename user!\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
+ ldifmod = sprintf("dn: %s
+changetype: modify
+delete: cn
+cn: %s
+-
+add: cn
+cn: %s
+", newuser_dn, username, newusername); // cn is multi-valued
+
+ // the others are single-valued and can be replaced
+ for(var i = 0; i < replace_attrs.length; i++)
+ {
+ ldifmod = ldifmod + sprintf("-\nreplace: %s\n%s: %s\n", replace_attrs[i], replace_attrs[i], newusername);
+ }
+
+ if(sam.ldb.modify(ldifmod) != true)
+ {
+ print("Failed to rename user!\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
+
+ return(sam.ldb.transaction_commit());
+}
More information about the samba-cvs
mailing list