mecano
Version:
Common functions for system deployment.
51 lines (48 loc) • 1.8 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var misc;
module.exports = function(options, callback) {
var cache_name, cmd_addprinc, cmd_getprinc, k, ktadd_options, v;
if (!options.principal) {
return callback(new Error('Property principal is required'));
}
if (!options.password && !options.randkey) {
return callback(new Error('Password or randkey missing'));
}
if (/.*@.*/.test(options.kadmin_principal)) {
if (options.realm == null) {
options.realm = options.kadmin_principal.split('@')[1];
}
}
if (!/^\S+@\S+$/.test(options.principal)) {
options.principal = options.principal + "@" + options.realm;
}
if (options.password_sync == null) {
options.password_sync = false;
}
if (options.kadmin_server == null) {
options.kadmin_server = options.admin_server;
}
cmd_getprinc = misc.kadmin(options, "getprinc " + options.principal);
cmd_addprinc = misc.kadmin(options, options.password ? "addprinc -pw " + options.password + " " + options.principal : "addprinc -randkey " + options.principal);
ktadd_options = {};
for (k in options) {
v = options[k];
ktadd_options[k] = v;
}
ktadd_options["if"] = options.keytab;
cache_name = "/tmp/mecano_" + (Math.random());
this.execute({
retry: 3,
cmd: cmd_addprinc,
unless_exec: cmd_getprinc + " | grep '" + options.principal + "'"
});
this.execute({
retry: 3,
cmd: misc.kadmin(options, "cpw -pw " + options.password + " " + options.principal),
"if": options.password && options.password_sync,
unless_exec: "if ! echo " + options.password + " | kinit '" + options.principal + "' -c '" + cache_name + "'; then exit 1; else kdestroy -c '" + cache_name + "'; fi"
});
this.krb5.ktadd(ktadd_options);
return this.then(callback);
};
misc = require('../misc');