mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Merge remote branch 'origin/master' into bug2046
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
|
||||
noinst_LIBRARIES = libor.a libor-crypto.a libor-event.a
|
||||
|
||||
EXTRA_DIST = common_sha1.i sha256.c
|
||||
EXTRA_DIST = common_sha1.i sha256.c Makefile.nmake
|
||||
|
||||
#CFLAGS = -Wall -Wpointer-arith -O2
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
all: libor.lib libor-crypto.lib libor-event.lib
|
||||
|
||||
CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include
|
||||
|
||||
LIBOR_OBJECTS = address.obj compat.obj container.obj di_ops.obj \
|
||||
log.obj memarea.obj mempool.obj procmon.obj util.obj \
|
||||
util_codedigest.obj
|
||||
|
||||
LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj torgzip.obj tortls.obj
|
||||
|
||||
LIBOR_EVENT_OBJECTS = compat_libevent.obj
|
||||
|
||||
libor.lib: $(LIBOR_OBJECTS)
|
||||
lib $(LIBOR_OBJECTS) /out:libor.lib
|
||||
|
||||
libor-crypto.lib: $(LIBOR_CRYPTO_OBJECTS)
|
||||
lib $(LIBOR_CRYPTO_OBJECTS) /out:libor-crypto.lib
|
||||
|
||||
libor-event.lib: $(LIBOR_EVENT_OBJECTS)
|
||||
lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
|
||||
@@ -958,8 +958,10 @@ fmt_addr(const tor_addr_t *addr)
|
||||
{
|
||||
static char buf[TOR_ADDR_BUF_LEN];
|
||||
if (!addr) return "<null>";
|
||||
tor_addr_to_str(buf, addr, sizeof(buf), 0);
|
||||
return buf;
|
||||
if (tor_addr_to_str(buf, addr, sizeof(buf), 0))
|
||||
return buf;
|
||||
else
|
||||
return "???";
|
||||
}
|
||||
|
||||
/** Like fmt_addr(), but takes <b>addr</b> as a host-order IPv4
|
||||
|
||||
+1
-1
@@ -401,7 +401,7 @@ typedef int socklen_t;
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
#define tor_socket_t intptr_t
|
||||
#define SOCKET_OK(s) ((s) != INVALID_SOCKET)
|
||||
#define SOCKET_OK(s) ((unsigned)(s) != INVALID_SOCKET)
|
||||
#else
|
||||
#define tor_socket_t int
|
||||
#define SOCKET_OK(s) ((s) >= 0)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#ifdef HAVE_EVENT2_EVENT_H
|
||||
#include <event2/event.h>
|
||||
#include <event2/thread.h>
|
||||
#else
|
||||
#include <event.h>
|
||||
#endif
|
||||
@@ -183,8 +184,10 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
|
||||
struct event_config *cfg = event_config_new();
|
||||
|
||||
#if defined(MS_WINDOWS) && defined(USE_BUFFEREVENTS)
|
||||
if (! torcfg->disable_iocp)
|
||||
if (! torcfg->disable_iocp) {
|
||||
evthread_use_windows_threads();
|
||||
event_config_set_flag(cfg, EVENT_BASE_FLAG_STARTUP_IOCP);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,0,7)
|
||||
|
||||
@@ -43,11 +43,7 @@
|
||||
#define off64_t int64_t
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include "..\..\contrib\zlib\zlib.h"
|
||||
#else
|
||||
#include <zlib.h>
|
||||
#endif
|
||||
|
||||
/** Set to 1 if zlib is a version that supports gzip; set to 0 if it doesn't;
|
||||
* set to -1 if we haven't checked yet. */
|
||||
|
||||
@@ -111,6 +111,15 @@ typedef signed int int32_t;
|
||||
typedef unsigned int uint32_t;
|
||||
#define HAVE_UINT32_T
|
||||
#endif
|
||||
#ifndef UINT16_MAX
|
||||
#define UINT16_MAX 0xffffu
|
||||
#endif
|
||||
#ifndef INT16_MAX
|
||||
#define INT16_MAX 0x7fff
|
||||
#endif
|
||||
#ifndef INT16_MIN
|
||||
#define INT16_MIN (-INT16_MAX-1)
|
||||
#endif
|
||||
#ifndef UINT32_MAX
|
||||
#define UINT32_MAX 0xffffffffu
|
||||
#endif
|
||||
|
||||
@@ -273,6 +273,22 @@ tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
|
||||
|
||||
addr = tls ? tls->address : NULL;
|
||||
|
||||
/* Some errors are known-benign, meaning they are the fault of the other
|
||||
* side of the connection. The caller doesn't know this, so override the
|
||||
* priority for those cases. */
|
||||
switch (ERR_GET_REASON(err)) {
|
||||
case SSL_R_HTTP_REQUEST:
|
||||
case SSL_R_HTTPS_PROXY_REQUEST:
|
||||
case SSL_R_RECORD_LENGTH_MISMATCH:
|
||||
case SSL_R_RECORD_TOO_LARGE:
|
||||
case SSL_R_UNKNOWN_PROTOCOL:
|
||||
case SSL_R_UNSUPPORTED_PROTOCOL:
|
||||
severity = LOG_INFO;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
msg = (const char*)ERR_reason_error_string(err);
|
||||
lib = (const char*)ERR_lib_error_string(err);
|
||||
func = (const char*)ERR_func_error_string(err);
|
||||
|
||||
+72
-3
@@ -14,6 +14,9 @@
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include "orconfig.h"
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#define UTIL_PRIVATE
|
||||
#include "util.h"
|
||||
#include "torlog.h"
|
||||
@@ -68,9 +71,6 @@
|
||||
#ifdef HAVE_SYS_FCNTL_H
|
||||
#include <sys/fcntl.h>
|
||||
#endif
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#ifdef HAVE_TIME_H
|
||||
#include <time.h>
|
||||
#endif
|
||||
@@ -412,6 +412,32 @@ round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor)
|
||||
return number;
|
||||
}
|
||||
|
||||
/** Return the number of bits set in <b>v</b>. */
|
||||
int
|
||||
n_bits_set_u8(uint8_t v)
|
||||
{
|
||||
static const int nybble_table[] = {
|
||||
0, /* 0000 */
|
||||
1, /* 0001 */
|
||||
1, /* 0010 */
|
||||
2, /* 0011 */
|
||||
1, /* 0100 */
|
||||
2, /* 0101 */
|
||||
2, /* 0110 */
|
||||
3, /* 0111 */
|
||||
1, /* 1000 */
|
||||
2, /* 1001 */
|
||||
2, /* 1010 */
|
||||
3, /* 1011 */
|
||||
2, /* 1100 */
|
||||
3, /* 1101 */
|
||||
3, /* 1110 */
|
||||
4, /* 1111 */
|
||||
};
|
||||
|
||||
return nybble_table[v & 15] + nybble_table[v>>4];
|
||||
}
|
||||
|
||||
/* =====
|
||||
* String manipulation
|
||||
* ===== */
|
||||
@@ -495,6 +521,23 @@ tor_strisnonupper(const char *s)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** As strcmp, except that either string may be NULL. The NULL string is
|
||||
* considered to be before any non-NULL string. */
|
||||
int
|
||||
strcmp_opt(const char *s1, const char *s2)
|
||||
{
|
||||
if (!s1) {
|
||||
if (!s2)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
} else if (!s2) {
|
||||
return 1;
|
||||
} else {
|
||||
return strcmp(s1, s2);
|
||||
}
|
||||
}
|
||||
|
||||
/** Compares the first strlen(s2) characters of s1 with s2. Returns as for
|
||||
* strcmp.
|
||||
*/
|
||||
@@ -1693,6 +1736,8 @@ check_private_dir(const char *dirname, cpd_check_t check,
|
||||
struct passwd *pw = NULL;
|
||||
uid_t running_uid;
|
||||
gid_t running_gid;
|
||||
#else
|
||||
(void)effective_user;
|
||||
#endif
|
||||
|
||||
tor_assert(dirname);
|
||||
@@ -2636,6 +2681,30 @@ tor_sscanf(const char *buf, const char *pattern, ...)
|
||||
return r;
|
||||
}
|
||||
|
||||
/** Append the string produced by tor_asprintf(<b>pattern</b>, <b>...</b>)
|
||||
* to <b>sl</b>. */
|
||||
void
|
||||
smartlist_asprintf_add(struct smartlist_t *sl, const char *pattern, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, pattern);
|
||||
smartlist_vasprintf_add(sl, pattern, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/** va_list-based backend of smartlist_asprintf_add. */
|
||||
void
|
||||
smartlist_vasprintf_add(struct smartlist_t *sl, const char *pattern,
|
||||
va_list args)
|
||||
{
|
||||
char *str = NULL;
|
||||
|
||||
tor_vasprintf(&str, pattern, args);
|
||||
tor_assert(str != NULL);
|
||||
|
||||
smartlist_add(sl, str);
|
||||
}
|
||||
|
||||
/** Return a new list containing the filenames in the directory <b>dirname</b>.
|
||||
* Return NULL on error or if <b>dirname</b> is not a directory.
|
||||
*/
|
||||
|
||||
@@ -160,6 +160,7 @@ uint64_t round_to_power_of_2(uint64_t u64);
|
||||
unsigned round_to_next_multiple_of(unsigned number, unsigned divisor);
|
||||
uint32_t round_uint32_to_next_multiple_of(uint32_t number, uint32_t divisor);
|
||||
uint64_t round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor);
|
||||
int n_bits_set_u8(uint8_t v);
|
||||
|
||||
/* Compute the CEIL of <b>a</b> divided by <b>b</b>, for nonnegative <b>a</b>
|
||||
* and positive <b>b</b>. Works on integer types only. Not defined if a+b can
|
||||
@@ -174,6 +175,7 @@ void tor_strlower(char *s) ATTR_NONNULL((1));
|
||||
void tor_strupper(char *s) ATTR_NONNULL((1));
|
||||
int tor_strisprint(const char *s) ATTR_PURE ATTR_NONNULL((1));
|
||||
int tor_strisnonupper(const char *s) ATTR_PURE ATTR_NONNULL((1));
|
||||
int strcmp_opt(const char *s1, const char *s2) ATTR_PURE;
|
||||
int strcmpstart(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2));
|
||||
int strcmp_len(const char *s1, const char *s2, size_t len)
|
||||
ATTR_PURE ATTR_NONNULL((1,2));
|
||||
@@ -218,6 +220,11 @@ int tor_sscanf(const char *buf, const char *pattern, ...)
|
||||
#endif
|
||||
;
|
||||
|
||||
void smartlist_asprintf_add(struct smartlist_t *sl, const char *pattern, ...)
|
||||
CHECK_PRINTF(2, 3);
|
||||
void smartlist_vasprintf_add(struct smartlist_t *sl, const char *pattern,
|
||||
va_list args);
|
||||
|
||||
int hex_decode_digit(char c);
|
||||
void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen);
|
||||
int base16_decode(char *dest, size_t destlen, const char *src, size_t srclen);
|
||||
|
||||
Reference in New Issue
Block a user