r9386@Kushana: nickm | 2006-10-25 17:35:38 -0400

Resolve bug 347: translate v0 controller signal numbers into internal signal numbers; leave v1 signal numbers alone.


svn:r8828
This commit is contained in:
Nick Mathewson 2006-10-25 21:39:42 +00:00
parent c928b85cfa
commit 5c670a186c
4 changed files with 17 additions and 30 deletions

View File

@ -64,6 +64,8 @@ Changes in version 0.1.2.3-alpha - 2006-10-??
requests will now get an error rather than timing out.
- Resolve two memory leaks when rebuilding the on-disk router cache
(reported by fookoowa).
- Controller signals now work on non-Unix platforms that don't define
SIGUSR1 and SIGUSR2 the way we expect.
Changes in version 0.1.2.2-alpha - 2006-10-07

View File

@ -1252,6 +1252,18 @@ handle_control_signal(control_connection_t *conn, uint32_t len,
return 0;
} else {
sig = (uint8_t)body[0];
switch (sig)
{
case 1: sig = SIGHUP; break;
case 2: sig = SIGINT; break;
case 10: sig = SIGUSR1; break;
case 12: sig = SIGUSR2; break;
case 15: sig = SIGTERM; break;
case SIGNEWNYM: break;
default:
send_control0_error(conn, ERR_SYNTAX, "Unrecognized signal number.");
return 0;
}
}
} else {
int n = 0;
@ -1281,17 +1293,9 @@ handle_control_signal(control_connection_t *conn, uint32_t len,
return 0;
}
if (!control_signal_check(sig)) {
if (STATE_IS_V0(conn->_base.state))
send_control0_error(conn, ERR_SYNTAX, "Unrecognized signal number.");
else
connection_write_str_to_buf("551 Unable to act on signal\r\n",
conn);
} else {
/* Send DONE first, in case the signal makes us shut down. */
send_control_done(conn);
control_signal_act(sig);
}
return 0;
}

View File

@ -1229,24 +1229,6 @@ do_main_loop(void)
}
}
/* DOCDOC */
int
control_signal_check(int the_signal)
{
switch (the_signal)
{
case 1:
case 2:
case 10:
case 12:
case 15:
case SIGNEWNYM:
return 1;
default:
return 0;
}
}
/** Used to implement the SIGNAL control command: if we accept
* <b>the_signal</b> as a remote pseudo-signal, act on it. */
/* We don't re-use catch() here because:

View File

@ -2273,7 +2273,6 @@ void connection_start_writing(connection_t *conn);
void directory_all_unreachable(time_t now);
void directory_info_has_arrived(time_t now, int from_cache);
int control_signal_check(int the_signal);
void control_signal_act(int the_signal);
void handle_signals(int is_parent);
void tor_cleanup(void);