UNPKG

mecano

Version:

Common functions for system deployment.

107 lines (103 loc) 3.16 kB
// Generated by CoffeeScript 1.11.1 var misc, string; module.exports = function(options, callback) { var do_diff, do_end, do_get_indexes, do_getdn, do_save, modified; modified = false; do_getdn = (function(_this) { return function() { if (options.hdb_dn) { return do_get_indexes(); } options.log({ message: "Get DN of the HDB to modify", level: 'DEBUG', module: 'mecano/ldap/index' }); return _this.execute({ cmd: "ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config \"(olcSuffix= " + options.suffix + ")\" dn 2>/dev/null | egrep '^dn' | sed -e 's/^dn:\\s*olcDatabase=\\(.*\\)$/\\1/g'" }, function(err, _, hdb_dn) { if (err) { return callback(err); } options.hdb_dn = hdb_dn.trim(); return do_get_indexes(); }); }; })(this); do_get_indexes = (function(_this) { return function() { options.log({ message: "List all indexes of the directory", level: 'DEBUG', module: 'mecano/ldap/index' }); return _this.execute({ cmd: "ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase=" + options.hdb_dn + " \"(olcDbIndex=*)\" olcDbIndex" }, function(err, _, stdout) { var attrlist, i, indexes, indices, len, line, match, ref; if (err) { return callback(err); } indexes = {}; ref = string.lines(stdout); for (i = 0, len = ref.length; i < len; i++) { line = ref[i]; if (!(match = /^olcDbIndex:\s+(.*)\s+(.*)/.exec(line))) { continue; } _ = match[0], attrlist = match[1], indices = match[2]; indexes[attrlist] = indices; } return do_diff(indexes); }); }; })(this); do_diff = function(orgp) { var add, k, modify, ref, v; add = {}; modify = {}; ref = options.indexes; for (k in ref) { v = ref[k]; if (orgp[k] == null) { add[k] = v; } else if (v !== orgp[k]) { modify[k] = [v, orgp[k]]; } } if (Object.keys(add).length || Object.keys(modify).length) { return do_save(add, modify); } else { return do_end(); } }; do_save = (function(_this) { return function(add, modify) { var cmd, k, v; cmd = []; for (k in add) { v = add[k]; cmd.push("add: olcDbIndex\nolcDbIndex: " + k + " " + v); } for (k in modify) { v = modify[k]; cmd.push("delete: olcDbIndex\nolcDbIndex: " + k + " " + v[1] + "\n-\nadd: olcDbIndex\nolcDbIndex: " + k + " " + v[0]); } return _this.execute({ cmd: "ldapmodify -Y EXTERNAL -H ldapi:/// <<-EOF\ndn: olcDatabase=" + options.hdb_dn + "\nchangetype: modify\n" + (cmd.join('\n-\n')) + "\nEOF" }, function(err, _, stdout) { if (err) { return callback(err); } modified = true; return do_end(); }); }; })(this); do_end = function(err) { return callback(err, modified); }; return do_getdn(); }; misc = require('../misc'); string = require('../misc/string');