diff options
| -rw-r--r-- | cli/src/cli-cmd-misc.c | 2 | ||||
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 24 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 85 | 
3 files changed, 87 insertions, 24 deletions
diff --git a/cli/src/cli-cmd-misc.c b/cli/src/cli-cmd-misc.c index 55825f6993b..356118e19e9 100644 --- a/cli/src/cli-cmd-misc.c +++ b/cli/src/cli-cmd-misc.c @@ -59,7 +59,7 @@ cli_cmd_display_help (struct cli_state *state, struct cli_cmd_word *in_word,          struct cli_cmd        *cmd_ind = NULL;          int                   i = 0; -         /* cli_systerm_cmds commands for internal usage +         /* cli_system_cmds commands for internal usage             they are not exposed           */          for (i=0; cmd[i]!=NULL; i++) diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index bb549589be6..673202440fc 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1066,13 +1066,16 @@ cli_check_gsync_present ()          }          ret = snprintf (cmd, sizeof(cmd), GSYNCD_PREFIX "/gsyncd"); -        if (ret < 0) -                return 0; +        if (ret < 0) { +               ret = 0; +               goto out; +        }          ret = lstat (cmd, &stat_buff);          if (ret || !(stat_buff.st_mode & S_IXUSR)) { +                ret = -1;                  gf_log ("", GF_LOG_INFO, "geo-replication not installed"); -                return -1; +                goto out;          }          ret = setenv ("_GLUSTERD_CALLED_", "1", 1); @@ -1086,14 +1089,21 @@ cli_check_gsync_present ()          ret = snprintf (cmd, sizeof(cmd), GSYNCD_PREFIX"/gsyncd --version");          if (!(in = popen(cmd, "r"))) { +                ret = -1;                  gf_log ("", GF_LOG_INFO, "geo-replication not installed"); -                return -1; +                goto out;          }          ptr = fgets(buff, sizeof(buff), in); -        if (ptr) -                if (!strstr (buff, "gsyncd")) -                        return -1; +        if (ptr) { +                if (!strstr (buff, "gsyncd")) { +                        ret  = -1; +                        goto out; +                } +        } else { +                ret = -1; +                goto out; +        }          ret = pclose (in); diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index b2cf345c714..c7c5088db2e 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -241,6 +241,7 @@ out:   */  extern int mkdir_if_missing (char *path); +#if SYNCDAEMON_COMPILE  static int  glusterd_check_gsync_present ()  { @@ -255,7 +256,7 @@ glusterd_check_gsync_present ()                  goto out;          } -        snprintf (cmd, PATH_MAX, GSYNCD_PREFIX"/gsyncd --version"); +        snprintf (cmd, sizeof(cmd), GSYNCD_PREFIX"/gsyncd --version");          if (!(in = popen(cmd, "r"))) {                  gf_log ("", GF_LOG_INFO, "geo-replication module not installed" @@ -270,11 +271,13 @@ glusterd_check_gsync_present ()                          ret = -1;                          goto out;                  } +        } else { +                ret = -1; +                goto out;          }          ret = 0;   out: -        if (in) -                if (-1 == pclose (in)) { +        if ((in)&& (-1 == pclose (in))) {                          ret = -1;                          gf_log ("", GF_LOG_INFO, "geo-replication module not"                                  " installed in the system"); @@ -286,16 +289,20 @@ glusterd_check_gsync_present ()  }  int -configure_syncaemon (glusterd_conf_t *conf) +glusterd_crt_georep_folders (char *georepdir, glusterd_conf_t *conf)  {          int ret = 0; -#if SYNCDAEMON_COMPILE -        char georepdir[PATH_MAX] = {0,}; -        char cmd[4096] = {0,}; -        char volid[64] = {0,}; -        int blen = 0; -        setenv ("_GLUSTERD_CALLED_", "1", 1); +        GF_ASSERT (georepdir); +        GF_ASSERT (conf); + +        if (strlen (conf->workdir)+2 > PATH_MAX-strlen(GEOREP)) { +                ret = -1; +                gf_log ("glusterd", GF_LOG_CRITICAL, +                        "Unable to create "GEOREP" directory %s", +                        georepdir); +                goto out; +        }          snprintf (georepdir, PATH_MAX, "%s/"GEOREP, conf->workdir);          ret = mkdir_if_missing (georepdir); @@ -303,20 +310,60 @@ configure_syncaemon (glusterd_conf_t *conf)                  gf_log ("glusterd", GF_LOG_CRITICAL,                          "Unable to create "GEOREP" directory %s",                          georepdir); -                return -1; +                goto out; +        } + +        if (strlen (DEFAULT_LOG_FILE_DIRECTORY"/"GEOREP) >= PATH_MAX) { +                ret = -1; +                gf_log ("glusterd", GF_LOG_CRITICAL, +                        "Unable to create "GEOREP" directory %s", +                        georepdir); +                goto out;          }          ret = mkdir_if_missing (DEFAULT_LOG_FILE_DIRECTORY"/"GEOREP);          if (-1 == ret) {                  gf_log ("glusterd", GF_LOG_CRITICAL,                          "Unable to create "GEOREP" log directory"); -                return -1; +                goto out; +        } + +        if (strlen(DEFAULT_LOG_FILE_DIRECTORY"/"GEOREP"-slaves") >= PATH_MAX) { +                ret = -1; +                gf_log ("glusterd", GF_LOG_CRITICAL, +                        "Unable to create "GEOREP" directory %s", +                        georepdir); +                goto out;          }          ret = mkdir_if_missing (DEFAULT_LOG_FILE_DIRECTORY"/"GEOREP"-slaves");          if (-1 == ret) {                  gf_log ("glusterd", GF_LOG_CRITICAL,                          "Unable to create "GEOREP" slave log directory"); -                return -1; +                goto out; +        } +        ret = 0; + out: +        gf_log("", GF_LOG_DEBUG, "Returning %d", ret); +        return ret; + +} +#endif + +static int +configure_syncdaemon (glusterd_conf_t *conf) +{ +        int ret = 0; +#if SYNCDAEMON_COMPILE +        char georepdir[PATH_MAX] = {0,}; +        char cmd[2*PATH_MAX + 1024] = {0,}; +        char volid[64] = {0,}; +        int blen = 0; + +        ret = setenv ("_GLUSTERD_CALLED_", "1", 1); +        if (ret < 0) { +                ret = 0; +                goto out;          } +          ret = glusterd_check_gsync_present ();          if (-1 == ret) {                  ret = 0; @@ -324,8 +371,14 @@ configure_syncaemon (glusterd_conf_t *conf)          } -        blen = snprintf (cmd, PATH_MAX, GSYNCD_PREFIX"/gsyncd -c %s/"GSYNC_CONF -                         " --config-set-rx ", conf->workdir); +        glusterd_crt_georep_folders (georepdir, conf); +        if (ret) { +                ret = 0; +                goto out; +        } + +        blen = snprintf (cmd, sizeof(cmd), GSYNCD_PREFIX"/gsyncd -c %s/" +                         GSYNC_CONF " --config-set-rx ", conf->workdir);          /* Calling out to gsyncd to configure it:           * - use system(3) for options with multi-word values as system @@ -633,7 +686,7 @@ init (xlator_t *this)          if (ret < 0)                  goto out; -        ret = configure_syncaemon (conf); +        ret = configure_syncdaemon (conf);          if (ret)                  goto out;  | 
