Parse tokens for validate/create commands. */
| 8035 | |
| 8036 | /** Parse tokens for validate/create commands. */ |
| 8037 | static int |
| 8038 | parse_vc(struct context *ctx, const struct token *token, |
| 8039 | const char *str, unsigned int len, |
| 8040 | void *buf, unsigned int size) |
| 8041 | { |
| 8042 | struct buffer *out = buf; |
| 8043 | uint8_t *data; |
| 8044 | uint32_t data_size; |
| 8045 | |
| 8046 | /* Token name must match. */ |
| 8047 | if (parse_default(ctx, token, str, len, NULL, 0) < 0) |
| 8048 | return -1; |
| 8049 | /* Nothing else to do if there is no buffer. */ |
| 8050 | if (!out) |
| 8051 | return len; |
| 8052 | if (!out->command) { |
| 8053 | if (ctx->curr != VALIDATE && ctx->curr != CREATE && |
| 8054 | ctx->curr != PATTERN_TEMPLATE_CREATE && |
| 8055 | ctx->curr != ACTIONS_TEMPLATE_CREATE) |
| 8056 | return -1; |
| 8057 | if (sizeof(*out) > size) |
| 8058 | return -1; |
| 8059 | out->command = ctx->curr; |
| 8060 | ctx->objdata = 0; |
| 8061 | ctx->object = out; |
| 8062 | ctx->objmask = NULL; |
| 8063 | out->args.vc.data = (uint8_t *)out + size; |
| 8064 | return len; |
| 8065 | } |
| 8066 | ctx->objdata = 0; |
| 8067 | switch (ctx->curr) { |
| 8068 | default: |
| 8069 | ctx->object = &out->args.vc.attr; |
| 8070 | break; |
| 8071 | case VC_TUNNEL_SET: |
| 8072 | case VC_TUNNEL_MATCH: |
| 8073 | ctx->object = &out->args.vc.tunnel_ops; |
| 8074 | break; |
| 8075 | case VC_USER_ID: |
| 8076 | ctx->object = out; |
| 8077 | break; |
| 8078 | } |
| 8079 | ctx->objmask = NULL; |
| 8080 | switch (ctx->curr) { |
| 8081 | case VC_GROUP: |
| 8082 | case VC_PRIORITY: |
| 8083 | case VC_USER_ID: |
| 8084 | return len; |
| 8085 | case VC_TUNNEL_SET: |
| 8086 | out->args.vc.tunnel_ops.enabled = 1; |
| 8087 | out->args.vc.tunnel_ops.actions = 1; |
| 8088 | return len; |
| 8089 | case VC_TUNNEL_MATCH: |
| 8090 | out->args.vc.tunnel_ops.enabled = 1; |
| 8091 | out->args.vc.tunnel_ops.items = 1; |
| 8092 | return len; |
| 8093 | case VC_INGRESS: |
| 8094 | out->args.vc.attr.ingress = 1; |
no test coverage detected