X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Fsamba%2Fpersonal%2Fsamba%2Fclass_sambaAccount.inc;h=f4bc82270023471aab8ec8ee9e769d0d7c4bb5d3;hb=5edc1ae1b5b13aae6bb4291fe3c6d4dbf5263ee0;hp=4f0e5a093b19682f32f6779170cb35cf873d0655;hpb=1b0394a0938832666e579fa392856edc90cb8538;p=gosa.git diff --git a/gosa-plugins/samba/personal/samba/class_sambaAccount.inc b/gosa-plugins/samba/personal/samba/class_sambaAccount.inc index 4f0e5a093..f4bc82270 100644 --- a/gosa-plugins/samba/personal/samba/class_sambaAccount.inc +++ b/gosa-plugins/samba/personal/samba/class_sambaAccount.inc @@ -24,29 +24,13 @@ class sambaAccount extends plugin var $plHeadline= "Samba"; var $plDescription= "This does something"; var $view_logged = FALSE; + var $password_expires= 0; /* Switch for Samba version */ - var $samba3= FALSE; var $uidNumber= 65535; var $gidNumber= 65535; - /* Samba 2 attributes */ - var $pwdLastSet= "0"; - var $logonTime= "0"; - var $logoffTime= "2147483647"; - var $kickoffTime= "2147483647"; - var $pwdCanChange= "0"; - var $pwdMustChange= "0"; - var $password_expires= 0; - var $acctFlags= "[UX ]"; - var $smbHome= ""; - var $homeDrive= ""; - var $scriptPath= ""; - var $profilePath= ""; - var $rid= ""; - var $primaryGroupID= ""; - - /* Samba 3 attributes */ + /* Samba attributes */ var $SID= ""; var $ridBase= 0; var $sambaSID= ""; @@ -74,7 +58,7 @@ class sambaAccount extends plugin /* Helper */ var $cache = array(); - var $show_ws_dialog= FALSE; + var $trustSelect= FALSE; var $logon_time_set= 0; var $logoff_time_set= 0; var $kickoff_time_set= 0; @@ -92,31 +76,23 @@ class sambaAccount extends plugin /* Only used for multiple edit */ var $temporary_disable = FALSE; var $no_password_required = FALSE; + var $no_expiry = FALSE; var $multiple_sambaUserWorkstations = array(); function sambaAccount (&$config, $dn= NULL) { /* Load attributes depending on the samba version */ - $this->samba3= ($config->get_cfg_value("sambaversion") == 3); - - if ($this->samba3){ - $this->attributes= array ("sambaSID", "sambaPwdLastSet", "sambaLogonTime", - "sambaLogoffTime", "sambaKickoffTime", "sambaPwdCanChange", - "sambaPwdMustChange", "sambaAcctFlags", "uid", "sambaMungedDial", - "sambaHomePath", "sambaHomeDrive", "sambaLogonScript", - "sambaProfilePath", "sambaPrimaryGroupSID", "sambaDomainName", - "sambaUserWorkstations", "sambaPasswordHistory", - "sambaLogonHours", "sambaBadPasswordTime", - "sambaBadPasswordCount"); - $this->objectclasses= array ("sambaSamAccount"); - $this->mungedObject= new sambaMungedDial; - $this->ctxattributes= $this->mungedObject->ctxattributes; - } else { - $this->attributes= array ("pwdLastSet", "logonTime", "logoffTime", "kickoffTime", - "pwdCanChange", "pwdMustChange", "acctFlags", "profilePath", "uid", - "smbHome", "homeDrive", "scriptPath", "rid", "primaryGroupID"); - $this->objectclasses= array ("sambaAccount"); - } + $this->attributes= array ("sambaSID", "sambaPwdLastSet", "sambaLogonTime", + "sambaLogoffTime", "sambaKickoffTime", "sambaPwdCanChange", + "sambaPwdMustChange", "sambaAcctFlags", "uid", "sambaMungedDial", + "sambaHomePath", "sambaHomeDrive", "sambaLogonScript", + "sambaProfilePath", "sambaPrimaryGroupSID", "sambaDomainName", + "sambaUserWorkstations", "sambaPasswordHistory", + "sambaLogonHours", "sambaBadPasswordTime", + "sambaBadPasswordCount"); + $this->objectclasses= array ("sambaSamAccount"); + $this->mungedObject= new sambaMungedDial; + $this->ctxattributes= $this->mungedObject->ctxattributes; plugin::plugin ($config, $dn); @@ -126,7 +102,7 @@ class sambaAccount extends plugin } /* Get samba Domain in case of samba 3 */ - if ($this->samba3 && $this->sambaSID != ""){ + if ($this->sambaSID != ""){ $this->SID= preg_replace ("/-[^-]+$/", "", $this->sambaSID); $ldap= $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); @@ -154,7 +130,7 @@ class sambaAccount extends plugin } /* Fill mungedDial field */ - if ($this->samba3 && isset($this->attrs['sambaMungedDial'])){ + if (isset($this->attrs['sambaMungedDial'])){ $this->mungedObject->load($this->sambaMungedDial); } @@ -195,6 +171,11 @@ class sambaAccount extends plugin /* Save initial account state */ $this->initially_was_account= $this->is_account; + + /* Convert kickoff */ + #TODO: use date format + $this->sambaKickoffTime= $this->sambaKickoffTime == 0?"":date('d.m.Y', $this->sambaKickoffTime); + $this->sambaPwdMustChange= $this->sambaPwdMustChange == 2147483647?"":date('d.m.Y', $this->sambaPwdMustChange); } function execute() @@ -251,7 +232,7 @@ class sambaAccount extends plugin $SkipWrite = (!isset($this->parent) || !$this->parent) && !session::is_set('edit'); /* Open Samaba Logong hours dialog */ - if(isset($_POST['SetSambaLogonHours']) && $this->samba3 && $this->acl_is_readable("sambaLogonHours")){ + if(isset($_POST['SetSambaLogonHours']) && $this->acl_is_readable("sambaLogonHours")){ $this->dialog = new sambaLogonHours($this->config,$this->dn,$this->sambaLogonHours); } @@ -277,6 +258,7 @@ class sambaAccount extends plugin /* Prepare templating */ $smarty= get_smarty(); + $smarty->assign("usePrototype", "true"); $tmp = $this->plInfo(); foreach($tmp['plProvidedAcls'] as $var => $rest){ @@ -287,12 +269,6 @@ class sambaAccount extends plugin $smarty->assign("sambaLogonHoursACL",""); } - if ($this->sambaPwdMustChange=="0"){ - $date= getdate(); - } else { - $date= getdate($this->sambaPwdMustChange); - } - if ($this->sambaLogonTime=="2147483647" || $this->sambaLogonTime=="0"){ $sambaLogonTime_date= getdate(); } else { @@ -305,12 +281,6 @@ class sambaAccount extends plugin $sambaLogoffTime_date= getdate($this->sambaLogoffTime); } - if ($this->sambaKickoffTime=="2147483647" || $this->sambaKickoffTime=="0"){ - $sambaKickoffTime_date= getdate(); - } else { - $sambaKickoffTime_date= getdate($this->sambaKickoffTime); - } - /* Remove user workstations? */ if (isset($_POST["delete_ws"]) && isset($_POST['workstation_list'])){ @@ -337,178 +307,61 @@ class sambaAccount extends plugin /* Add user workstation? */ if (isset($_POST["add_ws"])){ if($this->acl_is_writeable("sambaUserWorkstations",$SkipWrite)){ - $this->show_ws_dialog= TRUE; + $this->trustSelect= new trustSelect($this->config,get_userinfo()); $this->dialog= TRUE; } } /* Add user workstation finished? */ if (isset($_POST["add_ws_cancel"])){ - $this->show_ws_dialog= FALSE; + $this->trustSelect= FALSE; $this->dialog= FALSE; } - /* Add user workstation? */ - if (isset($_POST["add_ws_finish"])){ + // Add selected machines to trusted ones. + if (isset($_POST["add_ws_finish"]) && $this->trustSelect){ + $trusts = $this->trustSelect->detectPostActions(); + if(isset($trusts['targets'])){ - if (isset($_POST['wslist'])){ + $headpage = $this->trustSelect->getHeadpage(); if($this->multiple_support_active){ - foreach($_POST['wslist'] as $ws){ + foreach($trusts['targets'] as $id){ + $attrs = $headpage->getEntry($id); + $we =$attrs['cn'][0]; $this->multiple_sambaUserWorkstations[trim($we)] = array("Name" => trim($ws), "UsedByAllUsers" => TRUE); } }else{ + $tmp= $this->sambaUserWorkstations; - foreach($_POST['wslist'] as $ws){ - $tmp.= ",$ws"; + foreach($trusts['targets'] as $id){ + $attrs = $headpage->getEntry($id); + $we =$attrs['cn'][0]; + $tmp.= ",$we"; } $tmp= preg_replace('/,+/', ',', $tmp); $this->sambaUserWorkstations= trim($tmp, ','); } - $this->is_modified= TRUE; - $this->show_ws_dialog= FALSE; - $this->dialog= FALSE; - } else { - msg_dialog::display(_("Error"), _("Please select an entry!"), ERROR_DIALOG); + $this->is_modified= TRUE; } + $this->trustSelect= NULL; + $this->dialog= FALSE; } /* Show ws dialog */ - if ($this->show_ws_dialog){ - - /* Save data */ - $sambafilter= session::get("sambafilter"); - foreach( array("depselect", "regex") as $type){ - if (isset($_POST[$type])){ - $sambafilter[$type]= $_POST[$type]; - } - } - if (isset($_GET['search'])){ - $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; - if ($s == "**"){ - $s= "*"; - } - $sambafilter['regex']= $s; - } - session::set("sambafilter", $sambafilter); + if ($this->trustSelect){ - /* Get workstation list */ - $exclude= ""; - - if($this->multiple_support_active){ - foreach($this->multiple_sambaUserWorkstations as $ws){ - if($ws['UsedByAllUsers']){ - $exclude.= "(cn=".$ws['Name']."$)"; - } - } - }else{ - foreach(split(',', $this->sambaUserWorkstations) as $ws){ - $exclude.= "(cn=$ws$)"; - } - } - if ($exclude != ""){ - $exclude= "(!(|$exclude))"; - } - $regex= $sambafilter['regex']; - $filter= "(&(objectClass=sambaSAMAccount)$exclude(uid=*$)(|(uid=$regex)(cn=$regex)))"; - $res= get_list($filter, "winworkstation", $sambafilter['depselect'], array("uid"), GL_SUBSEARCH | GL_SIZELIMIT); - - $wslist= array(); - foreach ($res as $attrs){ - $wslist[]= preg_replace('/\$/', '', $attrs['uid'][0]); - } - asort($wslist); - - $smarty->assign("search_image", get_template_path('images/lists/search.png')); - $smarty->assign("launchimage", get_template_path('images/lists/action.png')); - $smarty->assign("tree_image", get_template_path('images/lists/search-subtree.png')); - $smarty->assign("deplist", $this->config->idepartments); - $smarty->assign("alphabet", generate_alphabet()); - foreach( array("depselect", "regex") as $type){ - $smarty->assign("$type", $sambafilter[$type]); - } - $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); + // Build up blocklist + session::set('filterBlacklist', array('cn' => preg_split('/,/',$this->sambaUserWorkstations))); + return($this->trustSelect->execute()); } - /* Fill calendar */ - $days= array(); - for($d= 1; $d<32; $d++){ - $days[]= $d; - } - $years= array(); - for($y= $date['year']-4; $y<$date['year']+4; $y++){ - $years[]= $y; - } - $months= msgPool::months(); - $smarty->assign("day", $date["mday"]); - $smarty->assign("days", $days); - $smarty->assign("months", $months); - $smarty->assign("month", $date["mon"]-1); - $smarty->assign("years", $years); - $smarty->assign("year", $date["year"]); - - $sambaLogonTime_days= array(); - for($d= 1; $d<32; $d++){ - $sambaLogonTime_days[]= $d; - } - $sambaLogonTime_years= array(); - for($y= $date['year']-4; $y<$date['year']+4; $y++){ - $sambaLogonTime_years[]= $y; - } - $sambaLogonTime_months= msgPool::months(); - $smarty->assign("sambaLogonTime_day", $sambaLogonTime_date["mday"]); - $smarty->assign("sambaLogonTime_days", $sambaLogonTime_days); - $smarty->assign("sambaLogonTime_months", $sambaLogonTime_months); - $smarty->assign("sambaLogonTime_month", $sambaLogonTime_date["mon"]-1); - $smarty->assign("sambaLogonTime_years", $sambaLogonTime_years); - $smarty->assign("sambaLogonTime_year", $sambaLogonTime_date["year"]); - - $sambaLogoffTime_days= array(); - for($d= 1; $d<32; $d++){ - $sambaLogoffTime_days[]= $d; - } - $sambaLogoffTime_years= array(); - for($y= $date['year']-4; $y<$date['year']+4; $y++){ - $sambaLogoffTime_years[]= $y; - } - $sambaLogoffTime_months= msgPool::months(); - $smarty->assign("sambaLogoffTime_day", $sambaLogoffTime_date["mday"]); - $smarty->assign("sambaLogoffTime_days", $sambaLogoffTime_days); - $smarty->assign("sambaLogoffTime_months", $sambaLogoffTime_months); - $smarty->assign("sambaLogoffTime_month", $sambaLogoffTime_date["mon"]-1); - $smarty->assign("sambaLogoffTime_years", $sambaLogoffTime_years); - $smarty->assign("sambaLogoffTime_year", $sambaLogoffTime_date["year"]); - - $sambaKickoffTime_days= array(); - for($d= 1; $d<32; $d++){ - $sambaKickoffTime_days[]= $d; - } - $sambaKickoffTime_years= array(); - for($y= $date['year']-4; $y<$date['year']+4; $y++){ - $sambaKickoffTime_years[]= $y; - } - $sambaKickoffTime_months= msgPool::months(); - //$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("sambaKickoffTime_years", $sambaKickoffTime_years); - $smarty->assign("sambaKickoffTime_year", $sambaKickoffTime_date["year"]); - /* Fill boxes */ - if ($this->samba3){ - $domains= array(); - foreach($this->config->data['SERVERS']['SAMBA'] as $name => $content){ - $domains[]= $name; - } - $smarty->assign("domains", $domains); + $domains= array(); + foreach($this->config->data['SERVERS']['SAMBA'] as $name => $content){ + $domains[]= $name; } + $smarty->assign("domains", $domains); $letters= array(""); for ($i= 68; $i<91; $i++){ $letters[]= chr($i).":"; @@ -516,88 +369,87 @@ class sambaAccount extends plugin $smarty->assign("drives", $letters); /* Fill terminal server settings */ - if ($this->samba3){ - foreach ($this->ctxattributes as $attr){ - /* Fill common attributes */ - if (isset($this->mungedObject->ctx[$attr])){ - $smarty->assign("$attr", $this->mungedObject->ctx[$attr]); - // Set field to blank if value is 0 - if(in_array($attr, array("CtxMaxConnectionTime", "CtxMaxDisconnectionTime", "CtxMaxIdleTime"))) { - if($this->mungedObject->ctx[$attr] == 0) { - $smarty->assign("$attr", ""); - } + foreach ($this->ctxattributes as $attr){ + /* Fill common attributes */ + if (isset($this->mungedObject->ctx[$attr])){ + $smarty->assign("$attr", $this->mungedObject->ctx[$attr]); + // Set field to blank if value is 0 + if(in_array($attr, array("CtxMaxConnectionTime", "CtxMaxDisconnectionTime", "CtxMaxIdleTime"))) { + if($this->mungedObject->ctx[$attr] == 0) { + $smarty->assign("$attr", ""); } - } else { - $smarty->assign("$attr", ""); } + } else { + $smarty->assign("$attr", ""); } + } - /* Assign enum values for preset items */ - $shadowModeVals= array( "0" => _("disabled"), - "1" => _("input on, notify on"), - "2" => _("input on, notify off"), - "3" => _("input off, notify on"), - "4" => _("input off, nofify off")); + /* Assign enum values for preset items */ + $shadowModeVals= array( "0" => _("disabled"), + "1" => _("input on, notify on"), + "2" => _("input on, notify off"), + "3" => _("input off, notify on"), + "4" => _("input off, nofify off")); - $brokenConnModeVals= array( "0" => _("disconnect"), - "1" => _("reset")); + $brokenConnModeVals= array( "0" => _("disconnect"), + "1" => _("reset")); - $reConnModeVals= array( "0" => _("from any client"), - "1" => _("from previous client only")); + $reConnModeVals= array( "0" => _("from any client"), + "1" => _("from previous client only")); - /* Fill preset items */ - $smarty->assign("shadow", $shadowModeVals); - $smarty->assign("brokenconn", $brokenConnModeVals); - $smarty->assign("reconn", $reConnModeVals); + /* Fill preset items */ + $smarty->assign("shadow", $shadowModeVals); + $smarty->assign("brokenconn", $brokenConnModeVals); + $smarty->assign("reconn", $reConnModeVals); - /* Fill preset items with values */ - $smarty->assign("shadowmode", $this->mungedObject->getShadow()); - $smarty->assign("brokenconnmode", $this->mungedObject->getBrokenConn()); - $smarty->assign("reconnmode", $this->mungedObject->getReConn()); + /* Fill preset items with values */ + $smarty->assign("shadowmode", $this->mungedObject->getShadow()); + $smarty->assign("brokenconnmode", $this->mungedObject->getBrokenConn()); + $smarty->assign("reconnmode", $this->mungedObject->getReConn()); - if(session::get('js')){ - /* Set form elements to disabled/enable state */ - $smarty->assign("tsloginstate", $this->mungedObject->getTsLogin()?"":"disabled"); + if(session::get('js')){ + /* Set form elements to disabled/enable state */ + $smarty->assign("tsloginstate", $this->mungedObject->getTsLogin()?"":"disabled"); - $smarty->assign("inheritstate", ""); - if($this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)){ - $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("inherit", $this->mungedObject->getInheritMode()?"checked":""); - $smarty->assign("connectclientdrives", - $this->mungedObject->getConnectClientDrives()?"checked":""); - $smarty->assign("connectclientprinters", - $this->mungedObject->getConnectClientPrinters()?"checked":""); - $smarty->assign("defaultprinter", - $this->mungedObject->getDefaultPrinter()?"checked":""); - $smarty->assign("CtxMaxConnectionTimeF", - $this->mungedObject->getCtxMaxConnectionTimeF()?"checked":""); - $smarty->assign("CtxMaxDisconnectionTimeF", - $this->mungedObject->getCtxMaxDisconnectionTimeF()?"checked":""); - $smarty->assign("CtxMaxIdleTimeF", - $this->mungedObject->getCtxMaxIdleTimeF()?"checked":""); + $smarty->assign("inheritstate", ""); + if($this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)){ + $smarty->assign("inheritstate", $this->mungedObject->getInheritMode()?"disabled":""); + } + }else{ + $smarty->assign("tsloginstate", ""); + $smarty->assign("inheritstate", ""); + } - - /* 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(); + /* Set checkboxes to checked or unchecked state */ + $smarty->assign("tslogin", $this->mungedObject->getTsLogin()?"checked":""); + $smarty->assign("inherit", $this->mungedObject->getInheritMode()?"checked":""); + $smarty->assign("connectclientdrives", + $this->mungedObject->getConnectClientDrives()?"checked":""); + $smarty->assign("connectclientprinters", + $this->mungedObject->getConnectClientPrinters()?"checked":""); + $smarty->assign("defaultprinter", + $this->mungedObject->getDefaultPrinter()?"checked":""); + $smarty->assign("CtxMaxConnectionTimeF", + $this->mungedObject->getCtxMaxConnectionTimeF()?"checked":""); + $smarty->assign("CtxMaxDisconnectionTimeF", + $this->mungedObject->getCtxMaxDisconnectionTimeF()?"checked":""); + $smarty->assign("CtxMaxIdleTimeF", + $this->mungedObject->getCtxMaxIdleTimeF()?"checked":""); - if($this->multiple_support_active){ - $smarty->assign("multiple_workstations",$this->multiple_sambaUserWorkstations); - } + + /* Fill sambaUserWorkstations */ + $ws= explode(",", $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); - } + if($this->multiple_support_active){ + $smarty->assign("multiple_workstations",$this->multiple_sambaUserWorkstations); + } + + $smarty->assign("workstations", $ws); + /* Variables */ foreach($this->attributes as $val){ @@ -620,18 +472,17 @@ class sambaAccount extends plugin $smarty->assign("flagsN", ""); } - if($this->samba3){ - if ($this->sambaPwdCanChange=="1"){ - $smarty->assign("flagsP", "checked"); - } else { - $smarty->assign("flagsP", ""); - } - }else{ - if ($this->pwdCanChange=="1"){ - $smarty->assign("flagsP", "checked"); - } else { - $smarty->assign("flagsP", ""); - } + // check if password never expires + if (is_integer(strpos($this->sambaAcctFlags, "X"))) { + $smarty->assign("flagsX", "checked"); + } else { + $smarty->assign("flagsX", ""); + } + + if ($this->sambaPwdCanChange=="1"){ + $smarty->assign("flagsP", "checked"); + } else { + $smarty->assign("flagsP", ""); } if ($this->password_expires=="1"){ @@ -657,10 +508,8 @@ class sambaAccount extends plugin /* In case of javascript, disable some fields on demand */ - if ($this->samba3){ - foreach($this->mungedObject->getOnDemandFlags() as $key => $value) { - $smarty->assign("$key", "$value"); - } + foreach($this->mungedObject->getOnDemandFlags() as $key => $value) { + $smarty->assign("$key", "$value"); } @@ -675,7 +524,7 @@ class sambaAccount extends plugin "inherit","CtxWorkDirectory","CtxInitialProgram","CtxMaxConnectionTimeF","CtxMaxConnectionTime","CtxMaxDisconnectionTimeF", "CtxMaxDisconnectionTime","CtxMaxIdleTimeF","CtxMaxIdleTime","connectclientdrives", "onnectclientprinters","defaultprinter","shadow","brokenconn", - "reconn","allow_pwchange","connectclientprinters","no_password_required","temporary_disable", + "reconn","allow_pwchange","connectclientprinters","no_expiry","no_password_required","temporary_disable", "password_expires","logon_time_set","logoff_time_set","kickoff_time_set","SetSambaLogonHours", "workstation_list") as $attr){ if(in_array($attr,$this->multi_boxes)){ @@ -721,14 +570,11 @@ class sambaAccount extends plugin } } $smarty->assign("additional_info_PwdMustChange",$additional_info_PwdMustChange); + $smarty->assign("no_expiry",$this->no_expiry); /* Show main page */ $smarty->assign("multiple_support",$this->multiple_support_active); - if ($this->samba3){ - $display.= $smarty->fetch (get_template_path('samba3.tpl', TRUE, dirname(__FILE__))); - } else { - $display.= $smarty->fetch (get_template_path('samba2.tpl', TRUE, dirname(__FILE__))); - } + $display.= $smarty->fetch (get_template_path('samba3.tpl', TRUE, dirname(__FILE__))); return ($display); } @@ -790,7 +636,7 @@ class sambaAccount extends plugin /* User attributes */ $user_attributes = array("sambaBadPasswordTime","sambaPwdLastSet","sambaLogonTime","sambaLogoffTime", - "sambaKickoffTime","sambaPwdCanChange","sambaPwdMustChange","sambaBadPasswordCount"); + "sambaKickoffTime","sambaPwdCanChange","sambaPwdMustChange","sambaBadPasswordCount", "sambaSID"); /* Get samba SID object and parse settings. */ @@ -814,9 +660,17 @@ class sambaAccount extends plugin } if($this->password_expires){ $sambaPwdMustChange = $this->sambaPwdMustChange; + } else { + if (is_numeric($sambaPwdMustChange)) { + $sambaPwdMustChange= date('d.m.Y', $sambaPwdMustChange); + } } if($this->kickoff_time_set){ $sambaKickoffTime = $this->sambaKickoffTime; + } else { + if (is_numeric($sambaKickoffTime)) { + $sambaKickoffTime= date('d.m.Y', $sambaKickoffTime); + } } $sambaPwdCanChange = $this->sambaPwdCanChange; @@ -938,16 +792,12 @@ class sambaAccount extends plugin */ if($sambaKickoffTime == "unset" || empty($sambaKickoffTime)){ $sambaKickoffTime = "("._("unset").")"; - }else{ - $sambaKickoffTime = date("d.m.Y H:i:s",$sambaKickoffTime); } /* sambaPwdMustChange: Timestamp of when the password will expire */ if($sambaPwdMustChange == "unset" || empty($sambaPwdMustChange)){ $sambaPwdMustChange = "("._("unset").")"; - }else{ - $sambaPwdMustChange = date("d.m.Y H:i:s",$sambaPwdMustChange); } /* sambaPwdCanChange: Timestamp of when the user is allowed to update the password @@ -982,14 +832,24 @@ class sambaAccount extends plugin "\n"._("Refuse machine password change").":".$sambaRefuseMachinePwdChange."". "\n ". "\n"._("User attributes")."". + "\n"._("SID").": ".$sambaSID."". "\n"._("Last failed login").": ".$sambaBadPasswordTime."". "\n"._("Logon attempts").": ".$sambaBadPasswordCount."". "\n"._("Last password update").": ".$sambaPwdLastSet."". "\n"._("Last logon").": ".$sambaLogonTime."". "\n"._("Last logoff").": ".$sambaLogoffTime."". - "\n"._("Automatic logoff").": ".$sambaKickoffTime."". - "\n"._("Password expires").": ".$sambaPwdMustChange."". - "\n"._("Password change available").": ".$sambaPwdCanChange."". + "\n"._("Automatic logoff").": ".$sambaKickoffTime.""; + + if($this->no_expiry){ + $str .= "\n"._("Password expires").": "._("No").""; + $str .= "\n". + sprintf(_("The password would expire on %s, but the password expiry is disabled."),$sambaPwdMustChange). + ""; + }else{ + $str .= "\n"._("Password expires").": ".$sambaPwdMustChange.""; + } + + $str .= "\n"._("Password change available").": ".$sambaPwdCanChange."". "\n"; "\n"; return($str); @@ -1045,38 +905,43 @@ class sambaAccount extends plugin /* Call common method to give check the hook */ $message= plugin::check(); - if ($this->samba3){ - - /* sambaHomePath requires sambaHomeDrive and vice versa */ - if(!empty($this->sambaHomePath) && empty($this->sambaHomeDrive)){ - $message[]= msgPool::required(_("Home drive")); - } - if(!empty($this->sambaHomeDrive) && empty($this->sambaHomePath)){ - $message[]= msgPool::required(_("Home path")); - } + /* sambaHomePath requires sambaHomeDrive and vice versa */ + if(!empty($this->sambaHomePath) && empty($this->sambaHomeDrive)){ + $message[]= msgPool::required(_("Home drive")); + } + if(!empty($this->sambaHomeDrive) && empty($this->sambaHomePath)){ + $message[]= msgPool::required(_("Home path")); + } - /* Strings */ - foreach (array( "sambaHomePath" => _("Home directory"), - "sambaProfilePath" => _("Profile path")) as $key => $val){ - if (!$this->mungedObject->is_samba_path($this->$key)){ - $message[]= msgPool::invalid($val); - } + /* Strings */ + foreach (array( "sambaHomePath" => _("Home directory"), + "sambaProfilePath" => _("Profile path")) as $key => $val){ + if (!$this->mungedObject->is_samba_path($this->$key)){ + $message[]= msgPool::invalid($val); } + } - /* Numeric values */ - foreach (array( "CtxMaxConnectionTime" => _("Connection"), - "CtxMaxDisconnectionTime" => _("Disconnection"), - "CtxMaxIdleTime" => _("IDLE")) as $key => $val){ + /* Numeric values */ + foreach (array( "CtxMaxConnectionTime" => _("Connection"), + "CtxMaxDisconnectionTime" => _("Disconnection"), + "CtxMaxIdleTime" => _("IDLE")) as $key => $val){ - if (isset($this->mungedObject->ctx[$key]) && !tests::is_id($this->mungedObject->ctx[$key]) && $val != 0){ - $message[]= msgPool::invalid($val); - } + if (isset($this->mungedObject->ctx[$key]) && !tests::is_id($this->mungedObject->ctx[$key]) && $val != 0){ + $message[]= msgPool::invalid($val); } + } - /* Too many workstations? Windows usrmgr only supports eight */ - if (substr_count($this->sambaUserWorkstations, ",") >= 8){ - $message[]= _("The windows usermanager allows eight clients at maximum!"); - } + /* Check dates */ + if (!tests::is_date($this->sambaKickoffTime)){ + $message[]= msgPool::invalid(_("Account expires after"), $this->sambaKickoffTime,"" ,"23.02.2009"); + } + if (!tests::is_date($this->sambaPwdMustChange)){ + $message[]= msgPool::invalid(_("Password expires on"), $this->sambaPwdMustChange,"" ,"23.02.2009"); + } + + /* Too many workstations? Windows usrmgr only supports eight */ + if (substr_count($this->sambaUserWorkstations, ",") >= 8){ + $message[]= _("The windows usermanager allows eight clients at maximum!"); } return ($message); @@ -1101,11 +966,7 @@ class sambaAccount extends plugin /* Take care about access options */ if ($this->acl_is_writeable("sambaAcctFlagsL",$SkipWrite) || ($this->acl_is_writeable("sambaAcctFlagsN",$SkipWrite))){ - if ($this->samba3){ - $attrname= "sambaPwdCanChange"; - } else { - $attrname= "pwdCanChange"; - } + $attrname= "sambaPwdCanChange"; if (isset($_POST["allow_pwchange"]) && $_POST["allow_pwchange"] == 1){ $tmp= 1; } else { @@ -1114,10 +975,18 @@ class sambaAccount extends plugin if ($this->$attrname != $tmp){ $this->is_modified= TRUE; } - $this->pwdCanChange= $tmp; $this->sambaPwdCanChange= $tmp; } - $tmp= "UX"; + $tmp= "U"; + + $this->no_expiry = FALSE; + if (isset($_POST["no_expiry"])){ + if ($_POST["no_expiry"] == 1){ + $tmp.= "X"; + $this->no_expiry = TRUE; + } + } + $this->no_password_required = FALSE; if (isset($_POST["no_password_required"])){ if ($_POST["no_password_required"] == 1){ @@ -1174,11 +1043,7 @@ class sambaAccount extends plugin /* Only save if acl's are set */ if ($this->acl_is_writeable("sambaAcctFlagsL",$SkipWrite) || ($this->acl_is_writeable("sambaAcctFlagsN",$SkipWrite))){ - if ($this->samba3){ - $attrname= "sambaAcctFlags"; - } else { - $attrname= "acctFlags"; - } + $attrname= "sambaAcctFlags"; if ($this->$attrname != $tmp){ $this->is_modified= TRUE; } @@ -1186,62 +1051,60 @@ class sambaAccount extends plugin } /* Save sambaDomain attribute */ - if ($this->acl_is_writeable("sambaDomainName",$SkipWrite) && $this->samba3 && isset ($_POST['sambaDomainName'],$SkipWrite)){ + if ($this->acl_is_writeable("sambaDomainName",$SkipWrite) && isset ($_POST['sambaDomainName'],$SkipWrite)){ $this->sambaDomainName= validate($_POST['sambaDomainName']); } /* Save CTX values */ - if ($this->samba3){ - - /* Save obvious values */ - foreach($this->ctxattributes as $val){ - if (isset($_POST[$val]) && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)){ - if (get_magic_quotes_gpc()) { - $this->mungedObject->ctx[$val]= stripcslashes(validate($_POST[$val])); - } else { - $this->mungedObject->ctx[$val]= validate($_POST[$val]); - } + /* Save obvious values */ + foreach($this->ctxattributes as $val){ + if (isset($_POST[$val]) && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)){ + if (get_magic_quotes_gpc()) { + $this->mungedObject->ctx[$val]= stripcslashes(validate($_POST[$val])); + } else { + $this->mungedObject->ctx[$val]= validate($_POST[$val]); } } + } - /* Save checkbox states. */ - $this->mungedObject->setTsLogin(!isset($_POST['tslogin']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - // Need to do some index checking to avoid messages like "index ... not found" - if(isset($_POST['brokenconn'])) { - $this->mungedObject->setBrokenConn($_POST['brokenconn'] == '1' - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - } - if(isset($_POST['reconn'])) { - $this->mungedObject->setReConn($_POST['reconn'] == '1' - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - } - $this->mungedObject->setInheritMode(isset($_POST['inherit']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - $this->mungedObject->setCtxMaxConnectionTimeF(!isset($_POST['CtxMaxConnectionTimeF']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - $this->mungedObject->setCtxMaxDisconnectionTimeF( - !isset($_POST['CtxMaxDisconnectionTimeF']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - $this->mungedObject->setCtxMaxIdleTimeF(!isset($_POST['CtxMaxIdleTimeF']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - $this->mungedObject->setConnectClientDrives(isset($_POST['connectclientdrives']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - $this->mungedObject->setConnectClientPrinters(isset($_POST['connectclientprinters']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - $this->mungedObject->setDefaultPrinter(isset($_POST['defaultprinter']) - && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); - - /* Save combo boxes. Takes two values */ - if(isset($_POST['reconn'])) { - $this->mungedObject->setShadow(isset($_POST['shadow']) && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite),$_POST['shadow']); - } - - /* Check for changes */ - if ($this->sambaMungedDial != $this->mungedObject->getMunged()){ - $this->is_modified= TRUE; - } + /* Save checkbox states. */ + $this->mungedObject->setTsLogin(!isset($_POST['tslogin']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + // Need to do some index checking to avoid messages like "index ... not found" + if(isset($_POST['brokenconn'])) { + $this->mungedObject->setBrokenConn($_POST['brokenconn'] == '1' + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + } + if(isset($_POST['reconn'])) { + $this->mungedObject->setReConn($_POST['reconn'] == '1' + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + } + $this->mungedObject->setInheritMode(isset($_POST['inherit']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + $this->mungedObject->setCtxMaxConnectionTimeF(!isset($_POST['CtxMaxConnectionTimeF']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + $this->mungedObject->setCtxMaxDisconnectionTimeF( + !isset($_POST['CtxMaxDisconnectionTimeF']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + $this->mungedObject->setCtxMaxIdleTimeF(!isset($_POST['CtxMaxIdleTimeF']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + $this->mungedObject->setConnectClientDrives(isset($_POST['connectclientdrives']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + $this->mungedObject->setConnectClientPrinters(isset($_POST['connectclientprinters']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + $this->mungedObject->setDefaultPrinter(isset($_POST['defaultprinter']) + && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite)); + + /* Save combo boxes. Takes two values */ + if(isset($_POST['reconn'])) { + $this->mungedObject->setShadow(isset($_POST['shadow']) && $this->acl_is_writeable("AllowLoginOnTerminalServer",$SkipWrite),$_POST['shadow']); + } + + /* Check for changes */ + if ($this->sambaMungedDial != $this->mungedObject->getMunged()){ + $this->is_modified= TRUE; } + } } @@ -1268,128 +1131,99 @@ class sambaAccount extends plugin $this->attrs['objectClass']= $tmp; /* Generate rid / primaryGroupId */ - if ($this->samba3){ - if (!isset($this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID'])){ - msg_dialog::display(_("Warning"), _("Undefined Samba SID detected. Please fix this problem manually!"), WARNING_DIALOG); - } else { - $this->SID= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID']; - $this->ridBase= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['RIDBASE']; - } - - /* Need to generate a new uniqe uid/gid combination? */ - if ($this->sambaSID == "" || $this->orig_sambaDomainName != $this->sambaDomainName){ - $uidNumber= $this->uidNumber; - while(TRUE){ - $sid= $this->SID."-".($uidNumber*2 + $this->ridBase); - $ldap->cd($this->config->current['BASE']); - $ldap->search("(sambaSID=$sid)", array("sambaSID")); - if ($ldap->count() == 0){ - break; - } - $uidNumber++; - } - $this->attrs['sambaSID']= $sid; + if (!isset($this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID'])){ + msg_dialog::display(_("Warning"), _("Undefined Samba SID detected. Please fix this problem manually!"), WARNING_DIALOG); + } else { + $this->SID= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['SID']; + $this->ridBase= $this->config->data['SERVERS']['SAMBA'][$this->sambaDomainName]['RIDBASE']; + } - /* Check for users primary group */ + /* Need to generate a new uniqe uid/gid combination? */ + if ($this->sambaSID == "" || $this->orig_sambaDomainName != $this->sambaDomainName){ + $uidNumber= $this->uidNumber; + while(TRUE){ + $sid= $this->SID."-".($uidNumber*2 + $this->ridBase); $ldap->cd($this->config->current['BASE']); - $ldap->search("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))", array("cn")); - if ($ldap->count() != 1){ - msg_dialog::display(_("Warning"), _("Cannot convert primary group to samba group: group cannot be identified!"), WARNING_DIALOG); - } else { - $attrs= $ldap->fetch(); - $g= new group($this->config, $ldap->getDN()); - if ($g->sambaSID == ""){ - $g->sambaDomainName= $this->sambaDomainName; - $g->smbgroup= TRUE; - $g->save (); - } - $this->attrs['sambaPrimaryGroupSID']= $g->sambaSID; + $ldap->search("(sambaSID=$sid)", array("sambaSID")); + if ($ldap->count() == 0){ + break; } + $uidNumber++; } + $this->attrs['sambaSID']= $sid; - if ($this->sambaHomeDrive == ""){ - $this->attrs["sambaHomeDrive"]= array(); + /* Check for users primary group */ + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=posixGroup)(gidNumber=".$this->gidNumber."))", array("cn")); + if ($ldap->count() != 1){ + msg_dialog::display(_("Warning"), _("Cannot convert primary group to samba group: group cannot be identified!"), WARNING_DIALOG); + } else { + $attrs= $ldap->fetch(); + $g= new group($this->config, $ldap->getDN()); + if ($g->sambaSID == ""){ + $g->sambaDomainName= $this->sambaDomainName; + $g->smbgroup= TRUE; + $g->save (); + } + $this->attrs['sambaPrimaryGroupSID']= $g->sambaSID; } + } - /* Generate munged dial value */ - $this->attrs["sambaMungedDial"]= $this->mungedObject->getMunged(); - - /* User wants me to fake the idMappings? This is useful for - making winbind resolve the user names in a reasonable amount - of time in combination with larger databases. */ - if ($this->config->get_cfg_value("sambaidmapping") == "true"){ - $this->attrs['objectClass'][]= "sambaIdmapEntry"; - } + if ($this->sambaHomeDrive == ""){ + $this->attrs["sambaHomeDrive"]= array(); + } + /* Generate munged dial value */ + $this->attrs["sambaMungedDial"]= $this->mungedObject->getMunged(); - /* Password expiery */ - if ($this->password_expires == "1"){ - $this->attrs['sambaPwdMustChange']= $this->sambaPwdMustChange; - } 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(); - } - if ($this->logoff_time_set == "1"){ - $this->attrs['sambaLogoffTime']= $this->sambaLogoffTime; - } else { - $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; //hickert - } else { - $this->attrs['sambaKickoffTime']= array(); - } - } else { - /* Not samba3 */ - $this->attrs['rid']= $this->uidNumber*2 + 1000; - $this->attrs['primaryGroupID']= $this->gidNumber*2 +1001; + /* User wants me to fake the idMappings? This is useful for + making winbind resolve the user names in a reasonable amount + of time in combination with larger databases. */ + if ($this->config->get_cfg_value("sambaidmapping") == "true"){ + $this->attrs['objectClass'][]= "sambaIdmapEntry"; + } - if ($this->homeDrive == ""){ - $this->attrs["homeDrive"]= array(); - } - /* Password expiery */ - if ($this->password_expires == "1"){ - $this->attrs['pwdMustChange']= $this->pwdMustChange; - } 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']= array(); - } - if ($this->logoff_time_set == "1"){ - $this->attrs['logoffTime']= $this->logoffTime; + /* Password expiery */ + if ($this->password_expires == "1"){ + #TODO: check for date format + if ($this->attrs['sambaPwdMustChange'] == ""){ + $this->attrs['sambaPwdMustChange']= 0; } else { - $this->attrs['logoffTime']= array(); + list($day, $month, $year)= explode('.', $this->sambaPwdMustChange); + $this->attrs['sambaPwdMustChange']= mktime(0,0,0,$month, $day, $year); } - 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['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(); + } + if ($this->logoff_time_set == "1"){ + $this->attrs['sambaLogoffTime']= $this->sambaLogoffTime; + } else { + $this->attrs['sambaLogoffTime']= array(); + } + if ($this->kickoff_time_set == "1"){ + /* Adapt values to be timestamps */ + #TODO: check for date format + if ($this->attrs['sambaKickoffTime'] == ""){ + $this->attrs['sambaKickoffTime']= 2147483647; } else { - $this->attrs['kickoffTime']= array(); + list($day, $month, $year)= explode('.', $this->sambaKickoffTime); + $this->attrs['sambaKickoffTime']= mktime(0,0,0,$month, $day, $year); } + } else { + $this->attrs['sambaKickoffTime']= array(); } /* Write back to ldap */ @@ -1442,7 +1276,7 @@ class sambaAccount extends plugin $this->sambaPrimaryGroupSID= ""; /* Fill mungedDial field */ - if ($this->samba3 && isset($this->attrs['sambaMungedDial']) && !in_array('sambaMungedDial', $skip)){ + if (isset($this->attrs['sambaMungedDial']) && !in_array('sambaMungedDial', $skip)){ $this->mungedObject->load($this->sambaMungedDial); } @@ -1519,6 +1353,7 @@ class sambaAccount extends plugin "InheritClientConfig" => _("Inherit client config"), "sambaPwdCanChange" => _("Allow user to change password") , "sambaAcctFlagsN" => _("Login from windows client requires no password"), + "sambaAcctFlagsX" => _("Password never expires"), "sambaAcctFlagsL" => _("Lock samba account"), "sambaKickoffTime" => _("Account expires") , "sambaPwdMustChange" => _("Password expires") , @@ -1532,11 +1367,7 @@ class sambaAccount extends plugin function enable_multiple_support() { plugin::enable_multiple_support(); - if($this->samba3){ - $this->multiple_support_active = TRUE; - }else{ - $this->multiple_support_active = FALSE; - } + $this->multiple_support_active = TRUE; } function multiple_save_object() @@ -1548,7 +1379,7 @@ class sambaAccount extends plugin "inherit","CtxWorkDirectory","CtxInitialProgram","CtxMaxConnectionTimeF","CtxMaxConnectionTime","CtxMaxDisconnectionTimeF", "CtxMaxDisconnectionTime","CtxMaxIdleTimeF","CtxMaxIdleTime","connectclientdrives", "onnectclientprinters","defaultprinter","shadow","brokenconn", - "reconn","allow_pwchange","connectclientprinters","no_password_required","temporary_disable", + "reconn","allow_pwchange","connectclientprinters","no_expiry","no_password_required","temporary_disable", "password_expires","logon_time_set","logoff_time_set","kickoff_time_set","SetSambaLogonHours", "workstation_list") as $attr){ if(isset($_POST["use_".$attr])){ @@ -1599,7 +1430,7 @@ class sambaAccount extends plugin * Those workstations will be displayed in light grey. */ $tmp2 = array("count" => 0); - $tmp = split(",", $this->sambaUserWorkstations); + $tmp = explode(",", $this->sambaUserWorkstations); foreach($tmp as $station){ $station = trim($station); if(!empty($station)){ @@ -1710,7 +1541,6 @@ class sambaAccount extends plugin /* Flags */ if(in_array("allow_pwchange",$this->multi_boxes)){ $ret['sambaPwdCanChange'] = $this->sambaPwdCanChange; - $ret['pwdCanChange'] = $this->pwdCanChange; } if(in_array("password_expires",$this->multi_boxes)){ @@ -1734,6 +1564,10 @@ class sambaAccount extends plugin $ret['no_password_required'] = $this->no_password_required; } + if(in_array("no_expiry",$this->multi_boxes)){ + $ret['no_expiry'] = $this->no_expiry; + } + if(in_array("temporary_disable",$this->multi_boxes)){ $ret['temporary_disable'] = $this->temporary_disable; } @@ -1761,7 +1595,7 @@ class sambaAccount extends plugin /* Prepare current settings to be merged */ if(isset($this->sambaUserWorkstations)){ - $ttmp = split(",",$this->sambaUserWorkstations); + $ttmp = explode(",",$this->sambaUserWorkstations); foreach($ttmp as $station){ $station = trim($station); if(!empty($station)){ @@ -1820,7 +1654,6 @@ class sambaAccount extends plugin if(isset($values['sambaPwdCanChange'])) $this->sambaPwdCanChange = $values['sambaPwdCanChange']; - if(isset($values['pwdCanChange'])) $this->pwdCanChange = $values['pwdCanChange']; @@ -1852,6 +1685,16 @@ class sambaAccount extends plugin } } + if(isset($values['no_expiry'])){ + if($values['no_expiry']){ + if(!preg_match("/N/",$this->sambaAcctFlags)) { + $this->sambaAcctFlags = preg_replace("/ /","N",$this->sambaAcctFlags,1); + } + }else{ + $this->sambaAcctFlags = preg_replace("/N/"," ",$this->sambaAcctFlags,1); + } + } + if(isset($values['temporary_disable'])){ if($values['temporary_disable']){ if(preg_match("/L/",$this->sambaAcctFlags)) {