clean up sqldumpcmd, add ssl
Noah Zalev committed
May 1, 2021 at 15:08 UTC
e21077b06444355fd7b3cc3aa54a250e277a3a26
1 file changed
+37
-20
db.js
+37
-20
@@ -1579,6 +1579,37 @@ module.exports.CreateDB = function (parent, func) {
1579
return r;
1580
}
1581
1582
+ function buildSqlDumpCommand() {
1583
+ var props = (obj.databaseType == 4) ? parent.args.mariadb : parent.args.mysql;
1584
+
1585
+ var mysqldumpPath = 'mysqldump';
1586
+ if (parent.config.settings.autobackup && parent.config.settings.autobackup.mysqldumppath) {
1587
+ mysqldumpPath = parent.config.settings.autobackup.mysqldumppath;
1588
+ }
1589
+
1590
+ var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\'';
1591
+ // Windows will treat ' as part of the pw. Linux/Unix requires it to escape.
1592
+ cmd += (parent.platform == 'win32') ? ' --password=\"' + props.password + '\"' : ' --password=\'' + props.password + '\'';
1593
+ if (props.host) { cmd += ' -h ' + props.host; }
1594
+ if (props.port) { cmd += ' -P ' + props.port; }
1595
+
1596
+ // SSL options different on mariadb/mysql
1597
+ var sslOptions = '';
1598
+ if (obj.databaseType == 4) {
1599
+ if (props.ssl) sslOptions = ' --ssl';
1600
+ if (props.ssl.cacertpath) sslOptions = ' --ssl-verify-server-cert --ssl-ca=' + props.ssl.cacertpath;
1601
+ } else {
1602
+ if (props.ssl) sslOptions = ' --ssl-mode=required';
1603
+ if (props.ssl.cacertpath) sslOptions = ' --ssl-mode=verify_identity --ssl-ca=' + props.ssl.cacertpath;
1604
+ }
1605
+ cmd += sslOptions;
1606
+
1607
+ var dbname = (props.database) ? props.database : 'meshcentral';
1608
+ cmd += ' ' + dbname
1609
+
1610
+ return cmd;
1611
+ }
1612
+
1613
// Check that the server is capable of performing a backup
1614
obj.checkBackupCapability = function (func) {
1615
if ((parent.config.settings.autobackup == null) || (parent.config.settings.autobackup == false)) { func(); }
@@ -1612,16 +1643,9 @@ module.exports.CreateDB = function (parent, func) {
1643
var backupPath = parent.backuppath;
1644
if (parent.config.settings.autobackup && parent.config.settings.autobackup.backuppath) { backupPath = parent.config.settings.autobackup.backuppath; }
1645
try { parent.fs.mkdirSync(backupPath); } catch (e) { }
1615
- var props = (obj.databaseType == 4) ? parent.args.mariadb : parent.args.mysql;
1616
- var mysqldumpPath = 'mysqldump';
1617
- if (parent.config.settings.autobackup && parent.config.settings.autobackup.mysqldumppath) { mysqldumpPath = parent.config.settings.autobackup.mysqldumppath; }
1618
- var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\'';
1619
- // Windows will treat ' as part of the pw. Linux/Unix requires it to escape.
1620
- cmd += (parent.platform == 'win32') ? ' --password=\"' + props.password + '\"' : ' --password=\'' + props.password + '\'';
1621
- if (props.host) { cmd += ' -h ' + props.host; }
1622
- if (props.port) { cmd += ' -P ' + props.port; }
1623
- var dbname = (props.database) ? props.database : 'meshcentral';
1624
- cmd += ' ' + dbname + ' > ' + ((parent.platform == 'win32') ? '\"nul\"' : '\"/dev/null\"');
1646
+
1647
+ var cmd = buildSqlDumpCommand();
1648
+ cmd += ' > ' + ((parent.platform == 'win32') ? '\"nul\"' : '\"/dev/null\"');
1649
const child_process = require('child_process');
1650
child_process.exec(cmd, { cwd: backupPath }, function(error, stdout, stdin) {
1651
try {
@@ -1813,16 +1837,9 @@ module.exports.CreateDB = function (parent, func) {
1837
// Perform a MySqlDump backup
1838
const newBackupFile = 'mysqldump-' + fileSuffix;
1839
var newBackupPath = parent.path.join(backupPath, newBackupFile);
1816
- var props = (obj.databaseType == 4) ? parent.args.mariadb : parent.args.mysql;
1817
- var mysqldumpPath = 'mysqldump';
1818
- if (parent.config.settings.autobackup && parent.config.settings.autobackup.mysqldumppath) { mysqldumpPath = parent.config.settings.autobackup.mysqldumppath; }
1819
- var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\'';
1820
- // Windows will treat ' as part of the pw. Linux/Unix requires it to escape.
1821
- cmd += (parent.platform == 'win32') ? ' --password=\"' + props.password + '\"' : ' --password=\'' + props.password + '\'';
1822
- if (props.host) { cmd += ' -h ' + props.host; }
1823
- if (props.port) { cmd += ' -P ' + props.port; }
1824
- var sqldbname = (props.database) ? props.database : 'meshcentral';
1825
- cmd += ' ' + sqldbname + ' --result-file=\"' + newBackupPath + '.sql\"';
1840
+
1841
+ var cmd = buildSqlDumpCommand();
1842
+ cmd += ' --result-file=\"' + newBackupPath + '.sql\"';
1843
const child_process = require('child_process');
1844
var backupProcess = child_process.exec(cmd, { cwd: backupPath }, function (error, stdout, stderr) {
1845
try {