diff options
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/config.c | 136 | ||||
-rw-r--r-- | src/or/main.c | 3 | ||||
-rw-r--r-- | src/or/or.h | 1 | ||||
-rw-r--r-- | src/or/routerlist.c | 4 |
4 files changed, 127 insertions, 17 deletions
diff --git a/src/or/config.c b/src/or/config.c index 713a58508..e3ee6a5e2 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -210,6 +210,112 @@ static void config_assign(or_options_t *options, struct config_line *list) { } } +/* XXX are there any other specifiers we want to give so making + * a several-thousand-byte string is less painful? */ +const char default_dirservers_string[] = +"router moria1 moria.mit.edu 9001 9021 9031 800000\n" +"platform Tor 0.0.2pre8 on Linux moria.mit.edu 2.4.18-27.7.xbigmem #1 SMP Fri Mar 14 05:08:50 EST 2003 i686\n" +"published 2003-09-30 23:14:08\n" +"onion-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBANoIvHieyHUTzIacbnWOnyTyzGrLOdXqbcjz2GGMxyHEd5K1bO1ZBNHP\n" +"9i5qLQpN5viFk2K2rEGuG8tFgDEzSWZEtBqv3NVfUdiumdERWMBwlaQ0MVK4C+jf\n" +"y5gZ8KI3o9ZictgPS1AQF+Kk932/vIHTuRIUKb4ILTnQilNvID0NAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"link-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAPt97bGDd9siVjPd7Xuq2s+amMEOLIj9961aSdP6/OT+BS1Q4TX2dNOX\n" +"ZNAl63Z2fQISsR81+nfoqRLYCKxhajsD7LRvRTaRwUrWemVqFevmZ4nJrHw6FoU3\n" +"xNUIHRMA8X2DZ+l5qgnWZb7JU50ohhX5OpMSyysXnik51J8hD5mBAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"signing-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAMHa0ZC/jo2Q2DrwKYF/6ZbmZ27PFYG91u4gUzzmZ/VXLpZ8wNzEV3oW\n" +"nt+I61048fBiC1frT1/DZ351n2bLSk9zJbB6jyGZJn0380FPRX3+cXyXS0Gq8Ril\n" +"xkhMQf5XuNFUb8UmYPSOH4WErjvYjKvU+gfjbK/82Jo9SuHpYz+BAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"router-signature\n" +"-----BEGIN SIGNATURE-----\n" +"Td3zb5d6uxO8oYGlmEHGzIdLuVm9s1Afqtm29JvRnnviQ36j6FZPlzPUaMVOUayn\n" +"Wtz/CbaMj7mHSufpQ68wCLb1lQrtQkn7MkAWcQPIvZjpYh3UrcWrpfm7f/D+nKeN\n" +"Z7UovF36xhCacjATNHhQNHHZHH6yONwN+Rf/N4kyPHw=\n" +"-----END SIGNATURE-----\n" +"\n" +"router moria2 moria.mit.edu 9002 9022 9032 800000\n" +"platform Tor 0.0.2pre8 on Linux moria.mit.edu 2.4.18-27.7.xbigmem #1 SMP Fri Mar 14 05:08:50 EST 2003 i686\n" +"published 2003-09-30 23:14:05\n" +"onion-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAM4Cc/npgYC54XrYLC+grVxJp7PDmNO2DRRJOxKttBBtvLpnR1UaueTi\n" +"kyknT5kmlx+ihgZF/jmye//2dDUp2+kK/kSkpRV4xnDLXZmed+sNSQxqmm9TtZQ9\n" +"/hjpxhp5J9HmUTYhntBs+4E4CUKokmrI6oRLoln4SA39AX9QLPcnAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"link-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAN7JVeCIJ7+0ZJew5ScOU58rTUqjGt1Z1Rkursc7WabEb8jno45VZwIs\n" +"dkjnl31i36KHyyS7kQdHgkvG5EiyZiRipFAcoTaYv3Gvf1No9cXL6IhT3y/37dJ/\n" +"kFPEMb/G2wdkJCC+D8fMwHBwMuqAg0JGuhoBOz0ArCgK3fq0BLilAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"signing-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAOcrht/y5rkaahfX7sMe2qnpqoPibsjTSJaDvsUtaNP/Bq0MgNDGOR48\n" +"rtwfqTRff275Edkp/UYw3G3vSgKCJr76/bqOHCmkiZrnPV1zxNfrK18gNw2Cxre0\n" +"nTA+fD8JQqpPtb8b0SnG9kwy75eS//sRu7TErie2PzGMxrf9LH0LAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"router-signature\n" +"-----BEGIN SIGNATURE-----\n" +"X10a9Oc0LKNYKLDVzjRTIVT3NnE0y+xncllDDHSJSXR97fz3MBHGDqhy0Vgha/fe\n" +"H/Y2E59oG01lYQ73j3JN+ibsCMtkzJDx2agCpV0LmakAD9ekHrYDWm/S41Ru6kf+\n" +"PsyHpXlh7cZuGEX4U1pblSDFrQZ9L1vTkpfW+COzEvI=\n" +"-----END SIGNATURE-----\n" +"\n" +"router moria3 moria.mit.edu 9003 9023 9033 800000\n" +"platform Tor 0.0.2pre8 on Linux moria.mit.edu 2.4.18-27.7.xbigmem #1 SMP Fri Mar 14 05:08:50 EST 2003 i686\n" +"published 2003-09-30 23:14:07\n" +"onion-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBANS6J/Er9fYo03fjUUVesc7We9Z6xIevyDJH39pYS4NUlcr5ExYgSVFJ\n" +"95aLCNx1x8Rf5YtiBKYuT3plBO/+rfuX+0iAGNkz/y3SlJVGz6aeptU3wN8CkvCL\n" +"zATEcnl4QSPhHX0wFB9A3t7wZ+Bat1PTI029lax/BkoS9JG5onHPAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"link-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAKUMY8p+7LBu7dEJnOR9HqbfcD6c4/f9GqJt3o29uu4XJPD8z2XGVBik\n" +"pZBLijhYS6U7GFg0NLR4zBlsLyB8TxHeaz5KJidJjy+BfC01jz1xwVTYDlmGVpc1\n" +"0mw0Ag0ND6aOQKKhelxhTI3Bf0R9olEXuSUKEWx3EMIz2qhLd9oDAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"signing-key\n" +"-----BEGIN RSA PUBLIC KEY-----\n" +"MIGJAoGBAMqgq83cwzSid2LSvzsn2rvkD8U0tWvqF6PuQAsKP3QHFqtBO+66pnIm\n" +"CbiY2e6o01tmR47t557LuUCodEc8Blggxjg3ZEzvP42hsGB9LwQbcrU7grPRk0G0\n" +"IltsOF9TZ+66gCeU7LxExLdAMqT2Tx6VT4IREPJMeNxSiceEjbABAgMBAAE=\n" +"-----END RSA PUBLIC KEY-----\n" +"router-signature\n" +"-----BEGIN SIGNATURE-----\n" +"GWpK2Ux/UwDaNUHwq+Xn7denyYFGS8SIWwqiMgHyUzc5wj1t2gWubJ/rMyGL59U3\n" +"o6L/9qV34aa5UyNNBHXwYkxy7ixgPURaRYpAbkQKPU3ew8BgNXG/MNLYllIUkrbb\n" +"h6G5u8RGbto+Nby/OjIh9TqdgK/B1sOdwAHI/IXiDoY=\n" +"-----END SIGNATURE-----\n" +; + +/* Call this function when they're using the default torrc but + * we can't find it. For now, just hard-code what comes in the + * default torrc. + */ +static int config_assign_default(or_options_t *options) { + + /* set them up as a client only */ + options->SocksPort = 9050; + + /* plus give them a dirservers file */ + if(router_set_routerlist_from_string(default_dirservers_string) < 0) { + log_fn(LOG_WARN,"Bug: the default dirservers internal string is corrupt."); + return -1; + } + + return 0; +} + /* prints the usage of tor. */ void print_usage(void) { printf("tor -f <torrc> [args]\n" @@ -289,6 +395,7 @@ int getconfig(int argc, char **argv, or_options_t *options) { static int backup_argc; char *previous_pidfile = NULL; int previous_runasdaemon = 0; + int using_default_torrc; if(first_load) { /* first time we're called. save commandline args */ backup_argv = argv; @@ -318,23 +425,31 @@ int getconfig(int argc, char **argv, or_options_t *options) { } if(i < argc-1) { /* we found one */ fname = argv[i+1]; + using_default_torrc = 0; } else { /* didn't find one, try CONFDIR */ fname = CONFDIR "/torrc"; + using_default_torrc = 1; } log(LOG_DEBUG,"Opening config file '%s'",fname); cf = config_open(fname); if(!cf) { - log(LOG_WARN, "Unable to open configuration file '%s'.",fname); - return -1; + if(using_default_torrc == 1) { + log(LOG_WARN, "Configuration file '%s' not found. Using defaults.",fname); + if(config_assign_default(options) < 0) + return -1; + } else { + log(LOG_WARN, "Unable to open configuration file '%s'.",fname); + return -1; + } + } else { /* it opened successfully. use it. */ + cl = config_get_lines(cf); + if(!cl) return -1; + config_assign(options,cl); + config_free_lines(cl); + config_close(cf); } - cl = config_get_lines(cf); - if(!cl) return -1; - config_assign(options,cl); - config_free_lines(cl); - config_close(cf); - /* go through command-line variables too */ cl = config_get_commandlines(argc,argv); config_assign(options,cl); @@ -370,11 +485,6 @@ int getconfig(int argc, char **argv, or_options_t *options) { } } - if(options->RouterFile == NULL) { - log(LOG_WARN,"RouterFile option required, but not found."); - result = -1; - } - if(options->ORPort < 0) { log(LOG_WARN,"ORPort option can't be negative."); result = -1; diff --git a/src/or/main.c b/src/or/main.c index 511df7763..e67d3c897 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -452,7 +452,8 @@ static int do_main_loop(void) { int poll_result; /* load the routers file */ - if(router_set_routerlist_from_file(options.RouterFile) < 0) { + if(options.RouterFile && + router_set_routerlist_from_file(options.RouterFile) < 0) { log_fn(LOG_ERR,"Error loading router list."); return -1; } diff --git a/src/or/or.h b/src/or/or.h index 5ebe9ffb4..998fb7fc9 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -810,6 +810,7 @@ void router_get_routerlist(routerlist_t **prouterlist); void routerinfo_free(routerinfo_t *router); void router_mark_as_down(char *nickname); int router_set_routerlist_from_file(char *routerfile); +int router_set_routerlist_from_string(const char *s); int router_get_dir_hash(const char *s, char *digest); int router_get_router_hash(const char *s, char *digest); int router_set_routerlist_from_directory(const char *s, crypto_pk_env_t *pkey); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index bb067f985..75674849c 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -66,8 +66,6 @@ typedef struct directory_token_t { /* static function prototypes */ static int -router_set_routerlist_from_string(const char *s); -static int router_get_list_from_string_impl(const char **s, routerlist_t **dest, int n_good_nicknames, const char **good_nickname_lst); @@ -265,7 +263,7 @@ int router_set_routerlist_from_file(char *routerfile) /* Helper function: read routerinfo elements from s, and throw out the * ones that don't parse and resolve. Replace the current * routerlist. */ -static int router_set_routerlist_from_string(const char *s) +int router_set_routerlist_from_string(const char *s) { if (router_get_list_from_string_impl(&s, &routerlist, -1, NULL)) { log(LOG_WARN, "Error parsing router file"); |