summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-11-15 03:53:03 +0000
committerRoger Dingledine <arma@torproject.org>2004-11-15 03:53:03 +0000
commit47993ae6fbb84c22a5811e00390c20e03bae790b (patch)
tree673662acb54ff8294385973c82c149e1db2c017c
parentea97cb9c64b66ef7e3863fe4d72e19a525e285d4 (diff)
downloadtor-47993ae6fbb84c22a5811e00390c20e03bae790b.tar.gz
tor-47993ae6fbb84c22a5811e00390c20e03bae790b.zip
some fixes so far
svn:r2880
-rw-r--r--src/or/config.c27
-rw-r--r--src/or/control.c3
-rw-r--r--src/or/directory.c17
3 files changed, 28 insertions, 19 deletions
diff --git a/src/or/config.c b/src/or/config.c
index d30628134b..95e0308fdc 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -187,7 +187,7 @@ static int write_configuration_file(const char *fname, or_options_t *options);
/** Command-line and config-file options. */
static or_options_t *global_options=NULL;
-/** Name of ost recently read torrc file. */
+/** Name of most recently read torrc file. */
static char *config_fname = NULL;
/** Return the currently configured options. */
@@ -325,7 +325,7 @@ options_act(void) {
smin = config_dump_options(options, 1);
smax = config_dump_options(options, 0);
log_fn(LOG_DEBUG, "These are our options:\n%s",smax);
- log_fn(LOG_DEBUGS, "We changed these options:\n%s",smin);
+ log_fn(LOG_DEBUG, "We changed these options:\n%s",smin);
tor_free(smin);
tor_free(smax);
}
@@ -2081,16 +2081,25 @@ static int
write_configuration_file(const char *fname, or_options_t *options)
{
char fn_tmp[1024];
- char *new_val=NULL, *new_conf=NULL;
+ char *old_val=NULL, *new_val=NULL, *new_conf=NULL;
int rename_old = 0, r;
size_t len;
- if (fname && file_status(fname) == FN_FILE) {
- char *old_val = read_file_to_str(fname, 0);
- if (strcmpstart(old_val, GENERATED_FILE_PREFIX)) {
- rename_old = 1;
+ if (fname) {
+ switch (file_status(fname)) {
+ case FN_FILE:
+ old_val = read_file_to_str(fname, 0);
+ if (strcmpstart(old_val, GENERATED_FILE_PREFIX)) {
+ rename_old = 1;
+ }
+ tor_free(old_val);
+ break;
+ case FN_NOENT:
+ break;
+ default:
+ log_fn(LOG_WARN,"Config file %s is not a file? Failing.", fname);
+ return -1;
}
- tor_free(old_val);
}
if (!(new_conf = config_dump_options(options, 1))) {
@@ -2109,7 +2118,7 @@ write_configuration_file(const char *fname, or_options_t *options)
log_fn(LOG_WARN, "Filename too long");
goto err;
}
- if (file_status(fn_tmp) != FN_FILE)
+ if (file_status(fn_tmp) == FN_NOENT)
break;
++i;
}
diff --git a/src/or/control.c b/src/or/control.c
index f847cfee2c..8e0c1aeb62 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -373,11 +373,10 @@ handle_control_saveconf(connection_t *conn, uint16_t len,
const char *body)
{
if (save_current_config()<0) {
- send_control_done(conn);
- } else {
send_control_error(conn, ERR_INTERNAL,
"Unable to write configuration to disk.");
}
+ send_control_done(conn);
return 0;
}
diff --git a/src/or/directory.c b/src/or/directory.c
index 4a9b212863..25c5939bb8 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -140,32 +140,33 @@ directory_post_to_dirservers(uint8_t purpose, const char *payload,
});
}
-/** Start a connection to a random running directory server, using connection
- * purpose 'purpose' requesting 'payload' (length 'payload_len'). The purpose
- * should be one of 'DIR_PURPOSE_FETCH_DIR' or 'DIR_PURPOSE_FETCH_RENDDESC' or
- * 'DIR_PURPOSE_FETCH_RUNNING_LIST.'
+/** Start a connection to a random running directory server, using
+ * connection purpose 'purpose' requesting 'resource'. The purpose
+ * should be one of 'DIR_PURPOSE_FETCH_DIR',
+ * 'DIR_PURPOSE_FETCH_RENDDESC', 'DIR_PURPOSE_FETCH_RUNNING_LIST.'
*/
void
directory_get_from_dirserver(uint8_t purpose, const char *resource)
{
routerinfo_t *r = NULL;
trusted_dir_server_t *ds = NULL;
+ int fascistfirewall = get_options()->FascistFirewall;
if (purpose == DIR_PURPOSE_FETCH_DIR) {
if (advertised_server_mode()) {
/* only ask authdirservers, and don't ask myself */
- ds = router_pick_trusteddirserver(1, get_options()->FascistFirewall);
+ ds = router_pick_trusteddirserver(1, fascistfirewall);
} else {
/* anybody with a non-zero dirport will do */
- r = router_pick_directory_server(1, get_options()->FascistFirewall);
+ r = router_pick_directory_server(1, fascistfirewall);
if (!r) {
log_fn(LOG_INFO, "No router found for directory; falling back to dirserver list");
- ds = router_pick_trusteddirserver(1, get_options()->FascistFirewall);
+ ds = router_pick_trusteddirserver(1, fascistfirewall);
}
}
} else if (purpose == DIR_PURPOSE_FETCH_RUNNING_LIST) {
/* right now, running-routers isn't cached, so ask a trusted directory */
- ds = router_pick_trusteddirserver(0, get_options()->FascistFirewall);
+ ds = router_pick_trusteddirserver(0, fascistfirewall);
} else { // (purpose == DIR_PURPOSE_FETCH_RENDDESC)
/* only ask authdirservers, any of them will do */
/* Never use fascistfirewall; we're going via Tor. */