X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=file.c;fp=file.c;h=1e5b2f4106f8fd3456e79eac8d9bfa83446d456d;hb=31c390727b83c9efd768c7aa258813e6084b46a3;hp=07b4d3cf17a50a60ab1bc38d86adf5e4374d15cd;hpb=d97883005ffb5be251872c3e4abe04f71732f9bd;p=project%2Frpcd.git diff --git a/file.c b/file.c index 07b4d3c..1e5b2f4 100644 --- a/file.c +++ b/file.c @@ -809,6 +809,9 @@ rpc_file_exec_run(const char *cmd, const struct blob_attr *sid, struct rpc_file_exec_context *c; + if (sid && env) + return UBUS_STATUS_PERMISSION_DENIED; + cmd = rpc_file_exec_lookup(cmd); if (!cmd) @@ -824,7 +827,7 @@ rpc_file_exec_run(const char *cmd, const struct blob_attr *sid, if (arg == NULL || strlen(executable) >= sizeof(cmdstr)) return UBUS_STATUS_PERMISSION_DENIED; - arglen = 0; + arglen = 2; p = cmdstr + sprintf(cmdstr, "%s", executable); blobmsg_for_each_attr(cur, arg, rem) @@ -834,7 +837,7 @@ rpc_file_exec_run(const char *cmd, const struct blob_attr *sid, if (arglen == 255 || p + blobmsg_data_len(cur) >= cmdstr + sizeof(cmdstr)) - break; + return UBUS_STATUS_PERMISSION_DENIED; p += sprintf(p, " %s", blobmsg_get_string(cur)); arglen++;