aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2013-09-13 12:55:53 -0400
committerNick Mathewson <nickm@torproject.org>2013-09-13 12:55:53 -0400
commit25a3ae922f2f378c16c5930b76c33917480120d8 (patch)
treeba6549160a7855e3e94b969c947ff9b62397abf3 /src
parentf4db0f429a47be9ab5f555333a0031fa67a2728a (diff)
parentb539b372058613b94ef31073de6595ac5d882fd1 (diff)
downloadtor-25a3ae922f2f378c16c5930b76c33917480120d8.tar
tor-25a3ae922f2f378c16c5930b76c33917480120d8.tar.gz
Merge remote-tracking branch 'Ryman/bug6384'
Conflicts: src/or/config.c src/or/main.c
Diffstat (limited to 'src')
-rw-r--r--src/common/compat_libevent.c8
-rw-r--r--src/common/compat_libevent.h1
-rw-r--r--src/common/crypto.c49
-rw-r--r--src/common/crypto.h1
-rw-r--r--src/common/torgzip.c16
-rw-r--r--src/common/torgzip.h6
-rw-r--r--src/or/config.c19
-rw-r--r--src/or/main.c10
8 files changed, 93 insertions, 17 deletions
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 200a7c65f..4d0fff833 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -415,6 +415,14 @@ tor_check_libevent_version(const char *m, int server,
#define HEADER_VERSION _EVENT_VERSION
#endif
+/** Return a string representation of the version of Libevent that was used
+* at compilation time. */
+const char *
+tor_libevent_get_header_version_str(void)
+{
+ return HEADER_VERSION;
+}
+
/** See whether the headers we were built against differ from the library we
* linked against so much that we're likely to crash. If so, warn the
* user. */
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 2472e2c49..fda873359 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -78,6 +78,7 @@ void tor_check_libevent_version(const char *m, int server,
const char **badness_out);
void tor_check_libevent_header_compatibility(void);
const char *tor_libevent_get_version_str(void);
+const char *tor_libevent_get_header_version_str(void);
#ifdef USE_BUFFEREVENTS
const struct timeval *tor_libevent_get_one_tick_timeout(void);
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 684949964..c1a2f3393 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -196,6 +196,27 @@ try_load_engine(const char *path, const char *engine)
}
#endif
+/* Returns a trimmed and human-readable version of an openssl version string
+* <b>raw_version</b>. They are usually in the form of 'OpenSSL 1.0.0b 10
+* May 2012' and this will parse them into a form similar to '1.0.0b' */
+static char *
+parse_openssl_version_str(const char *raw_version)
+{
+ const char *end_of_version = NULL;
+ /* The output should be something like "OpenSSL 1.0.0b 10 May 2012. Let's
+ trim that down. */
+ if (!strcmpstart(raw_version, "OpenSSL ")) {
+ raw_version += strlen("OpenSSL ");
+ end_of_version = strchr(raw_version, ' ');
+ }
+
+ if (end_of_version)
+ return tor_strndup(raw_version,
+ end_of_version-raw_version);
+ else
+ return tor_strdup(raw_version);
+}
+
static char *crypto_openssl_version_str = NULL;
/* Return a human-readable version of the run-time openssl version number. */
const char *
@@ -203,23 +224,24 @@ crypto_openssl_get_version_str(void)
{
if (crypto_openssl_version_str == NULL) {
const char *raw_version = SSLeay_version(SSLEAY_VERSION);
- const char *end_of_version = NULL;
- /* The output should be something like "OpenSSL 1.0.0b 10 May 2012. Let's
- trim that down. */
- if (!strcmpstart(raw_version, "OpenSSL ")) {
- raw_version += strlen("OpenSSL ");
- end_of_version = strchr(raw_version, ' ');
- }
-
- if (end_of_version)
- crypto_openssl_version_str = tor_strndup(raw_version,
- end_of_version-raw_version);
- else
- crypto_openssl_version_str = tor_strdup(raw_version);
+ crypto_openssl_version_str = parse_openssl_version_str(raw_version);
}
return crypto_openssl_version_str;
}
+static char *crypto_openssl_header_version_str = NULL;
+/* Return a human-readable version of the compile-time openssl version
+* number. */
+const char *
+crypto_openssl_get_header_version_str(void)
+{
+ if (crypto_openssl_header_version_str == NULL) {
+ crypto_openssl_header_version_str =
+ parse_openssl_version_str(OPENSSL_VERSION_TEXT);
+ }
+ return crypto_openssl_header_version_str;
+}
+
/** Initialize the crypto library. Return 0 on success, -1 on failure.
*/
int
@@ -3100,6 +3122,7 @@ crypto_global_cleanup(void)
}
#endif
tor_free(crypto_openssl_version_str);
+ tor_free(crypto_openssl_header_version_str);
return 0;
}
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 2750ed810..6ce3697c9 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -109,6 +109,7 @@ typedef struct crypto_dh_t crypto_dh_t;
/* global state */
const char * crypto_openssl_get_version_str(void);
+const char * crypto_openssl_get_header_version_str(void);
int crypto_global_init(int hardwareAccel,
const char *accelName,
const char *accelPath);
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index 4328c63c8..15451ee30 100644
--- a/src/common/torgzip.c
+++ b/src/common/torgzip.c
@@ -68,6 +68,22 @@ is_gzip_supported(void)
return gzip_is_supported;
}
+/** Return a string representation of the version of the currently running
+ * version of zlib. */
+const char *
+tor_zlib_get_version_str(void)
+{
+ return zlibVersion();
+}
+
+/** Return a string representation of the version of the version of zlib
+* used at compilation. */
+const char *
+tor_zlib_get_header_version_str(void)
+{
+ return ZLIB_VERSION;
+}
+
/** Return the 'bits' value to tell zlib to use <b>method</b>.*/
static INLINE int
method_bits(compress_method_t method)
diff --git a/src/common/torgzip.h b/src/common/torgzip.h
index be1016445..5db03fe6e 100644
--- a/src/common/torgzip.h
+++ b/src/common/torgzip.h
@@ -32,6 +32,12 @@ tor_gzip_uncompress(char **out, size_t *out_len,
int is_gzip_supported(void);
+const char *
+tor_zlib_get_version_str(void);
+
+const char *
+tor_zlib_get_header_version_str(void);
+
compress_method_t detect_compression_method(const char *in, size_t in_len);
/** Return values from tor_zlib_process; see that function's documentation for
diff --git a/src/or/config.c b/src/or/config.c
index 9a8d1e77f..5ce7bad49 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -46,6 +46,7 @@
#include "statefile.h"
#include "transports.h"
#include "ext_orport.h"
+#include "torgzip.h"
#ifdef _WIN32
#include <shlobj.h>
#endif
@@ -1808,6 +1809,7 @@ static const struct {
{ "--quiet", 0 },
{ "--hush", 0 },
{ "--version", 0 },
+ { "--library-versions", 0 },
{ "-h", 0 },
{ "--help", 0 },
{ "--list-torrc-options", 0 },
@@ -3932,6 +3934,7 @@ options_init_from_torrc(int argc, char **argv)
printf("Tor version %s.\n",get_version());
exit(0);
}
+
if (config_line_find(cmdline_only_options, "--digests")) {
printf("Tor version %s.\n",get_version());
printf("%s", libor_get_digests());
@@ -3939,6 +3942,22 @@ options_init_from_torrc(int argc, char **argv)
exit(0);
}
+ if (config_line_find(cmdline_only_options, "--library-versions")) {
+ printf("Tor version %s. \n", get_version());
+ printf("Library versions\tCompiled\t\tRuntime\n");
+ printf("Libevent\t\t%-15s\t\t%s\n",
+ tor_libevent_get_header_version_str(),
+ tor_libevent_get_version_str());
+ printf("OpenSSL \t\t%-15s\t\t%s\n",
+ crypto_openssl_get_header_version_str(),
+ crypto_openssl_get_version_str());
+ printf("Zlib \t\t%-15s\t\t%s\n",
+ tor_zlib_get_header_version_str(),
+ tor_zlib_get_version_str());
+ //TODO: Hex versions?
+ exit(0);
+ }
+
command = CMD_RUN_TOR;
for (p_index = cmdline_only_options; p_index; p_index = p_index->next) {
if (!strcmp(p_index->key,"--list-fingerprint")) {
diff --git a/src/or/main.c b/src/or/main.c
index ceee29ce6..ac756de5d 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -2351,9 +2351,10 @@ tor_init(int argc, char *argv[])
if (!strcmp(cl->key, "--quiet") ||
!strcmp(cl->key, "--dump-config"))
quiet = 2;
- /* --version, --digests, and --help imply --husth */
+ /* --version, --digests, and --help imply --hush */
if (!strcmp(cl->key, "--version") || !strcmp(cl->key, "--digests") ||
!strcmp(cl->key, "--list-torrc-options") ||
+ !strcmp(cl->key, "--library-versions") ||
!strcmp(cl->key, "-h") || !strcmp(cl->key, "--help"))
quiet = 1;
}
@@ -2382,11 +2383,12 @@ tor_init(int argc, char *argv[])
#else
"";
#endif
- log_notice(LD_GENERAL, "Tor v%s %srunning on %s with Libevent %s "
- "and OpenSSL %s.", version, bev_str,
+ log_notice(LD_GENERAL, "Tor v%s %srunning on %s with Libevent %s, "
+ "OpenSSL %s and Zlib %s.", version, bev_str,
get_uname(),
tor_libevent_get_version_str(),
- crypto_openssl_get_version_str());
+ crypto_openssl_get_version_str(),
+ tor_zlib_get_version_str());
log_notice(LD_GENERAL, "Tor can't help you if you use it wrong! "
"Learn how to be safe at "