diff --git a/src/config.c b/src/config.c index d01b3e816..f344f2d78 100644 --- a/src/config.c +++ b/src/config.c @@ -82,6 +82,7 @@ void resetServerSaveParams() { void loadServerConfigFromString(char *config) { char *err = NULL; int linenum = 0, totlines, i; + int slaveof_linenum = 0; sds *lines; lines = sdssplitlen(config,strlen(config),"\n",1,&totlines); @@ -244,6 +245,7 @@ void loadServerConfigFromString(char *config) { goto loaderr; } } else if (!strcasecmp(argv[0],"slaveof") && argc == 3) { + slaveof_linenum = linenum; server.masterhost = sdsnew(argv[1]); server.masterport = atoi(argv[2]); server.repl_state = REDIS_REPL_CONNECT; @@ -490,13 +492,16 @@ void loadServerConfigFromString(char *config) { } sdsfreesplitres(argv,argc); } - sdsfreesplitres(lines,totlines); /* Sanity checks. */ if (server.cluster_enabled && server.masterhost) { + linenum = slaveof_linenum; + i = linenum-1; err = "slaveof directive not allowed in cluster mode"; goto loaderr; } + + sdsfreesplitres(lines,totlines); return; loaderr: