Author: sree Date: 2006-06-21 22:45:15 +0000 (Wed, 21 Jun 2006) New Revision: 16451
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16451 Log: user_delete() now removes user from all groups preliminary code for supporting userAccountControl flags new function user_get(), retrieves user details Modified: branches/SOC/sree/usermgmt.js Changeset: Modified: branches/SOC/sree/usermgmt.js =================================================================== --- branches/SOC/sree/usermgmt.js 2006-06-21 21:28:07 UTC (rev 16450) +++ branches/SOC/sree/usermgmt.js 2006-06-21 22:45:15 UTC (rev 16451) @@ -2,6 +2,12 @@ libinclude("base.js"); + +// userAccountFlags constants, decl here for now +var UF_ACCOUNTDISABLE = 0x2; +var UF_PASSWORD_CANT_CHANGE = 0x40; +var UF_DONT_EXPIRE_PASSWORD = 0x10000; + // initialize user functions, and return opaque value to be used by // other functions function user_init(session_info, credentials) @@ -59,13 +65,31 @@ sam.ldb.transaction_start(); - //TODO: Remove the user from all groups - if(sam.ldb.modify(ldifmod) != true) + user = user_get(sam, username, new Array("memberOf")) + if(user == false) { - print("Failed to remove user from group!\n"); + print("Failed to get user's groups, no such user?"); sam.ldb.transaction_cancel(); return false; } + + var ldifmod; + + for(i = 0; i < user["memberOf"].length; i++) + { + ldifmod = sprintf(" +dn: %s +delete: member +member: %s +", user["memberOf"][i], user_dn); + + if(sam.ldb.modify(ldifmod) != true) + { + print("Failed to remove user from group!\n"); + sam.ldb.transaction_cancel(); + return false; + } + } if(sam.ldb.del(user_dn) != true) { @@ -120,12 +144,62 @@ sam.ldb.transaction_cancel(); return false; } - - //TODO: Handle flags + + var user = user_get(sam, username, new Array("userAccountControl")); + if(user == false) + { + print("Something went wrong, couldn't retrieve user!"); + sam.ldb.transaction_cancel(); + return false; + } + var userAccountControl = user['userAccountControl']; + + //TODO: Finish up mapping flags and uac, without bitwise operators + //:-( + + ldifmod = sprintf(" +dn: %s +changetype: modify +replace: userAccountControl +userAccountControl: %u", user_dn, userAccountControl); + + if(sam.ldb.modify(ldifmod) != true) + { + print("Failed to modify user flags!\n"); + sam.ldb.transaction_cancel(); + return false; + } + return(sam.ldb.transaction_commit()); } +// returns a user array +// result format same as ldb.search for now +function user_get(sam, username, attrs) +{ + var user_dn = sprintf("CN=%s,CN=Users,%s", + username, sam.domain_dn); + var results; + + if(attrs.length == 0) + results = sam.ldb.search(NULL, user_dn); + else + results = sam.ldb.search(NULL, user_dn, + sam.ldb.SCOPE_ONELEVEL, attrs); + + if(results.length == 1) + { + var user = results[0]; + return user; + } + else + { + print("User not found.\n"); + return false; + } +} + // --- MAIN --- var options = GetOptions(ARGV, "POPT_COMMON_CREDENTIALS"); @@ -135,19 +209,19 @@ 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_delete(sam, "sree")) print("User successfully deleted!\n"); else print("Failed to delete user!\n"); -*/ + user_deinit(sam);
