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);
 

Reply via email to