Merge branch 'v2.0': findUser may be broken

This commit is contained in:
Yadd 2021-05-01 07:49:05 +02:00
commit a282a37b66
23 changed files with 197 additions and 31 deletions

View File

@ -17,7 +17,7 @@ sub accessToTrace {
my $params = $hash->{params}; my $params = $hash->{params};
my $session = $hash->{session}; my $session = $hash->{session};
return "$custom alias $params->[0]_$params->[1]:$session->{groups} with $session->{$params->[2]}"; return "$custom alias $params->[0]_$params->[1]:$session->{groups} ($session->{$params->[2]})";
} }
1; 1;

View File

@ -171,7 +171,7 @@
"vhostHttps": -1, "vhostHttps": -1,
"vhostAliases": "", "vhostAliases": "",
"vhostServiceTokenTTL": -1, "vhostServiceTokenTTL": -1,
"vhostAccessToTrace": "My::accessToTrace, Doctor, Who","vhostType":"Main" "vhostAccessToTrace": "My::accessToTrace, Doctor, Who, _whatToTrace","vhostType":"Main"
} }
}, },
"loginHistoryEnabled": 1, "loginHistoryEnabled": 1,

View File

@ -65,8 +65,9 @@ Options:
- safe <0|1> : fail in case the requested configuration is invalid - safe <0|1> : fail in case the requested configuration is invalid
- force <0|1> : allow overwrite of existing config number - force <0|1> : allow overwrite of existing config number
- cfgNum <num> : set new configuration number (requires -force 1) - cfgNum <num> : set new configuration number (requires -force 1)
- nohistory : do not increment configuration number (requires -force 1)
- sep <char> : separator of hierarchical values (by default: /) - sep <char> : separator of hierarchical values (by default: /)
- iniFile <file> : path to an alternate lemonldap-ng.ini file - iniFile <file> : path to an alternative lemonldap-ng.ini file
See Lemonldap::NG::Manager::Cli(3) for more See Lemonldap::NG::Manager::Cli(3) for more
}; };
@ -170,13 +171,25 @@ Allows you to set the log message that will be displayed in the manager
The configuration change will be aborted if it contains errors (default: 0) The configuration change will be aborted if it contains errors (default: 0)
=item -force
Allows you to force overwriting an existing configuration (default: 0)
=item -cfgNum =item -cfgNum
Choose a particular configuration number (default: latest) Choose a particular configuration number (default: latest)
=item -force =item -nohistory
Allows you to force overwriting an existing configuration (default: 0) Allows you to keep current configuration number
=item -sep
Allows you to define hierarchical separator
=item -iniFile
Allows you to set an alternative ini file
=back =back
@ -189,11 +202,13 @@ L<http://lemonldap-ng.org/>
=over =over
=item David Coutateur, E<lt>david.jose.delassus@gmail.comE<gt> =item Clement Oudot, E<lt>clement@oodo.netE<gt>
=item Clement Oudot, E<lt>clem.oudot@gmail.comE<gt> =item Xavier Guimard, E<lt>yadd@debian.orgE<gt>
=item Xavier Guimard, E<lt>x.guimard@free.frE<gt> =item Maxime Besson, E<lt>maxime.besson@worteks.comE<gt>
=item Christophe Maudoux, E<lt>chrmdx@gmail.comE<gt>
=back =back
@ -205,7 +220,7 @@ L<https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues>
=head1 DOWNLOAD =head1 DOWNLOAD
Lemonldap::NG is available at Lemonldap::NG is available at
L<http://forge.objectweb.org/project/showfiles.php?group_id=274> L<https://release.ow2.org/lemonldap/>
=head1 COPYRIGHT AND LICENSE =head1 COPYRIGHT AND LICENSE

View File

@ -22,7 +22,7 @@ sub checkMaintenanceMode {
$class->tsv->{defaultCondition}->{$vhost} $class->tsv->{defaultCondition}->{$vhost}
and ( and (
time() - $class->tsv->{lastVhostUpdate}->{$vhost} < time() - $class->tsv->{lastVhostUpdate}->{$vhost} <
$class->tsv->{checkTime} ) $class->checkTime )
); );
return $class->Lemonldap::NG::Handler::Main::checkMaintenanceMode($req); return $class->Lemonldap::NG::Handler::Main::checkMaintenanceMode($req);

View File

@ -59,9 +59,16 @@ sub checkConf {
} }
$Lemonldap::NG::Common::Conf::msg = ''; $Lemonldap::NG::Common::Conf::msg = '';
if ( $force or !$class->cfgNum or $class->cfgNum != $conf->{cfgNum} ) { if ( $force
or !$class->cfgNum
or !$class->cfgDate
or $class->cfgNum != $conf->{cfgNum}
or $class->cfgDate != $conf->{cfgDate} )
{
$class->logger->debug("Get configuration $conf->{cfgNum}"); $class->logger->debug("Get configuration $conf->{cfgNum}");
unless ( $class->cfgNum( $conf->{cfgNum} ) ) { unless ( $class->cfgNum( $conf->{cfgNum} )
&& $class->cfgDate( $conf->{cfgDate} ) )
{
$class->logger->error('No configuration available'); $class->logger->error('No configuration available');
return 0; return 0;
} }
@ -80,7 +87,7 @@ sub checkConf {
} }
} }
} }
$class->tsv->{checkTime} = $conf->{checkTime} if ( $conf->{checkTime} ); $class->checkTime( $conf->{checkTime} ) if $conf->{checkTime};
$class->lastCheck( time() ); $class->lastCheck( time() );
$class->logger->debug("$class: configuration is up to date"); $class->logger->debug("$class: configuration is up to date");
return 1; return 1;

View File

