diff options
-rw-r--r-- | cli/src/cli-cmd-parser.c | 22 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c | 17 |
2 files changed, 36 insertions, 3 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index f0f428a795b..a243a3542e9 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -2422,6 +2422,9 @@ cli_cmd_gsync_set_parse (const char **words, int wordcount, dict_t **options) "push-pem", "detail", "pause", "resume", NULL }; char *w = NULL; + char *save_ptr = NULL; + char *slave_temp = NULL; + char *token = NULL; GF_ASSERT (words); GF_ASSERT (options); @@ -2578,14 +2581,29 @@ cli_cmd_gsync_set_parse (const char **words, int wordcount, dict_t **options) ret = dict_set_str (dict, "volname", (char *)words[masteri]); } - if (!ret && slavei) - ret = dict_set_str (dict, "slave", (char *)words[slavei]); + if (!ret && slavei) { + /* If geo-rep is created with root user using the syntax + * gluster vol geo-rep <mastervol> root@<slavehost> ... + * pass down only <slavehost> else pass as it is. + */ + slave_temp = gf_strdup (words[slavei]); + token = strtok_r (slave_temp, "@", &save_ptr); + if (token && !strcmp (token, "root")) { + ret = dict_set_str (dict, "slave", + (char *)words[slavei]+5); + } else { + ret = dict_set_str (dict, "slave", + (char *)words[slavei]); + } + } if (!ret) ret = dict_set_int32 (dict, "type", type); if (!ret && type == GF_GSYNC_OPTION_TYPE_CONFIG) ret = config_parse (words, wordcount, dict, cmdi, glob); out: + if (slave_temp) + GF_FREE (slave_temp); if (ret) { if (dict) dict_destroy (dict); diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c index 6ab0403993a..ae2521c570b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c @@ -3242,8 +3242,11 @@ glusterd_get_geo_rep_session (char *slave_key, char *origin_volname, { int32_t ret = -1; char *token = NULL; + char *tok = NULL; char *temp = NULL; char *ip = NULL; + char *ip_i = NULL; + char *ip_temp = NULL; char *buffer = NULL; xlator_t *this = NULL; char *slave_temp = NULL; @@ -3284,6 +3287,7 @@ glusterd_get_geo_rep_session (char *slave_key, char *origin_volname, ret = -1; goto out; } + ip_i = ip; token = strtok_r (NULL, "\0", &save_ptr); if (!token) { @@ -3298,8 +3302,16 @@ glusterd_get_geo_rep_session (char *slave_key, char *origin_volname, goto out; } + /* If 'ip' has 'root@slavehost', point to 'slavehost' as + * working directory for root users are created without + * 'root@' */ + ip_temp = gf_strdup (ip); + tok = strtok_r (ip_temp, "@", &save_ptr); + if (tok && !strcmp (tok, "root")) + ip_i = ip + 5; + ret = snprintf (session, PATH_MAX, "%s_%s_%s", - origin_volname, ip, slave_temp); + origin_volname, ip_i, slave_temp); if (ret < 0) /* Negative value is an error */ goto out; @@ -3317,6 +3329,9 @@ out: if (ip) GF_FREE (ip); + if (ip_temp) + GF_FREE (ip_temp); + if (slave_temp) GF_FREE (slave_temp); |