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