X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=hotplug-rule.c;h=7e9c16adff7c25dd1f6a9f8bebddbdd9e58a1e64;hp=a2d88927b1abe32be557b13f57960bc74b914567;hb=859c08948968051330b5daddc07d62b40eca23a7;hpb=0e1ddb8cc10fab53958d5a73329efefaa49b7b12 diff --git a/hotplug-rule.c b/hotplug-rule.c index a2d8892..7e9c16a 100644 --- a/hotplug-rule.c +++ b/hotplug-rule.c @@ -306,7 +306,8 @@ static int rule_process_expr(struct blob_attr *cur, struct blob_attr *msg) bool found; int ret; - if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY) { + if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY || + blobmsg_type(blobmsg_data(cur)) != BLOBMSG_TYPE_STRING) { rule_error(cur, "Unexpected element type"); return -1; } @@ -379,6 +380,11 @@ static int cmd_process_strings(struct blob_attr *attr, struct blob_attr *msg) if (args++ < 0) continue; + if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING) { + rule_error(attr, "Invalid argument in command"); + return -1; + } + cmd_add_string(blobmsg_data(cur), msg); } @@ -398,7 +404,10 @@ static int __rule_process_cmd(struct blob_attr *cur, struct blob_attr *msg) return ret; name = blobmsg_data(blobmsg_data(cur)); - cmd_process_strings(cur, msg); + ret = cmd_process_strings(cur, msg); + if (ret) + return ret; + rule_handle_command(name, blob_data(b.head)); return 0;