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

sree at samba.org sree at samba.org
Wed Jun 28 09:55:28 GMT 2006


Author: sree
Date: 2006-06-28 09:55:28 +0000 (Wed, 28 Jun 2006)
New Revision: 16618

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16618

Log:
Add example code for user_general_set() which was missing in last check-in

Change mistakenly-made-global user variable into local variable

New functions:
	
	user_group_get() -> get a user's groups
	user_group_add() -> add a user to a group
	user_group_remove() -> remove a user from a group

This commit largely wraps up the complete functionality intended to be
in M1, as well as in usermgmt.js (from the UI point of view). 



Modified:
   branches/SOC/sree/test.js
   branches/SOC/sree/usermgmt.js


Changeset:
Modified: branches/SOC/sree/test.js
===================================================================
--- branches/SOC/sree/test.js	2006-06-28 07:43:43 UTC (rev 16617)
+++ branches/SOC/sree/test.js	2006-06-28 09:55:28 UTC (rev 16618)
@@ -34,6 +34,30 @@
 else
     print("Failed to set user profile properties");
 
+if(user_general_set(sam, "sreetest", "Pai Sreepathi", "Still testing...", 0x202, "another_sree"))
+{
+    print("Set user's general properties!");
+    printVars(user_get(sam, "sreetest", new Array("displayName", "description", "userAccountControl", "unixName")));
+}
+else
+    print("Failed to set user's general properties");
+
+if(user_group_add(sam, "sreetest", "Domain Admins"))
+{
+    print("Successfully added to group Domain Admins\n");
+    printVars(user_group_get(sam, "sreetest"));
+}
+else
+    print("Failed to add to group!");
+
+if(user_group_remove(sam, "sreetest", "Domain Admins"))
+{
+    print("Successfully removed from group Domain Admins\n");
+    printVars(user_group_get(sam, "sreetest"));
+}
+else
+    print("Failed to remove from group!");
+
 if(user_delete(sam, "sreetest"))
     print("User successfully deleted!\n");
 else

Modified: branches/SOC/sree/usermgmt.js
===================================================================
--- branches/SOC/sree/usermgmt.js	2006-06-28 07:43:43 UTC (rev 16617)
+++ branches/SOC/sree/usermgmt.js	2006-06-28 09:55:28 UTC (rev 16618)
@@ -63,7 +63,8 @@
 
     sam.ldb.transaction_start();
 
-    user = user_get(sam, username, new Array("memberOf"))
+    var user = user_get(sam, username, new Array("memberOf"));
+
     if(user == false)
 	{
 	    print("Failed to get user's groups, no such user?");
@@ -229,7 +230,8 @@
 
     sam.ldb.transaction_start();
 
-    user = user_get(sam, username, new Array("memberOf"))
+    var user = user_get(sam, username, new Array("memberOf"));
+
     if(user == false)
 	{
 	    print("Failed to get user's groups, no such user?\n");
@@ -301,7 +303,7 @@
 
     sam.ldb.transaction_start();
 
-    user = user_get(sam, username, new Array("sAMAccount"));
+    var user = user_get(sam, username, new Array("sAMAccount"));
 
     if(user == false)
 	{
@@ -384,7 +386,7 @@
 
     sam.ldb.transaction_start();
 
-    user = user_get(sam, username, new Array("displayName"));
+    var user = user_get(sam, username, new Array("displayName"));
 
     if(user == false)
 	{
@@ -453,3 +455,142 @@
     return(sam.ldb.transaction_commit());
 }
 
+
+// get a user's groups
+function user_group_get(sam, username)
+{
+    var user_dn = sprintf("CN=%s,CN=Users,%s", 
+			  username, sam.domain_dn);
+    var k = 0;
+    var group_dn = "";
+    var out = new Array();
+    var attrs = new Array("cn");
+    var results;
+
+    var user = user_get(sam, username, new Array("memberOf"));
+
+    if(user == false)
+	return false;
+    
+    for(k = 0; k < user['memberOf'].length; k++)
+	{
+	    group_dn = user['memberOf'][k];
+	    
+	    results = sam.ldb.search(NULL, group_dn, 
+				     sam.ldb.SCOPE_ONELEVEL, attrs);
+	    
+	    assert(results.length == 1);
+	    
+	    out[k] = new Array(results[0]['dn'], results[0]['cn']);
+	}
+
+    return out;
+}
+
+// add a user to a group
+function user_group_add(sam, username, groupname)
+{
+    var user_dn = sprintf("CN=%s,CN=Users,%s", 
+			  username, sam.domain_dn);
+    var group_dn = sprintf("CN=%s,CN=Users,%s", 
+			  groupname, sam.domain_dn);
+
+    sam.ldb.transaction_start();
+
+    var user = user_get(sam, username, new Array("memberOf"));
+
+    if(user == false)
+	{
+	    print("No such user\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+    
+    var results = sam.ldb.search(NULL, group_dn, 
+				 sam.ldb.SCOPE_ONELEVEL, new Array("cn"));
+
+    if(results.length != 1)
+	{
+	    print("No such group!");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+
+    var ldifmod = sprintf("
+dn: %s
+changeType: modify
+add: member
+member: %s
+
+dn: %s
+changeType: modify
+add: memberOf
+memberOf: %s
+", group_dn, user_dn, user_dn, group_dn);
+
+    if(sam.ldb.modify(ldifmod) != true)
+	{
+	    print("Failed to add user to group!\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+    
+    return(sam.ldb.transaction_commit());
+}
+
+// remove a user from a group
+function user_group_remove(sam, username, groupname)
+{
+    var user_dn = sprintf("CN=%s,CN=Users,%s", 
+			  username, sam.domain_dn);
+    var group_dn = sprintf("CN=%s,CN=Users,%s", 
+			  groupname, sam.domain_dn);
+
+    sam.ldb.transaction_start();
+
+    var user = user_get(sam, username, new Array("memberOf"));
+    var found = false;
+
+    if(user == false)
+	{
+	    print("No such user\n");
+	    sam.ldb.transaction_cancel();
+	    return false;	    
+	}
+
+    for(var k = 0; !found && (k < user['memberOf'].length); k++)
+	{
+	    if(strlower(user['memberOf'][k]) == 
+	       strlower(group_dn))
+		found = true;
+	}
+    
+    if(!found)
+	{
+	    print("User does not belong to this group!\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+
+
+    var ldifmod = sprintf("
+dn: %s
+changeType: delete
+delete: member
+member: %s
+
+dn: %s
+changeType: delete
+delete: memberOf
+memberOf: %s
+", group_dn, user_dn, user_dn, group_dn);
+
+    if(sam.ldb.modify(ldifmod) != true)
+	{
+	    print("Failed to remove user from group!\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+
+    return(sam.ldb.transaction_commit());
+}



More information about the samba-cvs mailing list