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 + *