Bug#1135326: trixie-pu: package lemonldap-ng/2.21.2+ds-1+deb13u2

Xavier Guimard yadd at debian.org
Fri May 1 07:32:00 BST 2026


Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: lemonldap-ng at packages.debian.org, yadd at debian.org
Control: affects -1 + src:lemonldap-ng
User: release.debian.org at packages.debian.org
Usertags: pu

[ Reason ]
Upstream released a new LTS version for 2.21.x branch. This update
fixes:
 - OIDC ignored non default signature algorithm
 - OIDC dynamic registration didn't register Front-Channel-Logout URL
   when set
 - Really hide passwords in session-explorer when stored in session
 - Update documentation to avoid using unsecured Nginx variable

The last point is related to Nginx proposed update (#1134654)

[ Impact ]
Medium security issues

[ Tests ]
Test added for the main code fix

[ Risks ]
No risk: test coverage is good, no reverse dependencies, fixes are
trivial

[ Checklist ]
  [X] *all* changes are documented in the d/changelog
  [X] I reviewed all changes and I approve them
  [X] attach debdiff against the package in (old)stable
  [X] the issue is verified as fixed in unstable

[ Changes ]
- Fix typo that ignored non default signature algorithm in OIDC
- Fix typo that ignored Front-Channel-Logout URL during OIDC dynamic
  registration
- Fix regression introduced in 2.17.0 that no more hide passwords in
  session explorer when SSO was configured to store passwords in session
  (rare, only used for old apps compatibility)
-------------- next part --------------
diff --git a/debian/changelog b/debian/changelog
index 47d85474f..72464ce46 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+lemonldap-ng (2.21.2+ds-1+deb13u2) trixie; urgency=medium
+
+  * Import main 2.21.4 changes:
+    - OIDC ignored non default signature algorithm
+    - OIDC dynamic registration didn't register Front-Channel-Logout URL when
+      set
+    - Really hide passwords in session-explorer when stored in session
+    - Update documentation to avoid using unsecured Nginx variable
+
+ -- Xavier Guimard <yadd at debian.org>  Fri, 01 May 2026 08:23:09 +0200
+
 lemonldap-ng (2.21.2+ds-1+deb13u1) trixie; urgency=medium
 
   * Fix shell injection from admin interface (Closes: CVE-2025-59518)
diff --git a/debian/patches/3478-fix-oidc-alg.patch b/debian/patches/3478-fix-oidc-alg.patch
new file mode 100644
index 000000000..93022ba2c
--- /dev/null
+++ b/debian/patches/3478-fix-oidc-alg.patch
@@ -0,0 +1,18 @@
+From: Yadd <yadd at debian.org>
+Date: mai, 01 2026 05:49:52 +0200
+Subject: [PATCH] fix typo that breaks alg
+ Sadly the test OP was named "op"
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/work_items/3478
+Forwarded: not-needed
+
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/OpenIDConnect.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/OpenIDConnect.pm
+@@ -490,7 +490,7 @@
+                 iat => time,
+                 %$authorize_request_params,
+             },
+-            $self->opOptions->{op}
++            $self->opOptions->{$op}
+               ->{oidcOPMetaDataOptionsAuthnEndpointAuthSigAlg} || 'RS256',
+             $op
+         );
diff --git a/debian/patches/fix-oidc-frontchannel.patch b/debian/patches/fix-oidc-frontchannel.patch
new file mode 100644
index 000000000..d724c65fb
--- /dev/null
+++ b/debian/patches/fix-oidc-frontchannel.patch
@@ -0,0 +1,18 @@
+From: Yadd <yadd at debian.org>
+Date: mai, 01 2026 06:07:59 +0200
+Subject: [PATCH] fix typo that broke OIDC front-channel-logout
+Origin: upstream, commit:c4dde51
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/work_items/3592
+Forwarded: not-needed
+
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Issuer/OpenIDConnect.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Issuer/OpenIDConnect.pm
+@@ -2431,7 +2431,7 @@
+     my $backchannel_logout_uri = $client_metadata->{backchannel_logout_uri};
+     my $backchannel_logout_session_required =
+       $client_metadata->{backchannel_logout_session_required};
+-    my $frontchannel_logout_uri = $client_metadata->{backchannel_logout_uri};
++    my $frontchannel_logout_uri = $client_metadata->{frontchannel_logout_uri};
+     my $frontchannel_logout_session_required =
+       $client_metadata->{frontchannel_logout_session_required};
+     my $jwksUri = $client_metadata->{jwks_uri};
diff --git a/debian/patches/really-hide-password-in-session-explorer.patch b/debian/patches/really-hide-password-in-session-explorer.patch
new file mode 100644
index 000000000..29f8755d7
--- /dev/null
+++ b/debian/patches/really-hide-password-in-session-explorer.patch
@@ -0,0 +1,238 @@
+From: Yadd <yadd at debian.org>
+Date: mai, 01 2026 06:03:56 +0200
+Subject: [PATCH] really hide passwords from session explorer
+Origin: upstream, commit:d9ba579
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/work_items/3568
+Forwarded: not-needed
+
+--- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Session/REST.pm
++++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Session/REST.pm
+@@ -14,6 +14,11 @@
+ # Boolean value to tell if storage ID is hashed or not
+ has hashedSessionStore => ( is => 'rw' );
+ 
++sub hiddenAttributes {
++    my ($self) = @_;
++    return $self->{hiddenAttributes} || $self->conf->{hiddenAttributes};
++}
++
+ sub setTypes {
+     my ( $self, $conf ) = @_;
+     foreach my $type (@sessionTypes) {
+@@ -467,7 +472,8 @@
+     my %session = %{ $apacheSession->data };
+     unless ($raw) {
+         foreach ( keys %session ) {
+-            $session{$_} = '******' if isHiddenAttr( $self->conf, $_ );
++            $session{$_} = '******'
++              if isHiddenAttr( $self->hiddenAttributes, $_ );
+         }
+     }
+ 
+--- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Util.pm
++++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Util.pm
+@@ -37,7 +37,7 @@
+ }
+ 
+ sub isHiddenAttr {
+-    my ( $conf, $attr, @extra_hidden_attributes ) = @_;
++    my ( $hiddenAttributes, $attr, @extra_hidden_attributes ) = @_;
+     my ( @regexps, $match );
+ 
+     my %hiddenAttributes = map { $_ => 1 } grep {
+@@ -48,8 +48,7 @@
+         else {
+             1;
+         }
+-    } ( split( /[,\s]+/, $conf->{hiddenAttributes} ),
+-        @extra_hidden_attributes );
++    } ( split( /[,\s]+/, $hiddenAttributes ), @extra_hidden_attributes );
+ 
+     my $regex =
+       keys %hiddenAttributes
+@@ -112,7 +111,7 @@
+ 
+ This method formats device name for logging purpose
+ 
+-=head3 isHiddenAttr( $conf, $attr, @extra_hidden_attributes )
++=head3 isHiddenAttr( $conf_value, $attr, @extra_hidden_attributes )
+ 
+ This method tests if the attribute is hidden.
+ @extra_hidden_attributes is an array of additional attributes to hide.
+--- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/DevOps.pm
++++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/DevOps.pm
+@@ -99,7 +99,8 @@
+     foreach ( keys %{ $json->{headers} } ) {
+         my $header = $json->{headers}->{$_};
+         $header =~ s/^\$//;
+-        if ( isHiddenAttr( $class->localConfig, $header ) ) {
++        if ( isHiddenAttr( $class->localConfig->{hiddenAttributes}, $header ) )
++        {
+             delete $json->{headers}->{$_};
+             $class->auditLog(
+                 $req,
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm
+@@ -6,8 +6,8 @@
+ 
+ use strict;
+ use MIME::Base64;
+-use POSIX                                  qw(strftime);
+-use Lemonldap::NG::Common::Util            qw(isHiddenAttr);
++use POSIX qw(strftime);
++use Lemonldap::NG::Common::Util qw(isHiddenAttr);
+ use Lemonldap::NG::Portal::Main::Constants qw(portalConsts);
+ use URI;
+ 
+@@ -617,7 +617,8 @@
+     foreach my $k ( sort keys %{ $req->{sessionInfo} } ) {
+         next unless defined $req->{sessionInfo}->{$k};
+         my $displayValue = $req->{sessionInfo}->{$k};
+-        $displayValue = '****' if isHiddenAttr( $self->conf, $k );
++        $displayValue = '****'
++          if isHiddenAttr( $self->conf->{hiddenAttributes}, $k );
+         $self->logger->debug("Store $displayValue in session key $k");
+         $self->_dump($displayValue) if ref($displayValue);
+         $infos->{$k} = $req->{sessionInfo}->{$k};
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/CheckDevOps.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/CheckDevOps.pm
+@@ -193,7 +193,7 @@
+         foreach ( keys %{ $json->{headers} } ) {
+             my $header = $json->{headers}->{$_};
+             $header =~ s/^\$//;
+-            if ( isHiddenAttr( $self->conf, $header ) ) {
++            if ( isHiddenAttr( $self->conf->{hiddenAttributes}, $header ) ) {
+                 my $user = $req->userData->{ $self->conf->{whatToTrace} };
+                 $self->userLogger->warn(
+ "CheckDevOps: $user tried to retrieve a hidden attribute -> $header"
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/CheckUser.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/CheckUser.pm
+@@ -606,7 +606,7 @@
+         push @$array_attrs,
+           { key => $_, value => $attrs->{$_} }
+           unless ( (
+-                isHiddenAttr( $self->conf, $_, @hidden )
++                isHiddenAttr( $self->conf->{hiddenAttributes}, $_, @hidden )
+                 && !$self->displayHiddenAttributesRule->( $req, $userData )
+             )
+             || (   !$attrs->{$_}
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/Impersonation.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/Impersonation.pm
+@@ -2,7 +2,7 @@
+ 
+ use strict;
+ use Mouse;
+-use Lemonldap::NG::Common::Util            qw(isHiddenAttr);
++use Lemonldap::NG::Common::Util qw(isHiddenAttr);
+ use Lemonldap::NG::Portal::Main::Constants qw(
+   PE_MALFORMEDUSER
+   PE_OK PE_BADCREDENTIALS
+@@ -137,7 +137,7 @@
+             next unless defined $req->{sessionInfo}->{$k};
+         }
+         my $spk = $self->prefix . $k;
+-        unless ( isHiddenAttr( $self->conf, $k, @hidden )
++        unless ( isHiddenAttr( $self->conf->{hiddenAttributes}, $k, @hidden )
+             || $k =~ /^(?:_imp|token|_type)\w*\b/ )
+         {
+             $realSession->{$spk} = $req->{sessionInfo}->{$k};
+--- /dev/null
++++ b/lemonldap-ng-manager/t/40-sessions-hideId.t
+@@ -0,0 +1,75 @@
++# Test sessions explorer API
++
++use warnings;
++use Test::More;
++use JSON;
++use strict;
++use Lemonldap::NG::Common::Session;
++
++eval { mkdir 't/sessions' };
++`rm -rf t/sessions/*`;
++require 't/test-lib.pm';
++
++sub newSession {
++    my ( $uid, $ip ) = splice @_;
++    my $tmp;
++    ok(
++        $tmp = Lemonldap::NG::Common::Session->new( {
++                storageModule        => 'Apache::Session::File',
++                storageModuleOptions => {
++                    Directory      => 't/sessions',
++                    LockDirectory  => 't/sessions',
++                    generateModule =>
++'Lemonldap::NG::Common::Apache::Session::Generate::SHA256',
++                },
++            }
++        ),
++        'Sessions module'
++    );
++    count(1);
++    $tmp->update( {
++            ipAddr        => $ip,
++            _whatToTrace  => $uid,
++            uid           => $uid,
++            _utime        => time,
++            _session_kind => 'SSO',
++        }
++    );
++    return $tmp->{id};
++}
++
++my $client = LLNG::Manager::Test->new(
++    ini => {
++        displaySessionId => 0,
++    }
++);
++
++my @realids;
++$realids[0] = newSession( 'dwho',  '127.10.0.1' );
++$realids[1] = newSession( 'dwho2', '127.2.0.2' );
++ at realids    = sort @realids;
++
++# "All" query
++my $res = $client->jsonResponse("/sessions/global/");
++ok( $res->{result} == 1,      'Result code = 1' );
++ok( $res->{count} == 2,       'Found 2 sessions' );
++ok( @{ $res->{values} } == 2, 'List 2 sessions' );
++my @obfuscatedids = sort map { $_->{session} } @{ $res->{values} };
++isnt( $realids[0], $obfuscatedids[0], "Obfuscated ID differs from real one" );
++count(4);
++
++# Single session access
++$res = $client->jsonResponse("/sessions/global/$obfuscatedids[0]");
++if ( $res->{uid} eq 'dwho' ) {
++    is( $res->{ipAddr}, '127.10.0.1', 'IP found' );
++}
++else {
++    is( $res->{ipAddr}, '127.2.0.2', 'IP found' );
++}
++is( $res->{_session_id}, '******', "Session ID is obfuscated" );
++count(2);
++
++done_testing( count() );
++
++# Remove sessions directory
++`rm -rf t/sessions`;
+--- a/lemonldap-ng-manager/t/40-sessions.t
++++ b/lemonldap-ng-manager/t/40-sessions.t
+@@ -32,7 +32,8 @@
+             _whatToTrace  => $uid,
+             uid           => $uid,
+             _utime        => time,
+-            _session_kind => 'SSO'
++            _session_kind => 'SSO',
++            _password     => 'dwho',
+         }
+     );
+     return $tmp->{id};
+@@ -46,7 +47,8 @@
+ ok( ( $res->{uid} and $res->{uid} eq 'dwho' ), 'Uid found' )
+   or print STDERR Dumper($res);
+ ok( ( $res->{ipAddr} and $res->{ipAddr} eq '127.10.0.1' ), 'IP found' );
+-count(2);
++isnt( $res->{_password}, 'dwho', 'Password attribute is hidden' );
++count(3);
+ 
+ # "All" query
+ $res = &client->jsonResponse("/sessions/global/");
diff --git a/debian/patches/series b/debian/patches/series
index 443671b56..ab96cc923 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,3 +5,7 @@ fix-makefile.patch
 CVE-2025-59518.patch
 dont-expose-session-id-in-ajax-responses.patch
 fix-google-auth.patch
+3478-fix-oidc-alg.patch
+really-hide-password-in-session-explorer.patch
+fix-oidc-frontchannel.patch
+workaround-nginx-issue.patch
diff --git a/debian/patches/workaround-nginx-issue.patch b/debian/patches/workaround-nginx-issue.patch
new file mode 100644
index 000000000..033d3b6b0
--- /dev/null
+++ b/debian/patches/workaround-nginx-issue.patch
@@ -0,0 +1,336 @@
+From: Yadd <yadd at debian.org>
+Date: mai, 01 2026 06:10:10 +0200
+Subject: [PATCH] workaround Nginx issue
+ This patch is a supplementary security for the Nginx issue fixed in Nginx
+ 1.26.3-3+deb13u4
+ .
+ This avoids using the unsecure $http_host variable.
+Origin: upstream, commit:b82e1abd
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/work_items/3556
+Forwarded: not-needed
+
+--- a/_example/etc/api-nginx.conf
++++ b/_example/etc/api-nginx.conf
+@@ -28,6 +28,7 @@
+     # FastCGI configuration
+     include /etc/nginx/fastcgi_params;
+     fastcgi_pass unix:__FASTCGISOCKDIR__/llng-fastcgi.sock;
++    fastcgi_param HTTP_HOST $host;
+     fastcgi_param LLTYPE psgi;
+     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+     fastcgi_split_path_info ^(.*\.psgi)(/.*)$;
+--- a/_example/etc/manager-nginx.conf
++++ b/_example/etc/manager-nginx.conf
+@@ -24,6 +24,7 @@
+     # FastCGI configuration
+     include /etc/nginx/fastcgi_params;
+     fastcgi_pass unix:__FASTCGISOCKDIR__/llng-fastcgi.sock;
++    fastcgi_param HTTP_HOST $host;
+     fastcgi_param LLTYPE psgi;
+     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+     fastcgi_split_path_info ^(.*\.psgi)(/.*)$;
+--- a/_example/etc/portal-nginx.conf
++++ b/_example/etc/portal-nginx.conf
+@@ -38,6 +38,7 @@
+     # FastCGI configuration
+     include /etc/nginx/fastcgi_params;
+     fastcgi_pass llng_portal_upstream;
++    fastcgi_param HTTP_HOST $host;
+     fastcgi_param LLTYPE psgi;
+     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+     fastcgi_split_path_info ^(.*\.psgi)(/.*)$;
+--- a/_example/etc/test-nginx.conf
++++ b/_example/etc/test-nginx.conf
+@@ -27,8 +27,8 @@
+     # Drop post datas
+     fastcgi_pass_request_body  off;
+     fastcgi_param CONTENT_LENGTH "";
+-    # Keep original hostname
+-    fastcgi_param HOST $http_host;
++    # Prevent attacks on older Nginx versions (<1.29.5)
++    fastcgi_param HTTP_HOST $host;
+     # Keep original request (LLNG server will receive /lmauth)
+     fastcgi_param X_ORIGINAL_URI $original_uri;
+     fastcgi_param UNIQUE_ID $request_id;
+@@ -43,8 +43,8 @@
+     # Drop post datas
+     #uwsgi_pass_request_body  off;
+     #uwsgi_param CONTENT_LENGTH "";
+-    # Keep original hostname
+-    #uwsgi_param HOST $http_host;
++    # Prevent attacks on older Nginx versions (<1.29.5)
++    #uwsgi_param HTTP_HOST $host;
+     # Keep original request (LLNG server will receive /lmauth)
+     #uwsgi_param X_ORIGINAL_URI $original_uri;
+     #uwsgi_param UNIQUE_ID $request_id;
+--- a/doc/sources/admin/applications/bugzilla.rst
++++ b/doc/sources/admin/applications/bugzilla.rst
+@@ -67,8 +67,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/dokuwiki.rst
++++ b/doc/sources/admin/applications/dokuwiki.rst
+@@ -72,8 +72,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/drupal.rst
++++ b/doc/sources/admin/applications/drupal.rst
+@@ -69,8 +69,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/glpi.rst
++++ b/doc/sources/admin/applications/glpi.rst
+@@ -28,8 +28,8 @@
+ 
+ .. code-block:: nginx
+ 
+-   proxy_set_header Host $http_host;
+-   proxy_set_header X-Forwarded-Host $http_host;
++   proxy_set_header Host $host;
++   proxy_set_header X-Forwarded-Host $host;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ 
+--- a/doc/sources/admin/applications/liferay.rst
++++ b/doc/sources/admin/applications/liferay.rst
+@@ -127,8 +127,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/mediawiki.rst
++++ b/doc/sources/admin/applications/mediawiki.rst
+@@ -156,8 +156,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/obm.rst
++++ b/doc/sources/admin/applications/obm.rst
+@@ -149,8 +149,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/phpldapadmin.rst
++++ b/doc/sources/admin/applications/phpldapadmin.rst
+@@ -71,8 +71,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/applications/sympa.rst
++++ b/doc/sources/admin/applications/sympa.rst
+@@ -146,8 +146,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+--- a/doc/sources/admin/configlocation.rst
++++ b/doc/sources/admin/configlocation.rst
+@@ -524,7 +524,7 @@
+        fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock;
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       fastcgi_param HOST $http_host;
++       fastcgi_param HTTP_HOST $host;
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+ 
+--- a/doc/sources/admin/configvhost.rst
++++ b/doc/sources/admin/configvhost.rst
+@@ -151,8 +151,8 @@
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+ 
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+ 
+        # Keep original request (LLNG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI $original_uri;
+@@ -226,8 +226,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LLNG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI $original_uri;
+      }
+@@ -287,8 +287,8 @@
+        # Drop post data
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+        # Keep original request (LLNG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+      }
+@@ -321,7 +321,7 @@
+ 
+ .. code-block:: nginx
+ 
+-    proxy_set_header Host $http_host;
++    proxy_set_header Host $host;
+     proxy_set_header X-Real-IP $remote_addr;
+     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+     proxy_set_header X-Forwarded-Proto $scheme;
+@@ -345,7 +345,7 @@
+        uwsgi_pass 127.0.0.1:5000;
+        uwsgi_pass_request_body  off;
+        uwsgi_param CONTENT_LENGTH "";
+-       uwsgi_param HOST $http_host;
++       uwsgi_param HTTP_HOST $host;
+        uwsgi_param X_ORIGINAL_URI  $original_uri;
+        # Improve performances
+        uwsgi_buffer_size 32k;
+@@ -360,7 +360,7 @@
+        uwsgi_pass 127.0.0.1:5000;
+        uwsgi_pass_request_body  off;
+        uwsgi_param CONTENT_LENGTH "";
+-       uwsgi_param HOST $http_host;
++       uwsgi_param HTTP_HOST $host;
+        uwsgi_param X_ORIGINAL_URI  $original_uri;
+        uwsgi_param VHOSTTYPE AuthBasic;
+        # Improve performances
+@@ -376,7 +376,7 @@
+        uwsgi_pass 127.0.0.1:5000;
+        uwsgi_pass_request_body  off;
+        uwsgi_param CONTENT_LENGTH "";
+-       uwsgi_param HOST $http_host;
++       uwsgi_param HTTP_HOST $host;
+        uwsgi_param X_ORIGINAL_URI  $original_uri;
+        uwsgi_param VHOSTTYPE ServiceToken;
+        # Improve performances
+--- a/doc/sources/admin/docker.rst
++++ b/doc/sources/admin/docker.rst
+@@ -286,8 +286,8 @@
+       # Drop post data
+       fastcgi_pass_request_body  off;
+       fastcgi_param CONTENT_LENGTH "";
+-      # Keep original hostname
+-      fastcgi_param HOST $http_host;
++      # Prevent attacks on older Nginx versions (<1.29.5)
++      fastcgi_param HTTP_HOST $host;
+       # Keep original request (LLNG server will receive /lmauth)
+       fastcgi_param X_ORIGINAL_URI  $original_uri;
+     }
+--- a/doc/sources/admin/nodehandler.rst
++++ b/doc/sources/admin/nodehandler.rst
+@@ -67,8 +67,8 @@
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+ 
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+ 
+        # Keep original request (LLNG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+--- a/doc/sources/admin/ssoaas.rst
++++ b/doc/sources/admin/ssoaas.rst
+@@ -99,8 +99,8 @@
+        # Keep original request (LL::NG server will receive /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+ 
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+ 
+        # Set redirection parameters
+        fastcgi_param HTTPS_REDIRECT "$https";
+@@ -312,8 +312,8 @@
+        fastcgi_pass_request_body  off;
+        fastcgi_param CONTENT_LENGTH "";
+ 
+-       # Keep original hostname
+-       fastcgi_param HOST $http_host;
++       # Prevent attacks on older Nginx versions (<1.29.5)
++       fastcgi_param HTTP_HOST $host;
+ 
+        # Keep original request (LL::NG server will received /lmauth)
+        fastcgi_param X_ORIGINAL_URI  $original_uri;
+--- a/e2e-tests/test-nginx.conf
++++ b/e2e-tests/test-nginx.conf
+@@ -16,8 +16,8 @@
+     fastcgi_pass_request_body  off;
+     fastcgi_param CONTENT_LENGTH "";
+ 
+-    # Keep original hostname
+-    fastcgi_param HOST $http_host;
++    # Prevent attacks on older Nginx versions (<1.29.5)
++    fastcgi_param HTTP_HOST $host;
+ 
+     # Keep original request (LLNG server will received /llauth)
+     fastcgi_param X_ORIGINAL_URI  $request_uri;
+@@ -27,7 +27,7 @@
+     #uwsgi_pass 127.0.0.1:5000;
+     #uwsgi_pass_request_body  off;
+     #uwsgi_param CONTENT_LENGTH "";
+-    #uwsgi_param HOST $http_host;
++    #uwsgi_param HTTP_HOST $host;
+     #uwsgi_param X_ORIGINAL_URI  $request_uri;
+   }
+ 


More information about the pkg-perl-maintainers mailing list