From 4708b61cf46ba9084143283ee5f63dba1d60121a Mon Sep 17 00:00:00 2001 From: Tobias Muellerleile Date: Fri, 15 Mar 2013 13:23:43 +0100 Subject: [PATCH 1/6] Allow changing TLS connection options in client --- docs/client.md | 1 + lib/client/client.js | 3 ++- lib/client/pool.js | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/client.md b/docs/client.md index 77b325b..581bb9e 100644 --- a/docs/client.md +++ b/docs/client.md @@ -31,6 +31,7 @@ client is: ||timeout||How long the client should let operations live for before timing out. Default is Infinity.|| ||connectTimeout||How long the client should wait before timing out on TCP connections. Default is up to the OS.|| ||maxConnections||Whether or not to enable connection pooling, and if so, how many to maintain.|| +||tlsOptions||Additional [options](http://nodejs.org/api/tls.html#tls_tls_connect_port_host_options_callback) passed to the TLS connection layer when connecting via `ldaps://`|| If using connection pooling, you can additionally pass in: diff --git a/lib/client/client.js b/lib/client/client.js index 33af458..0784fc9 100644 --- a/lib/client/client.js +++ b/lib/client/client.js @@ -231,6 +231,7 @@ function Client(options) { this.log = options.log.child({clazz: 'Client'}, true); this.port = _url ? _url.port : false; this.secure = _url ? _url.secure : false; + this.tlsOptions = options.tlsOptions; this.socketPath = options.socketPath || false; this.timeout = parseInt((options.timeout || 0), 10); this.url = _url; @@ -721,7 +722,7 @@ Client.prototype._connect = function _connect() { self.emit('connect', socket); } - socket = proto.connect((this.port || this.socketPath), this.host); + socket = proto.connect((this.port || this.socketPath), this.host, this.secure ? this.tlsOptions : null); socket.once('connect', onConnect); socket.once('secureConnect', onConnect); diff --git a/lib/client/pool.js b/lib/client/pool.js index e6e947c..ea770b6 100644 --- a/lib/client/pool.js +++ b/lib/client/pool.js @@ -115,7 +115,8 @@ function ClientPool(options) { log: options.log, socketPath: options.socketPath, timeout: (options.timeout || 0), - url: options.url + url: options.url, + tlsOptions: options.tlsOptions }; this.pool = createPool(options); } From 0bd66caae92e0383179177a1134b0012f8526b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20F=2E=20Romaniello?= Date: Wed, 10 Apr 2013 10:17:23 -0300 Subject: [PATCH 2/6] Fixes #127 - socket is closed issue with pools --- lib/client/client.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/client/client.js b/lib/client/client.js index 0784fc9..9dda196 100644 --- a/lib/client/client.js +++ b/lib/client/client.js @@ -691,6 +691,9 @@ Client.prototype.unbind = function unbind(callback) { return callback(); var req = new UnbindRequest(); + if (this.socket.listeners('error').length === 0) { + this.socket.once('error', function(){}); + } return this._send(req, 'unbind', null, callback); }; From 25ffb858ce9f7d613ba3adbc1a39baba1a1e9b37 Mon Sep 17 00:00:00 2001 From: "Pedro P. Candel" Date: Wed, 24 Apr 2013 20:45:19 +0200 Subject: [PATCH 3/6] We rather replace log4js with bunyan for binaries --- bin/ldapjs-add | 17 +++++++++++------ bin/ldapjs-compare | 17 +++++++++++------ bin/ldapjs-delete | 17 +++++++++++------ bin/ldapjs-modify | 17 +++++++++++------ bin/ldapjs-search | 16 +++++++++++----- 5 files changed, 55 insertions(+), 29 deletions(-) diff --git a/bin/ldapjs-add b/bin/ldapjs-add index ebd1507..f0e4a9c 100755 --- a/bin/ldapjs-add +++ b/bin/ldapjs-add @@ -9,13 +9,11 @@ var url = require('url'); var nopt = require('nopt'); var ldap = require('../lib/index'); - +var Logger = require('bunyan'); ///--- Globals -var log4js = ldap.log4js; - nopt.typeDefs.DN = { type: ldap.DN, validate: function(data, k, val) { @@ -78,7 +76,7 @@ function perror(err) { ///--- Mainline -log4js.setGlobalLogLevel('INFO'); +var logLevel = 'info'; var parsed; try { @@ -112,7 +110,7 @@ if (!parsed.file) usage(1, 'either -f or stdin must be used for adding objects'); if (parsed.debug) - log4js.setGlobalLogLevel(parsed.debug > 1 ? 'TRACE' : 'DEBUG'); + logLevel = (parsed.debug > 1 ? 'trace' : 'debug'); if (!parsed.url) parsed.url = 'ldap://127.0.0.1:389'; if (!parsed.binddn) @@ -120,9 +118,16 @@ if (!parsed.binddn) if (!parsed.password) parsed.password = ''; +var log = new Logger({ + name: 'ldapjs', + component: 'client', + stream: process.stderr, + level: logLevel +}); + var client = ldap.createClient({ url: parsed.url, - log4js: log4js + log: log }); client.on('error', function(err) { diff --git a/bin/ldapjs-compare b/bin/ldapjs-compare index 9a961f1..95cefae 100755 --- a/bin/ldapjs-compare +++ b/bin/ldapjs-compare @@ -9,13 +9,11 @@ var url = require('url'); var nopt = require('nopt'); var ldap = require('../lib/index'); - +var Logger = require('bunyan'); ///--- Globals -var log4js = ldap.log4js; - nopt.typeDefs.DN = { type: ldap.DN, validate: function(data, k, val) { @@ -82,7 +80,7 @@ function perror(err) { ///--- Mainline -log4js.setGlobalLogLevel('INFO'); +var logLevel = 'info'; var parsed; try { @@ -108,7 +106,7 @@ if (!parsed.attribute || typeof(parsed.value) !== 'string') usage(1, 'attribute and value required'); if (parsed.debug) - log4js.setGlobalLogLevel(parsed.debug > 1 ? 'TRACE' : 'DEBUG'); + logLevel = (parsed.debug > 1 ? 'trace' : 'debug'); if (!parsed.url) parsed.url = 'ldap://127.0.0.1:389'; if (!parsed.binddn) @@ -116,9 +114,16 @@ if (!parsed.binddn) if (!parsed.password) parsed.password = ''; +var log = new Logger({ + name: 'ldapjs', + component: 'client', + stream: process.stderr, + level: logLevel +}); + var client = ldap.createClient({ url: parsed.url, - log4js: log4js + log: log }); client.on('error', function(err) { diff --git a/bin/ldapjs-delete b/bin/ldapjs-delete index d5afa70..8b2ad53 100755 --- a/bin/ldapjs-delete +++ b/bin/ldapjs-delete @@ -9,13 +9,11 @@ var url = require('url'); var nopt = require('nopt'); var ldap = require('../lib/index'); - +var Logger = require('bunyan'); ///--- Globals -var log4js = ldap.log4js; - nopt.typeDefs.DN = { type: ldap.DN, validate: function(data, k, val) { @@ -76,7 +74,7 @@ function perror(err) { ///--- Mainline -log4js.setGlobalLogLevel('INFO'); +var logLevel = 'info'; var parsed; try { @@ -98,7 +96,7 @@ try { } if (parsed.debug) - log4js.setGlobalLogLevel(parsed.debug > 1 ? 'TRACE' : 'DEBUG'); + logLevel = (parsed.debug > 1 ? 'trace' : 'debug'); if (!parsed.url) parsed.url = 'ldap://127.0.0.1:389'; if (!parsed.binddn) @@ -106,9 +104,16 @@ if (!parsed.binddn) if (!parsed.password) parsed.password = ''; +var log = new Logger({ + name: 'ldapjs', + component: 'client', + stream: process.stderr, + level: logLevel +}); + var client = ldap.createClient({ url: parsed.url, - log4js: log4js + log: log }); client.on('error', function(err) { diff --git a/bin/ldapjs-modify b/bin/ldapjs-modify index cca7338..a216dd5 100755 --- a/bin/ldapjs-modify +++ b/bin/ldapjs-modify @@ -9,13 +9,11 @@ var url = require('url'); var nopt = require('nopt'); var ldap = require('../lib/index'); - +var Logger = require('bunyan'); ///--- Globals -var log4js = ldap.log4js; - nopt.typeDefs.DN = { type: ldap.DN, validate: function(data, k, val) { @@ -84,7 +82,7 @@ function perror(err) { ///--- Mainline -log4js.setGlobalLogLevel('INFO'); +var logLevel = 'info'; var parsed; try { @@ -112,7 +110,7 @@ if (!parsed.attribute || !Array.isArray(parsed.value)) usage(1, 'attribute and value required'); if (parsed.debug) - log4js.setGlobalLogLevel(parsed.debug > 1 ? 'TRACE' : 'DEBUG'); + logLevel = (parsed.debug > 1 ? 'trace' : 'debug'); if (!parsed.url) parsed.url = 'ldap://127.0.0.1:389'; if (!parsed.binddn) @@ -120,9 +118,16 @@ if (!parsed.binddn) if (!parsed.password) parsed.password = ''; +var log = new Logger({ + name: 'ldapjs', + component: 'client', + stream: process.stderr, + level: logLevel +}); + var client = ldap.createClient({ url: parsed.url, - log4js: log4js + log: log }); client.on('error', function(err) { diff --git a/bin/ldapjs-search b/bin/ldapjs-search index bfd854c..15a798a 100755 --- a/bin/ldapjs-search +++ b/bin/ldapjs-search @@ -8,13 +8,11 @@ var url = require('url'); var nopt = require('nopt'); var ldap = require('../lib/index'); - +var Logger = require('bunyan'); ///--- Globals -var log4js = ldap.log4js; - nopt.typeDefs.DN = { type: ldap.DN, validate: function(data, k, val) { @@ -114,9 +112,10 @@ try { usage(1, e.message); } +var logLevel = 'info'; if (parsed.debug) - log4js.setGlobalLogLevel(parsed.debug > 1 ? 'TRACE' : 'DEBUG'); + logLevel = (parsed.debug > 1 ? 'trace' : 'debug'); if (!parsed.url) parsed.url = 'ldap://127.0.0.1:389'; if (!parsed.binddn) @@ -130,9 +129,16 @@ if (!parsed.control) if (!parsed.persistent) parsed.persistent = false; +var log = new Logger({ + name: 'ldapjs', + component: 'client', + stream: process.stderr, + level: logLevel +}); + var client = ldap.createClient({ url: parsed.url, - log4js: log4js, + log: log, timeout: parsed.timeout || false }); From a796c3efbffddda96e53f416072bf704e26922a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Palaz=C3=B3n=20Candel?= Date: Tue, 30 Apr 2013 21:16:45 +0300 Subject: [PATCH 4/6] remove listeners on the right object (s/client/res/) --- lib/client/pool.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/client/pool.js b/lib/client/pool.js index ea770b6..aa2c601 100644 --- a/lib/client/pool.js +++ b/lib/client/pool.js @@ -76,12 +76,12 @@ function createPool(options) { return callback(err); res.on('error', function (e) { - client.removeAllListeners('end'); + res.removeAllListeners('end'); callback(e); }); res.on('end', function () { - client.removeAllListeners('error'); + res.removeAllListeners('error'); callback(null); }); From 747fa7646eafd3cc52027b742058b298f33e6a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Palaz=C3=B3n=20Candel?= Date: Tue, 30 Apr 2013 21:25:30 +0300 Subject: [PATCH 5/6] Version bump. Updated bunyan to 0.21.1 --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f3351fb..a4afaeb 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,13 @@ "Mathieu Lecarme >", "Trent Mick ", "Yunong Xiao ", - "Denis Vuyka " + "Denis Vuyka ", + "Pedro Palazón " ], "name": "ldapjs", "homepage": "http://ldapjs.org", "description": "LDAP client and server APIs", - "version": "0.6.2", + "version": "0.6.3", "repository": { "type": "git", "url": "git://github.com/mcavage/node-ldapjs.git" @@ -28,7 +29,7 @@ "asn1": "0.1.11", "assert-plus": "0.1.2", "buffertools": "1.1.0", - "bunyan": "0.18.2", + "bunyan": "0.21.1", "dtrace-provider": "0.2.8", "nopt": "2.1.1", "pooling": "0.4.1" From 4097a777e9ded774760944fe341be252f4adf8c6 Mon Sep 17 00:00:00 2001 From: "Pedro P. Candel" Date: Tue, 30 Apr 2013 20:35:38 +0200 Subject: [PATCH 6/6] Upgrading pooling version due to bunyan update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a4afaeb..2893a88 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "bunyan": "0.21.1", "dtrace-provider": "0.2.8", "nopt": "2.1.1", - "pooling": "0.4.1" + "pooling": "0.4.4" }, "devDependencies": { "tap": "0.4.0",