Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
15ef6053
Commit
15ef6053
authored
Sep 27, 2011
by
antirez
Browse files
Deny commands flagged as REDIS_CMD_NOSCRIPT from Lua scripts
parent
b60ed6e8
Changes
2
Show whitespace changes
Inline
Side-by-side
src/redis.c
View file @
15ef6053
...
...
@@ -125,7 +125,7 @@ struct redisCommand redisCommandTable[] = {
{
"smove"
,
smoveCommand
,
4
,
"w"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
},
{
"sismember"
,
sismemberCommand
,
3
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"scard"
,
scardCommand
,
2
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"spop"
,
spopCommand
,
2
,
"wR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"spop"
,
spopCommand
,
2
,
"wR
s
"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"srandmember"
,
srandmemberCommand
,
2
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"sinter"
,
sinterCommand
,
-
2
,
"r"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
},
{
"sinterstore"
,
sinterstoreCommand
,
-
3
,
"wm"
,
0
,
NULL
,
2
,
-
1
,
1
,
0
,
0
},
...
...
src/scripting.c
View file @
15ef6053
...
...
@@ -158,24 +158,29 @@ int luaRedisCommand(lua_State *lua) {
return
1
;
}
/* Setup our fake client for command execution */
c
->
argv
=
argv
;
c
->
argc
=
argc
;
/* Command lookup */
cmd
=
lookupCommand
(
argv
[
0
]
->
ptr
);
if
(
!
cmd
||
((
cmd
->
arity
>
0
&&
cmd
->
arity
!=
argc
)
||
(
argc
<
-
cmd
->
arity
)))
{
for
(
j
=
0
;
j
<
argc
;
j
++
)
decrRefCount
(
argv
[
j
]);
zfree
(
argv
);
if
(
cmd
)
luaPushError
(
lua
,
"Wrong number of args calling Redis command From Lua script"
);
else
luaPushError
(
lua
,
"Unknown Redis command called from Lua script"
);
return
1
;
goto
cleanup
;
}
/* Run the command in the context of a fake client */
c
->
argv
=
argv
;
c
->
argc
=
argc
;
if
(
cmd
->
flags
&
REDIS_CMD_NOSCRIPT
)
{
luaPushError
(
lua
,
"This Redis command is not allowed from scripts"
);
goto
cleanup
;
}
/* Run the command */
cmd
->
proc
(
c
);
/* Convert the result of the Redis command into a suitable Lua type.
...
...
@@ -195,6 +200,7 @@ int luaRedisCommand(lua_State *lua) {
redisProtocolToLuaType
(
lua
,
reply
);
sdsfree
(
reply
);
cleanup:
/* Clean up. Command code may have changed argv/argc so we use the
* argv/argc of the client instead of the local variables. */
for
(
j
=
0
;
j
<
c
->
argc
;
j
++
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment