Package: release.debian.org Severity: normal Tags: stretch User: release.debian....@packages.debian.org Usertags: pu
Dear stable release team, now that we could avoid the full backport of gosa from buster to stretch (see #927306), the Debian Edu team would still like to introduce various fixes for gosa to the next Debian 9 point release. Some issues require a fix (RC / important), some are small fixes here and there that caused people pain and have been resolved in Debian buster's gosa. Resorting the patches, the most critical come first: Critical (appear often, problematic for the users): + + Add 1043_smarty-add-on-function-param-types.patch. + Fix missing password field, caused by PHP error "parameter 2 expected + to be a reference, value given". (Closes: #918578). -> definitely happens in Debian buster, I have seen it once on Debian stretch. + + Add 1045_dont_use_filter_caching.patch. Disable filter caching via + $_SESSION. The approach stores PHP object in $_SESSION; since php7.0 + this leads to unexpected results and flawed rendering of class_management + based listings. (Closes: #907815). -> issue is reproducable on Debian stretch, may be a security issue in fact (as sort-of-random / old data gets accessed). + + Add 1031_no-context-loose-continues.patch. + Avoid stray continue expression. (Closes: #879105). -> issue occurs on PHP7, rendering of management view gets aborted with error. Important fixes (as they can break things when they occur): + + Add 1029_better-whitespace-cleanup-in-genuid.patch. + Prevent gen_uids() from generating UIDs containing blanks. -> we saw login uids generated with blanks. If the pattern is 3 initial from last name, 3 from first name, and the user is Chen Wu -> login uid: "wu che" (which is bad on POSIX). + + Add 1032_fix_select_acl_role.patch. + Use ACL from role definition: Select the correct role. -> When returning to ACL editing and a role was used for an ACL and there are more than one role, always the top role (not the one configured) gets pre-selected. + + Add 1033_fix_unable_to_delete_acl_asignment.patch. + Fix removing ACLs from objects (e.g. groups). -> self-explaining. Really really nice to have (while at it anyway): + + Rebase / update 1016_allow-same-user-ids-as-adduser.patch and + 1026_fix-deprecated-constructor-format.patch. -> required + + Add 1035_acl_override_to_allow_delete_of_group_members.patch. + Support member removal from groups, if someone has the right + to edit the group. -> self-explaining + + Add 1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch. + Propagate shadow expiry from user templates to created user objects. -> otherwise, the user won't be able to store the shadowExpiry value. + + Add 1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_ + tmplate_setting.patch. Fix date calculations for sambaKickoffTime and + propagation from template to created user object. -> self-explaining + + Add 1040_inactive_pwd_fields_when_using_pwd_proposal.patch. + Disable password entry text fields when password proposal is to be used. -> if people use the password proposal feature/hook (activatable via a radio button), the password entry field should be disabled. Otherwise, users are able to select the proposed password _and_ enter one of their own and wonder, why the entered password won't work. + + Add 1041_ref_param_error_in_My_Parser.patch. + Compat fix for PHP > 5.4. Hand over real variable to function. -> self-explaining Cosmetic fixes (while at it anyway): + + Add 1030_column-header-titles-group-members.patch. + Fix column titles in member lists of POSIX groups. + + Update 1026_fix-deprecated-constructor-format.patch. Drop an unwanted + find+replace artefact in class_userFilter. + + Add 1034_remove_superfluous__get_post__call_from__save_object.patch. + class_sortableListing: Remove superfluous get_post() call + from_ save_object() + + Add 1036_remove_double_groupList_setEditable_setting.patch. + Remove duplicate setEditable() for POSIX group lists. + + Add 1038_shadowexpire_in_one_line.patch. + Show shadow expiry (esp. the calendar icon) in one line on screen (html + template adjustment). light+love, Mike -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.19.0-2-amd64 (SMP w/4 CPU cores) Kernel taint flags: TAINT_WARN, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
diff -Nru gosa-2.7.4+reloaded2/debian/changelog gosa-2.7.4+reloaded2/debian/changelog --- gosa-2.7.4+reloaded2/debian/changelog 2018-07-04 09:15:17.000000000 +0200 +++ gosa-2.7.4+reloaded2/debian/changelog 2019-04-19 19:03:52.000000000 +0200 @@ -1,3 +1,57 @@ +gosa (2.7.4+reloaded2-13+deb9u2) stretch; urgency=medium + + [ Mike Gabriel ] + * debian/patches: + + Add 1029_better-whitespace-cleanup-in-genuid.patch. + Prevent gen_uids() from generating UIDs containing blanks. + + Add 1030_column-header-titles-group-members.patch. + Fix column titles in member lists of POSIX groups. + + Add 1043_smarty-add-on-function-param-types.patch. + Fix missing password field, caused by PHP error "parameter 2 expected + to be a reference, value given". (Closes: #918578). + + Update 1026_fix-deprecated-constructor-format.patch. Drop an unwanted + find+replace artefact in class_userFilter. + + Add 1045_dont_use_filter_caching.patch. Disable filter caching via + $_SESSION. The approach stores PHP object in $_SESSION; since php7.0 + this leads to unexpected results and flawed rendering of class_management + based listings. (Closes: #907815). + + Rebase / update 1016_allow-same-user-ids-as-adduser.patch and + 1026_fix-deprecated-constructor-format.patch. + + [ Benjamin Zapiec ] + * debian/patches: + + Add 1031_no-context-loose-continues.patch. + Avoid stray continue expression. (Closes: #879105). + + [ Christian Schwamborn ] + * debian/patches: + + Add 1032_fix_select_acl_role.patch. + Use ACL from role definition: Select the correct role. + + Add 1033_fix_unable_to_delete_acl_asignment.patch. + Fix removing ACLs from objects (e.g. groups). + + Add 1034_remove_superfluous__get_post__call_from__save_object.patch. + class_sortableListing: Remove superfluous get_post() call + from_ save_object() + + Add 1035_acl_override_to_allow_delete_of_group_members.patch. + Support member removal from groups, if someone has the right + to edit the group. + + Add 1036_remove_double_groupList_setEditable_setting.patch. + Remove duplicate setEditable() for POSIX group lists. + + Add 1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch. + Propagate shadow expiry from user templates to created user objects. + + Add 1038_shadowexpire_in_one_line.patch. + Show shadow expiry (esp. the calendar icon) in one line on screen (html + template adjustment). + + Add 1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_ + tmplate_setting.patch. Fix date calculations for sambaKickoffTime and + propagation from template to created user object. + + Add 1040_inactive_pwd_fields_when_using_pwd_proposal.patch. + Disable password entry text fields when password proposal is to be used. + + Add 1041_ref_param_error_in_My_Parser.patch. + Compat fix for PHP > 5.4. Hand over real variable to function. + + -- Mike Gabriel <sunwea...@debian.org> Fri, 19 Apr 2019 19:03:52 +0200 + gosa (2.7.4+reloaded2-13+deb9u1) stretch-security; urgency=medium * debian/patches: diff -Nru gosa-2.7.4+reloaded2/debian/patches/1016_allow-same-user-ids-as-adduser.patch gosa-2.7.4+reloaded2/debian/patches/1016_allow-same-user-ids-as-adduser.patch --- gosa-2.7.4+reloaded2/debian/patches/1016_allow-same-user-ids-as-adduser.patch 2018-07-04 09:14:21.000000000 +0200 +++ gosa-2.7.4+reloaded2/debian/patches/1016_allow-same-user-ids-as-adduser.patch 2019-04-19 19:03:52.000000000 +0200 @@ -51,18 +51,3 @@ } if (!tests::is_url($this->labeledURI)){ $message[]= msgPool::invalid(_("Homepage"), "", "", "http://www.your-domain.com/yourname"); ---- a/fai/admin/fai/class_faiTemplateEntry.inc -+++ b/fai/admin/fai/class_faiTemplateEntry.inc -@@ -254,11 +254,7 @@ - if($this->group == ""){ - $message[] = msgPool::required(_("Group")); - }elseif (!tests::is_uid($this->group)){ -- if (strict_uid_mode()){ -- $message[]= msgPool::invalid(_("Group"), $this->group, "/[a-z0-9_-]/"); -- } else { -- $message[]= msgPool::invalid(_("Group"), $this->group, "/[a-z0-9_-]/i"); -- } -+ $message[]= msgPool::invalid(_("Group"), $this->group, "/".get_uid_regexp()."/"); - } - - return ($message); diff -Nru gosa-2.7.4+reloaded2/debian/patches/1026_fix-deprecated-constructor-format.patch gosa-2.7.4+reloaded2/debian/patches/1026_fix-deprecated-constructor-format.patch --- gosa-2.7.4+reloaded2/debian/patches/1026_fix-deprecated-constructor-format.patch 2018-07-04 09:14:21.000000000 +0200 +++ gosa-2.7.4+reloaded2/debian/patches/1026_fix-deprecated-constructor-format.patch 2019-04-19 19:03:52.000000000 +0200 @@ -300,390 +300,6 @@ $this->DisplayName = _("DNS service"); ---- a/fai/admin/fai/class_askClassName.inc -+++ b/fai/admin/fai/class_askClassName.inc -@@ -13,11 +13,11 @@ - var $ClassAlreadyExists = false; - var $parent; - -- function askClassName (&$config,$dn,$ui,$objectClass) -+ function __construct(&$config,$dn,$ui,$objectClass) - { - $this->ui = $ui; - $this->objectClass = $objectClass; -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - } - - function execute() ---- a/fai/admin/fai/class_debconfTemplate.inc -+++ b/fai/admin/fai/class_debconfTemplate.inc -@@ -8,7 +8,7 @@ - var $template= array(); - - -- function debconf($language= "") -+ function __construct($language= "") - { - $this->set_language($language); - } ---- a/fai/admin/fai/class_faiDiskEntry.inc -+++ b/fai/admin/fai/class_faiDiskEntry.inc -@@ -26,9 +26,9 @@ - - var $lvmDevices = array(); - -- function faiDiskEntry (&$config, $dn= NULL,$parent,$disk,$type) -+ function __construct(&$config, $dn= NULL,$parent,$disk,$type) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - // Set default attributes - $this->parent = $parent; ---- a/fai/admin/fai/class_faiHookEntry.inc -+++ b/fai/admin/fai/class_faiHookEntry.inc -@@ -27,9 +27,9 @@ - var $write_protect = FALSE; - - -- function faiHookEntry (&$config, $dn= NULL,$object=false) -+ function __construct(&$config, $dn= NULL,$object=false) - { -- plugin::plugin ($config, NULL); -+ plugin::__construct ($config, NULL); - if($dn != "new"){ - $this->orig_cn= $object['cn']; - $this->dn=$object['dn']; ---- a/fai/admin/fai/class_faiHook.inc -+++ b/fai/admin/fai/class_faiHook.inc -@@ -33,10 +33,10 @@ - var $FAIstate = ""; - var $ui; - -- function faiHook (&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - /* If "dn==new" we try to create a new entry - * Else we must read all objects from ldap which belong to this entry. ---- a/fai/admin/fai/class_faiPackageConfiguration.inc -+++ b/fai/admin/fai/class_faiPackageConfiguration.inc -@@ -20,9 +20,9 @@ - @param String The release name (e.g. edge) - @param Array The current package configuration. - */ -- function faiPackageConfiguration (&$config, $dn= NULL,$obj,$release,$pkg_config) -+ function __construct(&$config, $dn= NULL,$obj,$release,$pkg_config) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - $this->obj = $obj; - $this->release = $release; - $this->pkg_config = $pkg_config; ---- a/fai/admin/fai/class_faiPackage.inc -+++ b/fai/admin/fai/class_faiPackage.inc -@@ -55,10 +55,10 @@ - "pending", "dpkgc" ); - - -- function faiPackage (&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - /* If "dn==new" we try to create a new entry - * Else we must read all objects from ldap which belong to this entry. ---- a/fai/admin/fai/class_faiPartitionTableEntry.inc -+++ b/fai/admin/fai/class_faiPartitionTableEntry.inc -@@ -16,9 +16,9 @@ - var $old_cn = ""; - var $parent = null; - -- function faiPartitionTableEntry (&$config, $dn= NULL,&$parent,$disk=false) -+ function __construct(&$config, $dn= NULL,&$parent,$disk=false) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - $this->UsedAttrs = array("cn","description","FAIpartitionType","FAIpartitionNr","FAIfsType","FAImountPoint","FAIpartitionSize", - "FAImountOptions","FAIfsOptions","FAIpartitionFlags"); - ---- a/fai/admin/fai/class_faiPartitionTable.inc -+++ b/fai/admin/fai/class_faiPartitionTable.inc -@@ -25,10 +25,10 @@ - - var $view_logged = FALSE; - -- function faiPartitionTable (&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - /* If "dn==new" we try to create a new entry - * Else we must read all objects from ldap which belong to this entry. ---- a/fai/admin/fai/class_faiProfile.inc -+++ b/fai/admin/fai/class_faiProfile.inc -@@ -25,10 +25,10 @@ - - var $classSelect; - -- function faiProfile(&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - $ldap=$this->config->get_ldap_link(); - - $this->ui = get_userinfo(); ---- a/fai/admin/fai/class_faiScriptEntry.inc -+++ b/fai/admin/fai/class_faiScriptEntry.inc -@@ -23,9 +23,9 @@ - var $enc_after_edit = ""; - var $write_protect = FALSE; - -- function faiScriptEntry (&$config, $dn= NULL,$object=false) -+ function __construct(&$config, $dn= NULL,$object=false) - { -- plugin::plugin ($config, NULL); -+ plugin::__construct ($config, NULL); - if($dn != "new"){ - $this->orig_cn= $object['cn']; - $this->dn=$object['dn']; ---- a/fai/admin/fai/class_faiScript.inc -+++ b/fai/admin/fai/class_faiScript.inc -@@ -37,10 +37,10 @@ - var $view_logged = FALSE; - var $ui; - -- function faiScript (&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - /* If "dn==new" we try to create a new entry - * Else we must read all objects from ldap which belong to this entry. ---- a/fai/admin/fai/class_faiSummaryTab.inc -+++ b/fai/admin/fai/class_faiSummaryTab.inc -@@ -33,9 +33,9 @@ - var $parent = NULL; - var $ui = NULL; - -- function faiSummaryTab(&$config,$dn)//,$parent) -+ function __construct(&$config,$dn)//,$parent) - { -- plugin::plugin($config,$dn);//,$parent); -+ plugin::__construct($config,$dn);//,$parent); - - $this->ui = get_userinfo(); - ---- a/fai/admin/fai/class_faiTemplateEdit.inc -+++ b/fai/admin/fai/class_faiTemplateEdit.inc -@@ -13,9 +13,9 @@ - var $write_protect = FALSE; - var $mb_extension = TRUE; - -- function faiTemplateEdit (&$config, $dn, $value) -+ function __construct(&$config, $dn, $value) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - if(!function_exists("mb_detect_encoding")){ - $this->mb_extension = FALSE; - }else{ ---- a/fai/admin/fai/class_faiTemplateEntry.inc -+++ b/fai/admin/fai/class_faiTemplateEntry.inc -@@ -23,9 +23,9 @@ - var $parent = NULL; - var $FAIstate = ""; - -- function faiTemplateEntry (&$config, $dn= NULL,$object=false) -+ function __construct(&$config, $dn= NULL,$object=false) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - if((isset($object['cn'])) && (!empty($object['cn']))){ - $this->orig_cn= $object['cn']; ---- a/fai/admin/fai/class_faiTemplate.inc -+++ b/fai/admin/fai/class_faiTemplate.inc -@@ -34,10 +34,10 @@ - var $ui; - var $view_logged = FALSE; - -- function faiTemplate (&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - /* If "dn==new" we try to create a new entry - * Else we must read all objects from ldap which belong to this entry. ---- a/fai/admin/fai/class_faiVariableEntry.inc -+++ b/fai/admin/fai/class_faiVariableEntry.inc -@@ -16,9 +16,9 @@ - var $parent = NULL; - var $FAIstate = ""; - -- function faiVariableEntry (&$config, $dn= NULL,$object=false) -+ function __construct(&$config, $dn= NULL,$object=false) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - if((isset($object['cn'])) && (!empty($object['cn']))){ - $this->orig_cn= $object['cn']; - $this->dn=$object['dn']; ---- a/fai/admin/fai/class_faiVariable.inc -+++ b/fai/admin/fai/class_faiVariable.inc -@@ -33,10 +33,10 @@ - var $ui ; - var $view_logged = FALSE; - -- function faiVariable (&$config, $dn= NULL) -+ function __construct(&$config, $dn= NULL) - { - /* Load Attributes */ -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - if($dn != "new"){ - $this->dn =$dn; ---- a/fai/admin/fai/tabsHook.inc -+++ b/fai/admin/fai/tabsHook.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsHook($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn,$category); -+ tabs::__construct($config, $data, $dn,$category); - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); - } ---- a/fai/admin/fai/tabsPackage.inc -+++ b/fai/admin/fai/tabsPackage.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsPackage($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn,$category); -+ tabs::__construct($config, $data, $dn,$category); - - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); ---- a/fai/admin/fai/tabsPartition.inc -+++ b/fai/admin/fai/tabsPartition.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsPartition($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn,$category); -+ tabs::__construct($config, $data, $dn,$category); - - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); ---- a/fai/admin/fai/tabsProfile.inc -+++ b/fai/admin/fai/tabsProfile.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsProfile($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn,$category); -+ tabs::__construct($config, $data, $dn,$category); - - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); ---- a/fai/admin/fai/tabsScript.inc -+++ b/fai/admin/fai/tabsScript.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsScript($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn,$category); -+ tabs::__construct($config, $data, $dn,$category); - - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); ---- a/fai/admin/fai/tabsTemplate.inc -+++ b/fai/admin/fai/tabsTemplate.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsTemplate($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn, $category); -+ tabs::__construct($config, $data, $dn, $category); - - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); ---- a/fai/admin/fai/tabsVariable.inc -+++ b/fai/admin/fai/tabsVariable.inc -@@ -5,9 +5,9 @@ - var $base= ""; - var $parent =""; - -- function tabsVariable($config, $data, $dn,$category) -+ function __construct($config, $data, $dn,$category) - { -- tabs::tabs($config, $data, $dn, $category); -+ tabs::__construct($config, $data, $dn, $category); - - /* Add references/acls/snapshots */ - # $this->addSpecialTabs(); ---- a/fai/admin/systems/services/repository/class_servRepository.inc -+++ b/fai/admin/systems/services/repository/class_servRepository.inc -@@ -20,9 +20,9 @@ - - var $repositoryMangement = NULL; - -- function servrepository (&$config, $dn= NULL, $parent= NULL) -+ function __construct(&$config, $dn= NULL, $parent= NULL) - { -- plugin::plugin ($config, $dn,$parent); -+ plugin::__construct ($config, $dn,$parent); - - $this->DisplayName = _("Repository service"); - ---- a/fai/admin/systems/services/repository/class_servRepositorySetup.inc -+++ b/fai/admin/systems/services/repository/class_servRepositorySetup.inc -@@ -17,9 +17,9 @@ - var $cn = ""; - var $parent = ""; - -- function servRepositorySetup (&$config, $dn= NULL,$data = false) -+ function __construct(&$config, $dn= NULL,$data = false) - { -- plugin::plugin ($config, $dn); -+ plugin::__construct ($config, $dn); - - if(isset($this->attrs['cn'][0])){ - $this->cn=$this->attrs['cn'][0]; --- a/gofax/admin/systems/services/gofax/class_goFaxServer.inc +++ b/gofax/admin/systems/services/gofax/class_goFaxServer.inc @@ -24,9 +24,9 @@ @@ -1083,23 +699,6 @@ $this->dn= $dn; --- a/gosa-core/include/class_userFilter.inc +++ b/gosa-core/include/class_userFilter.inc -@@ -16,13 +16,13 @@ - */ - static function userFilteringAvailable() - { -- if(!session::is_set('userFilter::userFilteringAvailable')){ -+ if(!session::is_set('userFilter::__constructingAvailable')){ - global $config; - $ldap = $config->get_ldap_link(); - $ocs = $ldap->get_objectclasses(); -- session::set('userFilter::userFilteringAvailable', isset($ocs['gosaProperties'])); -+ session::set('userFilter::__constructingAvailable', isset($ocs['gosaProperties'])); - } -- return(session::get('userFilter::userFilteringAvailable')); -+ return(session::get('userFilter::__constructingAvailable')); - } - - @@ -32,7 +32,7 @@ { // Initialize this plugin with the users dn to gather user defined filters. @@ -2267,31 +1866,6 @@ // Get attributes from parent object if(isset($this->attrs['uid'])){ ---- a/heimdal/admin/systems/services/kerberos/class_goKrbServer.inc -+++ b/heimdal/admin/systems/services/kerberos/class_goKrbServer.inc -@@ -52,9 +52,9 @@ - @param String The object dn we are currently editing. - @param Object The parent object. - */ -- public function goKrbServer(&$config,$dn,$parent) -+ public function __construct(&$config,$dn,$parent) - { -- goService::goService($config,$dn); -+ goService::__construct($config,$dn); - $this->DisplayName = _("Kerberos service"); - $this->parent = $parent; - ---- a/heimdal/admin/systems/services/kerberos/class_password-methods-heimdal.inc -+++ b/heimdal/admin/systems/services/kerberos/class_password-methods-heimdal.inc -@@ -57,7 +57,7 @@ - var $attrs = array(); - var $is_account = FALSE; - -- function passwordMethodheimdal(&$config,$dn = "new") -+ function __construct(&$config,$dn = "new") - { - $this->config= $config; - $this->parent_dn = $dn; --- a/kolab/admin/systems/services/kolab/class_servKolab.inc +++ b/kolab/admin/systems/services/kolab/class_servKolab.inc @@ -37,14 +37,14 @@ diff -Nru gosa-2.7.4+reloaded2/debian/patches/1029_better-whitespace-cleanup-in-genuid.patch gosa-2.7.4+reloaded2/debian/patches/1029_better-whitespace-cleanup-in-genuid.patch --- gosa-2.7.4+reloaded2/debian/patches/1029_better-whitespace-cleanup-in-genuid.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1029_better-whitespace-cleanup-in-genuid.patch 2019-04-19 18:55:25.000000000 +0200 @@ -0,0 +1,16 @@ +Description: Remove all white-spaces from attributes before generating the UIDs. +Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> +Abstract: + During development of the GOsa² SchoolManager Add-On, it was discovered that in + some cases the gen_uids() function would return UIDs that contained blanks. + +--- a/gosa-core/include/functions.inc ++++ b/gosa-core/include/functions.inc +@@ -3804,6 +3804,7 @@ + $value = iconv('UTF-8', 'US-ASCII//TRANSLIT', $value); + } + $value = preg_replace('/[^(\x20-\x7F)]*/','',$value); ++ $value = preg_replace('/\s/', '', $value); + $attributes[$name] = strtolower($value); + } + diff -Nru gosa-2.7.4+reloaded2/debian/patches/1030_column-header-titles-group-members.patch gosa-2.7.4+reloaded2/debian/patches/1030_column-header-titles-group-members.patch --- gosa-2.7.4+reloaded2/debian/patches/1030_column-header-titles-group-members.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1030_column-header-titles-group-members.patch 2019-04-19 18:56:42.000000000 +0200 @@ -0,0 +1,14 @@ +Description: Fix column titles in member lists of POSIX groups +Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> + +--- a/gosa-core/plugins/admin/groups/class_group.inc ++++ b/gosa-core/plugins/admin/groups/class_group.inc +@@ -207,7 +207,7 @@ + $this->memberList->setEditable(false); + $this->memberList->setWidth("100%"); + $this->memberList->setHeight("300px"); +- $this->memberList->setHeader(array('~',_("Given name"),_("Surname"),_("UID"))); ++ $this->memberList->setHeader(array('~',_("Surname"),_("Given name"),_("UID"))); + $this->memberList->setColspecs(array('20px','*','*','*','20px')); + $this->memberList->setDefaultSortColumn(1); + diff -Nru gosa-2.7.4+reloaded2/debian/patches/1031_no-context-loose-continues.patch gosa-2.7.4+reloaded2/debian/patches/1031_no-context-loose-continues.patch --- gosa-2.7.4+reloaded2/debian/patches/1031_no-context-loose-continues.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1031_no-context-loose-continues.patch 2019-04-19 18:57:06.000000000 +0200 @@ -0,0 +1,17 @@ +Description: Avoid stray continue. Fails with PHP7. +Author: Benjamin Zapiec <bzap...@gonicus.de> + +--- a/mail/admin/groups/mail/class_groupMail.inc ++++ b/mail/admin/groups/mail/class_groupMail.inc +@@ -1164,7 +1164,10 @@ + */ + function addAlternate($address) + { +- if(empty($address)) continue; ++ if(empty($address)) { ++ return ""; ++ } ++ + $ldap= $this->config->get_ldap_link(); + + $address= strtolower($address); diff -Nru gosa-2.7.4+reloaded2/debian/patches/1032_fix_select_acl_role.patch gosa-2.7.4+reloaded2/debian/patches/1032_fix_select_acl_role.patch --- gosa-2.7.4+reloaded2/debian/patches/1032_fix_select_acl_role.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1032_fix_select_acl_role.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,14 @@ +Description: Use ACL from role definition: Select the correct role. +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/include/class_acl.inc 2017-10-17 15:59:31.000000000 +0000 ++++ gosa-2.7.4+reloaded2.b/gosa-core/include/class_acl.inc 2018-01-23 07:46:01.234550732 +0000 +@@ -423,7 +423,7 @@ + if(isset($_POST['selected_role']) && $_POST['aclType'] == 'role'){ + $this->aclContents = ""; + $this->aclContents = base64_decode(get_post('selected_role')); +- }else{ ++ } elseif (isset($_POST['cancel_new_acl'])) { + if(is_string($this->aclContents)) + $this->aclContents = array(); + } diff -Nru gosa-2.7.4+reloaded2/debian/patches/1033_fix_unable_to_delete_acl_asignment.patch gosa-2.7.4+reloaded2/debian/patches/1033_fix_unable_to_delete_acl_asignment.patch --- gosa-2.7.4+reloaded2/debian/patches/1033_fix_unable_to_delete_acl_asignment.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1033_fix_unable_to_delete_acl_asignment.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,13 @@ +Description: Fix removing ACLs from objects (e.g. groups) +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/include/class_acl.inc 2017-10-17 15:59:31.000000000 +0000 ++++ gosa-2.7.4+reloaded2.b/gosa-core/include/class_acl.inc 2018-01-23 07:48:34.985241374 +0000 +@@ -285,6 +285,7 @@ + if(!$this->list){ + $this->list = new sortableListing($this->gosaAclEntry,array(),TRUE); + $this->list->setDeleteable(true); ++ $this->list->setInstantDelete(true); + $this->list->setEditable(true); + $this->list->setColspecs(array('*')); + $this->list->setWidth("100%"); diff -Nru gosa-2.7.4+reloaded2/debian/patches/1034_remove_superfluous__get_post__call_from__save_object.patch gosa-2.7.4+reloaded2/debian/patches/1034_remove_superfluous__get_post__call_from__save_object.patch --- gosa-2.7.4+reloaded2/debian/patches/1034_remove_superfluous__get_post__call_from__save_object.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1034_remove_superfluous__get_post__call_from__save_object.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,16 @@ +Description: class_sortableListing: Remove superfluous get_post() call from_ save_object() +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/include/class_sortableListing.inc 2017-10-17 15:59:31.000000000 +0000 ++++ gosa-2.7.4+reloaded2.b/gosa-core/include/class_sortableListing.inc 2018-01-23 07:50:54.616057235 +0000 +@@ -425,10 +425,8 @@ + $this->action = ""; + if (strpos($this->acl, 'd') !== false){ + foreach ($_POST as $key => $value) { +- $value = get_post($key); + if (preg_match('/^del_'.$this->id.'_([0-9]+)$/', $key, $matches)) { + +- + if(!isset($this->mapping[$matches[1]])) return; + + $this->active_index= $this->mapping[$matches[1]]; diff -Nru gosa-2.7.4+reloaded2/debian/patches/1035_acl_override_to_allow_delete_of_group_members.patch gosa-2.7.4+reloaded2/debian/patches/1035_acl_override_to_allow_delete_of_group_members.patch --- gosa-2.7.4+reloaded2/debian/patches/1035_acl_override_to_allow_delete_of_group_members.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1035_acl_override_to_allow_delete_of_group_members.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,18 @@ +Description: Support member removal from groups, if someone has the right to edit the group. +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/plugins/admin/groups/class_group.inc 2017-10-17 15:59:31.000000000 +0000 ++++ gosa-2.7.4+reloaded2.b/gosa-core/plugins/admin/groups/class_group.inc 2018-01-23 07:54:13.150381395 +0000 +@@ -236,6 +236,12 @@ + + // Check if list is available, depends on multi- or sinlge- group editing. + if($this->$list){ ++ // ensure we can delete group members if we have ++ // write permission to the memberUid attribute ++ $mu_acl = $this->getacl("memberUid"); ++ if (preg_match("/w/",$mu_acl) && !preg_match("/d/",$mu_acl)) { ++ $this->$list->setAcl($mu_acl.'d'); ++ } + $this->$list->save_object(); + $action = $this->$list->getAction(); + if($action['action'] == 'delete' && preg_match("/w/",$this->getacl("memberUid"))){ diff -Nru gosa-2.7.4+reloaded2/debian/patches/1036_remove_double_groupList_setEditable_setting.patch gosa-2.7.4+reloaded2/debian/patches/1036_remove_double_groupList_setEditable_setting.patch --- gosa-2.7.4+reloaded2/debian/patches/1036_remove_double_groupList_setEditable_setting.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1036_remove_double_groupList_setEditable_setting.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,13 @@ +Description: Remove duplicate setEditable() for POSIX group lists. +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/plugins/personal/posix/class_posixAccount.inc 2018-01-23 07:58:31.308215370 +0000 ++++ gosa-2.7.4+reloaded2.b/gosa-core/plugins/personal/posix/class_posixAccount.inc 2018-01-23 07:58:45.676095237 +0000 +@@ -254,7 +254,6 @@ + $this->groupList->setEditable(false); + $this->groupList->setDeleteable(true); + $this->groupList->setInstantDelete(false); +- $this->groupList->setEditable(false); + $this->groupList->setReorderable(false); + $this->groupList->setDefaultSortColumn(1); + $this->groupList->setHeight("150px"); diff -Nru gosa-2.7.4+reloaded2/debian/patches/1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch gosa-2.7.4+reloaded2/debian/patches/1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch --- gosa-2.7.4+reloaded2/debian/patches/1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,15 @@ +Description: Propagate shadow expiry from user templates to created user objects. +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- a/gosa-core/plugins/personal/posix/class_posixAccount.inc ++++ b/gosa-core/plugins/personal/posix/class_posixAccount.inc +@@ -1147,7 +1147,8 @@ + } + + /* Adjust shadow checkboxes */ +- foreach (array("shadowMin", "shadowMax", "shadowWarning", "shadowInactive") as $val){ ++ foreach (array("shadowMin", "shadowMax", "shadowWarning", "shadowInactive", ++ "shadowExpire") as $val){ + if ($this->$val != 0){ + $oval= "activate_".$val; + $this->$oval= "1"; diff -Nru gosa-2.7.4+reloaded2/debian/patches/1038_shadowexpire_in_one_line.patch gosa-2.7.4+reloaded2/debian/patches/1038_shadowexpire_in_one_line.patch --- gosa-2.7.4+reloaded2/debian/patches/1038_shadowexpire_in_one_line.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1038_shadowexpire_in_one_line.patch 2019-04-19 18:59:02.000000000 +0200 @@ -0,0 +1,18 @@ +Description: Show shadow expiry (esp. the calendar icon) in one line on screen (html template adjustment). +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/plugins/personal/posix/posix_shadow.tpl 2010-04-13 13:15:15.000000000 +0000 ++++ gosa-2.7.4+reloaded2.b/gosa-core/plugins/personal/posix/posix_shadow.tpl 2018-02-12 13:36:07.283901219 +0000 +@@ -58,10 +58,10 @@ + + <table summary="{t}Password expiration settings{/t}" border="0" cellpadding="0" cellspacing="0"> + <tr> +- <td> ++ <td style="vertical-align:middle"> + {t}Password expires on{/t} + </td> +- <td style='width:125px'> ++ <td style='width:200px'> + + {render acl=$shadowExpireACL} + <input type="text" id="shadowExpire" name="shadowExpire" class="date" style='width:100px' value="{$shadowExpire}"> diff -Nru gosa-2.7.4+reloaded2/debian/patches/1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_tmplate_setting.patch gosa-2.7.4+reloaded2/debian/patches/1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_tmplate_setting.patch --- gosa-2.7.4+reloaded2/debian/patches/1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_tmplate_setting.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_tmplate_setting.patch 2019-04-19 19:01:04.000000000 +0200 @@ -0,0 +1,64 @@ +Description: Fix date calculations for sambaKickoffTime and propagation from template to created user object. +Author: Christian Schwamborn <c...@imap.architektur.tu-darmstadt.de> + +--- gosa-2.7.4+reloaded2.a/samba/personal/samba/class_sambaAccount.inc 2017-10-17 15:59:31.000000000 +0000 ++++ gosa-2.7.4+reloaded2.b/samba/personal/samba/class_sambaAccount.inc 2018-02-12 13:43:03.437594823 +0000 +@@ -144,9 +144,13 @@ + $this->loadFlagsFromSource($this->attrs); + + // Set kickOffTime to date +- if(isset($this->attrs['sambaKickoffTime'][0])){ +- $this->sambaKickoffTime = date("d.m.Y", $this->sambaKickoffTime); +- $this->flag_sambaKickoffTime = TRUE; ++ if (isset($this->attrs['sambaKickoffTime'][0])){ ++ if ($this->sambaKickoffTime == 2147483647){ ++ $this->sambaKickoffTime = ""; ++ } elseif (!$this->sambaKickoffTime == ""){ ++ $this->sambaKickoffTime = date("d.m.Y", $this->sambaKickoffTime); ++ $this->flag_sambaKickoffTime = TRUE; ++ } + } + } + +@@ -859,10 +863,10 @@ + /* Call common method to give check the hook */ + $message= plugin::check(); + +- if($this->flag_sambaKickoffTime){ +- if(!preg_match("/^[0-3][0-9]\.[0-1][0-9]\.([0-9]){4}$/",$this->sambaKickoffTime)){ ++ if ($this->flag_sambaKickoffTime){ ++ if (!preg_match("/^[0-3][0-9]\.[0-1][0-9]\.([0-9]){4}$/",$this->sambaKickoffTime)){ + $message[] = msgPool::invalid(_("Account expires after")); +- }elseif(!strtotime($this->sambaKickoffTime) || strtotime($this->sambaKickoffTime) >= 2147483647){ ++ } elseif (!strtotime($this->sambaKickoffTime) || strtotime($this->sambaKickoffTime) > 2147483647){ + $message[] = msgPool::invalid(_("Account expires after")); + } + } +@@ -1165,6 +1169,18 @@ + + // Load flags from source. + $this->loadFlagsFromSource($this->attrs); ++ ++ /* Convert sambaKickoffTime for usage */ ++ if ($this->sambaKickoffTime == 2147483647){ ++ $this->sambaKickoffTime = ""; ++ } elseif (!$this->sambaKickoffTime == "") { ++ $this->sambaKickoffTime = date("d.m.Y", $this->sambaKickoffTime); ++ } ++ ++ /* Adjust sambaKickoffTime checkbox */ ++ if (!$this->sambaKickoffTime == ""){ ++ $this->flag_sambaKickoffTime = TRUE; ++ } + } + + +@@ -1262,7 +1278,7 @@ + if(in_array_strict("sambaKickoffTime", $this->multi_boxes) && $this->flag_sambaKickoffTime){ + if(!preg_match("/^[0-3][0-9]\.[0-1][0-9]\.([0-9]){4}$/",$this->sambaKickoffTime)){ + $message[] = msgPool::invalid(_("Account expires after")); +- }elseif(!strtotime($this->sambaKickoffTime) || strtotime($this->sambaKickoffTime) >= 2147483647){ ++ } elseif (!strtotime($this->sambaKickoffTime) || strtotime($this->sambaKickoffTime) > 2147483647){ + $message[] = msgPool::invalid(_("Account expires after")); + } + } diff -Nru gosa-2.7.4+reloaded2/debian/patches/1040_inactive_pwd_fields_when_using_pwd_proposal.patch gosa-2.7.4+reloaded2/debian/patches/1040_inactive_pwd_fields_when_using_pwd_proposal.patch --- gosa-2.7.4+reloaded2/debian/patches/1040_inactive_pwd_fields_when_using_pwd_proposal.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1040_inactive_pwd_fields_when_using_pwd_proposal.patch 2019-04-19 19:01:27.000000000 +0200 @@ -0,0 +1,205 @@ +Description: Disable password fields if password proposal gets selected as new password by the user. +Author: Christian Schwamborn <christian.schwamb...@nswit.de> + +--- gosa-2.7.4+reloaded2.a/gosa-core/plugins/admin/users/password.tpl 2010-10-14 18:07:10.000000000 +0200 ++++ gosa-2.7.4+reloaded2.b/gosa-core/plugins/admin/users/password.tpl 2018-06-27 11:42:01.895777889 +0200 +@@ -39,7 +39,8 @@ + <table summary="{t}Password input dialog{/t}" cellpadding=4 border=0> + <tr> + <td> +- <input type='radio' value='1' name='proposalSelected' id='proposalSelected_true' onClick='updateFields();' ++ <input type='radio' value='1' name='proposalSelected' id='proposalSelected_true' ++ onClick="changeState('new_password'); changeState('repeated_password');" + {if $proposalSelected} checked {/if}> <b><LABEL for="proposalSelected_true">{t}Use proposal{/t}</LABEL></b> + </td> + <td> +@@ -57,7 +58,8 @@ + </tr> + <tr> + <td> +- <input type='radio' value='0' name='proposalSelected' id='proposalSelected_false' onClick='updateFields();' ++ <input type='radio' value='0' name='proposalSelected' id='proposalSelected_false' ++ onClick="changeState('new_password'); changeState('repeated_password'); nextfield='new_password'; focus_field('new_password');" + {if !$proposalSelected} checked {/if}> <b><LABEL for="proposalSelected_false">{t}Manually specify a password{/t}</LABEL></b> + </td> + </tr> +@@ -65,14 +67,14 @@ + <td style='padding-left:40px;'><b><LABEL for="new_password">{t}New password{/t}</LABEL></b></td> + <td> + {factory type='password' id='new_password' name='new_password' +- onfocus="nextfield='repeated_password';" onkeyup="testPasswordCss(\$('new_password').value);"} ++ onfocus="nextfield='repeated_password';" onkeyup="testPasswordCss(\$('new_password').value);" disabled=1} + </td> + </tr> + <tr> + <td style='padding-left:40px;'><b><LABEL for="repeated_password">{t}Repeat new password{/t}</LABEL></b></td> + <td> + {factory type='password' id='repeated_password' name='repeated_password' +- onfocus="nextfield='password_finish';"} ++ onfocus="nextfield='password_finish';" disabled=1} + </td> + </tr> + <tr> +@@ -106,36 +108,7 @@ + + <!-- Place cursor --> + <script language="JavaScript" type="text/javascript"> +- nextfield= "new_password"; +- focus_field('new_password'); +- +- function updateFields() +- { +- if($('proposalSelected').checked){ +- $('new_password').disable(); +- $('repeated_password').disable(); +- $('proposalText').setStyle( +- 'background-color:#FFF;' + +- 'color:#000;' + +- 'width:180px;' + +- 'border:1px solid #CCC;' + +- 'padding:3px;' + +- 'padding-top:5px;' + +- 'padding-bottom:4px;'); +- }else{ +- $('new_password').enable(); +- $('repeated_password').enable(); +- $('proposalText').setStyle( +- 'background-color:#F0F0F0;' + +- 'color:#666;' + +- 'width:180px;' + +- 'border:1px solid #CCC;' + +- 'padding:3px;' + +- 'padding-top:5px;' + +- 'padding-bottom:4px;'); +- } +- } +- updateFields(); ++ nextfield='new_password'; ++ focus_field('new_password'); + </script> + +- +--- gosa-2.7.4+reloaded2.a/gosa-core/plugins/personal/password/password.tpl 2012-05-02 11:49:01.000000000 +0200 ++++ gosa-2.7.4+reloaded2.b/gosa-core/plugins/personal/password/password.tpl 2018-06-27 11:52:42.344283813 +0200 +@@ -60,7 +60,8 @@ + </tr> + <tr> + <td> +- <input type='radio' value='1' id='proposalSelected_true' name='proposalSelected' onClick='updateFields();' ++ <input type='radio' value='1' id='proposalSelected_true' name='proposalSelected' ++ onClick="changeState('new_password'); changeState('repeated_password');" + {if $proposalSelected} checked {/if}> <b><LABEL for="proposalSelected_true">{t}Use proposal{/t}</LABEL></b> + </td> + <td> +@@ -79,7 +80,8 @@ + </tr> + <tr> + <td> +- <input type='radio' value='0' name='proposalSelected' id='proposalSelected_false' onClick='updateFields();' ++ <input type='radio' value='0' name='proposalSelected' id='proposalSelected_false' ++ onClick="changeState('new_password'); changeState('repeated_password'); nextfield='new_password'; focus_field('new_password');" + {if !$proposalSelected} checked {/if}> <b><LABEL for="proposalSelected_false">{t}Manually specify a password{/t}</LABEL></b> + </td> + </tr> +@@ -87,13 +89,13 @@ + <td style='padding-left:40px;'><b><LABEL for="new_password">{t}New password{/t}</LABEL></b></td> + <td> + {factory type='password' name='new_password' id='new_password' +- onkeyup="testPasswordCss(\$('new_password').value)" onfocus="nextfield= 'repeated_password';"} ++ onkeyup="testPasswordCss(\$('new_password').value)" onfocus="nextfield= 'repeated_password';" disabled=1} + </td> + </tr> + <tr> + <td style='padding-left:40px;'><b><LABEL for="repeated_password">{t}Repeat new password{/t}</LABEL></b></td> + <td> +- {factory type='password' name='repeated_password' id='repeated_password' onfocus="nextfield= 'password_finish';"} ++ {factory type='password' name='repeated_password' id='repeated_password' onfocus="nextfield= 'password_finish';" disabled=1} + </td> + </tr> + <tr> +@@ -119,37 +121,8 @@ + + <!-- Place cursor --> + <script language="JavaScript" type="text/javascript"> +- nextfield= 'current_password'; +- focus_field('current_password'); +- +- +- function updateFields() +- { +- if($('proposalSelected').checked){ +- $('new_password').disable(); +- $('repeated_password').disable(); +- $('proposalText').setStyle( +- 'background-color:#FFF;' + +- 'color:#000;' + +- 'width:180px;' + +- 'border:1px solid #CCC;' + +- 'padding:3px;' + +- 'padding-top:5px;' + +- 'padding-bottom:4px;'); +- }else{ +- $('new_password').enable(); +- $('repeated_password').enable(); +- $('proposalText').setStyle( +- 'background-color:#F0F0F0;' + +- 'color:#666;' + +- 'width:180px;' + +- 'border:1px solid #CCC;' + +- 'padding:3px;' + +- 'padding-top:5px;' + +- 'padding-bottom:4px;'); +- } +- } +- updateFields(); ++ nextfield='current_password'; ++ focus_field('current_password'); + </script> + + {/if} +--- gosa-2.7.4+reloaded2.a/gosa-core/plugins/personal/myaccount/password.tpl 2010-10-14 18:07:10.000000000 +0200 ++++ gosa-2.7.4+reloaded2.b/gosa-core/plugins/personal/myaccount/password.tpl 2018-06-27 11:51:59.768514041 +0200 +@@ -46,6 +46,7 @@ + <tr> + <td> + <input type='radio' value='1' name='proposalSelected' id='proposalSelected_true' ++ onClick="changeState('new_password'); changeState('repeated_password');" + {if $proposalSelected} checked {/if}> <b><LABEL for="proposalSelected_true">{t}Use proposal{/t}</LABEL></b> + </td> + <td> +@@ -64,6 +65,7 @@ + <tr> + <td> + <input type='radio' value='0' name='proposalSelected' id='proposalSelected_false' ++ onClick="changeState('new_password'); changeState('repeated_password'); nextfield='new_password'; focus_field('new_password');" + {if !$proposalSelected} checked {/if}> <b><LABEL for="proposalSelected_false">{t}Manually specify a password{/t}</LABEL></b> + </td> + </tr> +@@ -71,13 +73,13 @@ + <td style='padding-left:40px;'><b><LABEL for="new_password">{t}New password{/t}</LABEL></b></td> + <td> + {factory type='password' name='new_password' id='new_password' +- onkeyup="testPasswordCss(\$('new_password').value)" onfocus="nextfield= 'repeated_password';"} ++ onkeyup="testPasswordCss(\$('new_password').value)" onfocus="nextfield= 'repeated_password';" disabled=1} + </td> + </tr> + <tr> + <td style='padding-left:40px;'><b><LABEL for="repeated_password">{t}Repeat new password{/t}</LABEL></b></td> + <td> +- {factory type='password' name='repeated_password' id='repeated_password' onfocus="nextfield= 'password_finish';"} ++ {factory type='password' name='repeated_password' id='repeated_password' onfocus="nextfield= 'password_finish';" disabled=1} + </td> + </tr> + <tr> +@@ -103,9 +105,7 @@ + + <!-- Place cursor --> + <script language="JavaScript" type="text/javascript"> +- <!-- // First input field on page + nextfield= 'current_password'; +- focus_field('current_password'); +- --> ++ focus_field('current_password'); + </script> + + diff -Nru gosa-2.7.4+reloaded2/debian/patches/1041_ref_param_error_in_My_Parser.patch gosa-2.7.4+reloaded2/debian/patches/1041_ref_param_error_in_My_Parser.patch --- gosa-2.7.4+reloaded2/debian/patches/1041_ref_param_error_in_My_Parser.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1041_ref_param_error_in_My_Parser.patch 2019-04-19 19:01:39.000000000 +0200 @@ -0,0 +1,15 @@ +Description: Compat fix for PHP > 5.4. Hand over real variable to function. +Author: Christian Schwamborn <christian.schwamb...@nswit.de> + +--- a/mail/personal/mail/sieve/class_My_Parser.inc ++++ b/mail/personal/mail/sieve/class_My_Parser.inc +@@ -42,7 +42,8 @@ + $this->registeredExtensions_ = array(); + $this->status_text = "incomplete"; + $this->script_ = $script; +- $this->tree_ = new My_Tree(@Scanner::scriptStart(),$this); ++ $scanner_start = @Scanner::scriptStart(); ++ $this->tree_ = new My_Tree($scanner_start,$this); + $this->tree_->setDumpFunc(array(&$this, 'dumpToken_')); + $this->scanner_ = new My_Scanner($this->script_); + $this->scanner_->setCommentFunc(array($this, 'comment_')); diff -Nru gosa-2.7.4+reloaded2/debian/patches/1043_smarty-add-on-function-param-types.patch gosa-2.7.4+reloaded2/debian/patches/1043_smarty-add-on-function-param-types.patch --- gosa-2.7.4+reloaded2/debian/patches/1043_smarty-add-on-function-param-types.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1043_smarty-add-on-function-param-types.patch 2019-04-19 19:03:52.000000000 +0200 @@ -0,0 +1,91 @@ +Description: Use correct smarty3 API. +Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> +Forwarded: https://github.com/gosa-project/gosa-core/pull/25 +Abstract. + For the {render} add-on block, drop the &$smarty reference parameter + entirely. + . + Drop the complete {tr} add-on block. Not registered as a plugin, not + used. + . + For the add-on image and add-on factory functions, switch from + reference &$smarty to value $smarty. + +--- a/gosa-core/include/smartyAddons/block.render.php ++++ b/gosa-core/include/smartyAddons/block.render.php +@@ -1,6 +1,6 @@ + <?php + +-function smarty_block_render($params, $text, &$smarty) ++function smarty_block_render($params, $text) + { + /* Skip closing tag </render> */ + if(empty($text)) { +--- a/gosa-core/include/smartyAddons/block.tr.php ++++ /dev/null +@@ -1,25 +0,0 @@ +-<?php +-function smarty_block_tr($params, $text, &$smarty) +-{ +- $plugin = ""; +- if(!isset($params['domain'])){ +- if(strlen($text) != 0){ +- $trace = debug_backtrace(); +- $base = preg_replace("/\/html/","",getcwd()); +- foreach($trace as $t_entry){ +- if(preg_match("/^".preg_quote($base,'/')."\/plugins\//", $t_entry['file'])){ +- $plugin = preg_replace("/^".preg_quote($base,'/')."\/plugins\/([^\/]*).*$/", "\\1", $t_entry['file']); +- break; +- } +- } +- } +- } +- +- +- if($plugin != ""){ +- return(dgettext($plugin, $text)); +- } +- return(gettext($text)); +-} +- +-?> +--- a/gosa-core/include/smartyAddons/function.factory.php ++++ b/gosa-core/include/smartyAddons/function.factory.php +@@ -1,6 +1,6 @@ + <?php + +-function smarty_function_factory($params, &$smarty) ++function smarty_function_factory($params, $smarty) + { + + // Capture params +--- a/gosa-core/include/smartyAddons/function.image.php ++++ b/gosa-core/include/smartyAddons/function.image.php +@@ -1,6 +1,6 @@ + <?php + +-function smarty_function_image($params, &$smarty) ++function smarty_function_image($params, $smarty) + { + $path = (isset($params['path']))? $params['path'] :""; + $action = (isset($params['action']))? $params['action'] :""; +--- a/gosa-core/include/smartyAddons/function.msgPool.php ++++ b/gosa-core/include/smartyAddons/function.msgPool.php +@@ -1,6 +1,6 @@ + <?php + +-function smarty_function_msgPool($params, &$smarty) ++function smarty_function_msgPool($params, $smarty) + { + if(class_available("msgPool") && isset($params['type'])){ + $parameter = array(); +--- a/gosa-core/include/php_setup.inc ++++ b/gosa-core/include/php_setup.inc +@@ -317,7 +317,6 @@ + if(preg_match("/\.php$/", $file)) require_once("$BASE_DIR/include/smartyAddons/{$file}"); + } + +-#$smarty->registerPlugin("block", "tr", "smarty_block_tr"); + $smarty->registerPlugin("block", "t", "smarty_block_t"); + $smarty->registerPlugin("block", "render", "smarty_block_render"); + $smarty->registerPlugin("function", "msgPool", "smarty_function_msgPool"); diff -Nru gosa-2.7.4+reloaded2/debian/patches/1045_dont_use_filter_caching.patch gosa-2.7.4+reloaded2/debian/patches/1045_dont_use_filter_caching.patch --- gosa-2.7.4+reloaded2/debian/patches/1045_dont_use_filter_caching.patch 1970-01-01 01:00:00.000000000 +0100 +++ gosa-2.7.4+reloaded2/debian/patches/1045_dont_use_filter_caching.patch 2019-04-19 19:03:52.000000000 +0200 @@ -0,0 +1,27 @@ +Description: Disable flawed filter caching (which works via storing unserialized objects in $_SESSION) +Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> +Forwarded: https://github.com/gosa-project/gosa-core/issues/28 +Abstract: + All required information is in the above upstream bug report. + . + This patch has work-around status. It is no proper solution. + +--- a/gosa-core/include/class_management.inc ++++ b/gosa-core/include/class_management.inc +@@ -131,7 +131,15 @@ + $this->registerAction("cancelFilter","cancelFilter"); + + // To temporay disable the filter caching UNcomment this line. +- #session::global_un_set(get_class($this)."_filter"); ++ ++ /* ++ * As a work-around for flawed object storage in the PHP $_SESSION array ++ * the filter caching has been deactivated since gosa 2.7.4+reloaded3-8. ++ * ++ * See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907815#31 for ++ * details. ++ */ ++ session::global_un_set(get_class($this)."_filter"); + } + + diff -Nru gosa-2.7.4+reloaded2/debian/patches/series gosa-2.7.4+reloaded2/debian/patches/series --- gosa-2.7.4+reloaded2/debian/patches/series 2018-07-04 09:14:36.000000000 +0200 +++ gosa-2.7.4+reloaded2/debian/patches/series 2019-04-19 19:03:52.000000000 +0200 @@ -33,9 +33,24 @@ 1026_fix-deprecated-constructor-format.patch 1027_fix-sudo-fqdn.patch 1028_use-mysqli-instead-of-mysql.patch +1029_better-whitespace-cleanup-in-genuid.patch +1030_column-header-titles-group-members.patch +1031_no-context-loose-continues.patch +1032_fix_select_acl_role.patch +1033_fix_unable_to_delete_acl_asignment.patch +1034_remove_superfluous__get_post__call_from__save_object.patch +1035_acl_override_to_allow_delete_of_group_members.patch +1036_remove_double_groupList_setEditable_setting.patch +1037_fix_shadowexpire_checkbox_from_tmplate_setting.patch +1038_shadowexpire_in_one_line.patch +1039_fix_sambakickofftime_checkbox_and_sambakickofftime_date_from_tmplate_setting.patch 2001_fix-smarty-location.patch 2002_fix-template-location.patch 2003_fix-class-mapping.patch 2004_fix-locale-location.patch 2005_allow-Debian-blends-to-override-gosa-conf.patch 0013_escape-html-entities-for-uid-to-avoid-code-execution-CVE-2018-1000528.patch +1040_inactive_pwd_fields_when_using_pwd_proposal.patch +1041_ref_param_error_in_My_Parser.patch +1043_smarty-add-on-function-param-types.patch +1045_dont_use_filter_caching.patch