svn commit: samba r16567 - in branches/SOC/sree: .
sree at samba.org
sree at samba.org
Tue Jun 27 17:34:28 GMT 2006
Author: sree
Date: 2006-06-27 17:34:28 +0000 (Tue, 27 Jun 2006)
New Revision: 16567
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16567
Log:
added code for userAccountControl flags in user_add()
new function user_profile_set() sets profile information
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-27 17:16:14 UTC (rev 16566)
+++ branches/SOC/sree/test.js 2006-06-27 17:34:28 UTC (rev 16567)
@@ -26,6 +26,14 @@
printVars(user_get(sam, "sreetest", new Array("useraccountcontrol")));
+if(user_profile_set(sam, "sreetest", "\\\\profiles\\sreetest", "\\\\someserver\\logon.bat", "\\\\homes\\sreetest", "z:")){
+ print("Successfully set profile parameters\n");
+
+ printVars(user_get(sam, "sreetest", new Array("profilePath", "scriptPath", "homeDirectory", "homeDrive")));
+}
+else
+ print("Failed to set user profile properties");
+
if(user_delete(sam, "sreetest"))
print("User successfully deleted!\n");
else
Modified: branches/SOC/sree/usermgmt.js
===================================================================
--- branches/SOC/sree/usermgmt.js 2006-06-27 17:16:14 UTC (rev 16566)
+++ branches/SOC/sree/usermgmt.js 2006-06-27 17:34:28 UTC (rev 16567)
@@ -9,9 +9,9 @@
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;
+UF_ACCOUNTDISABLE = 0x2;
+UF_PASSWORD_CANT_CHANGE = 0x40;
+UF_DONT_EXPIRE_PASSWORD = 0x10000;
// initialize user functions, and return opaque value to be used by
// other functions
@@ -102,6 +102,8 @@
// add a user
function user_add(sam, username, fullname, description, password, flags, unixname)
{
+ var sys = sys_init();
+
var aldif = new Array();
var user_dn = sprintf("CN=%s,CN=Users,%s",
@@ -152,10 +154,24 @@
}
var userAccountControl = user['userAccountControl'];
+
+ userAccountControl = 0 + userAccountControl; // conversion to number
- //TODO: Finish up mapping flags and uac, without bitwise operators
- //:-(
+ //to handle default account created with the disabled bit set
+ if(sys.bitAND(userAccountControl, UF_ACCOUNTDISABLE))
+ userAccountControl = userAccountControl - UF_ACCOUNTDISABLE;
+ if(sys.bitAND(flags, UF_ACCOUNTDISABLE))
+ userAccountControl = sys.bitOR(userAccountControl, UF_ACCOUNTDISABLE);
+ if(sys.bitAND(flags, UF_DONT_EXPIRE_PASSWORD))
+ userAccountControl = sys.bitOR(userAccountControl, UF_DONT_EXPIRE_PASSWORD);
+
+ if(sys.bitAND(flags, UF_PASSWORD_CANT_CHANGE))
+ userAccountControl = sys.bitOR(userAccountControl, UF_PASSWORD_CANT_CHANGE);
+
+ //TODO: User must change password at next logon
+ // Account is locked out
+
ldifmod = sprintf("
dn: %s
changetype: modify
@@ -274,3 +290,81 @@
return(sam.ldb.transaction_commit());
}
+
+// set user's profile settings
+// null parameters will leave existing untouched, while "" will erase
+// current values
+function user_profile_set(sam, username, profilepath, logonscript, homepath, homedrive)
+{
+ var user_dn = sprintf("CN=%s,CN=Users,%s",
+ username, sam.domain_dn);
+
+ sam.ldb.transaction_start();
+
+ user = user_get(sam, username, new Array("sAMAccount"));
+
+ if(user == false)
+ {
+ print("Failed to get user's groups, no such user?\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
+
+ var k = 0;
+ var profile = new Array();
+
+ if(profilepath != null)
+ {
+ if(profilepath == "")
+ profile[k] = "delete: profilePath";
+ else
+ profile[k] = "replace: profilePath\nprofilePath: " + profilepath;
+ k = k + 1;
+ }
+
+ if(logonscript != null)
+ {
+ if(logonscript == "")
+ profile[k] = "delete: scriptPath";
+ else
+ profile[k] = "replace: scriptPath\nscriptPath: " + logonscript;
+ k = k + 1;
+ }
+
+ if(homepath != null)
+ {
+ if(homepath == "")
+ profile[k] = "delete: homeDirectory";
+ else
+ profile[k] = "replace: homeDirectory\nhomeDirectory: " + homepath;
+ k = k + 1;
+ }
+
+ // if set, then homepath should specify a network location
+ if(homedrive != null)
+ {
+ if(homedrive == "")
+ profile[k] = "delete: homeDrive";
+ else
+ profile[k] = "replace: homeDrive\nhomeDrive: " + homedrive;
+ k = k + 1;
+ }
+
+ if(k == 0)
+ {
+ print("No profile details provided\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
+
+ var ldifmod = "dn: " + user_dn + "\nchangeType: modify\n" + join("\n-\n", profile) + "\n";
+
+ if(sam.ldb.modify(ldifmod) != true)
+ {
+ print("Failed to set user profile settings!\n");
+ sam.ldb.transaction_cancel();
+ return false;
+ }
+
+ return(sam.ldb.transaction_commit());
+}
More information about the samba-cvs
mailing list