From ee045a0406cd56a60bf69b45441bb0f72ceec0ca Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 9 Mar 2004 22:01:17 +0000 Subject: [PATCH] Make tor build on windows again. More work still needed svn:r1247 --- trunk/Win32Build/or/or.dsp | 28 +++++++++++++----- trunk/Win32Build/tor/tor.ncb | Bin 107520 -> 197632 bytes trunk/Win32Build/tor/tor.opt | Bin 55808 -> 58880 bytes trunk/src/common/fakepoll.c | 2 +- trunk/src/common/log.c | 5 +++- trunk/src/common/tortls.c | 2 +- trunk/src/common/util.c | 35 +++++++++++++++++++--- trunk/src/common/util.h | 3 ++ trunk/src/or/buffers.c | 2 +- trunk/src/or/circuit.c | 4 +-- trunk/src/or/connection.c | 11 ++++--- trunk/src/or/connection_edge.c | 4 +-- trunk/src/or/or.h | 3 +- trunk/src/or/routerlist.c | 52 ++++++++++++++++++++++++--------- trunk/src/win32/orconfig.h | 3 ++ 15 files changed, 115 insertions(+), 39 deletions(-) diff --git a/trunk/Win32Build/or/or.dsp b/trunk/Win32Build/or/or.dsp index 77bbf8916b..7378ac7d8a 100644 --- a/trunk/Win32Build/or/or.dsp +++ b/trunk/Win32Build/or/or.dsp @@ -74,7 +74,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"d:\openssl\lib\vc" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/tor.exe" /pdbtype:sept /libpath:"d:\openssl\lib\vc" !ENDIF @@ -111,19 +111,15 @@ SOURCE=..\..\src\or\connection.c # End Source File # Begin Source File -SOURCE=..\..\src\or\connection_ap.c -# End Source File -# Begin Source File - SOURCE=..\..\src\or\connection_edge.c # End Source File # Begin Source File -SOURCE=..\..\src\or\connection_exit.c +SOURCE=..\..\src\or\connection_or.c # End Source File # Begin Source File -SOURCE=..\..\src\or\connection_or.c +SOURCE=..\..\src\or\cpuworker.c # End Source File # Begin Source File @@ -135,6 +131,10 @@ SOURCE=..\..\src\or\directory.c # End Source File # Begin Source File +SOURCE=..\..\src\or\dirserv.c +# End Source File +# Begin Source File + SOURCE=..\..\src\or\dns.c # End Source File # Begin Source File @@ -155,7 +155,11 @@ SOURCE=..\..\src\or\onion.c # End Source File # Begin Source File -SOURCE=..\..\src\or\routers.c +SOURCE=..\..\src\or\router.c +# End Source File +# Begin Source File + +SOURCE=..\..\src\or\routerlist.c # End Source File # Begin Source File @@ -163,6 +167,10 @@ SOURCE=..\..\src\or\tor_main.c # End Source File # Begin Source File +SOURCE=..\..\src\common\tortls.c +# End Source File +# Begin Source File + SOURCE=..\..\src\common\util.c # End Source File # End Group @@ -203,6 +211,10 @@ SOURCE=..\..\src\common\torint.h # End Source File # Begin Source File +SOURCE=..\..\src\common\tortls.h +# End Source File +# Begin Source File + SOURCE=..\..\src\or\tree.h # End Source File # Begin Source File diff --git a/trunk/Win32Build/tor/tor.ncb b/trunk/Win32Build/tor/tor.ncb index 535305ac99a72d848c7998344902ca674d46b893..fadbcf1e5058f360893f04ab0c00d52a26c2f873 100644 GIT binary patch literal 197632 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 P18;KRO%DA3;lTd@HTPCF delta 5223 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 diff --git a/trunk/Win32Build/tor/tor.opt b/trunk/Win32Build/tor/tor.opt index 8ae08d42887fefb60b0496e21633cdd1c0ff4324..0b4de68766b9a5a268c1e2595e391d73055cfd77 100644 GIT binary patch literal 58880 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 literal 55808 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 U4wHPkj&&zH!B_16LI1D+1Cr+-umAu6 diff --git a/trunk/src/common/fakepoll.c b/trunk/src/common/fakepoll.c index 4465b5101e..8b9242e050 100644 --- a/trunk/src/common/fakepoll.c +++ b/trunk/src/common/fakepoll.c @@ -32,7 +32,7 @@ int tor_poll(struct pollfd *ufds, unsigned int nfds, int timeout) { - int idx, maxfd, fd; + unsigned int idx, maxfd, fd; int r; #ifdef MS_WINDOWS int any_fds_set = 0; diff --git a/trunk/src/common/log.c b/trunk/src/common/log.c index 947029079a..77e53449fe 100644 --- a/trunk/src/common/log.c +++ b/trunk/src/common/log.c @@ -3,6 +3,9 @@ /* $Id$ */ #include "../or/or.h" +#ifdef MS_WINDOWS +#define vsnprintf _vsnprintf +#endif struct logfile_t; typedef struct logfile_t { @@ -35,7 +38,7 @@ static INLINE void format_msg(char *buf, size_t buf_len, { time_t t; struct timeval now; - int n; + size_t n; buf_len -= 2; /* subtract 2 characters so we have room for \n\0 */ diff --git a/trunk/src/common/tortls.c b/trunk/src/common/tortls.c index 860fb10438..1531ea211e 100644 --- a/trunk/src/common/tortls.c +++ b/trunk/src/common/tortls.c @@ -493,7 +493,7 @@ tor_tls_get_peer_cert_nickname(tor_tls *tls, char *buf, int buflen) lenout = X509_NAME_get_text_by_NID(name, nid, buf, buflen); if (lenout == -1) goto error; - if (strspn(buf, LEGAL_NICKNAME_CHARACTERS) != lenout) { + if (((int)strspn(buf, LEGAL_NICKNAME_CHARACTERS)) < lenout) { log_fn(LOG_WARN, "Peer certificate nickname has illegal characters."); goto error; } diff --git a/trunk/src/common/util.c b/trunk/src/common/util.c index 7cbbca4778..3c62956132 100644 --- a/trunk/src/common/util.c +++ b/trunk/src/common/util.c @@ -283,7 +283,7 @@ time_t tor_timegm (struct tm *tm) { /* a wrapper for write(2) that makes sure to write all count bytes. * Only use if fd is a blocking fd. */ int write_all(int fd, const char *buf, size_t count) { - int written = 0; + size_t written = 0; int result; while(written != count) { @@ -298,7 +298,7 @@ int write_all(int fd, const char *buf, size_t count) { /* a wrapper for read(2) that makes sure to read all count bytes. * Only use if fd is a blocking fd. */ int read_all(int fd, char *buf, size_t count) { - int numread = 0; + size_t numread = 0; int result; while(numread != count) { @@ -507,6 +507,7 @@ file_status_t file_status(const char *fname) 0. Else returns -1. */ int check_private_dir(const char *dirname, int create) { + int r; struct stat st; if (stat(dirname, &st)) { if (errno != ENOENT) { @@ -519,7 +520,12 @@ int check_private_dir(const char *dirname, int create) return -1; } log(LOG_INFO, "Creating directory %s", dirname); - if (mkdir(dirname, 0700)) { +#ifdef MS_WINDOWS + r = mkdir(dirname); +#else + r = mkdir(dirname, 0700); +#endif + if (r) { log(LOG_WARN, "Error creating directory %s: %s", dirname, strerror(errno)); return -1; @@ -531,6 +537,7 @@ int check_private_dir(const char *dirname, int create) log(LOG_WARN, "%s is not a directory", dirname); return -1; } +#ifndef MS_WINDOWS if (st.st_uid != getuid()) { log(LOG_WARN, "%s is not owned by this UID (%d)", dirname, (int)getuid()); return -1; @@ -545,6 +552,7 @@ int check_private_dir(const char *dirname, int create) return 0; } } +#endif return 0; } @@ -787,7 +795,7 @@ void finish_daemon(void) } #else /* defined(MS_WINDOWS) */ -void start_daemon(void) {} +void start_daemon(char *cp) {} void finish_daemon(void) {} #endif @@ -855,3 +863,22 @@ int switch_id(char *user, char *group) { return -1; } +int tor_inet_aton(const char *c, struct in_addr* addr) +{ +#ifndef MS_WINDOWS + /* XXXX WWWW Should be HAVE_INET_ATON */ + return inet_aton(c, addr); +#else + uint32_t r; + assert(c && addr); + if (strcmp(c, "255.255.255.255") == 0) { + addr->s_addr = 0xFFFFFFFFu; + return 1; + } + r = inet_addr(c); + if (r == INADDR_NONE) + return 0; + addr->s_addr = r; + return 1; +#endif +} \ No newline at end of file diff --git a/trunk/src/common/util.h b/trunk/src/common/util.h index 850b9015ac..02cde56046 100644 --- a/trunk/src/common/util.h +++ b/trunk/src/common/util.h @@ -102,6 +102,9 @@ void finish_daemon(void); void write_pidfile(char *filename); int switch_id(char *user, char *group); +struct in_addr; +int tor_inet_aton(const char *cp, struct in_addr *addr); + /* For stupid historical reasons, windows sockets have an independent set of * errnos which they use as the fancy strikes them. */ diff --git a/trunk/src/or/buffers.c b/trunk/src/or/buffers.c index 55a4bced99..1ddf9d349d 100644 --- a/trunk/src/or/buffers.c +++ b/trunk/src/or/buffers.c @@ -433,7 +433,7 @@ int fetch_from_buf_socks(buf_t *buf, socks_request_t *req) { log_fn(LOG_WARN,"socks5: offered methods don't include 'no auth'. Rejecting."); req->replylen = 2; /* 2 bytes of response */ req->reply[0] = 5; /* socks5 reply */ - req->reply[1] = 0xFF; /* reject all methods */ + req->reply[1] = '\xFF'; /* reject all methods */ return -1; } buf_remove_from_front(buf,2+nummethods);/* remove packet from buf */ diff --git a/trunk/src/or/circuit.c b/trunk/src/or/circuit.c index 3955505179..e0e7aa607c 100644 --- a/trunk/src/or/circuit.c +++ b/trunk/src/or/circuit.c @@ -6,7 +6,7 @@ extern or_options_t options; /* command-line and config-file options */ -static int relay_crypt(circuit_t *circ, cell_t *cell, char cell_direction, +static int relay_crypt(circuit_t *circ, cell_t *cell, int cell_direction, crypt_path_t **layer_hint, char *recognized); static connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell, int cell_direction); static void circuit_free_cpath_node(crypt_path_t *victim); @@ -488,7 +488,7 @@ int circuit_receive_relay_cell(cell_t *cell, circuit_t *circ, } /* wrap this into receive_relay_cell one day */ -static int relay_crypt(circuit_t *circ, cell_t *cell, char cell_direction, +static int relay_crypt(circuit_t *circ, cell_t *cell, int cell_direction, crypt_path_t **layer_hint, char *recognized) { crypt_path_t *thishop; relay_header_t rh; diff --git a/trunk/src/or/connection.c b/trunk/src/or/connection.c index 7dc177d4dc..1c7e3cf219 100644 --- a/trunk/src/or/connection.c +++ b/trunk/src/or/connection.c @@ -258,7 +258,7 @@ int connection_create_listener(char *bindaddress, uint16_t bindport, int type) { return -1; } - setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*) &one, sizeof(one)); if(bind(s,(struct sockaddr *)&bindaddr,sizeof(bindaddr)) < 0) { log_fn(LOG_WARN,"Could not bind to port %u: %s",bindport,strerror(errno)); @@ -418,21 +418,24 @@ int retry_all_connections(void) { if(options.ORPort) { listener_close_if_present(CONN_TYPE_OR_LISTENER); - if(connection_create_listener(options.ORBindAddress, options.ORPort, + if(connection_create_listener(options.ORBindAddress, + (uint16_t) options.ORPort, CONN_TYPE_OR_LISTENER) < 0) return -1; } if(options.DirPort) { listener_close_if_present(CONN_TYPE_DIR_LISTENER); - if(connection_create_listener(options.DirBindAddress, options.DirPort, + if(connection_create_listener(options.DirBindAddress, + (uint16_t) options.DirPort, CONN_TYPE_DIR_LISTENER) < 0) return -1; } if(options.SocksPort) { listener_close_if_present(CONN_TYPE_AP_LISTENER); - if(connection_create_listener(options.SocksBindAddress, options.SocksPort, + if(connection_create_listener(options.SocksBindAddress, + (uint16_t) options.SocksPort, CONN_TYPE_AP_LISTENER) < 0) return -1; } diff --git a/trunk/src/or/connection_edge.c b/trunk/src/or/connection_edge.c index fb4b424278..aa861be847 100644 --- a/trunk/src/or/connection_edge.c +++ b/trunk/src/or/connection_edge.c @@ -1003,7 +1003,7 @@ static uint32_t client_dns_lookup_entry(const char *address) assert(address); - if (inet_aton(address, &in)) { + if (tor_inet_aton(address, &in)) { log_fn(LOG_DEBUG, "Using static address %s (%08lX)", address, (unsigned long)ntohl(in.s_addr)); return ntohl(in.s_addr); @@ -1039,7 +1039,7 @@ static void client_dns_set_entry(const char *address, uint32_t val) assert(address); assert(val); - if (inet_aton(address, &in)) + if (tor_inet_aton(address, &in)) return; search.address = (char*) address; now = time(NULL); diff --git a/trunk/src/or/or.h b/trunk/src/or/or.h index 47a3474815..383fc97994 100644 --- a/trunk/src/or/or.h +++ b/trunk/src/or/or.h @@ -85,6 +85,7 @@ #ifdef MS_WINDOWS #include #include +#include #define WIN32_LEAN_AND_MEAN #include #define snprintf _snprintf @@ -349,7 +350,7 @@ struct connection_t { * This is always in the range 0..1<<15-1.*/ /* bandwidth and receiver_bucket only used by ORs in OPEN state: */ - uint32_t bandwidth; /* connection bandwidth. */ + int bandwidth; /* connection bandwidth. */ int receiver_bucket; /* when this hits 0, stop receiving. Every second we * add 'bandwidth' to this, capping it at 10*bandwidth. */ diff --git a/trunk/src/or/routerlist.c b/trunk/src/or/routerlist.c index f47d829582..4ade31c6f2 100644 --- a/trunk/src/or/routerlist.c +++ b/trunk/src/or/routerlist.c @@ -541,6 +541,36 @@ int router_exit_policy_rejects_all(routerinfo_t *router) { == ADDR_POLICY_REJECTED; } +static time_t parse_time(const char *cp) +{ + struct tm st_tm; + /* XXXX WWWW should be HAVE_STRPTIME */ +#ifndef MS_WINDOWS + if (!strptime(cp, "%Y-%m-%d %H:%M:%S", &st_tm)) { + log_fn(LOG_WARN, "Published time was unparseable"); return 0; + } +#else + unsigned int year=0, month=0, day=0, hour=100, minute=100, second=100; + if (scanf("%u-%u-%u %u:%u:%u", cp, &year, &month, + &day, &hour, &minute, &second) < 6) { + log_fn(LOG_WARN, "Published time was unparseable"); return 0; + } + if (year < 2000 || month < 1 || month > 12 || day < 1 || day > 31 || + hour > 24 || minute > 61 || second > 62) { + log_fn(LOG_WARN, "Published time was nonsensical"); return 0; + } + st_tm.tm_year = year; + st_tm.tm_mon = month; + st_tm.tm_mday = day; + st_tm.tm_hour = hour; + st_tm.tm_min = minute; + st_tm.tm_sec = second; +#endif + return tor_timegm(&st_tm); + +} + + /* Helper function: parse a directory from 's' and, when done, store the * resulting routerlist in *dest, freeing the old value if necessary. * If pkey is provided, we check the directory signature with pkey. @@ -555,7 +585,6 @@ router_get_routerlist_from_directory_impl(const char *str, char signed_digest[128]; routerlist_t *new_dir = NULL; char *versions = NULL; - struct tm published; time_t published_on; char *good_nickname_lst[1024]; int n_good_nicknames = 0; @@ -604,10 +633,9 @@ router_get_routerlist_from_directory_impl(const char *str, } assert(tok->n_args == 1); - if (!strptime(tok->args[0], "%Y-%m-%d %H:%M:%S", &published)) { - log_fn(LOG_WARN, "Published time was unparseable"); goto err; + if (!(published_on = parse_time(tok->args[0]))) { + goto err; } - published_on = tor_timegm(&published); if (!(tok = find_first_by_keyword(tokens, K_RECOMMENDED_SOFTWARE))) { log_fn(LOG_WARN, "Missing recommended-software line from directory."); @@ -781,7 +809,6 @@ routerinfo_t *router_get_entry_from_string(const char *s, char digest[128]; smartlist_t *tokens = NULL, *exit_policy_tokens = NULL; directory_token_t *tok; - struct tm published; int t, i; int ports_set, bw_set; @@ -876,11 +903,8 @@ routerinfo_t *router_get_entry_from_string(const char *s, log_fn(LOG_WARN, "Missing published time"); goto err; } assert(tok->n_args == 1); - if (!strptime(tok->args[0], "%Y-%m-%d %H:%M:%S", &published)) { - log_fn(LOG_WARN, "Published time was unparseable"); goto err; - } - router->published_on = tor_timegm(&published); - + if (!(router->published_on = parse_time(tok->args[0]))) + goto err; if (!(tok = find_first_by_keyword(tokens, K_ONION_KEY))) { log_fn(LOG_WARN, "Missing onion key"); goto err; @@ -1056,7 +1080,7 @@ router_add_exit_policy(routerinfo_t *router, directory_token_t *tok) { if (strcmp(address, "*") == 0) { newe->addr = 0; - } else if (inet_aton(address, &in) != 0) { + } else if (tor_inet_aton(address, &in) != 0) { newe->addr = ntohl(in.s_addr); } else { log_fn(LOG_WARN, "Malformed IP %s in exit policy; rejecting.", @@ -1074,7 +1098,7 @@ router_add_exit_policy(routerinfo_t *router, directory_token_t *tok) { if (!*endptr) { /* strtol handled the whole mask. */ newe->msk = ~((1<<(32-bits))-1); - } else if (inet_aton(mask, &in) != 0) { + } else if (tor_inet_aton(mask, &in) != 0) { newe->msk = ntohl(in.s_addr); } else { log_fn(LOG_WARN, "Malformed mask %s on exit policy; rejecting.", @@ -1087,11 +1111,11 @@ router_add_exit_policy(routerinfo_t *router, directory_token_t *tok) { newe->prt_max = 65535; } else { endptr = NULL; - newe->prt_min = strtol(port, &endptr, 10); + newe->prt_min = (uint16_t) strtol(port, &endptr, 10); if (*endptr == '-') { port = endptr+1; endptr = NULL; - newe->prt_max = strtol(port, &endptr, 10); + newe->prt_max = (uint16_t) strtol(port, &endptr, 10); if (*endptr) { log_fn(LOG_WARN, "Malformed port %s on exit policy; rejecting.", port); diff --git a/trunk/src/win32/orconfig.h b/trunk/src/win32/orconfig.h index 3170f9e3e5..29524513ba 100644 --- a/trunk/src/win32/orconfig.h +++ b/trunk/src/win32/orconfig.h @@ -145,3 +145,6 @@ /* Version number of package */ #define VERSION "0.0.2pre6" + +/* XXXX WWWW */ +#define CONFDIR "" \ No newline at end of file