summaryrefslogtreecommitdiff
path: root/sql/wsrep_utils.h
diff options
context:
space:
mode:
authorAlexey Yurchenko <ayurchen@gmail.com>2015-06-06 01:08:41 +0300
committerNirbhay Choubey <nirbhay@mariadb.com>2015-09-09 17:02:26 -0400
commitd78110e7fae1588afcb6bc5ea08be0d84ee18857 (patch)
tree470b8791eddc944fd2408de44ccf80546452fba1 /sql/wsrep_utils.h
parent4f4f3a5e328524bf1b467a1885b0a21a4e995d9b (diff)
downloadmariadb-git-d78110e7fae1588afcb6bc5ea08be0d84ee18857.tar.gz
Refs codership/mysql-wsrep#141: this commit
1. Passes wsrep_sst_auth_value to SST scripts via WSREP_SST_OPT_AUTH envronmental variable, so it never appears on the command line 2. In mysqldump and xtrabackup* SST scripts which rely on MySQL authentication, instead of passing password on the command line, SST script sets MYSQL_PWD environment variable, so that password also never appears on the mysqldump/innobackupex command line.
Diffstat (limited to 'sql/wsrep_utils.h')
-rw-r--r--sql/wsrep_utils.h24
1 files changed, 23 insertions, 1 deletions
diff --git a/sql/wsrep_utils.h b/sql/wsrep_utils.h
index dfb68bcd1b7..c43febf249a 100644
--- a/sql/wsrep_utils.h
+++ b/sql/wsrep_utils.h
@@ -44,6 +44,25 @@ private:
extern wsp::node_status local_status;
namespace wsp {
+/* a class to manage env vars array */
+class env
+{
+private:
+ size_t len_;
+ char** env_;
+ int errno_;
+ bool ctor_common(char** e);
+ void dtor();
+ env& operator =(env);
+public:
+ explicit env(char** env);
+ explicit env(const env&);
+ ~env();
+ int append(const char* var); /* add a new env. var */
+ int error() const { return errno_; }
+ char** operator()() { return env_; }
+};
+
/* A small class to run external programs. */
class process
{
@@ -56,8 +75,9 @@ private:
public:
/*! @arg type is a pointer to a null-terminated string which must contain
either the letter 'r' for reading or the letter 'w' for writing.
+ @arg env optional null-terminated vector of environment variables
*/
- process (const char* cmd, const char* type);
+ process (const char* cmd, const char* type, char** env);
~process ();
FILE* pipe () { return io_; }
@@ -90,6 +110,8 @@ class string
{
public:
string() : string_(0) {}
+ explicit string(size_t s) : string_(static_cast<char*>(malloc(s))) {}
+ char* operator()() { return string_; }
void set(char* str) { if (string_) free (string_); string_ = str; }
~string() { set (0); }
private: