2013-01-21 13:43:06 +01:00
|
|
|
var pacs = pac.search();
|
2013-01-23 17:07:31 +01:00
|
|
|
var hive = 'h99';
|
2013-01-21 13:43:06 +01:00
|
|
|
var password = 'p!' + (new String(Math.random())).substring(2,16) + '!';
|
2013-01-23 17:07:31 +01:00
|
|
|
function runbash(cmd) {
|
|
|
|
var runtime = java.lang.Runtime.getRuntime();
|
|
|
|
runtime.exec(["bash", "-c", cmd]);
|
|
|
|
}
|
|
|
|
function mysqldump(pac, db) {
|
|
|
|
var dump = "/home/pacs/" + pac + "/.bak/mysql-" + db + ".dmp.gz";
|
|
|
|
var cmd = "mysqldump --create-options --flush-logs --force --quote-names --quick --single-transaction "
|
|
|
|
+ db + "|gzip --best|secat --user=" + pac + " --group=" + pac + " --umask=007 --output=" + dump;
|
|
|
|
runbash(cmd);
|
|
|
|
}
|
|
|
|
function pgsqldump(pac, db) {
|
|
|
|
var dump = "/home/pacs/" + pac + "/.bak/pgsql-" + db + ".dmp.gz";
|
|
|
|
var cmd = "export PGUSER=postgres; pg_dump --disable-triggers --oids --compress=0 --format=c "
|
|
|
|
+ db + "|gzip --best|secat --user=" + pac + " --group=" + pac + " --umask=007 --output=" + dump;
|
|
|
|
runbash(cmd);
|
|
|
|
}
|
|
|
|
function crontabdump(pac, user) {
|
|
|
|
var dump = "/home/pacs/" + pac + "/.bak/crontab-" + user + ".gz";
|
|
|
|
var cmd = "crontab -u " + user + " -l"
|
|
|
|
+ "|gzip --best|secat --user=" + pac + " --group=" + pac + " --umask=007 --output=" + dump;
|
|
|
|
runbash(cmd);
|
|
|
|
}
|
|
|
|
function shadowdump(pac) {
|
|
|
|
var dump = "/home/pacs/" + pac + "/.bak/shadow.gz";
|
|
|
|
var cmd = "grep -e '^" + pac + "' /etc/shadow|cut -f1-2 -d':' "
|
|
|
|
+ "|gzip --best|secat --user=" + pac + " --group=" + pac + " --umask=007 --output=" + dump;
|
|
|
|
runbash(cmd);
|
|
|
|
}
|
2013-03-16 16:09:01 +01:00
|
|
|
function mysqlaclsdump(pac) {
|
2013-04-23 22:30:06 +02:00
|
|
|
var dump = "/home/pacs/" + pac + "/.bak/mysql_passwd";
|
2013-03-16 16:09:01 +01:00
|
|
|
var cmd = "mysqldump --no-create-db --skip-opt --no-create-info --replace --where=\"user like '" + pac + "%'\" mysql --tables user > " + dump
|
2013-06-18 16:20:49 +02:00
|
|
|
+ " && mysqldump --no-create-db --skip-opt --no-create-info --replace --where=\"db like '" + pac + "%'\" mysql --tables db tables_priv proc >>" + dump
|
|
|
|
+ " && chown " + pac + ":" + pac + " " + dump;
|
2013-01-23 17:07:31 +01:00
|
|
|
runbash(cmd);
|
2013-03-16 16:09:01 +01:00
|
|
|
}
|
2013-01-23 17:07:31 +01:00
|
|
|
function pgsqlpasswddump(pac) {
|
|
|
|
var dump = "/home/pacs/" + pac + "/.bak/pgsql_passwd.gz";
|
|
|
|
var cmd = "export PGUSER=postgres; pg_dumpall -r | grep ^ALTER | grep " + pac
|
|
|
|
+ "|gzip --best|secat --user=" + pac + " --group=" + pac + " --umask=007 --output=" + dump;
|
|
|
|
runbash(cmd);
|
|
|
|
}
|
2013-01-21 13:43:06 +01:00
|
|
|
if (pacs.length == 1 && hive != 'undef') {
|
|
|
|
var pacname = pacs[0]['name'];
|
|
|
|
var file = new java.io.FileWriter(pacname + '_dump.js');
|
|
|
|
// Pac
|
|
|
|
file.write('pac.add({set:{\n');
|
|
|
|
file.write('name: "' + pacs[0]['name'] + '",\n');
|
|
|
|
file.write('curinetaddr: "' + pacs[0]['curinetaddr'] + '",\n');
|
|
|
|
file.write('customer: "' + pacs[0]['customer'] + '",\n');
|
|
|
|
file.write('basepac: "' + pacs[0]['basepac'] + '",\n');
|
|
|
|
file.write('hive: "' + hive + '",\n');
|
|
|
|
file.write('password: "' + password + '"\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
file.write('pac.update({where:{\n');
|
|
|
|
file.write('name: "' + pacs[0]['name'] + '"\n');
|
|
|
|
file.write('},set:{\n');
|
|
|
|
file.write('components: {\n');
|
|
|
|
for (var opt in pacs[0]['components']) {
|
|
|
|
file.write(' ' + opt + ': "' + pacs[0]['components'][opt] + '",\n');
|
|
|
|
}
|
|
|
|
file.write('}}});\n');
|
|
|
|
// User
|
|
|
|
var unixusers = user.search();
|
|
|
|
for (idx=0; idx<unixusers.length; idx++) {
|
|
|
|
if (unixusers[idx]['name'].length() > 5) {
|
|
|
|
file.write('user.add({set:{\n');
|
|
|
|
file.write('name: "' + unixusers[idx]['name'] + '",\n');
|
|
|
|
file.write('shell: "' + unixusers[idx]['shell'] + '",\n');
|
|
|
|
file.write('userid: "' + unixusers[idx]['userid'] + '",\n');
|
|
|
|
file.write('comment: "' + unixusers[idx]['comment'] + '",\n');
|
|
|
|
file.write('homedir: "' + unixusers[idx]['homedir'] + '",\n');
|
|
|
|
file.write('quota_hardlimit: "' + unixusers[idx]['quota_hardlimit'] + '",\n');
|
|
|
|
file.write('quota_softlimit: "' + unixusers[idx]['quota_softlimit'] + '",\n');
|
|
|
|
file.write('password: "' + password + '"\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
}
|
2013-01-23 17:07:31 +01:00
|
|
|
crontabdump(pacname, unixusers[idx]['name']);
|
2013-01-21 13:43:06 +01:00
|
|
|
}
|
|
|
|
// Domain
|
|
|
|
var domains = domain.search();
|
|
|
|
for (idx=0; idx<domains.length; idx++) {
|
2013-01-30 18:04:17 +01:00
|
|
|
if ( ! (domains[idx]['name'] == pacname + '.hostsharing.net')) {
|
2013-01-21 13:43:06 +01:00
|
|
|
file.write('domain.add({set:{\n');
|
|
|
|
file.write('name: "' + domains[idx]['name'] + '",\n');
|
2013-01-30 18:04:17 +01:00
|
|
|
file.write('user: "' + domains[idx]['user'] + '"\n');
|
2013-01-21 13:43:06 +01:00
|
|
|
file.write('}});\n');
|
|
|
|
}
|
2013-01-30 18:04:17 +01:00
|
|
|
file.write('domain.update({where:{\n');
|
|
|
|
file.write('name: "' + domains[idx]['name'] + '"\n');
|
|
|
|
file.write('},set:{\n');
|
|
|
|
file.write('domainoptions: [\n');
|
|
|
|
if (domains[idx]['domainoptions']) {
|
|
|
|
for (jdx=0; jdx<domains[idx]['domainoptions'].length; jdx++) {
|
|
|
|
file.write(' "' + domains[idx]['domainoptions'][jdx] + '",\n');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.write(' ]\n');
|
|
|
|
file.write('}});\n');
|
2013-01-21 13:43:06 +01:00
|
|
|
}
|
|
|
|
// Alias
|
|
|
|
var aliases = emailalias.search();
|
|
|
|
for (idx=0; idx<aliases.length; idx++) {
|
|
|
|
file.write('emailalias.add({set:{\n');
|
|
|
|
file.write('name: "' + aliases[idx]['name'] + '",\n');
|
|
|
|
file.write('target: [\n');
|
|
|
|
if (aliases[idx]['target']) {
|
|
|
|
for (jdx=0; jdx<aliases[idx]['target'].length; jdx++) {
|
|
|
|
file.write(' "' + aliases[idx]['target'][jdx] + '",\n');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.write(' ]\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
}
|
|
|
|
// E-Mail Address
|
|
|
|
var addresses = emailaddress.search();
|
|
|
|
for (idx=0; idx<addresses.length; idx++) {
|
|
|
|
if (addresses[idx]['domain'] == pacname + '.hostsharing.net') {
|
|
|
|
file.write('emailaddress.update({where:{\n');
|
|
|
|
file.write('localpart: "' + addresses[idx]['localpart'] + '",\n');
|
|
|
|
file.write('domain: "' + addresses[idx]['domain'] + '",\n');
|
|
|
|
if (addresses[idx]['subdomain']) {
|
|
|
|
file.write('subdomain: "' + addresses[idx]['subdomain'] + '":q\n');
|
|
|
|
}
|
|
|
|
file.write('},set:{\n');
|
|
|
|
file.write('target: [\n');
|
|
|
|
if (addresses[idx]['target']) {
|
|
|
|
for (jdx=0; jdx<addresses[idx]['target'].length; jdx++) {
|
2013-03-16 16:09:01 +01:00
|
|
|
file.write(' \'' + addresses[idx]['target'][jdx] + '\',\n');
|
2013-01-21 13:43:06 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
file.write(' ]\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
} else {
|
|
|
|
var locpart = addresses[idx]['localpart'];
|
|
|
|
var subdom = addresses[idx]['subdomain'];
|
|
|
|
if (subdom == null && ('abuse' == locpart || 'postmaster' == locpart || 'webmaster' == locpart)) {
|
|
|
|
file.write('emailaddress.update({where:{\n');
|
|
|
|
file.write('localpart: "' + addresses[idx]['localpart'] + '",\n');
|
|
|
|
file.write('domain: "' + addresses[idx]['domain'] + '",\n');
|
|
|
|
if (addresses[idx]['subdomain']) {
|
|
|
|
file.write('subdomain: "' + addresses[idx]['subdomain'] + '":q\n');
|
|
|
|
}
|
|
|
|
file.write('},set:{\n');
|
|
|
|
file.write('target: [\n');
|
|
|
|
if (addresses[idx]['target']) {
|
|
|
|
for (jdx=0; jdx<addresses[idx]['target'].length; jdx++) {
|
|
|
|
file.write(' "' + addresses[idx]['target'][jdx] + '",\n');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.write(' ]\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
} else {
|
|
|
|
file.write('emailaddress.add({set:{\n');
|
|
|
|
file.write('localpart: "' + addresses[idx]['localpart'] + '",\n');
|
|
|
|
file.write('domain: "' + addresses[idx]['domain'] + '",\n');
|
|
|
|
if (addresses[idx]['subdomain']) {
|
|
|
|
file.write('subdomain: "' + addresses[idx]['subdomain'] + '",\n');
|
|
|
|
}
|
|
|
|
file.write('target: [\n');
|
|
|
|
if (addresses[idx]['target']) {
|
|
|
|
for (jdx=0; jdx<addresses[idx]['target'].length; jdx++) {
|
|
|
|
file.write(' "' + addresses[idx]['target'][jdx] + '",\n');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file.write(' ]\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// PostgreSQL
|
|
|
|
var pguserold = postgresqluser.search();
|
|
|
|
for (idx=0; idx<pguserold.length; idx++) {
|
|
|
|
file.write('postgresqluser.add({set:{\n');
|
|
|
|
file.write('name: "' + pguserold[idx]['name'] + '",\n');
|
|
|
|
file.write('password: "' + password + '"\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
}
|
|
|
|
var pgdbold = postgresqldb.search();
|
|
|
|
for (idx=0; idx<pgdbold.length; idx++) {
|
|
|
|
file.write('postgresqldb.add({set:{\n');
|
|
|
|
file.write('name: "' + pgdbold[idx]['name'] + '",\n');
|
|
|
|
file.write('owner: "' + pgdbold[idx]['owner'] + '",\n');
|
|
|
|
file.write('encoding: "' + pgdbold[idx]['encoding'] + '"\n');
|
|
|
|
file.write('}});\n');
|
2013-01-23 17:07:31 +01:00
|
|
|
pgsqldump(pacname, pgdbold[idx]['name']);
|
2013-01-21 13:43:06 +01:00
|
|
|
}
|
|
|
|
// MySQL
|
|
|
|
var myuserold = mysqluser.search();
|
|
|
|
for (idx=0; idx<myuserold.length; idx++) {
|
|
|
|
file.write('mysqluser.add({set:{\n');
|
|
|
|
file.write('name: "' + myuserold[idx]['name'] + '",\n');
|
|
|
|
file.write('password: "' + password + '"\n');
|
|
|
|
file.write('}});\n');
|
|
|
|
}
|
|
|
|
var mydbold = mysqldb.search();
|
|
|
|
for (idx=0; idx<mydbold.length; idx++) {
|
|
|
|
file.write('mysqldb.add({set:{\n');
|
|
|
|
file.write('name: "' + mydbold[idx]['name'] + '",\n');
|
|
|
|
file.write('owner: "' + mydbold[idx]['owner'] + '",\n');
|
|
|
|
file.write('encoding: "' + mydbold[idx]['encoding'] + '"\n');
|
|
|
|
file.write('}});\n');
|
2013-01-23 17:07:31 +01:00
|
|
|
mysqldump(pacname, mydbold[idx]['name']);
|
2013-01-21 13:43:06 +01:00
|
|
|
}
|
|
|
|
file.close();
|
2013-01-23 17:07:31 +01:00
|
|
|
shadowdump(pacname);
|
2013-03-16 16:09:01 +01:00
|
|
|
mysqlaclsdump(pacname);
|
2013-01-23 17:07:31 +01:00
|
|
|
pgsqlpasswddump(pacname);
|
2013-01-21 13:43:06 +01:00
|
|
|
} else {
|
|
|
|
print('run as pac-owner!\n');
|
2013-04-23 22:30:06 +02:00
|
|
|
}
|