From 72afaaa908f732dc853098990742fad586e6ce4f Mon Sep 17 00:00:00 2001 From: Noah Zalev Date: Sat, 10 Apr 2021 20:11:17 -0400 Subject: [PATCH] Fixed sqldump pw escaping on windows --- db.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/db.js b/db.js index c3506a56..ee5a7606 100644 --- a/db.js +++ b/db.js @@ -1618,10 +1618,12 @@ module.exports.CreateDB = function (parent, func) { var props = (obj.databaseType == 4) ? parent.args.mariadb : parent.args.mysql; var mysqldumpPath = 'mysqldump'; if (parent.config.settings.autobackup && parent.config.settings.autobackup.mysqldumppath) { mysqldumpPath = parent.config.settings.autobackup.mysqldumppath; } - var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\' --password=\'' + props.password + '\''; + var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\''; + // Windows will treat ' as part of the pw. Linux/Unix requires it to escape. + cmd += (parent.platform == 'win32') ? ' --password=\"' + props.password + '\"' : ' --password=\'' + props.password + '\''; if (props.host) { cmd += ' -h ' + props.host; } if (props.port) { cmd += ' -P ' + props.port; } - cmd += ' meshcentral --result-file=' + ((parent.platform == 'win32') ? '\"nul\"' : '\"/dev/null\"'); + cmd += ' meshcentral > ' + ((parent.platform == 'win32') ? '\"nul\"' : '\"/dev/null\"'); const child_process = require('child_process'); child_process.exec(cmd, { cwd: backupPath }, function(error, stdout, stdin) { try { @@ -1815,7 +1817,9 @@ module.exports.CreateDB = function (parent, func) { var props = (obj.databaseType == 4) ? parent.args.mariadb : parent.args.mysql; var mysqldumpPath = 'mysqldump'; if (parent.config.settings.autobackup && parent.config.settings.autobackup.mysqldumppath) { mysqldumpPath = parent.config.settings.autobackup.mysqldumppath; } - var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\' --password=\'' + props.password + '\''; + var cmd = '\"' + mysqldumpPath + '\" --user=\'' + props.user + '\''; + // Windows will treat ' as part of the pw. Linux/Unix requires it to escape. + cmd += (parent.platform == 'win32') ? ' --password=\"' + props.password + '\"' : ' --password=\'' + props.password + '\''; if (props.host) { cmd += ' -h ' + props.host; } if (props.port) { cmd += ' -P ' + props.port; } cmd += ' meshcentral --result-file=\"' + newBackupPath + '.sql\"';