src/server/safs/common.c

changeset 551
97039494764b
parent 490
d218607f5a7e
equal deleted inserted replaced
550:77241b3ba544 551:97039494764b
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;

mercurial