#!/usr/bin/env node // -*- mode: js -*- // Copyright 2011 Mark Cavage. All rights reserved. var fs = require('fs'); var path = require('path'); var url = require('url'); var log4js = require('log4js'); var nopt = require('nopt'); var ldap = require('../lib/index'); ///--- Globals nopt.typeDefs.DN = { type: ldap.DN, validate: function(data, k, val) { data[k] = ldap.parseDN(val); } }; var opts = { 'debug': Number, 'binddn': ldap.DN, 'password': String, 'url': url }; var shortOpts = { 'd': ['--debug'], 'D': ['--binddn'], 'w': ['--password'], 'u': ['--url'] }; ///--- Helpers function usage(code, message) { var _opts = ''; Object.keys(shortOpts).forEach(function(k) { if (!Array.isArray(shortOpts[k])) return; var longOpt = shortOpts[k][0].replace('--', ''); var type = opts[longOpt].name || 'string'; if (type && type === 'boolean') type = ''; type = type.toLowerCase(); _opts += ' [--' + longOpt + ' ' + type + ']'; }); _opts += ' DN'; var msg = (message ? message + '\n' : '') + 'usage: ' + path.basename(process.argv[1]) + _opts; process.stderr.write(msg + '\n'); process.exit(code); } function perror(err) { if (parsed.debug) { process.stderr.write(err.stack + '\n'); } else { process.stderr.write(err.message + '\n'); } process.exit(1); } ///--- Mainline log4js.setGlobalLogLevel('INFO'); var parsed; try { parsed = nopt(opts, shortOpts, process.argv, 2); } catch (e) { usage(1, e.toString()); } if (parsed.help) usage(0); if (parsed.argv.remain.length < 1) usage(1, 'DN required'); try { parsed.argv.remain.forEach(function(dn) { ldap.parseDN(dn); }); } catch (e) { usage(1, e.toString()); } if (parsed.debug) log4js.setGlobalLogLevel(parsed.debug > 1 ? 'TRACE' : 'DEBUG'); if (!parsed.url) parsed.url = 'ldap://127.0.0.1:389'; if (!parsed.binddn) parsed.binddn = ''; if (!parsed.password) parsed.password = ''; var client = ldap.createClient({ url: parsed.url, log4js: log4js }); client.on('error', function(err) { perror(err); }); client.bind(parsed.binddn, parsed.password, function(err, res) { if (err) perror(err); var finished = 0; function callback(err) { if (err) perror(err); if (++finished === parsed.argv.remain.length) client.unbind(function () { return; }); } parsed.argv.remain.forEach(function(dn) { client.del(dn, callback); }); });