const char *msg;
cp = body;
switch (dirserv_add_descriptor(&cp, &msg)) {
+ case -2:
case -1:
/* malformed descriptor, or something wrong */
write_http_status_line(conn, 400, msg?msg:"Malformed or unacceptable server descriptor");
* to NULL.
*
* Return 1 if descriptor is well-formed and accepted;
- * 0 if well-formed and server is unapproved;
- * -1 if not well-formed or other parsing error.
+ * 0 if well-formed and server is unapproved but accepted;
+ * -1 if well-formed but rejected;
+ * -2 if not well-formed.
*/
int
dirserv_add_descriptor(const char **desc, const char **msg)
start = strstr(*desc, "router ");
if (!start) {
log_fn(LOG_WARN, "no 'router' line found. This is not a descriptor.");
- return -1;
+ return -2;
}
if ((end = strstr(start+6, "\nrouter "))) {
++end; /* Include NL. */
cp = strstr(cp, "\nrouter ");
if (!cp) break;
++cp;
- if (dirserv_add_descriptor(&cp,&m) < 0) {
+ if (dirserv_add_descriptor(&cp,&m) < -1) {
+ /* only fail if parsing failed; keep going if simply rejected */
return -1;
}
--cp; /*Back up to newline.*/