[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#927433: stretch-pu: package gosa/2.7.4+reloaded2-13+deb9u2



Package: release.debian.org
Severity: normal
Tags: stretch
User: release.debian.org@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 <sunweaver@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.gabriel@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.gabriel@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 <bzapiec@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 <cs@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 <cs@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 <cs@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 <cs@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 <cs@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 <cs@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 <cs@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}&nbsp;
+       </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 <cs@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.schwamborn@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}>&nbsp;<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}>&nbsp;<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}>&nbsp;<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}>&nbsp;<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}>&nbsp;<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}>&nbsp;<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.schwamborn@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.gabriel@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.gabriel@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

Reply to: