diff --git a/plugins/personal/samba/class_sambaAccount.inc b/plugins/personal/samba/class_sambaAccount.inc
index aa31d36c5af5df067554e7c6a756237b18e8aad0..7f548f72ad144addb2a30e1a13394385c411aedf 100644 (file)
var $sambaLogonTime= "0";
var $sambaLogoffTime= "2147483647";
var $sambaKickoffTime= "2147483647";
- var $sambaPwdCanChange= "0";
+ var $sambaPwdCanChange= "";
var $sambaPwdMustChange= "0";
var $sambaAcctFlags= "[UX ]";
var $sambaHomePath= "";
var $attributes= array();
var $objectclasses= array();
+ var $CopyPasteVars = array("kickoff_time_set","logoff_time_set","logon_time_set","mungedObject","orig_sambaDomainName");
+
function sambaAccount ($config, $dn= NULL)
{
/* Load attributes depending on the samba version */
$this->SID= preg_replace ("/-[^-]+$/", "", $this->sambaSID);
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
- $ldap->search ("(&(objectClass=sambaDomain)(sambaSID=$this->SID))");
+ $ldap->search ("(&(objectClass=sambaDomain)(sambaSID=$this->SID))",array("sambaAlgorithmicRidBase","sambaDomainName"));
if ($ldap->count() != 0){
$attrs= $ldap->fetch();
$this->ridBase= $attrs['sambaAlgorithmicRidBase'][0];
function execute()
{
+ /* Call parent execute */
+ plugin::execute();
+
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
$this->is_account= !$this->is_account;
}
/* Do we represent a valid account? */
if (!$this->is_account && $this->parent == NULL){
- $display= "<img src=\"images/stop.png\" align=\"middle\"> <b>".
+ $display= "<img alt=\"\"src=\"images/stop.png\" align=\"middle\"> <b>".
_("This account has no samba extensions.")."</b>";
$display.= back_to_main();
return ($display);
/* Prepare templating */
$smarty= get_smarty();
+
+/* PHP Fehler "Undefined index: sambaPwdMustChangeACL" */
+ #hickert test
+ $smarty->assign("sambaPwdMustChangeACL", chkacl($this->acl, "sambaPwdMustChangeACL"));
+ #hickert test
+ $smarty->assign("sambaPwdMustChange",$this->sambaPwdMustChange);
+
if ($this->sambaPwdMustChange=="0"){
$date= getdate();
} else {
$acl= array($this->config->current['BASE'] => ":all");
$regex= $sambafilter['regex'];
$filter= "(&(objectClass=sambaSAMAccount)$exclude(uid=*$)(|(uid=$regex)(cn=$regex)))";
- $res= get_list($acl, "$filter", TRUE, $sambafilter['depselect'], array("uid"), TRUE);
+ $res= get_list($filter, $acl, $sambafilter['depselect'], array("uid"), GL_SUBSEARCH | GL_SIZELIMIT);
$wslist= array();
foreach ($res as $attrs){
$wslist[]= preg_replace('/\$/', '', $attrs['uid'][0]);
}
$smarty->assign("hint", print_sizelimit_warning());
$smarty->assign("wslist", $wslist);
+ $smarty->assign("apply", apply_filter());
$display= $smarty->fetch (get_template_path('samba3_workstations.tpl', TRUE,
dirname(__FILE__)));
return ($display);
$sambaKickoffTime_months= array(_("January"), _("February"), _("March"), _("April"),
_("May"), _("June"), _("July"), _("August"), _("September"),
_("October"), _("November"), _("December"));
- $smarty->assign("sambaKickoffTime_day", $sambaKickoffTime_date["mday"]-1);
+ //$smarty->assign("sambaKickoffTime_day", $sambaKickoffTime_date["mday"]-1);
+ $smarty->assign("sambaKickoffTime_day", $sambaKickoffTime_date["mday"]); // hickert
$smarty->assign("sambaKickoffTime_days", $sambaKickoffTime_days);
$smarty->assign("sambaKickoffTime_months", $sambaKickoffTime_months);
$smarty->assign("sambaKickoffTime_month", $sambaKickoffTime_date["mon"]-1);
$smarty->assign("reconnmode", $this->mungedObject->getReConn());
$smarty->assign("reconnACL", chkacl($this->acl,"reconn"));
+ if($_SESSION['js']){
+ /* Set form elements to disabled/enable state */
+ $smarty->assign("tsloginstate", $this->mungedObject->getTsLogin()?"":"disabled");
+ $smarty->assign("inheritstate", $this->mungedObject->getInheritMode()?"disabled":"");
+ }else{
+ $smarty->assign("tsloginstate", "");
+ $smarty->assign("inheritstate", "");
+ }
+
/* Set checkboxes to checked or unchecked state */
$smarty->assign("tslogin", $this->mungedObject->getTsLogin()?"checked":"");
$smarty->assign("tsloginACL", chkacl($this->acl,"tslogin"));
+
$smarty->assign("inherit", $this->mungedObject->getInheritMode()?"checked":"");
$smarty->assign("inheritACL", chkacl($this->acl,"inherit"));
+
+
$smarty->assign("connectclientdrives",
$this->mungedObject->getConnectClientDrives()?"checked":"");
$smarty->assign("connectclientdrivesACL", chkacl($this->acl,"connectclientdrives"));
/* Fill sambaUserWorkstations */
$ws= split(",", $this->sambaUserWorkstations);
sort($ws);
+
+ /* Tidy checks for empty option, and smarty will produce one if array[0]="" */
+ if(($ws[0]=="")&&(count($ws)==1)) $ws=array();
+
+
$smarty->assign("workstations", $ws);
- $smarty->assign("sambaUserWorkstationACL", chkacl($this->acl,"sambauserworkstation"));
+ $smarty->assign("sambaUserWorkstationACL", chkacl($this->acl,"sambaUserWorkstation"));
}
/* Variables */
$smarty->assign("flagsK", "");
}
- $smarty->assign("allow_pwchangeACL", chkacl($this->acl, "allow_pwchange"));
- $smarty->assign("password_expiresACL", chkacl($this->acl, "password_expires"));
- $smarty->assign("no_password_requiredACL", chkacl($this->acl, "no_password_required"));
- $smarty->assign("temporary_disableACL", chkacl($this->acl, "temporary_disable"));
- $smarty->assign("sambaDomainNameACL", chkacl($this->acl, "sambaDomainName"));
- $smarty->assign("logon_time_setACL", chkacl($this->acl, "logon_time_set"));
- $smarty->assign("logoff_time_setACL", chkacl($this->acl, "logoff_time_set"));
- $smarty->assign("kickoff_time_setACL", chkacl($this->acl, "kickoff_time_set"));
- $smarty->assign("sambaLogonTimeACL", chkacl($this->acl, "sambaLogonTime"));
- $smarty->assign("sambaLogoffTimeACL", chkacl($this->acl, "sambaLogoffTime"));
- $smarty->assign("sambaKickoffTimeACL", chkacl($this->acl, "sambaKickoffTime"));
+ $smarty->assign("allow_pwchangeACL", chkacl($this->acl, "allow_pwchange"));
+ $smarty->assign("password_expiresACL", chkacl($this->acl, "password_expires"));
+ $smarty->assign("no_password_requiredACL", chkacl($this->acl, "no_password_required"));
+ $smarty->assign("temporary_disableACL", chkacl($this->acl, "temporary_disable"));
+ $smarty->assign("sambaDomainNameACL", chkacl($this->acl, "sambaDomainName"));
+ $smarty->assign("logon_time_setACL", chkacl($this->acl, "logon_time_set"));
+ $smarty->assign("logoff_time_setACL", chkacl($this->acl, "logoff_time_set"));
+ $smarty->assign("kickoff_time_setACL", chkacl($this->acl, "kickoff_time_set"));
+ $smarty->assign("sambaLogonTimeACL", chkacl($this->acl, "sambaLogonTime"));
+ $smarty->assign("sambaLogoffTimeACL", chkacl($this->acl, "sambaLogoffTime"));
+ $smarty->assign("sambaKickoffTimeACL", chkacl($this->acl, "sambaKickoffTime"));
/* In case of javascript, disable some fields on demand */
- if ($this->samba3 && $_SESSION['js']){
+ if ($this->samba3){
foreach($this->mungedObject->getOnDemandFlags() as $key => $value) {
$smarty->assign("$key", "$value");
}
@DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,
$this->attributes, "Save");
$ldap->cd($this->dn);
- $ldap->modify($this->attrs);
- show_ldap_error($ldap->get_error());
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+
+ show_ldap_error($ldap->get_error(), sprintf(_("Removing of user/samba account with dn '%s' failed."),$this->dn));
/* Optionally execute a command after we're done */
$this->handle_post_events("remove");
/* Check for input problems */
function check()
{
- $message= array();
+ /* Call common method to give check the hook */
+ $message= plugin::check();
if ($this->samba3){
/* Save checkbox states. */
$this->mungedObject->setTsLogin(!isset($_POST['tslogin'])
&& chkacl($this->acl, "tslogin") == "");
- $this->mungedObject->setBrokenConn($_POST['brokenconn'] == '1'
- && chkacl($this->acl, "brokenconn") == "");
- $this->mungedObject->setReConn($_POST['reconn'] == '1'
- && chkacl($this->acl, "reconn") == "");
+ // Need to do some index checking to avoid messages like "index ... not found"
+ if(isset($_POST['brokenconn'])) {
+ $this->mungedObject->setBrokenConn($_POST['brokenconn'] == '1'
+ && chkacl($this->acl, "brokenconn") == "");
+ }
+ if(isset($_POST['reconn'])) {
+ $this->mungedObject->setReConn($_POST['reconn'] == '1'
+ && chkacl($this->acl, "reconn") == "");
+ }
$this->mungedObject->setInheritMode(isset($_POST['inherit'])
&& chkacl($this->acl, "inherit") == "");
$this->mungedObject->setCtxMaxConnectionTimeF(!isset($_POST['CtxMaxConnectionTimeF'])
&& chkacl($this->acl, "defaultprinter") == "");
/* Save combo boxes. Takes two values */
- $this->mungedObject->setShadow((isset($_POST['shadow'])
- && chkacl($this->acl, "shadow") == ""), $_POST['shadow']);
+ if(isset($_POST['reconn'])) {
+ $this->mungedObject->setShadow((isset($_POST['shadow'])
+ && chkacl($this->acl, "shadow") == ""), $_POST['shadow']);
+ }
/* Check for changes */
if ($this->sambaMungedDial != $this->mungedObject->getMunged()){
{
/* Load uid and gid of this 'dn' */
$ldap= $this->config->get_ldap_link();
- $ldap->cat($this->dn);
+ $ldap->cat($this->dn, array('uidNumber', 'gidNumber'));
$tmp= $ldap->fetch();
$this->uidNumber= $tmp['uidNumber'][0];
$this->gidNumber= $tmp['gidNumber'][0];
/* Check for users primary group */
$ldap->cd($this->config->current['BASE']);
- $ldap->search("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))",
- array("cn"));
+ $ldap->search("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))", array("cn"));
if ($ldap->count() != 1){
print_red(_("Warning: Can't identify users primary group - no conversion to a samba group possible!"));
} else {
} else {
$this->attrs['sambaPwdMustChange']= array();
}
+ /* Make sure not to save zero in sambaPwdLastset */
+ if ($this->sambaPwdLastSet != "0"){
+ $this->attrs['sambaPwdLastSet']= $this->sambaPwdLastSet;
+ } else {
+ $this->attrs['sambaPwdLastSet']= array();
+ }
/* Account expiery */
if ($this->logon_time_set == "1"){
$this->attrs['sambaLogonTime']= $this->sambaLogonTime;
} else {
- # $this->attrs['sambaLogonTime']= array();
- # Set more useful default setting
- $this->attrs['sambaLogonTime']= 0;
+ $this->attrs['sambaLogonTime']= array();
}
if ($this->logoff_time_set == "1"){
$this->attrs['sambaLogoffTime']= $this->sambaLogoffTime;
} else {
- # $this->attrs['sambaLogoffTime']= array();
- # Set more useful default setting
- $this->attrs['sambaLogoffTime']= 2147483647;
+ $this->attrs['sambaLogoffTime']= array();
}
if ($this->kickoff_time_set == "1"){
# Add one day in unixtime format to be compatible with usrmgr
- $this->attrs['sambaKickoffTime']= $this->sambaKickoffTime + 86400;
+ //$this->attrs['sambaKickoffTime']= $this->sambaKickoffTime + 86400;
+ $this->attrs['sambaKickoffTime']= $this->sambaKickoffTime; //hickert
} else {
- # $this->attrs['sambaKickoffTime']= array();
- # Set more useful default setting
- $this->attrs['sambaKickoffTime']= 2147483647;
+ $this->attrs['sambaKickoffTime']= array();
}
} else {
/* Not samba3 */
} else {
$this->attrs['pwdMustChange']= 2147483647;
}
+ /* Make sure not to save zero in pwdLastset */
+ if ($this->pwdLastSet != "0"){
+ $this->attrs['pwdLastSet']= $this->pwdLastSet;
+ } else {
+ $this->attrs['pwdLastSet']= array();
+ }
/* Account expiery */
if ($this->logon_time_set == "1"){
$this->attrs['logonTime']= $this->logonTime;
} else {
- $this->attrs['logonTime']= 0;
+ $this->attrs['logonTime']= array();
}
if ($this->logoff_time_set == "1"){
$this->attrs['logoffTime']= $this->logoffTime;
} else {
- $this->attrs['logoffTime']= 2147483647;
+ $this->attrs['logoffTime']= array();
}
if ($this->kickoff_time_set == "1"){
# Add one day in unixtime format to be compatible with usrmgr
$this->attrs['kickoffTime']= $this->kickoffTime + 86400;
} else {
- $this->attrs['kickoffTime']= 2147483647;
+ $this->attrs['kickoffTime']= array();
}
}
/* Write back to ldap */
$ldap->cd($this->dn);
- $ldap->modify($this->attrs);
- show_ldap_error($ldap->get_error());
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+
+ show_ldap_error($ldap->get_error(), sprintf(_("Saving of user/samba account with dn '%s' failed."),$this->dn));
/* Optionally execute a command after we're done */
if ($this->initially_was_account == $this->is_account){
plugin::adapt_from_template($dn);
$this->sambaSID= "";
$this->sambaPrimaryGroupSID= "";
+
+ /* Fill mungedDial field */
+ if ($this->samba3 && isset($this->attrs['sambaMungedDial'])){
+ $this->mungedObject->load($this->sambaMungedDial);
+ }
+
+ /* Password expiery */
+ if(isset($this->attrs['sambaPwdMustChange']) &&
+ $this->attrs['sambaPwdMustChange'][0] != 0){
+ $this->password_expires= 1;
+ }
+
+ if(isset($this->attrs['sambaLogonTime']) && ! (
+ $this->attrs['sambaLogonTime'][0] == 0 ||
+ $this->attrs['sambaLogonTime'][0] == 2147483647
+ )){
+ $this->logon_time_set= 1;
+ }
+ if(isset($this->attrs['sambaLogoffTime']) && ! (
+ $this->attrs['sambaLogoffTime'][0] == 0 ||
+ $this->attrs['sambaLogoffTime'][0] == 2147483647
+ )){
+ $this->logoff_time_set= 1;
+ }
+
+ /* Account expiery */
+ if(isset($this->attrs['sambaKickoffTime']) && ! (
+ $this->attrs['sambaKickoffTime'][0] == 0 ||
+ $this->attrs['sambaKickoffTime'][0] == 2147483647
+ )){
+ $this->kickoff_time_set= 1;
+ }
+
+ /* Get global filter config */
+ if (!is_global("sambafilter")){
+ $ui= get_userinfo();
+ $base= get_base_from_people($ui->dn);
+ $sambafilter= array( "depselect" => $base, "regex" => "*");
+ register_global("sambafilter", $sambafilter);
+ }
}
+
+ function plInfo()
+ {
+ return (array(
+ "plShortName" => _("Samba"),
+ "plDescription" => _("Samba settings"),
+ "plSelfModify" => TRUE,
+ "plDepends" => array("user"),
+ "plPriority" => 5, // Position in tabs
+ "plSection" => "personal", // This belongs to personal
+ "plCategory" => array("users"), // Add to following categories
+ "plOptions" => array(),
+
+ "plProvidedAcls" => array(
+ "AllowLoginOnTerminalServer" => _("Allow login on terminal server"),
+ "InheritClientConfig" => _("Inherit client config"),
+ "sambaAcctFlags_N" => _("Login from windows client requires no password"),
+ "sambaAcctFlags_L" => _("Lock samba account"),
+
+ "sambaLogonTime" => _("Limit Logon Time") ,
+ "sambaLogoffTime" => _("Limit Logoff Time") ,
+ "sambaKickoffTime" => _("Account expires") ,
+ "sambaPwdCanChange" => _("Allow user to change password") ,
+ "sambaPwdMustChange" => _("Password expires") ,
+ "sambaHomePath" => _("Generic home directory") ,
+ "sambaHomeDrive" => _("Generic samba home drive") ,
+ "sambaLogonScript" => _("Generic script path") ,
+ "sambaProfilePath" => _("Generic profile path") ,
+ "sambaDomainName" => _("Domain") ,
+ "sambaUserWorkstations" => _("Allow connection from")))
+ );
+ }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: