--- /usr/share/perl5/Lemonldap/NG/Portal/UserDB/LDAP.pm.old 2019-12-11 12:05:54.000000000 +0100 +++ /usr/share/perl5/Lemonldap/NG/Portal/UserDB/LDAP.pm 2021-01-05 10:54:19.188732119 +0100 @@ -40,10 +40,15 @@ %{ $self->conf->{ldapExportedVars} } ); while ( my ( $k, $v ) = each %vars ) { + my $value = $self->ldap->getLdapValue( $req->data->{ldapentry}, $v ); + # getLdapValue returns an empty string for missing attribute # but we really want to return undef so they don't get stored in session - $req->sessionInfo->{$k} = - $self->ldap->getLdapValue( $req->data->{ldapentry}, $v ) || undef; + # This has to be a string comparison because "0" is a valid attribute + # value. See #2403 + $value = undef if ( $value eq "" ); + + $req->sessionInfo->{$k} = $value; } PE_OK;