summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhwware <wen.hui.ware@gmail.com>2020-03-29 23:20:54 -0400
committerhwware <wen.hui.ware@gmail.com>2020-03-29 23:20:54 -0400
commit86c76cad74f9effb861dd1fc2f7d9f761b52077f (patch)
treeb0656e74c94cb5092d08588f5b72c25359630438
parent1ef44f8243229bb8976f52b4ba6ad9ddce2e5bde (diff)
downloadredis-86c76cad74f9effb861dd1fc2f7d9f761b52077f.tar.gz
add check for not switching between optin optout mode directly
-rw-r--r--src/networking.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/networking.c b/src/networking.c
index bad3e2c25..b6ab8eb5d 100644
--- a/src/networking.c
+++ b/src/networking.c
@@ -2314,7 +2314,7 @@ NULL
return;
}
- if ((options & CLIENT_TRACKING_OPTIN) && (options & CLIENT_TRACKING_OPTOUT))
+ if (options & CLIENT_TRACKING_OPTIN && options & CLIENT_TRACKING_OPTOUT)
{
addReplyError(c,
"You can't specify both OPTIN mode and OPTOUT mode");
@@ -2322,6 +2322,17 @@ NULL
return;
}
+ if ((options & CLIENT_TRACKING_OPTIN && c->flags & CLIENT_TRACKING_OPTOUT) ||
+ (options & CLIENT_TRACKING_OPTOUT && c->flags & CLIENT_TRACKING_OPTIN))
+ {
+ addReplyError(c,
+ "You can't switch OPTIN/OPTOUT mode before disabling "
+ "tracking for this client, and then re-enabling it with "
+ "a different mode.");
+ zfree(prefix);
+ return;
+ }
+
enableTracking(c,redir,options,prefix,numprefix);
} else if (!strcasecmp(c->argv[2]->ptr,"off")) {
disableTracking(c);