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