163 case COMMONSAF_REMOVE_HEADERS: pblock_remove(value, rq->headers);break; |
163 case COMMONSAF_REMOVE_HEADERS: pblock_remove(value, rq->headers);break; |
164 case COMMONSAF_REMOVE_SRVHDRS: pblock_remove(value, rq->srvhdrs); break; |
164 case COMMONSAF_REMOVE_SRVHDRS: pblock_remove(value, rq->srvhdrs); break; |
165 case COMMONSAF_ABORT: return COMMONSAF_REQ_ABORTED; |
165 case COMMONSAF_ABORT: return COMMONSAF_REQ_ABORTED; |
166 case COMMONSAF_NOACTION: return COMMONSAF_RET_NOACTION; |
166 case COMMONSAF_NOACTION: return COMMONSAF_RET_NOACTION; |
167 case COMMONSAF_ERROR: { |
167 case COMMONSAF_ERROR: { |
168 int len = strlen(value); |
168 char *end; |
169 WSBool isnum = TRUE; |
169 long status = strtol(value, &end, 10); |
170 int i; |
170 if(status < 100 || status > 999) { |
171 for(i=0;i<len;i++) { |
|
172 if(!isdigit(value[i])) { |
|
173 isnum = FALSE; |
|
174 break; |
|
175 } |
|
176 } |
|
177 |
|
178 int64_t status; |
|
179 int ret = util_strtoint(value, &status); |
|
180 if(status < 100 || ret > 999 || !ret) { |
|
181 log_ereport( |
171 log_ereport( |
182 LOG_MISCONFIG, |
172 LOG_MISCONFIG, |
183 "set-variable: error value must contain a 3-digit http status code"); |
173 "set-variable: error value must contain a 3-digit http status code"); |
184 protocol_status(sn, rq, 500, NULL); |
174 protocol_status(sn, rq, 500, NULL); |
185 return COMMONSAF_RET_ERROR; |
175 return COMMONSAF_RET_ERROR; |
186 } |
176 } |
187 |
177 |
188 const char *msg = isnum ? NULL : cx_strtrim(cx_str(value + i)).ptr; |
178 const char *msg = NULL; |
|
179 while(isspace(*end)) { |
|
180 end++; |
|
181 } |
|
182 if(*end != '\0') { |
|
183 msg = end; |
|
184 } |
|
185 |
189 protocol_status(sn, rq, (int)status, msg); |
186 protocol_status(sn, rq, (int)status, msg); |
190 |
187 |
191 return COMMONSAF_REQ_ABORTED; |
188 return COMMONSAF_REQ_ABORTED; |
192 } |
189 } |
193 case COMMONSAF_ESCAPE: break; |
190 case COMMONSAF_ESCAPE: break; |