Merge pull request #697 from cloudron-io/ldap_crashfix

Fix crash when LDAP server is unreachable
This commit is contained in:
Jérémie Astori 2016-10-23 10:10:48 -04:00 committed by GitHub
commit 8ec6d969d1

View File

@ -12,7 +12,6 @@ var Helper = require("./helper");
var ldap = require("ldapjs"); var ldap = require("ldapjs");
var manager = null; var manager = null;
var ldapclient = null;
var authFunction = localAuth; var authFunction = localAuth;
module.exports = function() { module.exports = function() {
@ -60,9 +59,6 @@ module.exports = function() {
} }
if (!config.public && (config.ldap || {}).enable) { if (!config.public && (config.ldap || {}).enable) {
ldapclient = ldap.createClient({
url: config.ldap.url
});
authFunction = ldapAuth; authFunction = ldapAuth;
} }
@ -287,12 +283,22 @@ function ldapAuth(client, user, password, callback) {
var userDN = user.replace(/([,\\\/#+<>;"= ])/g, "\\$1"); var userDN = user.replace(/([,\\\/#+<>;"= ])/g, "\\$1");
var bindDN = Helper.config.ldap.primaryKey + "=" + userDN + "," + Helper.config.ldap.baseDN; var bindDN = Helper.config.ldap.primaryKey + "=" + userDN + "," + Helper.config.ldap.baseDN;
var ldapclient = ldap.createClient({
url: Helper.config.ldap.url
});
ldapclient.on("error", function(err) {
log.error("Unable to connect to LDAP server", err);
callback(!err);
});
ldapclient.bind(bindDN, password, function(err) { ldapclient.bind(bindDN, password, function(err) {
if (!err && !client) { if (!err && !client) {
if (!manager.addUser(user, null)) { if (!manager.addUser(user, null)) {
log.error("Unable to create new user", user); log.error("Unable to create new user", user);
} }
} }
ldapclient.unbind();
callback(!err); callback(!err);
}); });
} }