- } else if(state == 2) {
- if(ind) {
- rxfl = 0;
- if(!w[0]) {
- } else if(!strcmp(w[0], "point") ||
- !strcmp(w[0], "url") ||
- !strcmp(w[0], "method")) {
- if(argc < 2) {
- flog(LOG_WARNING, "%s:%i: missing pattern for `%s' match", w[0], filename, lno);
- goto next;
- }
- if(argc >= 3) {
- if(strchr(w[2], 'i'))
- rxfl |= REG_ICASE;
- }
- if((regex = regalloc(w[1], rxfl)) == NULL) {
- flog(LOG_WARNING, "%s:%i: invalid regex for `%s' match", w[0], filename, lno);
- goto next;
- }
- rule = newrule(pat);
- if(!strcmp(w[0], "point"))
- rule->type = PAT_REST;
- else if(!strcmp(w[0], "url"))
- rule->type = PAT_URL;
- else if(!strcmp(w[0], "method"))
- rule->type = PAT_METHOD;
- rule->pattern = regex;
- if(argc >= 3) {
- if(strchr(w[2], 's'))
- rule->fl |= PATFL_MSS;
- }
- } else if(!strcmp(w[0], "header")) {
- if(argc < 3) {
- flog(LOG_WARNING, "%s:%i: missing header name or pattern for `header' match", filename, lno);
- goto next;
- }
- if(argc >= 4) {
- if(strchr(w[3], 'i'))
- rxfl |= REG_ICASE;
- }
- if((regex = regalloc(w[2], rxfl)) == NULL) {
- flog(LOG_WARNING, "%s:%i: invalid regex for `header' match", filename, lno);
- goto next;
- }
- rule = newrule(pat);
- rule->type = PAT_HEADER;
- rule->header = sstrdup(w[1]);
- rule->pattern = regex;
- if(argc >= 4) {
- if(strchr(w[3], 's'))
- rule->fl |= PATFL_MSS;
- }
- } else if(!strcmp(w[0], "all")) {
- newrule(pat)->type = PAT_ALL;
- } else if(!strcmp(w[0], "default")) {
- newrule(pat)->type = PAT_DEFAULT;
- } else if(!strcmp(w[0], "handler")) {
- if(argc < 2) {
- flog(LOG_WARNING, "%s:%i: missing child name for `handler' directive", filename, lno);
- goto next;
- }
- if(pat->childnm != NULL)
- free(pat->childnm);
- pat->childnm = sstrdup(w[1]);
- } else if(!strcmp(w[0], "restpat")) {
- if(argc < 2) {
- flog(LOG_WARNING, "%s:%i: missing pattern for `restpat' directive", filename, lno);
- goto next;
- }
- if(pat->restpat != NULL)
- free(pat->restpat);
- pat->restpat = sstrdup(w[1]);
- } else {
- flog(LOG_WARNING, "%s:%i: unknown directive %s", filename, lno, w[0]);
- }
- } else {
- state = 0;
- if(pat->rules[0] == NULL) {
- flog(LOG_WARNING, "%s:%i: missing rules in match declaration", filename, lno);
- freepattern(pat);
- goto retry;
- }
- if(pat->childnm == NULL) {
- flog(LOG_WARNING, "%s:%i: missing handler in match declaration", filename, lno);
- freepattern(pat);
- goto retry;
- }
- pat->next = cf->patterns;
- cf->patterns = pat;
- goto retry;
+ if((regex = regalloc(s->argv[1], rxfl)) == NULL) {
+ flog(LOG_WARNING, "%s:%i: invalid regex for `%s' match", s->file, s->lno, s->argv[0]);
+ continue;
+ }
+ rule = newrule(pat);
+ if(!strcmp(s->argv[0], "point"))
+ rule->type = PAT_REST;
+ else if(!strcmp(s->argv[0], "url"))
+ rule->type = PAT_URL;
+ else if(!strcmp(s->argv[0], "method"))
+ rule->type = PAT_METHOD;
+ rule->pattern = regex;
+ if(s->argc >= 3) {
+ if(strchr(s->argv[2], 's'))
+ rule->fl |= PATFL_MSS;
+ }
+ } else if(!strcmp(s->argv[0], "header")) {
+ if(s->argc < 3) {
+ flog(LOG_WARNING, "%s:%i: missing header name or pattern for `header' match", s->file, s->lno);
+ continue;
+ }
+ if(s->argc >= 4) {
+ if(strchr(s->argv[3], 'i'))
+ rxfl |= REG_ICASE;
+ }
+ if((regex = regalloc(s->argv[2], rxfl)) == NULL) {
+ flog(LOG_WARNING, "%s:%i: invalid regex for `header' match", s->file, s->lno);
+ continue;
+ }
+ rule = newrule(pat);
+ rule->type = PAT_HEADER;
+ rule->header = sstrdup(s->argv[1]);
+ rule->pattern = regex;
+ if(s->argc >= 4) {
+ if(strchr(s->argv[3], 's'))
+ rule->fl |= PATFL_MSS;
+ }
+ } else if(!strcmp(s->argv[0], "all")) {
+ newrule(pat)->type = PAT_ALL;
+ } else if(!strcmp(s->argv[0], "default")) {
+ newrule(pat)->type = PAT_DEFAULT;
+ } else if(!strcmp(s->argv[0], "handler")) {
+ if(s->argc < 2) {
+ flog(LOG_WARNING, "%s:%i: missing child name for `handler' directive", s->file, s->lno);
+ continue;
+ }
+ if(pat->childnm != NULL)
+ free(pat->childnm);
+ pat->childnm = sstrdup(s->argv[1]);
+ } else if(!strcmp(s->argv[0], "restpat")) {
+ if(s->argc < 2) {
+ flog(LOG_WARNING, "%s:%i: missing pattern for `restpat' directive", s->file, s->lno);
+ continue;