diff --git a/ldap-client/ldap-client-lib.pl b/ldap-client/ldap-client-lib.pl index 88feaddec..d9921eb0e 100644 --- a/ldap-client/ldap-client-lib.pl +++ b/ldap-client/ldap-client-lib.pl @@ -187,10 +187,10 @@ local $uri = &find_svalue("uri", $conf); local ($ldap, $use_ssl, $err); local $ssl = &find_svalue("ssl", $conf); if ($ldap_hosts) { - # Using hosts from module config + # Using hosts from parameter local @hosts = split(/\s+/, $ldap_hosts); - if ($config{'ldap_tls'} ne '') { - $use_ssl = $config{'ldap_tls'}; + if ($ldap_ssl ne '') { + $use_ssl = $ldap_ssl; } else { $use_ssl = $ssl eq 'yes' ? 1 : @@ -201,7 +201,7 @@ if ($ldap_hosts) { ($use_ssl == 1 ? 636 : 389); foreach $host (@hosts) { $ldap = Net::LDAP->new($host, port => $port, - schema => $use_ssl == 2 ? 'ldaps' : 'ldap'); + scheme => $use_ssl == 1 ? 'ldaps' : 'ldap'); if (!$ldap) { $err = &text('ldap_econn', "$host", "$port"); @@ -252,7 +252,7 @@ else { foreach $host (@hosts) { $ldap = Net::LDAP->new($host, port => $port, - schema => $use_ssl == 1 ? 'ldaps' : 'ldap'); + scheme => $use_ssl == 1 ? 'ldaps' : 'ldap'); if (!$ldap) { $err = &text('ldap_econn', "$host", "$port"); diff --git a/ldap-server/config.info b/ldap-server/config.info index bce31edc9..99451f129 100644 --- a/ldap-server/config.info +++ b/ldap-server/config.info @@ -3,7 +3,7 @@ server=LDAP server hostname,3,This system,Remote system port=LDAP server port,3,Detect automatically user=Login for LDAP server,3,Detect automatically pass=Password for LDAP server,3,Detect automatically -ssl=Use TLS encryption with LDAP server?,1,-Detect automatically,1-Yes,0-No +ssl=Use encryption with LDAP server?,1,-Detect automatically,1-Yes,2-Yes TLS,0-No slapd=Full path to OpenLDAP server program,8 config_file=OpenLDAP server configuration file,8 schema_dir=OpenLDAP schema directory,7 diff --git a/ldap-server/ldap-server-lib.pl b/ldap-server/ldap-server-lib.pl index 088c6ae89..00061aaba 100644 --- a/ldap-server/ldap-server-lib.pl +++ b/ldap-server/ldap-server-lib.pl @@ -63,29 +63,23 @@ else { } $ssl = $config{'ssl'}; -# Try to connect -local @ssls = $ssl eq "" ? ( 1, 0 ) : ( $ssl ); +# Call generic LDAP client function to connect +&foreign_require("ldap-client", "ldap-client-lib.pl"); +local @ssls = $ssl eq "" ? ( 1, 2, 0 ) : ( $ssl ); local $ldap; foreach $ssl (@ssls) { - my $sslport = $port ? $port : $ssl ? 636 : 389; - $ldap = Net::LDAP->new($server, port => $sslport, - scheme=>$ssl ? 'ldaps' : 'ldap'); - if (!$ldap) { - # Connection failed .. give up completely - return &text('connect_eldap', "$server", $sslport); + my $sslport = $port ? $port : $ssl == 1 ? 636 : 389; + $ldap = &ldap_client::generic_ldap_connect($server, $sslport, $ssl, + $user, $pass); + if (!ref($ldap)) { + # Failed .. but try again in other SSL mode + if ($ssl == $ssls[$#ssls]) { + return $ldap; + } } } $ldap || return "This can't happen!"; -# Login to server -local $mesg = $pass eq '' ? - $ldap->bind(dn => $user, anonymous => 1) : - $ldap->bind(dn => $user, password => $pass); -if (!$mesg || $mesg->code) { - return &text('connect_elogin', "$server", "$user", - &ldap_error($mesg)); - } - $connect_ldap_db = $ldap; return $ldap; } diff --git a/ldap-server/module.info b/ldap-server/module.info index 4b10a8f32..f56742c1e 100644 --- a/ldap-server/module.info +++ b/ldap-server/module.info @@ -1,6 +1,6 @@ desc=LDAP Server longdesc=Manage the OpenLDAP server and objects in its database -category=servers +category=servers ldap-client perldepends=Net::LDAP desc_ca=Servidor LDAP desc_nl=LDAP Server