mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-23 02:19:07 +01:00
LScli: fix handling LDAP servers with configured subDn
In case of LDAP server with configured subDn, always select a subDn, even if user didn't make it with --sub-dn parameter. Futhermore, in BASH autocompletion, autocomplete LSobject types with only available ones in current subDn.
This commit is contained in:
parent
5e3071d24c
commit
5bbe076e23
1 changed files with 65 additions and 18 deletions
|
@ -135,6 +135,7 @@ class LScli extends LSlog_staticLoggerClass {
|
||||||
$console_log = false;
|
$console_log = false;
|
||||||
$quiet = false;
|
$quiet = false;
|
||||||
$ldap_server_id = false;
|
$ldap_server_id = false;
|
||||||
|
$ldap_server_subDn = false;
|
||||||
$command = false;
|
$command = false;
|
||||||
$command_args = array();
|
$command_args = array();
|
||||||
self :: log_debug("handle_args :\n".varDump($argv));
|
self :: log_debug("handle_args :\n".varDump($argv));
|
||||||
|
@ -176,10 +177,7 @@ class LScli extends LSlog_staticLoggerClass {
|
||||||
break;
|
break;
|
||||||
case '--sub-dn':
|
case '--sub-dn':
|
||||||
$i++;
|
$i++;
|
||||||
$subDn = $argv[$i];
|
$ldap_server_subDn = $argv[$i];
|
||||||
self :: need_ldap_con();
|
|
||||||
if(!LSsession :: setSubDn($subDn))
|
|
||||||
self :: usage("Fail to select sub DN '$subDn'.");
|
|
||||||
break;
|
break;
|
||||||
case '-L':
|
case '-L':
|
||||||
case '--load-class':
|
case '--load-class':
|
||||||
|
@ -223,6 +221,24 @@ class LScli extends LSlog_staticLoggerClass {
|
||||||
// - otherwise: log only errors
|
// - otherwise: log only errors
|
||||||
LSlog :: logOnConsole(($console_log?$log_level:'ERROR'));
|
LSlog :: logOnConsole(($console_log?$log_level:'ERROR'));
|
||||||
|
|
||||||
|
// If no LDAP server subDn selected, check if current LDAP server need it,
|
||||||
|
// and select the first one
|
||||||
|
if (!$ldap_server_subDn) {
|
||||||
|
self :: need_ldap_con();
|
||||||
|
$subDns = LSsession :: getSubDnLdapServer();
|
||||||
|
if (is_array($subDns)) {
|
||||||
|
asort($subDns);
|
||||||
|
$ldap_server_subDn = key($subDns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select LDAP server subDn (if need)
|
||||||
|
if ($ldap_server_subDn) {
|
||||||
|
self :: need_ldap_con();
|
||||||
|
if(!LSsession :: setSubDn($ldap_server_subDn))
|
||||||
|
self :: usage("Fail to select sub DN '$ldap_server_subDn'.");
|
||||||
|
}
|
||||||
|
|
||||||
if (!$command) {
|
if (!$command) {
|
||||||
self :: log_debug("LScli :: handle_args() : no detected command => show usage");
|
self :: log_debug("LScli :: handle_args() : no detected command => show usage");
|
||||||
self :: usage();
|
self :: usage();
|
||||||
|
@ -422,7 +438,17 @@ class LScli extends LSlog_staticLoggerClass {
|
||||||
self :: unquote_word($ldap_server_id);
|
self :: unquote_word($ldap_server_id);
|
||||||
if(!LSsession :: setLdapServer($ldap_server_id))
|
if(!LSsession :: setLdapServer($ldap_server_id))
|
||||||
self :: usage("Fail to select LDAP server #$ldap_server_id.");
|
self :: usage("Fail to select LDAP server #$ldap_server_id.");
|
||||||
$opts[] = '--sub-dn';
|
|
||||||
|
// Check if LDAP server has subDn and select the first one if true
|
||||||
|
self :: need_ldap_con();
|
||||||
|
$subDns = LSsession :: getSubDnLdapServer();
|
||||||
|
if (is_array($subDns)) {
|
||||||
|
asort($subDns);
|
||||||
|
$subDn = key($subDns);
|
||||||
|
if(!LSsession :: setSubDn($subDn))
|
||||||
|
self :: usage("Fail to select sub DN '$subDn'.");
|
||||||
|
$opts[] = '--sub-dn';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '--sub-dn':
|
case '--sub-dn':
|
||||||
|
@ -622,25 +648,46 @@ class LScli extends LSlog_staticLoggerClass {
|
||||||
* @retval array List of available options
|
* @retval array List of available options
|
||||||
**/
|
**/
|
||||||
public static function autocomplete_LSobject_types($prefix='', $case_sensitive=true, $quote_char='') {
|
public static function autocomplete_LSobject_types($prefix='', $case_sensitive=true, $quote_char='') {
|
||||||
$types = LSconfig :: get('LSaccess', array(), null, LSsession :: $ldapServer);
|
|
||||||
$subdn_config = LSconfig :: get('subDn', null, null, LSsession :: $ldapServer);
|
$subdn_config = LSconfig :: get('subDn', null, null, LSsession :: $ldapServer);
|
||||||
if (is_array($subdn_config)) {
|
if (is_array($subdn_config)) {
|
||||||
foreach ($subdn_config as $key => $value) {
|
$types = array();
|
||||||
if (!is_array($value)) continue;
|
$currentSubDn = LSsession :: getTopDn();
|
||||||
if ($key == 'LSobject') {
|
foreach($subdn_config as $name => $config) {
|
||||||
foreach ($value as $subDnObjType => $objConfig)
|
if ($name=='LSobject') {
|
||||||
if (is_array($objConfig) && isset($objConfig['LSobjects']) && is_array($objConfig['LSobjects']))
|
self :: need_ldap_con();
|
||||||
foreach ($objConfig['LSobjects'] as $type)
|
if (is_array($config)) {
|
||||||
if (!in_array($type, $types))
|
foreach($config as $objectType => $objectConf) {
|
||||||
$types[] = $type;
|
if (LSsession :: loadLSobject($objectType)) {
|
||||||
|
if ($subdnobject = new $objectType()) {
|
||||||
|
$tbl = $subdnobject -> getSelectArray(NULL,LSsession::getRootDn(),NULL,NULL,false,NULL,array('onlyAccessible' => False));
|
||||||
|
if (is_array($tbl) && array_key_exists($currentSubDn, $tbl)) {
|
||||||
|
if (is_array($objectConf['LSobjects'])) {
|
||||||
|
foreach($objectConf['LSobjects'] as $type) {
|
||||||
|
if (!in_array($type, $types))
|
||||||
|
$types[] = $type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (isset($value['LSobjects']) && is_array($value['LSobjects'])) {
|
else if (isset($config['dn']) && $config['dn'] == $currentSubDn) {
|
||||||
foreach ($value['LSobjects'] as $type)
|
if (is_array($config['LSobjects'])) {
|
||||||
if (!in_array($type, $types))
|
foreach($config['LSobjects'] as $type) {
|
||||||
$types[] = $type;
|
if (!in_array($type, $types))
|
||||||
|
$types[] = $type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$types = LSconfig :: get('LSaccess', array(), null, LSsession :: $ldapServer);
|
||||||
|
}
|
||||||
return self :: autocomplete_opts($types, $prefix, $case_sensitive, $quote_char);
|
return self :: autocomplete_opts($types, $prefix, $case_sensitive, $quote_char);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue