Merge branch 'maint-0.2.2' into release-0.2.2
This commit is contained in:
commit
d4f10b8343
2
LICENSE
2
LICENSE
|
@ -13,7 +13,7 @@ Tor is distributed under this license:
|
|||
|
||||
Copyright (c) 2001-2004, Roger Dingledine
|
||||
Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
|
||||
Copyright (c) 2007-2010, The Tor Project, Inc.
|
||||
Copyright (c) 2007-2011, The Tor Project, Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Copyright (c) 2001-2004, Roger Dingledine
|
||||
# Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
|
||||
# Copyright (c) 2007-2010, The Tor Project, Inc.
|
||||
# Copyright (c) 2007-2011, The Tor Project, Inc.
|
||||
# See LICENSE for licensing information
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
AUTOMAKE_OPTIONS = foreign 1.7
|
||||
# else it keeps trying to put COPYING back in
|
||||
|
||||
SUBDIRS = src doc contrib
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
o Minor features
|
||||
- Make sure to disable DirPort if running as a bridge. DirPorts aren't
|
||||
used on bridges, and it makes bridge scanning way too easy.
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
o Minor bugfixes
|
||||
- Prevent calls from Libevent from inside Libevent log handlers.
|
||||
This had potential to cause a nasty set of crashes, especially if
|
||||
running Libevent with debug logging enabled, and running Tor
|
||||
with a controller watching for low-severity log messages.
|
||||
Bugfix on 0.1.0.2-rc. Fixes bug 2190.
|
||||
- Make Libevent log messages get delievered to controllers later,
|
||||
and not from inside the Libevent log handler. This prevents
|
||||
unsafe reentrant Libevent calls while still letting the log
|
||||
messages get through.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
o Build changes
|
||||
- Tor does not build packages correctly with Automake 1.6 and earlier;
|
||||
added a check to Makefile.am to make sure that we're building with
|
||||
Automake 1.7 or later.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
o Minor bugfixes
|
||||
- Fix compilation on mingw when a pthreads compatibility library
|
||||
has been installed. (We don't want to use it, so we shouldn't
|
||||
be including pthread.h.) Fixes bug 2313; bugfix on 0.1.0.1-rc.
|
|
@ -0,0 +1,4 @@
|
|||
o Minor bugfixes:
|
||||
- Fix a bunch of compile warnings revealed by mingw with gcc 4.5. Fixes
|
||||
bug 2314.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
o Minor bugfixes
|
||||
- Add a check for SIZE_T_MAX to tor_realloc to try to avoid
|
||||
underflow errors there too. Fixes bug 2324.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
o Major bugfixes (security):
|
||||
- Prevent a DoS attack by disallowing any zlib-compressed data
|
||||
whose compression factor is implausibly high. Fixes the
|
||||
second part of bug2324; found by doors.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
o Minor bugfixes
|
||||
- Fix a bug where we would assert if we ever had a
|
||||
cached-descriptors.new file (or another file read directly into
|
||||
memory) of exactly SIZE_T_CEILING bytes. Found by doors; fixes
|
||||
bug 2326; bugfix on 0.2.1.25.
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
o Minor bugfixes
|
||||
- Fix a bug where we would declare that we had run out of virtual
|
||||
addresses when the address space was only half-exhausted. Bugfix
|
||||
on 0.1.2.1-alpha.
|
||||
- Correctly handle the case where AutomapHostsOnResolve is set but no
|
||||
virtual addresses are available. Fixes bug2328, bugfix on
|
||||
0.1.2.1-alpha. Bug found by doorss.
|
||||
- Correctly handle wrapping around to when we run out of virtual address
|
||||
space. Found by cypherpunks, bugfix on 0.2.0.5-alpha.
|
|
@ -0,0 +1,7 @@
|
|||
o Minor bugfixes
|
||||
- Handle SOCKS messages longer than 128 bytes long correctly, rather
|
||||
than waiting forever for them to finish. Fixes bug 2330. Bugfix on
|
||||
0.2.0.16-alpha. Found by doorss.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
o Minor bugfixes:
|
||||
- Add assertions to check for overflow in arguments to
|
||||
base32_encode and base32_decode; fix a signed-unsigned
|
||||
comparison there too. These bugs are not actually reachable in
|
||||
Tor, but it's good to prevent future errors too. Found by
|
||||
doorss.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
o Minor bugfixes
|
||||
- Fix a bug with handling misformed replies to reverse DNS lookup
|
||||
requests in DNSPort. Bugfix on Tor 0.2.0.1-alpha. Related to a bug
|
||||
reported by doorss.
|
|
@ -0,0 +1,3 @@
|
|||
o Minor bugfixes
|
||||
- Detect broken platforms with a signed size_t, and refuse to
|
||||
build there. Found and analyzed by doorss and rransom.
|
|
@ -0,0 +1,6 @@
|
|||
o Minor features
|
||||
- If writing the state file to disk fails, wait up to an hour
|
||||
before retrying again. (Our old code would retry the write
|
||||
immediately.) Fixes bug 2346. Bugfix on Tor 0.1.1.3-alpha.
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
o Minor bugfixes
|
||||
- Fix some potential asserts and partsing issues with grossly
|
||||
malformed router caches. Fixes bug 2352. Found by doorss.
|
||||
Bugfix on Tor 0.2.1.27.
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
o Minor bugfixes
|
||||
- Correctly detect failures to create DNS requests when using Libevent
|
||||
versions before v2. (Before Libevent 2, we used our own evdns
|
||||
implementation. Its return values for Libevent's evdns_resolve_*()
|
||||
functions are not consistent with those from Libevent.) Found by
|
||||
Lodger; fixes bug 2363; bugfix on 0.2.2.6-alpha.
|
|
@ -0,0 +1,4 @@
|
|||
o Documentation
|
||||
- Document the default socks host and port (127.0.0.1:9050) for
|
||||
tor-resolve.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
o Minor bugfixes
|
||||
- Zero out a few more keys in memory before freeing them. Fixes bug
|
||||
2384 and part of bug 2385. These key instances found by
|
||||
"cypherpunks". Bugfix on 0.0.2pre9.
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
o Minor features:
|
||||
- Update to the January 1 2011 Maxmind GeoLite Country database.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
o Major bugfixes (security)
|
||||
- Fix a heap overflow bug where an adversary could cause heap
|
||||
corruption. This bug potentially allows remote code execution
|
||||
attacks. Found by debuger. Fixes CVE-2011-0427. Bugfix on
|
||||
0.1.2.10-rc.
|
||||
o Defensive programming
|
||||
- Introduce output size checks on all of our decryption functions.
|
||||
|
17
configure.in
17
configure.in
|
@ -588,6 +588,23 @@ if test "$tor_cv_time_t_signed" != no; then
|
|||
[Define to 1 iff time_t is signed])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([whether size_t is signed], tor_cv_size_t_signed, [
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
int main(int c, char**v) { if (((size_t)-1)<0) return 1; else return 0; }])],
|
||||
tor_cv_size_t_signed=no, tor_cv_size_t_signed=yes, tor_cv_size_t_signed=cross)
|
||||
])
|
||||
|
||||
if test "$tor_cv_size_t_signed" = cross; then
|
||||
AC_MSG_NOTICE([Cross compiling: assuming that size_t is not signed.])
|
||||
fi
|
||||
|
||||
if test "$tor_cv_size_t_signed" = yes; then
|
||||
AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.])
|
||||
fi
|
||||
|
||||
AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
|
|
|
@ -22,7 +22,7 @@ VIProductVersion "${VERSION}"
|
|||
VIAddVersionKey "ProductName" "Tor"
|
||||
VIAddVersionKey "Comments" "${WEBSITE}"
|
||||
VIAddVersionKey "LegalTrademarks" "Three line BSD"
|
||||
VIAddVersionKey "LegalCopyright" "©2004-2010, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
|
||||
VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
|
||||
VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
|
||||
VIAddVersionKey "FileVersion" "${VERSION}"
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ VIProductVersion "${VERSION}"
|
|||
VIAddVersionKey "ProductName" "Tor"
|
||||
VIAddVersionKey "Comments" "${WEBSITE}"
|
||||
VIAddVersionKey "LegalTrademarks" "Three line BSD"
|
||||
VIAddVersionKey "LegalCopyright" "©2004-2010, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
|
||||
VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
|
||||
VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
|
||||
VIAddVersionKey "FileVersion" "${VERSION}"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Copyright 2007-2008 Andrew Lewman
|
||||
Copyright 2009-2010 The Tor Project
|
||||
Copyright 2007-2008, Andrew Lewman
|
||||
Copyright 2009-2011, The Tor Project
|
||||
|
||||
----------------
|
||||
General Comments
|
||||
|
|
|
@ -19,6 +19,10 @@ DESCRIPTION
|
|||
**tor-resolve** is a simple script to connect to a SOCKS proxy that knows about
|
||||
the SOCKS RESOLVE command, hand it a hostname, and return an IP address.
|
||||
|
||||
By default, **tor-resolve** uses the Tor server running on 127.0.0.1 on SOCKS
|
||||
port 9050. If this isn't what you want, you should specify an explicit
|
||||
__sockshost__ and/or __socksport__ on the command line.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
**-v**::
|
||||
|
@ -42,4 +46,4 @@ See doc/socks-extensions.txt in the Tor package for protocol details.
|
|||
|
||||
AUTHORS
|
||||
-------
|
||||
Roger Dingledine <arma@mit.edu>, Nick Mathewson <nickm@alum.mit.edu>.
|
||||
Roger Dingledine <arma@mit.edu>, Nick Mathewson <nickm@alum.mit.edu>.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001, Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/* Implements a minimal interface to counter-mode AES. */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#ifndef _TOR_COMPAT_H
|
||||
|
@ -31,7 +31,7 @@
|
|||
#ifdef HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef HAVE_PTHREAD_H
|
||||
#if defined(HAVE_PTHREAD_H) && !defined(MS_WINDOWS)
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2009-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2009-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -65,19 +65,19 @@ libevent_logging_callback(int severity, const char *msg)
|
|||
}
|
||||
switch (severity) {
|
||||
case _EVENT_LOG_DEBUG:
|
||||
log(LOG_DEBUG, LD_NET, "Message from libevent: %s", buf);
|
||||
log(LOG_DEBUG, LD_NOCB|LD_NET, "Message from libevent: %s", buf);
|
||||
break;
|
||||
case _EVENT_LOG_MSG:
|
||||
log(LOG_INFO, LD_NET, "Message from libevent: %s", buf);
|
||||
log(LOG_INFO, LD_NOCB|LD_NET, "Message from libevent: %s", buf);
|
||||
break;
|
||||
case _EVENT_LOG_WARN:
|
||||
log(LOG_WARN, LD_GENERAL, "Warning from libevent: %s", buf);
|
||||
log(LOG_WARN, LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf);
|
||||
break;
|
||||
case _EVENT_LOG_ERR:
|
||||
log(LOG_ERR, LD_GENERAL, "Error from libevent: %s", buf);
|
||||
log(LOG_ERR, LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf);
|
||||
break;
|
||||
default:
|
||||
log(LOG_WARN, LD_GENERAL, "Message [%d] from libevent: %s",
|
||||
log(LOG_WARN, LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s",
|
||||
severity, buf);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#ifndef _TOR_CONTAINER_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001, Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -518,21 +518,23 @@ crypto_pk_generate_key_with_bits(crypto_pk_env_t *env, int bits)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Read a PEM-encoded private key from the string <b>s</b> into <b>env</b>.
|
||||
* Return 0 on success, -1 on failure.
|
||||
/** Read a PEM-encoded private key from the <b>len</b>-byte string <b>s</b>
|
||||
* into <b>env</b>. Return 0 on success, -1 on failure. If len is -1,
|
||||
* the string is nul-terminated.
|
||||
*/
|
||||
/* Used here, and used for testing. */
|
||||
int
|
||||
crypto_pk_read_private_key_from_string(crypto_pk_env_t *env,
|
||||
const char *s)
|
||||
const char *s, ssize_t len)
|
||||
{
|
||||
BIO *b;
|
||||
|
||||
tor_assert(env);
|
||||
tor_assert(s);
|
||||
tor_assert(len < INT_MAX && len < SIZE_T_CEILING);
|
||||
|
||||
/* Create a read-only memory BIO, backed by the NUL-terminated string 's' */
|
||||
b = BIO_new_mem_buf((char*)s, -1);
|
||||
/* Create a read-only memory BIO, backed by the string 's' */
|
||||
b = BIO_new_mem_buf((char*)s, (int)len);
|
||||
|
||||
if (env->key)
|
||||
RSA_free(env->key);
|
||||
|
@ -566,7 +568,8 @@ crypto_pk_read_private_key_from_filename(crypto_pk_env_t *env,
|
|||
}
|
||||
|
||||
/* Try to parse it. */
|
||||
r = crypto_pk_read_private_key_from_string(env, contents);
|
||||
r = crypto_pk_read_private_key_from_string(env, contents, -1);
|
||||
memset(contents, 0, strlen(contents));
|
||||
tor_free(contents);
|
||||
if (r)
|
||||
return -1; /* read_private_key_from_string already warned, so we don't.*/
|
||||
|
@ -704,6 +707,7 @@ crypto_pk_write_private_key_to_filename(crypto_pk_env_t *env,
|
|||
s[len]='\0';
|
||||
r = write_str_to_file(fname, s, 0);
|
||||
BIO_free(bio);
|
||||
memset(s, 0, strlen(s));
|
||||
tor_free(s);
|
||||
return r;
|
||||
}
|
||||
|
@ -807,9 +811,12 @@ crypto_pk_copy_full(crypto_pk_env_t *env)
|
|||
* in <b>env</b>, using the padding method <b>padding</b>. On success,
|
||||
* write the result to <b>to</b>, and return the number of bytes
|
||||
* written. On failure, return -1.
|
||||
*
|
||||
* <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
|
||||
* at least the length of the modulus of <b>env</b>.
|
||||
*/
|
||||
int
|
||||
crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to,
|
||||
crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen, int padding)
|
||||
{
|
||||
int r;
|
||||
|
@ -817,6 +824,7 @@ crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to,
|
|||
tor_assert(from);
|
||||
tor_assert(to);
|
||||
tor_assert(fromlen<INT_MAX);
|
||||
tor_assert(tolen >= crypto_pk_keysize(env));
|
||||
|
||||
r = RSA_public_encrypt((int)fromlen,
|
||||
(unsigned char*)from, (unsigned char*)to,
|
||||
|
@ -832,9 +840,13 @@ crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to,
|
|||
* in <b>env</b>, using the padding method <b>padding</b>. On success,
|
||||
* write the result to <b>to</b>, and return the number of bytes
|
||||
* written. On failure, return -1.
|
||||
*
|
||||
* <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
|
||||
* at least the length of the modulus of <b>env</b>.
|
||||
*/
|
||||
int
|
||||
crypto_pk_private_decrypt(crypto_pk_env_t *env, char *to,
|
||||
size_t tolen,
|
||||
const char *from, size_t fromlen,
|
||||
int padding, int warnOnFailure)
|
||||
{
|
||||
|
@ -844,6 +856,7 @@ crypto_pk_private_decrypt(crypto_pk_env_t *env, char *to,
|
|||
tor_assert(to);
|
||||
tor_assert(env->key);
|
||||
tor_assert(fromlen<INT_MAX);
|
||||
tor_assert(tolen >= crypto_pk_keysize(env));
|
||||
if (!env->key->p)
|
||||
/* Not a private key */
|
||||
return -1;
|
||||
|
@ -864,9 +877,13 @@ crypto_pk_private_decrypt(crypto_pk_env_t *env, char *to,
|
|||
* public key in <b>env</b>, using PKCS1 padding. On success, write the
|
||||
* signed data to <b>to</b>, and return the number of bytes written.
|
||||
* On failure, return -1.
|
||||
*
|
||||
* <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
|
||||
* at least the length of the modulus of <b>env</b>.
|
||||
*/
|
||||
int
|
||||
crypto_pk_public_checksig(crypto_pk_env_t *env, char *to,
|
||||
size_t tolen,
|
||||
const char *from, size_t fromlen)
|
||||
{
|
||||
int r;
|
||||
|
@ -874,6 +891,7 @@ crypto_pk_public_checksig(crypto_pk_env_t *env, char *to,
|
|||
tor_assert(from);
|
||||
tor_assert(to);
|
||||
tor_assert(fromlen < INT_MAX);
|
||||
tor_assert(tolen >= crypto_pk_keysize(env));
|
||||
r = RSA_public_decrypt((int)fromlen,
|
||||
(unsigned char*)from, (unsigned char*)to,
|
||||
env->key, RSA_PKCS1_PADDING);
|
||||
|
@ -896,6 +914,7 @@ crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const char *data,
|
|||
{
|
||||
char digest[DIGEST_LEN];
|
||||
char *buf;
|
||||
size_t buflen;
|
||||
int r;
|
||||
|
||||
tor_assert(env);
|
||||
|
@ -908,8 +927,9 @@ crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const char *data,
|
|||
log_warn(LD_BUG, "couldn't compute digest");
|
||||
return -1;
|
||||
}
|
||||
buf = tor_malloc(crypto_pk_keysize(env)+1);
|
||||
r = crypto_pk_public_checksig(env,buf,sig,siglen);
|
||||
buflen = crypto_pk_keysize(env)+1;
|
||||
buf = tor_malloc(buflen);
|
||||
r = crypto_pk_public_checksig(env,buf,buflen,sig,siglen);
|
||||
if (r != DIGEST_LEN) {
|
||||
log_warn(LD_CRYPTO, "Invalid signature");
|
||||
tor_free(buf);
|
||||
|
@ -929,9 +949,12 @@ crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const char *data,
|
|||
* <b>env</b>, using PKCS1 padding. On success, write the signature to
|
||||
* <b>to</b>, and return the number of bytes written. On failure, return
|
||||
* -1.
|
||||
*
|
||||
* <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
|
||||
* at least the length of the modulus of <b>env</b>.
|
||||
*/
|
||||
int
|
||||
crypto_pk_private_sign(crypto_pk_env_t *env, char *to,
|
||||
crypto_pk_private_sign(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen)
|
||||
{
|
||||
int r;
|
||||
|
@ -939,6 +962,7 @@ crypto_pk_private_sign(crypto_pk_env_t *env, char *to,
|
|||
tor_assert(from);
|
||||
tor_assert(to);
|
||||
tor_assert(fromlen < INT_MAX);
|
||||
tor_assert(tolen >= crypto_pk_keysize(env));
|
||||
if (!env->key->p)
|
||||
/* Not a private key */
|
||||
return -1;
|
||||
|
@ -957,16 +981,19 @@ crypto_pk_private_sign(crypto_pk_env_t *env, char *to,
|
|||
* <b>from</b>; sign the data with the private key in <b>env</b>, and
|
||||
* store it in <b>to</b>. Return the number of bytes written on
|
||||
* success, and -1 on failure.
|
||||
*
|
||||
* <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
|
||||
* at least the length of the modulus of <b>env</b>.
|
||||
*/
|
||||
int
|
||||
crypto_pk_private_sign_digest(crypto_pk_env_t *env, char *to,
|
||||
crypto_pk_private_sign_digest(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen)
|
||||
{
|
||||
int r;
|
||||
char digest[DIGEST_LEN];
|
||||
if (crypto_digest(digest,from,fromlen)<0)
|
||||
return -1;
|
||||
r = crypto_pk_private_sign(env,to,digest,DIGEST_LEN);
|
||||
r = crypto_pk_private_sign(env,to,tolen,digest,DIGEST_LEN);
|
||||
memset(digest, 0, sizeof(digest));
|
||||
return r;
|
||||
}
|
||||
|
@ -990,7 +1017,7 @@ crypto_pk_private_sign_digest(crypto_pk_env_t *env, char *to,
|
|||
*/
|
||||
int
|
||||
crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
||||
char *to,
|
||||
char *to, size_t tolen,
|
||||
const char *from,
|
||||
size_t fromlen,
|
||||
int padding, int force)
|
||||
|
@ -1013,8 +1040,13 @@ crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|||
|
||||
if (!force && fromlen+overhead <= pkeylen) {
|
||||
/* It all fits in a single encrypt. */
|
||||
return crypto_pk_public_encrypt(env,to,from,fromlen,padding);
|
||||
return crypto_pk_public_encrypt(env,to,
|
||||
tolen,
|
||||
from,fromlen,padding);
|
||||
}
|
||||
tor_assert(tolen >= fromlen + overhead + CIPHER_KEY_LEN);
|
||||
tor_assert(tolen >= pkeylen);
|
||||
|
||||
cipher = crypto_new_cipher_env();
|
||||
if (!cipher) return -1;
|
||||
if (crypto_cipher_generate_key(cipher)<0)
|
||||
|
@ -1036,7 +1068,7 @@ crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|||
/* Length of symmetrically encrypted data. */
|
||||
symlen = fromlen-(pkeylen-overhead-CIPHER_KEY_LEN);
|
||||
|
||||
outlen = crypto_pk_public_encrypt(env,to,buf,pkeylen-overhead,padding);
|
||||
outlen = crypto_pk_public_encrypt(env,to,tolen,buf,pkeylen-overhead,padding);
|
||||
if (outlen!=(int)pkeylen) {
|
||||
goto err;
|
||||
}
|
||||
|
@ -1062,6 +1094,7 @@ crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env,
|
|||
int
|
||||
crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env,
|
||||
char *to,
|
||||
size_t tolen,
|
||||
const char *from,
|
||||
size_t fromlen,
|
||||
int padding, int warnOnFailure)
|
||||
|
@ -1075,11 +1108,12 @@ crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env,
|
|||
pkeylen = crypto_pk_keysize(env);
|
||||
|
||||
if (fromlen <= pkeylen) {
|
||||
return crypto_pk_private_decrypt(env,to,from,fromlen,padding,
|
||||
return crypto_pk_private_decrypt(env,to,tolen,from,fromlen,padding,
|
||||
warnOnFailure);
|
||||
}
|
||||
|
||||
buf = tor_malloc(pkeylen+1);
|
||||
outlen = crypto_pk_private_decrypt(env,buf,from,pkeylen,padding,
|
||||
outlen = crypto_pk_private_decrypt(env,buf,pkeylen+1,from,pkeylen,padding,
|
||||
warnOnFailure);
|
||||
if (outlen<0) {
|
||||
log_fn(warnOnFailure?LOG_WARN:LOG_DEBUG, LD_CRYPTO,
|
||||
|
@ -1097,6 +1131,7 @@ crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env,
|
|||
}
|
||||
memcpy(to,buf+CIPHER_KEY_LEN,outlen-CIPHER_KEY_LEN);
|
||||
outlen -= CIPHER_KEY_LEN;
|
||||
tor_assert(tolen - outlen >= fromlen - pkeylen);
|
||||
r = crypto_cipher_decrypt(cipher, to+outlen, from+pkeylen, fromlen-pkeylen);
|
||||
if (r<0)
|
||||
goto err;
|
||||
|
@ -1835,7 +1870,7 @@ crypto_dh_compute_secret(int severity, crypto_dh_env_t *dh,
|
|||
{
|
||||
char *secret_tmp = NULL;
|
||||
BIGNUM *pubkey_bn = NULL;
|
||||
size_t secret_len=0;
|
||||
size_t secret_len=0, secret_tmp_len=0;
|
||||
int result=0;
|
||||
tor_assert(dh);
|
||||
tor_assert(secret_bytes_out/DIGEST_LEN <= 255);
|
||||
|
@ -1849,7 +1884,8 @@ crypto_dh_compute_secret(int severity, crypto_dh_env_t *dh,
|
|||
log_fn(severity, LD_CRYPTO,"Rejected invalid g^x");
|
||||
goto error;
|
||||
}
|
||||
secret_tmp = tor_malloc(crypto_dh_get_bytes(dh));
|
||||
secret_tmp_len = crypto_dh_get_bytes(dh);
|
||||
secret_tmp = tor_malloc(secret_tmp_len);
|
||||
result = DH_compute_key((unsigned char*)secret_tmp, pubkey_bn, dh->dh);
|
||||
if (result < 0) {
|
||||
log_warn(LD_CRYPTO,"DH_compute_key() failed.");
|
||||
|
@ -1868,7 +1904,10 @@ crypto_dh_compute_secret(int severity, crypto_dh_env_t *dh,
|
|||
crypto_log_errors(LOG_WARN, "completing DH handshake");
|
||||
if (pubkey_bn)
|
||||
BN_free(pubkey_bn);
|
||||
tor_free(secret_tmp);
|
||||
if (secret_tmp) {
|
||||
memset(secret_tmp, 0, secret_tmp_len);
|
||||
tor_free(secret_tmp);
|
||||
}
|
||||
if (result < 0)
|
||||
return result;
|
||||
else
|
||||
|
@ -1959,14 +1998,15 @@ seed_weak_rng(void)
|
|||
int
|
||||
crypto_seed_rng(int startup)
|
||||
{
|
||||
char buf[ADD_ENTROPY];
|
||||
int rand_poll_status = 0;
|
||||
|
||||
/* local variables */
|
||||
#ifdef MS_WINDOWS
|
||||
unsigned char buf[ADD_ENTROPY];
|
||||
static int provider_set = 0;
|
||||
static HCRYPTPROV provider;
|
||||
#else
|
||||
char buf[ADD_ENTROPY];
|
||||
static const char *filenames[] = {
|
||||
"/dev/srandom", "/dev/urandom", "/dev/random", NULL
|
||||
};
|
||||
|
@ -2411,9 +2451,10 @@ digest256_from_base64(char *digest, const char *d64)
|
|||
void
|
||||
base32_encode(char *dest, size_t destlen, const char *src, size_t srclen)
|
||||
{
|
||||
unsigned int i, bit, v, u;
|
||||
size_t nbits = srclen * 8;
|
||||
unsigned int i, v, u;
|
||||
size_t nbits = srclen * 8, bit;
|
||||
|
||||
tor_assert(srclen < SIZE_T_CEILING/8);
|
||||
tor_assert((nbits%5) == 0); /* We need an even multiple of 5 bits. */
|
||||
tor_assert((nbits/5)+1 <= destlen); /* We need enough space. */
|
||||
tor_assert(destlen < SIZE_T_CEILING);
|
||||
|
@ -2437,11 +2478,12 @@ base32_decode(char *dest, size_t destlen, const char *src, size_t srclen)
|
|||
{
|
||||
/* XXXX we might want to rewrite this along the lines of base64_decode, if
|
||||
* it ever shows up in the profile. */
|
||||
unsigned int i, j, bit;
|
||||
size_t nbits;
|
||||
unsigned int i;
|
||||
size_t nbits, j, bit;
|
||||
char *tmp;
|
||||
nbits = srclen * 5;
|
||||
|
||||
tor_assert(srclen < SIZE_T_CEILING / 5);
|
||||
tor_assert((nbits%8) == 0); /* We need an even multiple of 8 bits. */
|
||||
tor_assert((nbits/8) <= destlen); /* We need enough space. */
|
||||
tor_assert(destlen < SIZE_T_CEILING);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001, Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -112,7 +112,7 @@ int crypto_pk_write_private_key_to_string(crypto_pk_env_t *env,
|
|||
int crypto_pk_read_public_key_from_string(crypto_pk_env_t *env,
|
||||
const char *src, size_t len);
|
||||
int crypto_pk_read_private_key_from_string(crypto_pk_env_t *env,
|
||||
const char *s);
|
||||
const char *s, ssize_t len);
|
||||
int crypto_pk_write_private_key_to_filename(crypto_pk_env_t *env,
|
||||
const char *fname);
|
||||
|
||||
|
@ -123,23 +123,25 @@ crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *orig);
|
|||
crypto_pk_env_t *crypto_pk_copy_full(crypto_pk_env_t *orig);
|
||||
int crypto_pk_key_is_private(const crypto_pk_env_t *key);
|
||||
|
||||
int crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to,
|
||||
int crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen, int padding);
|
||||
int crypto_pk_private_decrypt(crypto_pk_env_t *env, char *to,
|
||||
int crypto_pk_private_decrypt(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen,
|
||||
int padding, int warnOnFailure);
|
||||
int crypto_pk_public_checksig(crypto_pk_env_t *env, char *to,
|
||||
int crypto_pk_public_checksig(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen);
|
||||
int crypto_pk_public_checksig_digest(crypto_pk_env_t *env, const char *data,
|
||||
size_t datalen, const char *sig, size_t siglen);
|
||||
int crypto_pk_private_sign(crypto_pk_env_t *env, char *to,
|
||||
int crypto_pk_private_sign(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen);
|
||||
int crypto_pk_private_sign_digest(crypto_pk_env_t *env, char *to,
|
||||
int crypto_pk_private_sign_digest(crypto_pk_env_t *env, char *to, size_t tolen,
|
||||
const char *from, size_t fromlen);
|
||||
int crypto_pk_public_hybrid_encrypt(crypto_pk_env_t *env, char *to,
|
||||
size_t tolen,
|
||||
const char *from, size_t fromlen,
|
||||
int padding, int force);
|
||||
int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env, char *to,
|
||||
size_t tolen,
|
||||
const char *from, size_t fromlen,
|
||||
int padding, int warnOnFailure);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2002, Christopher Clark.
|
||||
* Copyright (c) 2005-2006, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See license at end. */
|
||||
|
||||
/* Based on ideas by Christopher Clark and interfaces from Niels Provos. */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001, Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -103,6 +103,17 @@ static logfile_t *logfiles = NULL;
|
|||
static int syslog_count = 0;
|
||||
#endif
|
||||
|
||||
/** Represents a log message that we are going to send to callback-driven
|
||||
* loggers once we can do so in a non-reentrant way. */
|
||||
typedef struct pending_cb_message_t {
|
||||
int severity;
|
||||
log_domain_mask_t domain;
|
||||
char *msg;
|
||||
} pending_cb_message_t;
|
||||
|
||||
/** Log messages waiting to be replayed onto callback-based logs */
|
||||
static smartlist_t *pending_cb_messages = NULL;
|
||||
|
||||
#define LOCK_LOGS() STMT_BEGIN \
|
||||
tor_mutex_acquire(&log_mutex); \
|
||||
STMT_END
|
||||
|
@ -261,6 +272,7 @@ logv(int severity, log_domain_mask_t domain, const char *funcname,
|
|||
int formatted = 0;
|
||||
logfile_t *lf;
|
||||
char *end_of_prefix=NULL;
|
||||
int callbacks_deferred = 0;
|
||||
|
||||
/* Call assert, not tor_assert, since tor_assert calls log on failure. */
|
||||
assert(format);
|
||||
|
@ -268,6 +280,10 @@ logv(int severity, log_domain_mask_t domain, const char *funcname,
|
|||
* interesting and hard to diagnose effects */
|
||||
assert(severity >= LOG_ERR && severity <= LOG_DEBUG);
|
||||
LOCK_LOGS();
|
||||
|
||||
if ((! (domain & LD_NOCB)) && smartlist_len(pending_cb_messages))
|
||||
flush_pending_log_callbacks();
|
||||
|
||||
lf = logfiles;
|
||||
while (lf) {
|
||||
if (! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) {
|
||||
|
@ -312,7 +328,19 @@ logv(int severity, log_domain_mask_t domain, const char *funcname,
|
|||
lf = lf->next;
|
||||
continue;
|
||||
} else if (lf->callback) {
|
||||
lf->callback(severity, domain, end_of_prefix);
|
||||
if (domain & LD_NOCB) {
|
||||
if (!callbacks_deferred) {
|
||||
pending_cb_message_t *msg = tor_malloc(sizeof(pending_cb_message_t));
|
||||
msg->severity = severity;
|
||||
msg->domain = domain;
|
||||
msg->msg = tor_strdup(end_of_prefix);
|
||||
smartlist_add(pending_cb_messages, msg);
|
||||
|
||||
callbacks_deferred = 1;
|
||||
}
|
||||
} else {
|
||||
lf->callback(severity, domain, end_of_prefix);
|
||||
}
|
||||
lf = lf->next;
|
||||
continue;
|
||||
}
|
||||
|
@ -551,6 +579,8 @@ init_logging(void)
|
|||
tor_mutex_init(&log_mutex);
|
||||
log_mutex_initialized = 1;
|
||||
}
|
||||
if (pending_cb_messages == NULL)
|
||||
pending_cb_messages = smartlist_create();
|
||||
}
|
||||
|
||||
/** Add a log handler to receive messages during startup (before the real
|
||||
|
@ -609,6 +639,48 @@ change_callback_log_severity(int loglevelMin, int loglevelMax,
|
|||
UNLOCK_LOGS();
|
||||
}
|
||||
|
||||
/** If there are any log messages that were genered with LD_NOCB waiting to
|
||||
* be sent to callback-based loggers, send them now. */
|
||||
void
|
||||
flush_pending_log_callbacks(void)
|
||||
{
|
||||
logfile_t *lf;
|
||||
smartlist_t *messages, *messages_tmp;
|
||||
|
||||
LOCK_LOGS();
|
||||
if (0 == smartlist_len(pending_cb_messages)) {
|
||||
UNLOCK_LOGS();
|
||||
return;
|
||||
}
|
||||
|
||||
messages = pending_cb_messages;
|
||||
pending_cb_messages = smartlist_create();
|
||||
do {
|
||||
SMARTLIST_FOREACH_BEGIN(messages, pending_cb_message_t *, msg) {
|
||||
const int severity = msg->severity;
|
||||
const int domain = msg->domain;
|
||||
for (lf = logfiles; lf; lf = lf->next) {
|
||||
if (! lf->callback || lf->seems_dead ||
|
||||
! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) {
|
||||
continue;
|
||||
}
|
||||
lf->callback(severity, domain, msg->msg);
|
||||
}
|
||||
tor_free(msg->msg);
|
||||
tor_free(msg);
|
||||
} SMARTLIST_FOREACH_END(msg);
|
||||
smartlist_clear(messages);
|
||||
|
||||
messages_tmp = pending_cb_messages;
|
||||
pending_cb_messages = messages;
|
||||
messages = messages_tmp;
|
||||
} while (smartlist_len(messages));
|
||||
|
||||
smartlist_free(messages);
|
||||
|
||||
UNLOCK_LOGS();
|
||||
}
|
||||
|
||||
/** Close any log handlers added by add_temp_log() or marked by
|
||||
* mark_logs_temp(). */
|
||||
void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2008-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2008-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/** \file memarea.c
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2008-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2008-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
/* Tor dependencies */
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
#if 1
|
||||
/* Tor dependencies */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2009-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2009-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
/* This SHA256 implementation is adapted from the public domain one in
|
||||
LibTomCrypt, version 1.6. Tor uses it on platforms where OpenSSL doesn't
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -79,6 +79,33 @@ method_bits(compress_method_t method)
|
|||
return method == GZIP_METHOD ? 15+16 : 15;
|
||||
}
|
||||
|
||||
/* These macros define the maximum allowable compression factor. Anything of
|
||||
* size greater than CHECK_FOR_COMPRESSION_BOMB_AFTER is not allowed to
|
||||
* have an uncompression factor (uncompressed size:compressed size ratio) of
|
||||
* any greater than MAX_UNCOMPRESSION_FACTOR.
|
||||
*
|
||||
* Picking a value for MAX_UNCOMPRESSION_FACTOR is a trade-off: we want it to
|
||||
* be small to limit the attack multiplier, but we also want it to be large
|
||||
* enough so that no legitimate document --even ones we might invent in the
|
||||
* future -- ever compresses by a factor of greater than
|
||||
* MAX_UNCOMPRESSION_FACTOR. Within those parameters, there's a reasonably
|
||||
* large range of possible values. IMO, anything over 8 is probably safe; IMO
|
||||
* anything under 50 is probably sufficient.
|
||||
*/
|
||||
#define MAX_UNCOMPRESSION_FACTOR 25
|
||||
#define CHECK_FOR_COMPRESSION_BOMB_AFTER (1024*64)
|
||||
|
||||
/** Return true if uncompressing an input of size <b>in_size</b> to an input
|
||||
* of size at least <b>size_out</b> looks like a compression bomb. */
|
||||
static int
|
||||
is_compression_bomb(size_t size_in, size_t size_out)
|
||||
{
|
||||
if (size_in == 0 || size_out < CHECK_FOR_COMPRESSION_BOMB_AFTER)
|
||||
return 0;
|
||||
|
||||
return (size_out / size_in > MAX_UNCOMPRESSION_FACTOR);
|
||||
}
|
||||
|
||||
/** Given <b>in_len</b> bytes at <b>in</b>, compress them into a newly
|
||||
* allocated buffer, using the method described in <b>method</b>. Store the
|
||||
* compressed string in *<b>out</b>, and its length in *<b>out_len</b>.
|
||||
|
@ -181,6 +208,12 @@ tor_gzip_compress(char **out, size_t *out_len,
|
|||
}
|
||||
tor_free(stream);
|
||||
|
||||
if (is_compression_bomb(*out_len, in_len)) {
|
||||
log_warn(LD_BUG, "We compressed something and got an insanely high "
|
||||
"compression factor; other Tors would think this was a zlib bomb.");
|
||||
goto err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
if (stream) {
|
||||
|
@ -243,7 +276,7 @@ tor_gzip_uncompress(char **out, size_t *out_len,
|
|||
|
||||
out_size = in_len * 2; /* guess 50% compression. */
|
||||
if (out_size < 1024) out_size = 1024;
|
||||
if (out_size > UINT_MAX)
|
||||
if (out_size >= SIZE_T_CEILING || out_size > UINT_MAX)
|
||||
goto err;
|
||||
|
||||
*out = tor_malloc(out_size);
|
||||
|
@ -283,7 +316,16 @@ tor_gzip_uncompress(char **out, size_t *out_len,
|
|||
old_size = out_size;
|
||||
out_size *= 2;
|
||||
if (out_size < old_size) {
|
||||
log_warn(LD_GENERAL, "Size overflow in compression.");
|
||||
log_warn(LD_GENERAL, "Size overflow in uncompression.");
|
||||
goto err;
|
||||
}
|
||||
if (is_compression_bomb(in_len, out_size)) {
|
||||
log_warn(LD_GENERAL, "Input looks like a possible zlib bomb; "
|
||||
"not proceeding.");
|
||||
goto err;
|
||||
}
|
||||
if (out_size >= SIZE_T_CEILING) {
|
||||
log_warn(LD_BUG, "Hit SIZE_T_CEILING limit while uncompressing.");
|
||||
goto err;
|
||||
}
|
||||
*out = tor_realloc(*out, out_size);
|
||||
|
@ -349,6 +391,11 @@ detect_compression_method(const char *in, size_t in_len)
|
|||
struct tor_zlib_state_t {
|
||||
struct z_stream_s stream;
|
||||
int compress;
|
||||
|
||||
/* Number of bytes read so far. Used to detect zlib bombs. */
|
||||
size_t input_so_far;
|
||||
/* Number of bytes written so far. Used to detect zlib bombs. */
|
||||
size_t output_so_far;
|
||||
};
|
||||
|
||||
/** Construct and return a tor_zlib_state_t object using <b>method</b>. If
|
||||
|
@ -415,11 +462,20 @@ tor_zlib_process(tor_zlib_state_t *state,
|
|||
err = inflate(&state->stream, finish ? Z_FINISH : Z_SYNC_FLUSH);
|
||||
}
|
||||
|
||||
state->input_so_far += state->stream.next_in - ((unsigned char*)*in);
|
||||
state->output_so_far += state->stream.next_out - ((unsigned char*)*out);
|
||||
|
||||
*out = (char*) state->stream.next_out;
|
||||
*out_len = state->stream.avail_out;
|
||||
*in = (const char *) state->stream.next_in;
|
||||
*in_len = state->stream.avail_in;
|
||||
|
||||
if (! state->compress &&
|
||||
is_compression_bomb(state->input_so_far, state->output_so_far)) {
|
||||
log_warn(LD_DIR, "Possible zlib bomb; abandoning stream.");
|
||||
return TOR_ZLIB_ERR;
|
||||
}
|
||||
|
||||
switch (err)
|
||||
{
|
||||
case Z_STREAM_END:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -115,7 +115,7 @@ typedef unsigned int uint32_t;
|
|||
#define UINT32_MAX 0xffffffffu
|
||||
#endif
|
||||
#ifndef INT32_MAX
|
||||
#define INT32_MAX 0x7fffffffu
|
||||
#define INT32_MAX 0x7fffffff
|
||||
#endif
|
||||
#ifndef INT32_MIN
|
||||
#define INT32_MIN (-2147483647-1)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001, Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -95,6 +95,10 @@
|
|||
/** Number of logging domains in the code. */
|
||||
#define N_LOGGING_DOMAINS 20
|
||||
|
||||
/** This log message is not safe to send to a callback-based logger
|
||||
* immediately. Used as a flag, not a log domain. */
|
||||
#define LD_NOCB (1u<<31)
|
||||
|
||||
typedef uint32_t log_domain_mask_t;
|
||||
|
||||
/** Configures which severities are logged for each logging domain for a given
|
||||
|
@ -137,6 +141,7 @@ void rollback_log_changes(void);
|
|||
void mark_logs_temp(void);
|
||||
void change_callback_log_severity(int loglevelMin, int loglevelMax,
|
||||
log_callback cb);
|
||||
void flush_pending_log_callbacks(void);
|
||||
void log_set_application_name(const char *name);
|
||||
|
||||
/* Outputs a message to stdout */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#ifndef _TOR_TORTLS_H
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/* Helper file: included only in tortls.c */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -174,6 +174,8 @@ _tor_realloc(void *ptr, size_t size DMALLOC_PARAMS)
|
|||
{
|
||||
void *result;
|
||||
|
||||
tor_assert(size < SIZE_T_CEILING);
|
||||
|
||||
#ifdef USE_DMALLOC
|
||||
result = dmalloc_realloc(file, line, ptr, size, DMALLOC_FUNC_REALLOC, 0);
|
||||
#else
|
||||
|
@ -2138,7 +2140,7 @@ read_file_to_str(const char *filename, int flags, struct stat *stat_out)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if ((uint64_t)(statbuf.st_size)+1 > SIZE_T_CEILING)
|
||||
if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING)
|
||||
return NULL;
|
||||
|
||||
string = tor_malloc((size_t)(statbuf.st_size+1));
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
5317
src/config/geoip
5317
src/config/geoip
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -1336,6 +1336,10 @@ log_unsafe_socks_warning(int socks_protocol, const char *address,
|
|||
socks_protocol, address, (int)port);
|
||||
}
|
||||
|
||||
/** Do not attempt to parse socks messages longer than this. This value is
|
||||
* actually significantly higher than the longest possible socks message. */
|
||||
#define MAX_SOCKS_MESSAGE_LEN 512
|
||||
|
||||
/** There is a (possibly incomplete) socks handshake on <b>buf</b>, of one
|
||||
* of the forms
|
||||
* - socks4: "socksheader username\\0"
|
||||
|
@ -1377,7 +1381,7 @@ fetch_from_buf_socks(buf_t *buf, socks_request_t *req,
|
|||
if (buf->datalen < 2) /* version and another byte */
|
||||
return 0;
|
||||
|
||||
buf_pullup(buf, 128, 0);
|
||||
buf_pullup(buf, MAX_SOCKS_MESSAGE_LEN, 0);
|
||||
tor_assert(buf->head && buf->head->datalen >= 2);
|
||||
|
||||
socksver = *buf->head->data;
|
||||
|
@ -1666,7 +1670,7 @@ fetch_from_buf_socks_client(buf_t *buf, int state, char **reason)
|
|||
if (buf->datalen < 2)
|
||||
return 0;
|
||||
|
||||
buf_pullup(buf, 128, 0);
|
||||
buf_pullup(buf, MAX_SOCKS_MESSAGE_LEN, 0);
|
||||
tor_assert(buf->head && buf->head->datalen >= 2);
|
||||
|
||||
data = (unsigned char *) buf->head->data;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -2082,7 +2082,8 @@ circuit_extend(cell_t *cell, circuit_t *circ)
|
|||
n_addr32 = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE));
|
||||
n_port = ntohs(get_uint16(cell->payload+RELAY_HEADER_SIZE+4));
|
||||
onionskin = (char*) cell->payload+RELAY_HEADER_SIZE+4+2;
|
||||
id_digest = (char*) cell->payload+RELAY_HEADER_SIZE+4+2+ONIONSKIN_CHALLENGE_LEN;
|
||||
id_digest = (char*) cell->payload+RELAY_HEADER_SIZE+4+2+
|
||||
ONIONSKIN_CHALLENGE_LEN;
|
||||
tor_addr_from_ipv4h(&n_addr, n_addr32);
|
||||
|
||||
if (!n_port || !n_addr32) {
|
||||
|
@ -2237,7 +2238,7 @@ circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
|
|||
tor_assert(hop->state == CPATH_STATE_AWAITING_KEYS);
|
||||
|
||||
if (reply_type == CELL_CREATED && hop->dh_handshake_state) {
|
||||
if (onion_skin_client_handshake(hop->dh_handshake_state, (char*)reply, keys,
|
||||
if (onion_skin_client_handshake(hop->dh_handshake_state, (char*)reply,keys,
|
||||
DIGEST_LEN*2+CIPHER_KEY_LEN*2) < 0) {
|
||||
log_warn(LD_CIRC,"onion_skin_client_handshake failed.");
|
||||
return -END_CIRC_REASON_TORPROTOCOL;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -600,7 +600,8 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
|
|||
/* Consider all the other addresses; if any matches, this connection is
|
||||
* "canonical." */
|
||||
tor_addr_t addr;
|
||||
const uint8_t *next = decode_address_from_payload(&addr, cp, (int)(end-cp));
|
||||
const uint8_t *next =
|
||||
decode_address_from_payload(&addr, cp, (int)(end-cp));
|
||||
if (next == NULL) {
|
||||
log_fn(LOG_PROTOCOL_WARN, LD_OR,
|
||||
"Bad address in netinfo cell; closing connection.");
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -2283,7 +2283,7 @@ print_usage(void)
|
|||
printf(
|
||||
"Copyright (c) 2001-2004, Roger Dingledine\n"
|
||||
"Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson\n"
|
||||
"Copyright (c) 2007-2010, The Tor Project, Inc.\n\n"
|
||||
"Copyright (c) 2007-2011, The Tor Project, Inc.\n\n"
|
||||
"tor -f <torrc> [args]\n"
|
||||
"See man page for options, or https://www.torproject.org/ for "
|
||||
"documentation.\n");
|
||||
|
@ -3281,6 +3281,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
|
|||
"PublishServerDescriptor line.");
|
||||
}
|
||||
|
||||
if (options->BridgeRelay && options->DirPort) {
|
||||
log_warn(LD_CONFIG, "Can't set a DirPort on a bridge relay; disabling "
|
||||
"DirPort");
|
||||
options->DirPort = 0;
|
||||
}
|
||||
|
||||
if (options->MinUptimeHidServDirectoryV2 < 0) {
|
||||
log_warn(LD_CONFIG, "MinUptimeHidServDirectoryV2 option must be at "
|
||||
"least 0 seconds. Changing to 0.");
|
||||
|
@ -5139,6 +5145,9 @@ or_state_load(void)
|
|||
return r;
|
||||
}
|
||||
|
||||
/** If writing the state to disk fails, try again after this many seconds. */
|
||||
#define STATE_WRITE_RETRY_INTERVAL 3600
|
||||
|
||||
/** Write the persistent state to disk. Return 0 for success, <0 on failure. */
|
||||
int
|
||||
or_state_save(time_t now)
|
||||
|
@ -5173,10 +5182,14 @@ or_state_save(time_t now)
|
|||
tor_free(state);
|
||||
fname = get_datadir_fname("state");
|
||||
if (write_str_to_file(fname, contents, 0)<0) {
|
||||
log_warn(LD_FS, "Unable to write state to file \"%s\"", fname);
|
||||
log_warn(LD_FS, "Unable to write state to file \"%s\"; "
|
||||
"will try again later", fname);
|
||||
global_state->LastWritten = -1;
|
||||
tor_free(fname);
|
||||
tor_free(contents);
|
||||
/* Try again after STATE_WRITE_RETRY_INTERVAL (or sooner, if the state
|
||||
* changes sooner). */
|
||||
global_state->next_write = now + STATE_WRITE_RETRY_INTERVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -1177,9 +1177,23 @@ address_is_in_virtual_range(const char *address)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/** Increment the value of next_virtual_addr; reset it to the start of the
|
||||
* virtual address range if it wraps around.
|
||||
*/
|
||||
static INLINE void
|
||||
increment_virtual_addr(void)
|
||||
{
|
||||
++next_virtual_addr;
|
||||
if (addr_mask_cmp_bits(next_virtual_addr, virtual_addr_network,
|
||||
virtual_addr_netmask_bits))
|
||||
next_virtual_addr = virtual_addr_network;
|
||||
}
|
||||
|
||||
/** Return a newly allocated string holding an address of <b>type</b>
|
||||
* (one of RESOLVED_TYPE_{IPV4|HOSTNAME}) that has not yet been mapped,
|
||||
* and that is very unlikely to be the address of any real host.
|
||||
*
|
||||
* May return NULL if we have run out of virtual addresses.
|
||||
*/
|
||||
static char *
|
||||
addressmap_get_virtual_address(int type)
|
||||
|
@ -1204,25 +1218,26 @@ addressmap_get_virtual_address(int type)
|
|||
/* Don't hand out any .0 or .255 address. */
|
||||
while ((next_virtual_addr & 0xff) == 0 ||
|
||||
(next_virtual_addr & 0xff) == 0xff) {
|
||||
++next_virtual_addr;
|
||||
increment_virtual_addr();
|
||||
if (! --available) {
|
||||
log_warn(LD_CONFIG, "Ran out of virtual addresses!");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
in.s_addr = htonl(next_virtual_addr);
|
||||
tor_inet_ntoa(&in, buf, sizeof(buf));
|
||||
if (!strmap_get(addressmap, buf)) {
|
||||
++next_virtual_addr;
|
||||
increment_virtual_addr();
|
||||
break;
|
||||
}
|
||||
|
||||
++next_virtual_addr;
|
||||
increment_virtual_addr();
|
||||
--available;
|
||||
log_info(LD_CONFIG, "%d addrs available", (int)available);
|
||||
if (! --available) {
|
||||
// log_info(LD_CONFIG, "%d addrs available", (int)available);
|
||||
if (! available) {
|
||||
log_warn(LD_CONFIG, "Ran out of virtual addresses!");
|
||||
return NULL;
|
||||
}
|
||||
if (addr_mask_cmp_bits(next_virtual_addr, virtual_addr_network,
|
||||
virtual_addr_netmask_bits))
|
||||
next_virtual_addr = virtual_addr_network;
|
||||
}
|
||||
return tor_strdup(buf);
|
||||
} else {
|
||||
|
@ -1237,14 +1252,15 @@ addressmap_get_virtual_address(int type)
|
|||
* allocated string. If another address of the same type is already
|
||||
* mapped to <b>new_address</b>, try to return a copy of that address.
|
||||
*
|
||||
* The string in <b>new_address</b> may be freed, or inserted into a map
|
||||
* as appropriate.
|
||||
* The string in <b>new_address</b> may be freed or inserted into a map
|
||||
* as appropriate. May return NULL if are out of virtual addresses.
|
||||
**/
|
||||
const char *
|
||||
addressmap_register_virtual_address(int type, char *new_address)
|
||||
{
|
||||
char **addrp;
|
||||
virtaddress_entry_t *vent;
|
||||
int vent_needs_to_be_added = 0;
|
||||
|
||||
tor_assert(new_address);
|
||||
tor_assert(addressmap);
|
||||
|
@ -1253,7 +1269,7 @@ addressmap_register_virtual_address(int type, char *new_address)
|
|||
vent = strmap_get(virtaddress_reversemap, new_address);
|
||||
if (!vent) {
|
||||
vent = tor_malloc_zero(sizeof(virtaddress_entry_t));
|
||||
strmap_set(virtaddress_reversemap, new_address, vent);
|
||||
vent_needs_to_be_added = 1;
|
||||
}
|
||||
|
||||
addrp = (type == RESOLVED_TYPE_IPV4) ?
|
||||
|
@ -1263,6 +1279,7 @@ addressmap_register_virtual_address(int type, char *new_address)
|
|||
if (ent && ent->new_address &&
|
||||
!strcasecmp(new_address, ent->new_address)) {
|
||||
tor_free(new_address);
|
||||
tor_assert(!vent_needs_to_be_added);
|
||||
return tor_strdup(*addrp);
|
||||
} else
|
||||
log_warn(LD_BUG,
|
||||
|
@ -1276,7 +1293,14 @@ addressmap_register_virtual_address(int type, char *new_address)
|
|||
|
||||
tor_free(*addrp);
|
||||
*addrp = addressmap_get_virtual_address(type);
|
||||
if (!*addrp) {
|
||||
tor_free(vent);
|
||||
tor_free(new_address);
|
||||
return NULL;
|
||||
}
|
||||
log_info(LD_APP, "Registering map from %s to %s", *addrp, new_address);
|
||||
if (vent_needs_to_be_added)
|
||||
strmap_set(virtaddress_reversemap, new_address, vent);
|
||||
addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_CONTROLLER);
|
||||
|
||||
#if 0
|
||||
|
@ -1476,7 +1500,12 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
|
|||
const char *new_addr;
|
||||
new_addr = addressmap_register_virtual_address(
|
||||
RESOLVED_TYPE_IPV4, tor_strdup(socks->address));
|
||||
tor_assert(new_addr);
|
||||
if (! new_addr) {
|
||||
log_warn(LD_APP, "Unable to automap address %s",
|
||||
escaped_safe_str(socks->address));
|
||||
connection_mark_unattached_ap(conn, END_STREAM_REASON_INTERNAL);
|
||||
return -1;
|
||||
}
|
||||
log_info(LD_APP, "Automapping %s to %s",
|
||||
escaped_safe_str_client(socks->address),
|
||||
safe_str_client(new_addr));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -250,7 +250,7 @@ cpuworker_main(void *data)
|
|||
for (;;) {
|
||||
ssize_t r;
|
||||
|
||||
if ((r = recv(fd, &question_type, 1, 0)) != 1) {
|
||||
if ((r = recv(fd, (void *)&question_type, 1, 0)) != 1) {
|
||||
// log_fn(LOG_ERR,"read type failed. Exiting.");
|
||||
if (r == 0) {
|
||||
log_info(LD_OR,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#include "or.h"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#define DIRSERV_PRIVATE
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#define DIRVOTE_PRIVATE
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
19
src/or/dns.c
19
src/or/dns.c
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2003-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -54,12 +54,19 @@ struct evdns_request;
|
|||
evdns_config_windows_nameservers()
|
||||
#define evdns_base_set_option_(base, opt, val) \
|
||||
evdns_set_option((opt),(val),DNS_OPTIONS_ALL)
|
||||
/* Note: our internal eventdns.c, plus Libevent 1.4, used a 1 return to
|
||||
* signify failure to launch a resolve. Libevent 2.0 uses a -1 return to
|
||||
* signify a failure on a resolve, though if we're on Libevent 2.0, we should
|
||||
* have event2/dns.h and never hit these macros. Regardless, 0 is success. */
|
||||
#define evdns_base_resolve_ipv4(base, addr, options, cb, ptr) \
|
||||
((evdns_resolve_ipv4(addr, options, cb, ptr)<0) ? NULL : ((void*)1))
|
||||
#define evdns_base_resolve_reverse(base, addr, options, cb, ptr) \
|
||||
((evdns_resolve_reverse(addr, options, cb, ptr)<0) ? NULL : ((void*)1))
|
||||
#define evdns_base_resolve_reverse_ipv6(base, addr, options, cb, ptr) \
|
||||
((evdns_resolve_reverse_ipv6(addr, options, cb, ptr)<0) ? NULL : ((void*)1))
|
||||
((evdns_resolve_ipv4((addr), (options), (cb), (ptr))!=0) \
|
||||
? NULL : ((void*)1))
|
||||
#define evdns_base_resolve_reverse(base, addr, options, cb, ptr) \
|
||||
((evdns_resolve_reverse((addr), (options), (cb), (ptr))!=0) \
|
||||
? NULL : ((void*)1))
|
||||
#define evdns_base_resolve_reverse_ipv6(base, addr, options, cb, ptr) \
|
||||
((evdns_resolve_reverse_ipv6((addr), (options), (cb), (ptr))!=0) \
|
||||
? NULL : ((void*)1))
|
||||
|
||||
#elif defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER < 0x02000303
|
||||
#define evdns_base_set_option_(base, opt, val) \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -282,11 +282,12 @@ dnsserv_resolved(edge_connection_t *conn,
|
|||
name,
|
||||
1, (char*)answer, ttl);
|
||||
} else if (answer_type == RESOLVED_TYPE_HOSTNAME &&
|
||||
answer_len < 256 &&
|
||||
conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR) {
|
||||
char *ans = tor_strndup(answer, answer_len);
|
||||
evdns_server_request_add_ptr_reply(req, NULL,
|
||||
name,
|
||||
(char*)answer, ttl);
|
||||
ans, ttl);
|
||||
tor_free(ans);
|
||||
} else if (answer_type == RESOLVED_TYPE_ERROR) {
|
||||
err = DNS_ERR_NOTEXIST;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1245,7 +1245,8 @@ nameserver_read(struct nameserver *ns) {
|
|||
|
||||
for (;;) {
|
||||
const int r =
|
||||
(int)recvfrom(ns->socket, packet, (socklen_t)sizeof(packet), 0,
|
||||
(int)recvfrom(ns->socket, (void*)packet,
|
||||
(socklen_t)sizeof(packet), 0,
|
||||
sa, &addrlen);
|
||||
if (r < 0) {
|
||||
int err = last_error(ns->socket);
|
||||
|
@ -1276,7 +1277,7 @@ server_port_read(struct evdns_server_port *s) {
|
|||
|
||||
for (;;) {
|
||||
addrlen = (socklen_t)sizeof(struct sockaddr_storage);
|
||||
r = recvfrom(s->socket, packet, sizeof(packet), 0,
|
||||
r = recvfrom(s->socket, (void*)packet, sizeof(packet), 0,
|
||||
(struct sockaddr*) &addr, &addrlen);
|
||||
if (r < 0) {
|
||||
int err = last_error(s->socket);
|
||||
|
@ -2012,7 +2013,8 @@ evdns_request_timeout_callback(int fd, short events, void *arg) {
|
|||
/* 2 other failure */
|
||||
static int
|
||||
evdns_request_transmit_to(struct evdns_request *req, struct nameserver *server) {
|
||||
const ssize_t r = send(server->socket, req->request, req->request_len, 0);
|
||||
const ssize_t r = send(server->socket, (void*)req->request,
|
||||
req->request_len, 0);
|
||||
if (r < 0) {
|
||||
int err = last_error(server->socket);
|
||||
if (error_is_eagain(err)) return 1;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#include "orconfig.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -893,6 +893,9 @@ run_scheduled_events(time_t now)
|
|||
signewnym_impl(now);
|
||||
}
|
||||
|
||||
/* 0c. If we've deferred log messages for the controller, handle them now */
|
||||
flush_pending_log_callbacks();
|
||||
|
||||
/** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
|
||||
* shut down and restart all cpuworkers, and update the directory if
|
||||
* necessary.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2009-2010, The Tor Project, Inc. */
|
||||
/* Copyright (c) 2009-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#include "or.h"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
@ -439,6 +439,7 @@ networkstatus_check_document_signature(const networkstatus_t *consensus,
|
|||
signed_digest = tor_malloc(signed_digest_len);
|
||||
if (crypto_pk_public_checksig(cert->signing_key,
|
||||
signed_digest,
|
||||
signed_digest_len,
|
||||
sig->signature,
|
||||
sig->signature_len) < dlen ||
|
||||
memcmp(signed_digest, consensus->digests.d[sig->alg], dlen)) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2010, The Tor Project, Inc. */
|
||||
* Copyright (c) 2007-2011, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
#define MAIN_PRIVATE
|
||||
|
@ -518,7 +518,7 @@ nt_service_install(int argc, char **argv)
|
|||
SERVICE_DESCRIPTIONA sdBuff;
|
||||
char *command;
|
||||
char *errmsg;
|
||||
const char *user_acct = GENSRV_USERACCT;
|
||||
const char *user_acct = NULL;
|
||||
const char *password = "";
|
||||
int i;
|
||||
OSVERSIONINFOEX info;
|
||||
|
@ -562,13 +562,12 @@ nt_service_install(int argc, char **argv)
|
|||
is_win2k_or_worse = 1;
|
||||
}
|
||||
|
||||
if (user_acct == GENSRV_USERACCT) {
|
||||
if (!user_acct) {
|
||||
if (is_win2k_or_worse) {
|
||||
/* On Win2k, there is no LocalService account, so we actually need to
|
||||
* fall back on NULL (the system account). */
|
||||
printf("Running on Win2K or earlier, so the LocalService account "
|
||||
"doesn't exist. Falling back to SYSTEM account.\n");
|
||||
user_acct = NULL;
|
||||
} else {
|
||||
/* Genericity is apparently _so_ last year in Redmond, where some
|
||||
* accounts are accounts that you can look up, and some accounts
|
||||
|
@ -577,6 +576,7 @@ nt_service_install(int argc, char **argv)
|
|||
*/
|
||||
printf("Running on a Post-Win2K OS, so we'll assume that the "
|
||||
"LocalService account exists.\n");
|
||||
user_acct = GENSRV_USERACCT;
|
||||
}
|
||||
} else if (0 && service_fns.LookupAccountNameA_fn(NULL, // On this system
|
||||
user_acct,
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue