svn commit: samba r16451 - in branches/SOC/sree: .

sree at samba.org sree at samba.org
Wed Jun 21 22:45:17 GMT 2006


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



More information about the samba-cvs mailing list