mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
distinguish between "well-formed and rejected" and "not well
formed", when parsing server descriptors. svn:r3458
This commit is contained in:
@@ -984,6 +984,7 @@ directory_handle_command_post(connection_t *conn, char *headers,
|
||||
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");
|
||||
|
||||
+6
-4
@@ -312,8 +312,9 @@ dirserv_router_has_valid_address(routerinfo_t *ri)
|
||||
* 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)
|
||||
@@ -335,7 +336,7 @@ 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. */
|
||||
@@ -493,7 +494,8 @@ dirserv_load_from_directory_string(const char *dir)
|
||||
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.*/
|
||||
|
||||
Reference in New Issue
Block a user