@ -2,7 +2,7 @@ package Lemonldap::NG::Handler::Main::SharedVariables;
our $VERSION = '2.1.0'; our $VERSION = '2.1.0';
# Since handler has no instances but only static classes, this module provides # Since handler has no instance but only static classes, this module provides
# classes properties with accessors # classes properties with accessors
package Lemonldap::NG::Handler::Main; package Lemonldap::NG::Handler::Main;
@ -14,6 +14,7 @@ BEGIN {
our $_tshv = { our $_tshv = {
tsv => {}, tsv => {},
cfgNum => 0, cfgNum => 0,
cfgDate => 0,
lastCheck => 0, lastCheck => 0,
checkTime => 600, checkTime => 600,
confAcc => {}, confAcc => {},
@ -30,7 +31,7 @@ BEGIN {
foreach ( keys %$_tshv ) { foreach ( keys %$_tshv ) {
eval " sub $_ { eval " sub $_ {
my \$v = \$_[1]; my \$v = \$_[1];
\$_tshv->{$_} = \$v if(defined \$v); \$_tshv->{$_} = \$v if (defined \$v);
return \$_tshv->{$_}; return \$_tshv->{$_};
}"; }";
die $@ if ($@); die $@ if ($@);
@ -41,7 +42,7 @@ BEGIN {
foreach ( keys %$_v ) { foreach ( keys %$_v ) {
eval " sub $_ { eval " sub $_ {
my \$v = \$_[1]; my \$v = \$_[1];
\$_v->{$_} = \$v if(\$v); \$_v->{$_} = \$v if (\$v);
return \$_v->{$_}; return \$_v->{$_};
}"; }";
die $@ if ($@); die $@ if ($@);

View File

@ -29,6 +29,7 @@ has format => ( is => 'rw', isa => 'Str', default => "%-25s | %-25s | %-25s" );
has yes => ( is => 'rw', isa => 'Bool', default => 0 ); has yes => ( is => 'rw', isa => 'Bool', default => 0 );
has safe => ( is => 'rw', isa => 'Bool', default => 0 ); has safe => ( is => 'rw', isa => 'Bool', default => 0 );
has force => ( is => 'rw', isa => 'Bool', default => 0 ); has force => ( is => 'rw', isa => 'Bool', default => 0 );
has nohistory => ( is => 'rw', isa => 'Bool', default => 0 );
has logger => ( is => 'ro', lazy => 1, builder => sub { $_[0]->mgr->logger } ); has logger => ( is => 'ro', lazy => 1, builder => sub { $_[0]->mgr->logger } );
has userLogger => has userLogger =>
( is => 'ro', lazy => 1, builder => sub { $_[0]->mgr->userLogger } ); ( is => 'ro', lazy => 1, builder => sub { $_[0]->mgr->userLogger } );
@ -355,7 +356,7 @@ sub rollback {
or die $Lemonldap::NG::Common::Conf::msg; or die $Lemonldap::NG::Common::Conf::msg;
$conf->{cfgNum} = $lastCfg; $conf->{cfgNum} = $lastCfg;
$conf->{cfgAuthor} = scalar( getpwuid $< ) . '(command-line-interface)'; $conf->{cfgAuthor} = scalar( getpwuid $< ) . ' (command-line-interface)';
chomp $conf->{cfgAuthor}; chomp $conf->{cfgAuthor};
$conf->{cfgAuthorIP} = '127.0.0.1'; $conf->{cfgAuthorIP} = '127.0.0.1';
$conf->{cfgDate} = time; $conf->{cfgDate} = time;
@ -416,8 +417,7 @@ sub _setKey {
sub _save { sub _save {
my ( $self, $new ) = @_; my ( $self, $new ) = @_;
require Lemonldap::NG::Manager::Conf::Parser; require Lemonldap::NG::Manager::Conf::Parser;
my $parser = Lemonldap::NG::Manager::Conf::Parser->new( my $parser = Lemonldap::NG::Manager::Conf::Parser->new( {
{
newConf => $new, newConf => $new,
refConf => $self->mgr->hLoadedPlugins->{conf}->currentConf, refConf => $self->mgr->hLoadedPlugins->{conf}->currentConf,
req => $self->req req => $self->req
@ -433,6 +433,7 @@ sub _save {
print STDERR "$msg\n"; print STDERR "$msg\n";
} }
} }
my $saveParams = { force => $self->force }; my $saveParams = { force => $self->force };
if ( $self->force and $self->cfgNum ) { if ( $self->force and $self->cfgNum ) {
$self->logger->debug( "CLI: cfgNum forced with " . $self->cfgNum ); $self->logger->debug( "CLI: cfgNum forced with " . $self->cfgNum );
@ -440,6 +441,15 @@ sub _save {
$saveParams->{cfgNum} = $self->cfgNum; $saveParams->{cfgNum} = $self->cfgNum;
$saveParams->{cfgNumFixed} = 1; $saveParams->{cfgNumFixed} = 1;
} }
if ( $self->force and $self->nohistory ) {
my $lastCfg = $self->mgr->confAcc->lastCfg;
$self->logger->debug(
"CLI: No history required. cfgNum forced with " . $lastCfg );
print STDERR "No history required. cfgNum forced with ", $lastCfg;
$saveParams->{cfgNum} = $lastCfg;
$saveParams->{cfgNumFixed} = 1;
}
$new->{cfgAuthor} = scalar( getpwuid $< ) . '(command-line-interface)'; $new->{cfgAuthor} = scalar( getpwuid $< ) . '(command-line-interface)';
chomp $new->{cfgAuthor}; chomp $new->{cfgAuthor};
$new->{cfgAuthorIP} = '127.0.0.1'; $new->{cfgAuthorIP} = '127.0.0.1';

0
lemonldap-ng-manager/scripts/lmConfigEditor Normal file → Executable file
View File

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"المستخدم", "dbiAuthUser":"المستخدم",
"dbiAuthnLevel":"مستوى إثبات الهوية", "dbiAuthnLevel":"مستوى إثبات الهوية",
"dbiConnection":"الاتصال", "dbiConnection":"الاتصال",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dynamic hashing", "dbiDynamicHash":"dynamic hashing",
"dbiDynamicHashEnabled":"dynamic hash activation", "dbiDynamicHashEnabled":"dynamic hash activation",
"dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords", "dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords",
@ -296,7 +298,10 @@
"dbiPassword":"كلمة المرور ", "dbiPassword":"كلمة المرور ",
"dbiPasswordMailCol":"اسم حقل البريد", "dbiPasswordMailCol":"اسم حقل البريد",
"dbiSchema":"مخطط", "dbiSchema":"مخطط",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"جدول المستخدم", "dbiUserTable":"جدول المستخدم",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Decrypt functions", "decryptValueFunctions":"Decrypt functions",
"decryptValueRule":"استخدام القاعدة", "decryptValueRule":"استخدام القاعدة",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"خدمة أل يو أر ل", "yubikey2fUrl":"خدمة أل يو أر ل",
"yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey", "yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey",
"zeroConfExplanations":"لا يحتوي الخادم على إعدادات. استخدام قالب لحفظ الأول" "zeroConfExplanations":"لا يحتوي الخادم على إعدادات. استخدام قالب لحفظ الأول"
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Benutzer", "dbiAuthUser":"Benutzer",
"dbiAuthnLevel":"Authentication level", "dbiAuthnLevel":"Authentication level",
"dbiConnection":"Verbindung", "dbiConnection":"Verbindung",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dynamic hashing", "dbiDynamicHash":"dynamic hashing",
"dbiDynamicHashEnabled":"dynamic hash activation", "dbiDynamicHashEnabled":"dynamic hash activation",
"dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords", "dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords",
@ -296,7 +298,10 @@
"dbiPassword":"Passwort", "dbiPassword":"Passwort",
"dbiPasswordMailCol":"Mail field name", "dbiPasswordMailCol":"Mail field name",
"dbiSchema":"Schema", "dbiSchema":"Schema",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"User table", "dbiUserTable":"User table",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Decrypt functions", "decryptValueFunctions":"Decrypt functions",
"decryptValueRule":"Use rule", "decryptValueRule":"Use rule",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"Service URL", "yubikey2fUrl":"Service URL",
"yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey", "yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey",
"zeroConfExplanations":"Server has no configuration. Use template to save the first." "zeroConfExplanations":"Server has no configuration. Use template to save the first."
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"User", "dbiAuthUser":"User",
"dbiAuthnLevel":"Authentication level", "dbiAuthnLevel":"Authentication level",
"dbiConnection":"Connection", "dbiConnection":"Connection",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dynamic hashing", "dbiDynamicHash":"dynamic hashing",
"dbiDynamicHashEnabled":"dynamic hash activation", "dbiDynamicHashEnabled":"dynamic hash activation",
"dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords", "dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords",
@ -296,7 +298,10 @@
"dbiPassword":"Password", "dbiPassword":"Password",
"dbiPasswordMailCol":"Mail field name", "dbiPasswordMailCol":"Mail field name",
"dbiSchema":"Schema", "dbiSchema":"Schema",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"User table", "dbiUserTable":"User table",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Decrypt functions", "decryptValueFunctions":"Decrypt functions",
"decryptValueRule":"Use rule", "decryptValueRule":"Use rule",

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Usuario", "dbiAuthUser":"Usuario",
"dbiAuthnLevel":"Nivel de autentificación", "dbiAuthnLevel":"Nivel de autentificación",
"dbiConnection":"Conexión", "dbiConnection":"Conexión",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"Visor de diferencias", "dbiDynamicHash":"Visor de diferencias",
"dbiDynamicHashEnabled":"Activación de hash dinámico", "dbiDynamicHashEnabled":"Activación de hash dinámico",
"dbiDynamicHashNewPasswordScheme":"Esquema de hash dinámico para nuevos passwords", "dbiDynamicHashNewPasswordScheme":"Esquema de hash dinámico para nuevos passwords",
@ -296,7 +298,10 @@
"dbiPassword":"Password", "dbiPassword":"Password",
"dbiPasswordMailCol":"Nombre de campo de Correo", "dbiPasswordMailCol":"Nombre de campo de Correo",
"dbiSchema":"Esquema", "dbiSchema":"Esquema",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"Tabla de usuario", "dbiUserTable":"Tabla de usuario",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Funciones de descifrado", "decryptValueFunctions":"Funciones de descifrado",
"decryptValueRule":"Regla de uso", "decryptValueRule":"Regla de uso",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"Service URL", "yubikey2fUrl":"Service URL",
"yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey", "yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey",
"zeroConfExplanations":"Server has no configuration. Use template to save the first." "zeroConfExplanations":"Server has no configuration. Use template to save the first."
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Utilisateur", "dbiAuthUser":"Utilisateur",
"dbiAuthnLevel":"Niveau d'authentification", "dbiAuthnLevel":"Niveau d'authentification",
"dbiConnection":"Connexion", "dbiConnection":"Connexion",
"dbiConnectionAuth":"Authentification",
"dbiConnectionUser":"Utilisateurs",
"dbiDynamicHash":"Hashage dynamique", "dbiDynamicHash":"Hashage dynamique",
"dbiDynamicHashEnabled":"Activation des hashes dynamiques", "dbiDynamicHashEnabled":"Activation des hashes dynamiques",
"dbiDynamicHashNewPasswordScheme":"Schéma de hashage dynamique pour la création de mots de passe", "dbiDynamicHashNewPasswordScheme":"Schéma de hashage dynamique pour la création de mots de passe",
@ -296,7 +298,10 @@
"dbiPassword":"Mot de passe", "dbiPassword":"Mot de passe",
"dbiPasswordMailCol":"Champ mail", "dbiPasswordMailCol":"Champ mail",
"dbiSchema":"Schéma", "dbiSchema":"Schéma",
"dbiUserChain":"Chaîne",
"dbiUserPassword":"Mot de passe",
"dbiUserTable":"Table des utilisateurs", "dbiUserTable":"Table des utilisateurs",
"dbiUserUser":"Utilisateur",
"decryptValue":"Déchiffrement", "decryptValue":"Déchiffrement",
"decryptValueFunctions":"Fonctions de déchiffrement", "decryptValueFunctions":"Fonctions de déchiffrement",
"decryptValueRule":"Règle d'utilisation", "decryptValueRule":"Règle d'utilisation",

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Utente", "dbiAuthUser":"Utente",
"dbiAuthnLevel":"Livello di autenticazione", "dbiAuthnLevel":"Livello di autenticazione",
"dbiConnection":"Connessione", "dbiConnection":"Connessione",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"hashing dinamico", "dbiDynamicHash":"hashing dinamico",
"dbiDynamicHashEnabled":"attivazione hash dinamica", "dbiDynamicHashEnabled":"attivazione hash dinamica",
"dbiDynamicHashNewPasswordScheme":"Schema hash dinamico per nuove password", "dbiDynamicHashNewPasswordScheme":"Schema hash dinamico per nuove password",
@ -296,7 +298,10 @@
"dbiPassword":"Password", "dbiPassword":"Password",
"dbiPasswordMailCol":"Nome del campo di posta", "dbiPasswordMailCol":"Nome del campo di posta",
"dbiSchema":"Schema", "dbiSchema":"Schema",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"Tabella utente", "dbiUserTable":"Tabella utente",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Decrypt functions", "decryptValueFunctions":"Decrypt functions",
"decryptValueRule":"Utilizza la regola", "decryptValueRule":"Utilizza la regola",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"URL del servizio", "yubikey2fUrl":"URL del servizio",
"yubikey2fUserCanRemoveKey":"Autorizza l'utente a rimuovere la Yubikey", "yubikey2fUserCanRemoveKey":"Autorizza l'utente a rimuovere la Yubikey",
"zeroConfExplanations":"Il server non ha alcuna configurazione. Utilizza il modello per salvare il primo." "zeroConfExplanations":"Il server non ha alcuna configurazione. Utilizza il modello per salvare il primo."
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Użytkownik", "dbiAuthUser":"Użytkownik",
"dbiAuthnLevel":"Poziom uwierzytelnienia", "dbiAuthnLevel":"Poziom uwierzytelnienia",
"dbiConnection":"Połączenie", "dbiConnection":"Połączenie",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dynamiczne haszowanie", "dbiDynamicHash":"dynamiczne haszowanie",
"dbiDynamicHashEnabled":"aktywacja dynamicznego haszowania", "dbiDynamicHashEnabled":"aktywacja dynamicznego haszowania",
"dbiDynamicHashNewPasswordScheme":"Dynamiczny schemat haszowania dla nowych haseł", "dbiDynamicHashNewPasswordScheme":"Dynamiczny schemat haszowania dla nowych haseł",
@ -296,7 +298,10 @@
"dbiPassword":"Hasło", "dbiPassword":"Hasło",
"dbiPasswordMailCol":"Nazwa pola poczty", "dbiPasswordMailCol":"Nazwa pola poczty",
"dbiSchema":"Schemat", "dbiSchema":"Schemat",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"Tabela użytkowników", "dbiUserTable":"Tabela użytkowników",
"dbiUserUser":"User",
"decryptValue":"Odszyfruj wartość", "decryptValue":"Odszyfruj wartość",
"decryptValueFunctions":"Odszyfruj funkcje", "decryptValueFunctions":"Odszyfruj funkcje",
"decryptValueRule":"Użyj reguły", "decryptValueRule":"Użyj reguły",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"URL usługi", "yubikey2fUrl":"URL usługi",
"yubikey2fUserCanRemoveKey":"Pozwól użytkownikowi usunąć Yubikey", "yubikey2fUserCanRemoveKey":"Pozwól użytkownikowi usunąć Yubikey",
"zeroConfExplanations":"Serwer nie ma konfiguracji. Użyj szablonu, aby zapisać pierwszy." "zeroConfExplanations":"Serwer nie ma konfiguracji. Użyj szablonu, aby zapisać pierwszy."
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Kullanıcı", "dbiAuthUser":"Kullanıcı",
"dbiAuthnLevel":"Doğrulama seviyesi", "dbiAuthnLevel":"Doğrulama seviyesi",
"dbiConnection":"Bağlantı", "dbiConnection":"Bağlantı",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dinamik çırpma", "dbiDynamicHash":"dinamik çırpma",
"dbiDynamicHashEnabled":"dinamik çırpı aktivasyonu", "dbiDynamicHashEnabled":"dinamik çırpı aktivasyonu",
"dbiDynamicHashNewPasswordScheme":"Yeni parolalar için dinamik çırpı şeması", "dbiDynamicHashNewPasswordScheme":"Yeni parolalar için dinamik çırpı şeması",
@ -296,7 +298,10 @@
"dbiPassword":"Parola", "dbiPassword":"Parola",
"dbiPasswordMailCol":"E-posta alanı adı", "dbiPasswordMailCol":"E-posta alanı adı",
"dbiSchema":"Şema", "dbiSchema":"Şema",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"Kullanıcı tablosu", "dbiUserTable":"Kullanıcı tablosu",
"dbiUserUser":"User",
"decryptValue":"Değeri çöz", "decryptValue":"Değeri çöz",
"decryptValueFunctions":"Fonksiyonları çöz", "decryptValueFunctions":"Fonksiyonları çöz",
"decryptValueRule":"Kuralı kullan", "decryptValueRule":"Kuralı kullan",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"Servis URL'si", "yubikey2fUrl":"Servis URL'si",
"yubikey2fUserCanRemoveKey":"Yubikey'i kaldırmak için kullanıcıya izin ver", "yubikey2fUserCanRemoveKey":"Yubikey'i kaldırmak için kullanıcıya izin ver",
"zeroConfExplanations":"Sunucunun yapılandırması yok. Şimdi bir tane kaydetmek için şablonu kullanın." "zeroConfExplanations":"Sunucunun yapılandırması yok. Şimdi bir tane kaydetmek için şablonu kullanın."
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"Người dùng", "dbiAuthUser":"Người dùng",
"dbiAuthnLevel":"Mức xác thực", "dbiAuthnLevel":"Mức xác thực",
"dbiConnection":"Kết nối", "dbiConnection":"Kết nối",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dynamic hashing", "dbiDynamicHash":"dynamic hashing",
"dbiDynamicHashEnabled":"dynamic hash activation", "dbiDynamicHashEnabled":"dynamic hash activation",
"dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords", "dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords",
@ -296,7 +298,10 @@
"dbiPassword":"Mật khẩu", "dbiPassword":"Mật khẩu",
"dbiPasswordMailCol":"Tên trường thư", "dbiPasswordMailCol":"Tên trường thư",
"dbiSchema":"Giản đồ", "dbiSchema":"Giản đồ",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"Bảng người dùng", "dbiUserTable":"Bảng người dùng",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Decrypt functions", "decryptValueFunctions":"Decrypt functions",
"decryptValueRule":"Quy tắc sử dụng", "decryptValueRule":"Quy tắc sử dụng",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"Dịch vụ URL", "yubikey2fUrl":"Dịch vụ URL",
"yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey", "yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey",
"zeroConfExplanations":"Máy chủ không có cấu hình. Sử dụng mẫu để lưu đầu tiên. " "zeroConfExplanations":"Máy chủ không có cấu hình. Sử dụng mẫu để lưu đầu tiên. "
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"用户", "dbiAuthUser":"用户",
"dbiAuthnLevel":"认证等级", "dbiAuthnLevel":"认证等级",
"dbiConnection":"连接", "dbiConnection":"连接",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"dynamic hashing", "dbiDynamicHash":"dynamic hashing",
"dbiDynamicHashEnabled":"dynamic hash activation", "dbiDynamicHashEnabled":"dynamic hash activation",
"dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords", "dbiDynamicHashNewPasswordScheme":"Dynamic hash scheme for new passwords",
@ -296,7 +298,10 @@
"dbiPassword":"密码", "dbiPassword":"密码",
"dbiPasswordMailCol":"Mail field name", "dbiPasswordMailCol":"Mail field name",
"dbiSchema":"Schema", "dbiSchema":"Schema",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"用户表", "dbiUserTable":"用户表",
"dbiUserUser":"User",
"decryptValue":"Decrypt value", "decryptValue":"Decrypt value",
"decryptValueFunctions":"Decrypt functions", "decryptValueFunctions":"Decrypt functions",
"decryptValueRule":"Use rule", "decryptValueRule":"Use rule",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"Service URL", "yubikey2fUrl":"Service URL",
"yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey", "yubikey2fUserCanRemoveKey":"Allow user to remove Yubikey",
"zeroConfExplanations":"Server has no configuration. Use template to save the first." "zeroConfExplanations":"Server has no configuration. Use template to save the first."
} }

View File

@ -286,6 +286,8 @@
"dbiAuthUser":"使用者", "dbiAuthUser":"使用者",
"dbiAuthnLevel":"驗證等級", "dbiAuthnLevel":"驗證等級",
"dbiConnection":"連線", "dbiConnection":"連線",
"dbiConnectionAuth":"Authentication process",
"dbiConnectionUser":"User process",
"dbiDynamicHash":"動態雜湊值", "dbiDynamicHash":"動態雜湊值",
"dbiDynamicHashEnabled":"動態雜湊值啟用", "dbiDynamicHashEnabled":"動態雜湊值啟用",
"dbiDynamicHashNewPasswordScheme":"新密碼的動態雜湊值結構", "dbiDynamicHashNewPasswordScheme":"新密碼的動態雜湊值結構",
@ -296,7 +298,10 @@
"dbiPassword":"密碼", "dbiPassword":"密碼",
"dbiPasswordMailCol":"郵件欄位名稱", "dbiPasswordMailCol":"郵件欄位名稱",
"dbiSchema":"結構", "dbiSchema":"結構",
"dbiUserChain":"Chain",
"dbiUserPassword":"Password",
"dbiUserTable":"使用者表格", "dbiUserTable":"使用者表格",
"dbiUserUser":"User",
"decryptValue":"解密值", "decryptValue":"解密值",
"decryptValueFunctions":"解密函式", "decryptValueFunctions":"解密函式",
"decryptValueRule":"使用規則", "decryptValueRule":"使用規則",
@ -1212,4 +1217,4 @@
"yubikey2fUrl":"服務 URL", "yubikey2fUrl":"服務 URL",
"yubikey2fUserCanRemoveKey":"允許使用者移除 Yubikey", "yubikey2fUserCanRemoveKey":"允許使用者移除 Yubikey",
"zeroConfExplanations":"伺服器未設定。使用飯本來儲存第一個。" "zeroConfExplanations":"伺服器未設定。使用飯本來儲存第一個。"
} }

View File

@ -4,7 +4,7 @@ use JSON;
use strict; use strict;
require 't/test-lib.pm'; require 't/test-lib.pm';
my $tests = 17; my $tests = 18;
use_ok('Lemonldap::NG::Common::Cli'); use_ok('Lemonldap::NG::Common::Cli');
use_ok('Lemonldap::NG::Manager::Cli'); use_ok('Lemonldap::NG::Manager::Cli');
@ -77,6 +77,14 @@ combined_like(
'"Force cfgNum" OK' '"Force cfgNum" OK'
); );
# Test 'set' command with nohistory
@cmd = qw(-yes 1 -force 1 -nohistory 1 set cookieName test);
combined_like(
sub { llclient->run(@cmd) },
qr#cfgNum forced with 6#s,
'"Force cfgNum" OK'
);
# Test 'info' command with force # Test 'info' command with force
@cmd = qw(info); @cmd = qw(info);
combined_like( combined_like(

View File

@ -118,7 +118,8 @@ sub getNodes {
my @res; my @res;
foreach my $k (@$tree) { foreach my $k (@$tree) {
if ( ref($k) ) { if ( ref($k) ) {
push @res, $k->{title}, @{ getNodes( $k->{nodes} ) }; push @res, $k->{title}, @{ getNodes( $k->{nodes} ) },
@{ getNodes( $k->{nodes_cond} ) };
} }
else { else {
push @res, $k; push @res, $k;

View File

@ -440,6 +440,74 @@ sub display {
else { else {
my $form = $self->_authentication->getForm($req); my $form = $self->_authentication->getForm($req);
$filter->{LOGIN_FORM} = $form; $filter->{LOGIN_FORM} = $form;
# TODO
# START "MAY BE BROKEN"
my $plugin =
$self->loadedModules->{
"Lemonldap::NG::Portal::Plugins::FindUser"};
my $fields = [];
if ( $plugin
&& $self->conf->{findUser}
&& $self->conf->{impersonationRule}
&& $self->conf->{findUserSearchingAttributes} )
{
$login = $req->data->{findUser};
$fields = $plugin->buildForm();
}
# Authentication loop
if ( $self->conf->{authentication} eq 'Choice' )
# and my $authLoop = $self->_buildAuthLoop($req) )
{
%templateParams = (
%templateParams,
CHOICE_PARAM => $self->conf->{authChoiceParam},
CHOICE_VALUE => $req->data->{_authChoice},
DISPLAY_TAB => scalar( $req->param("tab") ),
DISPLAY_FORM => 0,
DISPLAY_OPENID_FORM => 0,
DISPLAY_YUBIKEY_FORM => 0,
DISPLAY_FINDUSER => scalar @$fields,
FIELDS => $fields,
SPOOFID => $login
);
}
# Choose what form to display if not in a loop
else {
my $displayType =
eval { $self->_authentication->getDisplayType($req) }
|| 'logo';
$self->logger->debug("Display type $displayType");
%templateParams = (
%templateParams,
DISPLAY_FORM => $displayType =~ /\bstandardform\b/ ? 1
: 0,
DISPLAY_OPENID_FORM => $displayType =~ /\bopenidform\b/ ? 1
: 0,
DISPLAY_YUBIKEY_FORM => $displayType =~ /\byubikeyform\b/
? 1
: 0,
DISPLAY_SSL_FORM => $displayType =~ /sslform/ ? 1 : 0,
DISPLAY_GPG_FORM => $displayType =~ /gpgform/ ? 1 : 0,
DISPLAY_LOGO_FORM => $displayType eq "logo" ? 1 : 0,
DISPLAY_FINDUSER => scalar @$fields,
module => $displayType eq "logo"
? $self->getModule( $req, 'auth' )
: "",
AUTH_LOOP => [],
PORTAL_URL =>
( $displayType eq "logo" ? $self->conf->{portal} : 0 ),
MSG => $req->info(),
FIELDS => $fields,
SPOOFID => $login
);
}
# END "MAY BE BROKEN"
} }
} }

View File

@ -1,4 +1,5 @@
<TMPL_IF NAME="DISPLAY_FINDUSER"> <TMPL_IF NAME="DISPLAY_FINDUSER">
<div id="finduserModal" class="modal fade" tabindex="-1" role="dialog"> <div id="finduserModal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
@ -50,4 +51,4 @@
</div> </div>
</div> </div>
</div> </div>
</TMPL_IF> </TMPL_IF>