svn commit: samba r16431 - in branches/SOC/sree: . docs

sree at samba.org sree at samba.org
Tue Jun 20 22:37:57 GMT 2006


Author: sree
Date: 2006-06-20 22:37:56 +0000 (Tue, 20 Jun 2006)
New Revision: 16431

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

Log:

First code and some documentation.

Functions to add and delete users.


Added:
   branches/SOC/sree/docs/
   branches/SOC/sree/docs/usermgmt.txt
   branches/SOC/sree/usermgmt.js


Changeset:
Added: branches/SOC/sree/docs/usermgmt.txt
===================================================================
--- branches/SOC/sree/docs/usermgmt.txt	2006-06-20 20:46:39 UTC (rev 16430)
+++ branches/SOC/sree/docs/usermgmt.txt	2006-06-20 22:37:56 UTC (rev 16431)
@@ -0,0 +1,39 @@
+The functions in usermgmt.js are aimed to be a bridge between a
+user-level application (mainly the UI), and Samba internals.
+
+The function prototypes are designed by looking at the UI, like for
+example:
+
+New User UI (from MMC/Local Users and Groups)
+
+The UI asks for: 
+Username
+Fullname
+Description
+Password
+
+and some flags, basically:
+    user must change password at next logon
+    account is disabled
+    user cannot change password
+    password never expires
+
+And Samba requires:
+    
+    unixName 
+
+So, we have the user_add function that does this:
+
+function user_add(sam, username, fullname, description, 
+		       password, flags, unixname)
+
+Other functions:
+
+user_delete(sam, username)
+user_rename(sam, username, newname)
+
+TODO:
+	add/remove users to groups
+	user enumeration functions
+
+

Added: branches/SOC/sree/usermgmt.js
===================================================================
--- branches/SOC/sree/usermgmt.js	2006-06-20 20:46:39 UTC (rev 16430)
+++ branches/SOC/sree/usermgmt.js	2006-06-20 22:37:56 UTC (rev 16431)
@@ -0,0 +1,153 @@
+#!/usr/local/samba/bin/smbscript
+
+libinclude("base.js");
+
+// initialize user functions, and return opaque value to be used by
+// other functions
+function user_init(session_info, credentials)
+{
+    var lp = loadparm_init();
+    
+    var samdb = lp.get("sam database");
+    var ldb = ldb_init();
+
+    //?
+    random_init(local);
+
+    ldb.session_info = session_info;
+    ldb.credentials = credentials;
+    
+    /* connect to the sam */
+    var ok = ldb.connect(samdb);
+    assert(ok);
+
+    var sam = new Object();
+
+    // from provision's newuser
+    var tmp = ldb.search("objectClass=domainDNS", new Array("dn"));
+    sam.domain_dn = tmp[0]["dn"];
+    
+    tmp = ldb.search("name=Domain Users", new Array("dn"));
+    sam.domain_users_dn = tmp[0]["dn"];
+
+    assert(sam.domain_dn != undefined
+	   && sam.domain_users_dn != undefined);
+    
+    sam.ldb = ldb;
+    return sam;
+}
+
+// deinitialize
+function user_deinit(sam)
+{
+    sam.ldb.close();
+}
+
+// delete user
+function user_delete(sam, username)
+{
+
+    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();
+
+    //TODO: Remove the user from all groups
+    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)
+	{
+	    print("Could not delete user!\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+
+    return(sam.ldb.transaction_commit());
+}
+
+// add a user
+function user_add(sam, username, fullname, description, password, flags, unixname)
+{
+    var aldif = new Array();
+
+    var user_dn = sprintf("CN=%s,CN=Users,%s", 
+			  username, sam.domain_dn);
+
+    aldif[0] = "dn: " + user_dn;
+    aldif[1] = "sAMAccountName: " + username;
+    aldif[2] = "memberOf: " + sam.domain_users_dn;
+    aldif[3] = "unixName: " + unixname;
+    aldif[4] = "sambaPassword: " + password;
+    aldif[5] = "objectClass: user";
+    aldif[6] = "displayName: " + fullname;
+    aldif[7] = "description: " + description;
+
+    var ldif = join("\n", aldif);
+
+    sam.ldb.transaction_start();
+
+    //TODO: Check if user already exists?
+    if(sam.ldb.add(ldif) != true)
+	{
+	    print("Failed to add user!\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+
+    var ldifmod = sprintf("
+dn: %s
+changetype: modify
+add: member
+member: %s
+", 
+			  sam.domain_users_dn, user_dn);
+
+    if(sam.ldb.modify(ldifmod) != true)
+	{
+	    print("Failed to add user to group!\n");
+	    sam.ldb.transaction_cancel();
+	    return false;
+	}
+  
+    //TODO: Handle flags
+
+    return(sam.ldb.transaction_commit());
+}
+
+// --- 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");
+
+/*
+if(user_delete(sam, "sree"))
+    print("User successfully deleted!\n");
+else
+    print("Failed to delete user!\n");
+*/
+
+user_deinit(sam);
+


Property changes on: branches/SOC/sree/usermgmt.js
___________________________________________________________________
Name: svn:executable
   + *



More information about the samba-cvs mailing list