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()); +}
