[tor-commits] [tor/master] Fix a brazen memleak in consdiffmgr_add_consensus()

2017-04-28 Thread nickm
commit b8f7488e94f2cb83bdf83228781a11233d9f0a46
Author: Nick Mathewson 
Date:   Fri Apr 28 15:41:52 2017 -0400

Fix a brazen memleak in consdiffmgr_add_consensus()
---
 src/or/consdiffmgr.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 4329fb2..b134578 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -486,6 +486,7 @@ consdiffmgr_add_consensus(const char *consensus,
 labels,
 (const uint8_t *)body_compressed,
 size_compressed);
+tor_free(body_compressed);
 config_free_lines(labels);
   }
 

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tor-browser-manual] Update translations for tor-browser-manual

2017-04-28 Thread translation
commit 8003347d6b4cca052f6a2a32cd44c99258217150
Author: Translation commit bot 
Date:   Fri Apr 28 17:18:19 2017 +

Update translations for tor-browser-manual
---
 da/da.po | 82 ++--
 1 file changed, 65 insertions(+), 17 deletions(-)

diff --git a/da/da.po b/da/da.po
index 9fce074..566405f 100644
--- a/da/da.po
+++ b/da/da.po
@@ -37,6 +37,8 @@ msgid ""
 "Tor Browser uses the Tor network to protect your privacy and anonymity. "
 "Using the Tor network has two main properties:"
 msgstr ""
+"Tor-browseren bruger Tor-netværket til at beskytte dit privatliv og "
+"anonymitet. Brug af Tor-netværket har to primære egenskaber:"
 
 #: about-tor-browser.page:18
 msgid ""
@@ -89,6 +91,8 @@ msgid ""
 "external ref='media/how-tor-works.png' "
 "md5='6fe4151a88b7a518466f0582e40ccc8c'"
 msgstr ""
+"external ref='media/how-tor-works.png' "
+"md5='6fe4151a88b7a518466f0582e40ccc8c'"
 
 #: about-tor-browser.page:60
 msgid ""
@@ -139,12 +143,17 @@ msgid ""
 
"href=\"https://bridges.torproject.org/\;>https://bridges.torproject.org/"
 " and follow the instructions, or"
 msgstr ""
+"Besøg https://bridges.torproject.org/\;>https://bridges.torproject.org/"
+" og følg instruktionerne, eller"
 
 #: bridges.page:42
 msgid ""
 "Email brid...@torproject.org from a Gmail, Yahoo, or Riseup email address, "
 "or"
 msgstr ""
+"Send e-mail til brid...@torproject.org fra en Gmail-, Yahoo-, eller "
+"Riseup-e-mailadresse, eller"
 
 #: bridges.page:51
 msgid "Entering bridge addresses"
@@ -173,6 +182,8 @@ msgid ""
 "external ref='media/tor-launcher-custom-bridges_en-US.png' "
 "md5='93365c2aa3fb4d627497e83f28a39b7e'"
 msgstr ""
+"external ref='media/tor-launcher-custom-bridges_en-US.png' "
+"md5='93365c2aa3fb4d627497e83f28a39b7e'"
 
 #: bridges.page:65
 msgid ""
@@ -214,6 +225,8 @@ msgid ""
 "external ref='media/circumvention/configure.png' "
 "md5='519d888303eadfe4cb03f178aedd90f5'"
 msgstr ""
+"external ref='media/circumvention/configure.png' "
+"md5='519d888303eadfe4cb03f178aedd90f5'"
 
 #: circumvention.page:28
 msgid ""
@@ -244,6 +257,8 @@ msgid ""
 "external ref='media/circumvention/bridges.png' "
 "md5='910cdd5e45860b81a1ad4739c589a195'"
 msgstr ""
+"external ref='media/circumvention/bridges.png' "
+"md5='910cdd5e45860b81a1ad4739c589a195'"
 
 #: circumvention.page:51
 msgid ""
@@ -303,7 +318,7 @@ msgstr ""
 
 #: downloading.page:27
 msgid "GetTor"
-msgstr ""
+msgstr "GetTor"
 
 #: downloading.page:28
 msgid ""
@@ -335,7 +350,7 @@ msgstr ""
 
 #: downloading.page:57
 msgid "To use GetTor via Twitter:"
-msgstr ""
+msgstr "Brug GetTor via Twitter:"
 
 #: downloading.page:62
 msgid ""
@@ -346,7 +361,7 @@ msgstr ""
 
 #: downloading.page:70
 msgid "To use GetTor via Jabber/XMPP (Tor Messenger, Jitsi, CoyIM):"
-msgstr ""
+msgstr "Brug GetTor via Jabber/XMPP (Tor Messenger, Jitsi, CoyIM):"
 
 #: downloading.page:75
 msgid ""
@@ -356,7 +371,7 @@ msgstr ""
 
 #: downloading.page:84
 msgid "Satori"
-msgstr ""
+msgstr "Satori"
 
 #: downloading.page:85
 msgid ""
@@ -370,11 +385,11 @@ msgstr "At downloade Tor Browser ved brug af Satori:"
 
 #: downloading.page:95
 msgid "Install Satori from the Chrome App Store."
-msgstr ""
+msgstr "Installer Satori fra Chrome App Store."
 
 #: downloading.page:100
 msgid "Select Satori from your browser’s Apps menu."
-msgstr ""
+msgstr "Vælg Satori fra din browsers Apps-menu."
 
 #: downloading.page:105
 msgid ""
@@ -404,7 +419,7 @@ msgstr ""
 
 #: first-time.page:7
 msgid "Learn how to use Tor Browser for the first time"
-msgstr ""
+msgstr "Lær at bruge Tor-browseren for første gang"
 
 #: first-time.page:10
 msgid "Running Tor Browser for the first time"
@@ -431,6 +446,8 @@ msgid ""
 "external ref='media/first-time/connect.png' "
 "md5='9d07068f751a3bfd274365a4ba8d90ca'"
 msgstr ""
+"external ref='media/first-time/connect.png' "
+"md5='9d07068f751a3bfd274365a4ba8d90ca'"
 
 #: first-time.page:23
 msgid ""
@@ -483,6 +500,8 @@ msgid ""
 "external ref='media/first-time/proxy_question.png' "
 "md5='30853b3e86cfd386bbc32e5b8b45a378'"
 msgstr ""
+"external ref='media/first-time/proxy_question.png' "
+"md5='30853b3e86cfd386bbc32e5b8b45a378'"
 
 #. This is a reference to an external file such as an image or video. When
 #. the file changes, the md5 hash will change to let you know you need to
@@ -494,6 +513,8 @@ msgid ""
 "external ref='media/first-time/proxy.png' "
 "md5='13f21a351cd0aa1cf11aada690f3dc90'"
 msgstr ""
+"external ref='media/first-time/proxy.png' "
+"md5='13f21a351cd0aa1cf11aada690f3dc90'"
 
 #: index.page:6
 msgid "Tor Browser User Manual"
@@ -542,7 +563,7 @@ msgstr ""
 
 #: known-issues.page:43
 msgid "Tor can not use a bridge if a proxy is set."
-msgstr ""
+msgstr "Tor kan ikke bruge en bro hvis en proxy er sat."
 
 #: known-issues.page:48
 msgid ""
@@ -571,6 +592,9 @@ msgid ""
 "./start-tor-browser.desktop\n"
 ""
 msgstr ""
+"\n"
+"./start-tor-browser.desktop\n"
+""
 
 #: 

[tor-commits] [tor/master] Pre-compress consensus diffs with supported consensus methods.

2017-04-28 Thread nickm
commit 1e1581a24ea11b93b1fdf33a11ce07b8d2772c75
Author: Nick Mathewson 
Date:   Tue Apr 25 15:36:13 2017 -0400

Pre-compress consensus diffs with supported consensus methods.
---
 src/or/consdiffmgr.c| 229 
 src/or/consdiffmgr.h|   4 +-
 src/test/test_consdiffmgr.c |  11 ++-
 3 files changed, 177 insertions(+), 67 deletions(-)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 2deeab5..9a3c56d 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -74,6 +74,25 @@ typedef enum cdm_diff_status_t {
   CDM_DIFF_ERROR=3,
 } cdm_diff_status_t;
 
+/** Which methods do we use for precompressing diffs? */
+static const compress_method_t compress_diffs_with[] = {
+  NO_METHOD,
+  GZIP_METHOD,
+#ifdef HAVE_LZMA
+  LZMA_METHOD,
+#endif
+#ifdef HAVE_ZSTD
+  ZSTD_METHOD,
+#endif
+};
+
+/** How many different methods will we try to use for diff compression? */
+STATIC unsigned
+n_diff_compression_methods(void)
+{
+  return ARRAY_LENGTH(compress_diffs_with);
+}
+
 /** Hashtable node used to remember the current status of the diff
  * from a given sha3 digest to the current consensus.  */
 typedef struct cdm_diff_t {
@@ -84,12 +103,15 @@ typedef struct cdm_diff_t {
   /** SHA3-256 digest of the consensus that this diff is _from_. (part of the
* ht key) */
   uint8_t from_sha3[DIGEST256_LEN];
+  /** Method by which the diff is compressed. (part of the ht key */
+  compress_method_t compress_method;
 
   /** One of the CDM_DIFF_* values, depending on whether this diff
* is available, in progress, or impossible to compute. */
   cdm_diff_status_t cdm_diff_status;
   /** SHA3-256 digest of the consensus that this diff is _to. */
   uint8_t target_sha3[DIGEST256_LEN];
+
   /** Handle to the cache entry for this diff, if any.  We use a handle here
* to avoid thinking too hard about cache entry lifetime issues. */
   consensus_cache_entry_handle_t *entry;
@@ -121,9 +143,10 @@ static void consdiffmgr_set_cache_flags(void);
 static unsigned
 cdm_diff_hash(const cdm_diff_t *diff)
 {
-  uint8_t tmp[DIGEST256_LEN + 1];
+  uint8_t tmp[DIGEST256_LEN + 2];
   memcpy(tmp, diff->from_sha3, DIGEST256_LEN);
   tmp[DIGEST256_LEN] = (uint8_t) diff->flavor;
+  tmp[DIGEST256_LEN+1] = (uint8_t) diff->compress_method;
   return (unsigned) siphash24g(tmp, sizeof(tmp));
 }
 /** Helper: compare two cdm_diff_t objects for key equality */
@@ -131,7 +154,8 @@ static int
 cdm_diff_eq(const cdm_diff_t *diff1, const cdm_diff_t *diff2)
 {
   return fast_memeq(diff1->from_sha3, diff2->from_sha3, DIGEST256_LEN) &&
-diff1->flavor == diff2->flavor;
+diff1->flavor == diff2->flavor &&
+diff1->compress_method == diff2->compress_method;
 }
 
 HT_PROTOTYPE(cdm_diff_ht, cdm_diff_t, node, cdm_diff_hash, cdm_diff_eq)
@@ -153,13 +177,15 @@ cdm_diff_free(cdm_diff_t *diff)
 static cdm_diff_t *
 cdm_diff_new(consensus_flavor_t flav,
  const uint8_t *from_sha3,
- const uint8_t *target_sha3)
+ const uint8_t *target_sha3,
+ compress_method_t method)
 {
   cdm_diff_t *ent;
   ent = tor_malloc_zero(sizeof(cdm_diff_t));
   ent->flavor = flav;
   memcpy(ent->from_sha3, from_sha3, DIGEST256_LEN);
   memcpy(ent->target_sha3, target_sha3, DIGEST256_LEN);
+  ent->compress_method = method;
   return ent;
 }
 
@@ -177,18 +203,25 @@ cdm_diff_ht_check_and_note_pending(consensus_flavor_t 
flav,
const uint8_t *target_sha3)
 {
   struct cdm_diff_t search, *ent;
-  memset(, 0, sizeof(cdm_diff_t));
-  search.flavor = flav;
-  memcpy(search.from_sha3, from_sha3, DIGEST256_LEN);
-  ent = HT_FIND(cdm_diff_ht, _diff_ht, );
-  if (ent) {
-tor_assert_nonfatal(ent->cdm_diff_status != CDM_DIFF_PRESENT);
-return 1;
+  unsigned u;
+  int result = 0;
+  for (u = 0; u < n_diff_compression_methods(); ++u) {
+compress_method_t method = compress_diffs_with[u];
+memset(, 0, sizeof(cdm_diff_t));
+search.flavor = flav;
+search.compress_method = method;
+memcpy(search.from_sha3, from_sha3, DIGEST256_LEN);
+ent = HT_FIND(cdm_diff_ht, _diff_ht, );
+if (ent) {
+  tor_assert_nonfatal(ent->cdm_diff_status != CDM_DIFF_PRESENT);
+  result = 1;
+  continue;
+}
+ent = cdm_diff_new(flav, from_sha3, target_sha3, method);
+ent->cdm_diff_status = CDM_DIFF_IN_PROGRESS;
+HT_INSERT(cdm_diff_ht, _diff_ht, ent);
   }
-  ent = cdm_diff_new(flav, from_sha3, target_sha3);
-  ent->cdm_diff_status = CDM_DIFF_IN_PROGRESS;
-  HT_INSERT(cdm_diff_ht, _diff_ht, ent);
-  return 0;
+  return result;
 }
 
 /**
@@ -201,16 +234,18 @@ static void
 cdm_diff_ht_set_status(consensus_flavor_t flav,
const uint8_t *from_sha3,
const uint8_t *to_sha3,
+   compress_method_t method,
int status,
consensus_cache_entry_handle_t *handle)
 {
   struct cdm_diff_t search, 

[tor-commits] [tor/master] Teach consdiffmgr to remember two digests: one compressed, one not.

2017-04-28 Thread nickm
commit 9e081a44a9ca3b9952b536cd0317538263d59f9b
Author: Nick Mathewson 
Date:   Tue Apr 25 13:06:08 2017 -0400

Teach consdiffmgr to remember two digests: one compressed, one not.
---
 src/or/consdiffmgr.c | 47 +++
 1 file changed, 31 insertions(+), 16 deletions(-)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 59d0f28..adb3fc2 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -21,8 +21,6 @@
 #include "networkstatus.h"
 #include "workqueue.h"
 
-/*  support compression */
-
 /**
  * Labels to apply to items in the conscache object.
  *
@@ -33,8 +31,10 @@
 /* The valid-after time for a consensus (or for the target consensus of a
  * diff), encoded as ISO UTC. */
 #define LABEL_VALID_AFTER "consensus-valid-after"
-/* A hex encoded SHA3 digest of the object after decompression. */
+/* A hex encoded SHA3 digest of the object, as compressed (if any) */
 #define LABEL_SHA3_DIGEST "sha3-digest"
+/* A hex encoded SHA3 digest of the object before compression. */
+#define LABEL_SHA3_DIGEST_UNCOMPRESSED "sha3-digest-uncompressed"
 /* The flavor of the consensus or consensuses diff */
 #define LABEL_FLAVOR "consensus-flavor"
 /* Diff only: the SHA3 digest of the source consensus. */
@@ -43,6 +43,8 @@
 #define LABEL_TARGET_SHA3_DIGEST "target-sha3-digest"
 /* Diff only: the valid-after date of the source consensus. */
 #define LABEL_FROM_VALID_AFTER "from-valid-after"
+/* What kind of compression was used? */
+#define LABEL_COMPRESSION_TYPE "compression"
 /** @} */
 
 #define DOCTYPE_CONSENSUS "consensus"
@@ -299,10 +301,11 @@ cdm_cache_get(void)
 /**
  * Helper: given a list of labels, prepend the hex-encoded SHA3 digest
  * of the bodylen-byte object at body to those labels,
- * with LABEL_SHA3_DIGEST as its label.
+ * with label as its label.
  */
 static void
 cdm_labels_prepend_sha3(config_line_t **labels,
+const char *label,
 const uint8_t *body,
 size_t bodylen)
 {
@@ -313,7 +316,7 @@ cdm_labels_prepend_sha3(config_line_t **labels,
   base16_encode(hexdigest, sizeof(hexdigest),
 (const char *)sha3_digest, sizeof(sha3_digest));
 
-  config_line_prepend(labels, LABEL_SHA3_DIGEST, hexdigest);
+  config_line_prepend(labels, label, hexdigest);
 }
 
 /** Helper: if there is a sha3-256 hex-encoded digest in ent with the
@@ -417,7 +420,10 @@ consdiffmgr_add_consensus(const char *consensus,
 format_iso_time_nospace(formatted_time, valid_after);
 const char *flavname = networkstatus_get_flavor_name(flavor);
 
-cdm_labels_prepend_sha3(, (const uint8_t *)consensus, bodylen);
+cdm_labels_prepend_sha3(, LABEL_SHA3_DIGEST,
+(const uint8_t *)consensus, bodylen);
+cdm_labels_prepend_sha3(, LABEL_SHA3_DIGEST_UNCOMPRESSED,
+(const uint8_t *)consensus, bodylen);
 config_line_prepend(, LABEL_FLAVOR, flavname);
 config_line_prepend(, LABEL_VALID_AFTER, formatted_time);
 config_line_prepend(, LABEL_DOCTYPE, DOCTYPE_CONSENSUS);
@@ -584,7 +590,8 @@ consdiffmgr_cleanup(void)
 if (most_recent == NULL)
   continue;
 const char *most_recent_sha3 =
-  consensus_cache_entry_get_value(most_recent, LABEL_SHA3_DIGEST);
+  consensus_cache_entry_get_value(most_recent,
+  LABEL_SHA3_DIGEST_UNCOMPRESSED);
 if (BUG(most_recent_sha3 == NULL))
   continue; // LCOV_EXCL_LINE
 
@@ -713,7 +720,7 @@ consdiffmgr_rescan_flavor_(consensus_flavor_t flavor)
 goto done; //LCOV_EXCL_LINE
   uint8_t most_recent_sha3[DIGEST256_LEN];
   if (BUG(cdm_entry_get_sha3_value(most_recent_sha3, most_recent,
-   LABEL_SHA3_DIGEST) < 0))
+   LABEL_SHA3_DIGEST_UNCOMPRESSED) < 0))
 goto done; //LCOV_EXCL_LINE
 
   // 2. Find all the relevant diffs _to_ this consensus. These are ones
@@ -765,7 +772,8 @@ consdiffmgr_rescan_flavor_(consensus_flavor_t flavor)
   continue; // LCOV_EXCL_LINE
 
 uint8_t this_sha3[DIGEST256_LEN];
-if (BUG(cdm_entry_get_sha3_value(this_sha3, c, LABEL_SHA3_DIGEST)<0))
+if (BUG(cdm_entry_get_sha3_value(this_sha3, c,
+ LABEL_SHA3_DIGEST_UNCOMPRESSED)<0))
   continue; // LCOV_EXCL_LINE
 if (cdm_diff_ht_check_and_note_pending(flavor,
this_sha3, most_recent_sha3)) {
@@ -933,13 +941,15 @@ consensus_diff_worker_threadfn(void *state_, void *work_)
   const char *lv_from_valid_after =
 consensus_cache_entry_get_value(job->diff_from, LABEL_VALID_AFTER);
   const char *lv_from_digest =
-consensus_cache_entry_get_value(job->diff_from, LABEL_SHA3_DIGEST);
+consensus_cache_entry_get_value(job->diff_from,
+LABEL_SHA3_DIGEST_UNCOMPRESSED);
   const char *lv_from_flavor =
 

[tor-commits] [tor/master] Store archived consensuses compressed on disk.

2017-04-28 Thread nickm
commit a1172b6774bc95ff951ac58051ea42bc0a62e32b
Author: Nick Mathewson 
Date:   Tue Apr 25 14:52:40 2017 -0400

Store archived consensuses compressed on disk.

I'm just using gzip compression now, for performance.
---
 src/or/consdiffmgr.c| 74 +++--
 src/or/consdiffmgr.h|  2 ++
 src/test/test_consdiffmgr.c | 15 +
 3 files changed, 74 insertions(+), 17 deletions(-)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index adb3fc2..2deeab5 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -110,6 +110,9 @@ static int 
consensus_diff_queue_diff_work(consensus_cache_entry_t *diff_from,
   consensus_cache_entry_t *diff_to);
 static void consdiffmgr_set_cache_flags(void);
 
+/* Just gzip consensuses for now. */
+#define COMPRESS_CONSENSUS_WITH GZIP_METHOD
+
 /* =
  * Hashtable setup
  * = */
@@ -420,18 +423,28 @@ consdiffmgr_add_consensus(const char *consensus,
 format_iso_time_nospace(formatted_time, valid_after);
 const char *flavname = networkstatus_get_flavor_name(flavor);
 
-cdm_labels_prepend_sha3(, LABEL_SHA3_DIGEST,
-(const uint8_t *)consensus, bodylen);
 cdm_labels_prepend_sha3(, LABEL_SHA3_DIGEST_UNCOMPRESSED,
 (const uint8_t *)consensus, bodylen);
+
+char *body_compressed = NULL;
+size_t size_compressed = 0;
+if (tor_compress(_compressed, _compressed,
+ consensus, bodylen, COMPRESS_CONSENSUS_WITH) < 0) {
+  config_free_lines(labels);
+  return -1;
+}
+cdm_labels_prepend_sha3(, LABEL_SHA3_DIGEST,
+(const uint8_t *)body_compressed, size_compressed);
+config_line_prepend(, LABEL_COMPRESSION_TYPE,
+compression_method_get_name(COMPRESS_CONSENSUS_WITH));
 config_line_prepend(, LABEL_FLAVOR, flavname);
 config_line_prepend(, LABEL_VALID_AFTER, formatted_time);
 config_line_prepend(, LABEL_DOCTYPE, DOCTYPE_CONSENSUS);
 
 entry = consensus_cache_add(cdm_cache_get(),
 labels,
-(const uint8_t *)consensus,
-bodylen);
+(const uint8_t *)body_compressed,
+size_compressed);
 config_free_lines(labels);
   }
 
@@ -915,6 +928,40 @@ typedef struct consensus_diff_worker_job_t {
   size_t bodylen_out;
 } consensus_diff_worker_job_t;
 
+/** Given a consensus_cache_entry_t, check whether it has a label claiming
+ * that it was compressed.  If so, uncompress its contents into out and
+ * set outlen to hold their size.  If not, just copy the body into
+ * out and set outlen to its length.  Return 0 on success,
+ * -1 on failure.
+ *
+ * In all cases, the output is nul-terminated. */
+STATIC int
+uncompress_or_copy(char **out, size_t *outlen,
+   consensus_cache_entry_t *ent)
+{
+  const uint8_t *body;
+  size_t bodylen;
+
+  if (consensus_cache_entry_get_body(ent, , ) < 0)
+return -1;
+
+  const char *lv_compression =
+consensus_cache_entry_get_value(ent, LABEL_COMPRESSION_TYPE);
+  compress_method_t method = NO_METHOD;
+
+  if (lv_compression)
+method = compression_method_get_by_name(lv_compression);
+
+  if (method == NO_METHOD) {
+*out = tor_memdup_nulterm(body, bodylen);
+*outlen = bodylen;
+return 0;
+  } else {
+return tor_uncompress(out, outlen, (const char *)body, bodylen,
+  method, 1, LOG_WARN);
+  }
+}
+
 /**
  * Worker function. This function runs inside a worker thread and receives
  * a consensus_diff_worker_job_t as its input.
@@ -966,11 +1013,20 @@ consensus_diff_worker_threadfn(void *state_, void *work_)
 
   char *consensus_diff;
   {
-//  the input might not be nul-terminated. And also we wanted to
-//  support compression later I guess. So, we need to copy here.
-char *diff_from_nt, *diff_to_nt;
-diff_from_nt = tor_memdup_nulterm(diff_from, len_from);
-diff_to_nt = tor_memdup_nulterm(diff_to, len_to);
+char *diff_from_nt = NULL, *diff_to_nt = NULL;
+size_t diff_from_nt_len, diff_to_nt_len;
+
+if (uncompress_or_copy(_from_nt, _from_nt_len,
+   job->diff_from) < 0) {
+  return WQ_RPL_REPLY;
+}
+if (uncompress_or_copy(_to_nt, _to_nt_len,
+   job->diff_to) < 0) {
+  tor_free(diff_from_nt);
+  return WQ_RPL_REPLY;
+}
+tor_assert(diff_from_nt);
+tor_assert(diff_to_nt);
 
 //  ugh; this is going to calculate the SHA3 of both its
 //  inputs again, even though we already have that. Maybe it's time
diff --git a/src/or/consdiffmgr.h b/src/or/consdiffmgr.h
index 6932b2f..982e0df 100644
--- a/src/or/consdiffmgr.h
+++ b/src/or/consdiffmgr.h
@@ -42,6 +42,8 @@ STATIC consensus_cache_entry_t 

[tor-commits] [tor/master] Initialize consdiffmgr when running as (or becoming) a server.

2017-04-28 Thread nickm
commit fba8d7b222bf00cf2812362072e913c26a41b370
Author: Nick Mathewson 
Date:   Tue Apr 25 19:53:00 2017 -0400

Initialize consdiffmgr when running as (or becoming) a server.
---
 src/or/config.c  | 10 ++
 src/or/consdiffmgr.c |  3 ++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/or/config.c b/src/or/config.c
index a73f397..201cca7 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -74,6 +74,7 @@
 #include "connection.h"
 #include "connection_edge.h"
 #include "connection_or.h"
+#include "consdiffmgr.h"
 #include "control.h"
 #include "confparse.h"
 #include "cpuworker.h"
@@ -1815,6 +1816,15 @@ options_act(const or_options_t *old_options)
 return -1;
   }
 
+  if (server_mode(options)) {
+static int cdm_initialized = 0;
+if (cdm_initialized == 0) {
+  cdm_initialized = 1;
+  consdiffmgr_configure(NULL);
+  consdiffmgr_validate();
+}
+  }
+
   if (init_control_cookie_authentication(options->CookieAuthentication) < 0) {
 log_warn(LD_CONFIG,"Error creating control cookie authentication file.");
 return -1;
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 41e37ac..160dcaf 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -622,7 +622,8 @@ consdiffmgr_cleanup(void)
 void
 consdiffmgr_configure(const consdiff_cfg_t *cfg)
 {
-  memcpy(_cfg, cfg, sizeof(consdiff_cfg));
+  if (cfg)
+memcpy(_cfg, cfg, sizeof(consdiff_cfg));
 
   (void) cdm_cache_get();
 }



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Fix use-after-free bug in storage_dir sandbox code.

2017-04-28 Thread nickm
commit 16d6ab6640b4404d47096cbf1d25e1b57b0b26bb
Author: Nick Mathewson 
Date:   Wed Apr 26 08:43:38 2017 -0400

Fix use-after-free bug in storage_dir sandbox code.
---
 src/common/storagedir.c | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/common/storagedir.c b/src/common/storagedir.c
index 7e0be67..9d3c32e 100644
--- a/src/common/storagedir.c
+++ b/src/common/storagedir.c
@@ -89,11 +89,12 @@ storage_dir_register_with_sandbox(storage_dir_t *d, 
sandbox_cfg_t **cfg)
 tor_asprintf(, "%s/%d", d->directory, idx);
 tor_asprintf(, "%s/%d.tmp", d->directory, idx);
 
-problems += sandbox_cfg_allow_open_filename(cfg, path);
-problems += sandbox_cfg_allow_open_filename(cfg, tmppath);
-problems += sandbox_cfg_allow_stat_filename(cfg, path);
-problems += sandbox_cfg_allow_stat_filename(cfg, tmppath);
-problems += sandbox_cfg_allow_rename(cfg, tmppath, path);
+problems += sandbox_cfg_allow_open_filename(cfg, tor_strdup(path));
+problems += sandbox_cfg_allow_open_filename(cfg, tor_strdup(tmppath));
+problems += sandbox_cfg_allow_stat_filename(cfg, tor_strdup(path));
+problems += sandbox_cfg_allow_stat_filename(cfg, tor_strdup(tmppath));
+problems += sandbox_cfg_allow_rename(cfg,
+  tor_strdup(tmppath), tor_strdup(path));
 
 tor_free(path);
 tor_free(tmppath);



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Merge branch 'ticket21648'

2017-04-28 Thread nickm
commit dcc0a49a8477a33ba6b90839ae152230f0eac692
Merge: 480dab4 531835f
Author: Nick Mathewson 
Date:   Fri Apr 28 11:04:49 2017 -0400

Merge branch 'ticket21648'

 changes/bug22096|   6 +
 src/common/sandbox.c|   2 +-
 src/common/storagedir.c |  21 ++-
 src/common/storagedir.h |   1 +
 src/or/config.c |  10 +
 src/or/conscache.c  |  40 +++-
 src/or/conscache.h  |   7 +-
 src/or/consdiffmgr.c| 439 +++-
 src/or/consdiffmgr.h|   8 +-
 src/or/main.c   |  23 +++
 src/or/networkstatus.c  |   4 +
 src/test/test_conscache.c   |   2 +-
 src/test/test_consdiffmgr.c |  26 +--
 13 files changed, 477 insertions(+), 112 deletions(-)

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Configure sandbox using consdiffmgr; free cdm on exit.

2017-04-28 Thread nickm
commit 24f7059704433834a7335286e552eda7f030666f
Author: Nick Mathewson 
Date:   Tue Apr 25 19:52:34 2017 -0400

Configure sandbox using consdiffmgr; free cdm on exit.
---
 src/or/conscache.c   | 11 +++
 src/or/conscache.h   |  3 +++
 src/or/consdiffmgr.c | 10 ++
 src/or/consdiffmgr.h |  2 ++
 src/or/main.c|  4 
 5 files changed, 30 insertions(+)

diff --git a/src/or/conscache.c b/src/or/conscache.c
index 9dedb43..2544f56 100644
--- a/src/or/conscache.c
+++ b/src/or/conscache.c
@@ -78,6 +78,17 @@ consensus_cache_open(const char *subdir, int max_entries)
 }
 
 /**
+ * Tell the sandbox (if any) configured by cfg to allow the
+ * operations that cache will need.
+ */
+int
+consensus_cache_register_with_sandbox(consensus_cache_t *cache,
+  struct sandbox_cfg_elem **cfg)
+{
+  return storage_dir_register_with_sandbox(cache->dir, cfg);
+}
+
+/**
  * Helper: clear all entries from cache (but do not delete
  * any that aren't marked for removal
  */
diff --git a/src/or/conscache.h b/src/or/conscache.h
index c8cda60..f3110e2 100644
--- a/src/or/conscache.h
+++ b/src/or/conscache.h
@@ -13,6 +13,9 @@ HANDLE_DECL(consensus_cache_entry, consensus_cache_entry_t, )
 
 consensus_cache_t *consensus_cache_open(const char *subdir, int max_entries);
 void consensus_cache_free(consensus_cache_t *cache);
+struct sandbox_cfg_elem;
+int consensus_cache_register_with_sandbox(consensus_cache_t *cache,
+  struct sandbox_cfg_elem **cfg);
 void consensus_cache_unmap_lazy(consensus_cache_t *cache, time_t cutoff);
 void consensus_cache_delete_pending(consensus_cache_t *cache);
 consensus_cache_entry_t *consensus_cache_add(consensus_cache_t *cache,
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 59d0f28..41e37ac 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -628,6 +628,16 @@ consdiffmgr_configure(const consdiff_cfg_t *cfg)
 }
 
 /**
+ * Tell the sandbox (if any) configured by cfg to allow the
+ * operations that the consensus diff manager will need.
+ */
+int
+consdiffmgr_register_with_sandbox(struct sandbox_cfg_elem **cfg)
+{
+  return consensus_cache_register_with_sandbox(cdm_cache_get(), cfg);
+}
+
+/**
  * Scan the consensus diff manager's cache for any grossly malformed entries,
  * and mark them as deletable.  Return 0 if no problems were found; 1
  * if problems were found and fixed.
diff --git a/src/or/consdiffmgr.h b/src/or/consdiffmgr.h
index 6932b2f..55ce1c8 100644
--- a/src/or/consdiffmgr.h
+++ b/src/or/consdiffmgr.h
@@ -32,6 +32,8 @@ consdiff_status_t consdiffmgr_find_diff_from(
 void consdiffmgr_rescan(void);
 int consdiffmgr_cleanup(void);
 void consdiffmgr_configure(const consdiff_cfg_t *cfg);
+struct sandbox_cfg_elem;
+int consdiffmgr_register_with_sandbox(struct sandbox_cfg_elem **cfg);
 void consdiffmgr_free_all(void);
 int consdiffmgr_validate(void);
 
diff --git a/src/or/main.c b/src/or/main.c
index 5fec7e4..452c350 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -64,6 +64,7 @@
 #include "connection.h"
 #include "connection_edge.h"
 #include "connection_or.h"
+#include "consdiffmgr.h"
 #include "control.h"
 #include "cpuworker.h"
 #include "crypto_s2k.h"
@@ -3162,6 +3163,7 @@ tor_free_all(int postfork)
   sandbox_free_getaddrinfo_cache();
   protover_free_all();
   bridges_free_all();
+  consdiffmgr_free_all();
   if (!postfork) {
 config_free_all();
 or_state_free_all();
@@ -3584,6 +3586,8 @@ sandbox_init_filter(void)
 OPEN_DATADIR("stats");
 STAT_DATADIR("stats");
 STAT_DATADIR2("stats", "dirreq-stats");
+
+consdiffmgr_register_with_sandbox();
   }
 
   init_addrinfo();



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Clean the consdiffmgr cache and launch new diffs as needed.

2017-04-28 Thread nickm
commit 7b8d48a6cb1109a5cd16e4db7b088a968b0186e3
Author: Nick Mathewson 
Date:   Tue Apr 25 20:01:09 2017 -0400

Clean the consdiffmgr cache and launch new diffs as needed.
---
 src/or/main.c | 19 +++
 1 file changed, 19 insertions(+)

diff --git a/src/or/main.c b/src/or/main.c
index 452c350..0da43dc 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1186,6 +1186,7 @@ CALLBACK(check_dns_honesty);
 CALLBACK(write_bridge_ns);
 CALLBACK(check_fw_helper_app);
 CALLBACK(heartbeat);
+CALLBACK(clean_consdiffmgr);
 
 #undef CALLBACK
 
@@ -1218,6 +1219,7 @@ static periodic_event_item_t periodic_events[] = {
   CALLBACK(write_bridge_ns),
   CALLBACK(check_fw_helper_app),
   CALLBACK(heartbeat),
+  CALLBACK(clean_consdiffmgr),
   END_OF_PERIODIC_EVENTS
 };
 #undef CALLBACK
@@ -1473,6 +1475,12 @@ run_scheduled_events(time_t now)
   /* 11b. check pending unconfigured managed proxies */
   if (!net_is_disabled() && pt_proxies_configuration_pending())
 pt_configure_remaining_proxies();
+
+  /* 12. launch diff computations.  (This is free if there are none to
+   * launch.) */
+  if (server_mode(options)) {
+consdiffmgr_rescan();
+  }
 }
 
 /* Periodic callback: rotate the onion keys after the period defined by the
@@ -2036,6 +2044,17 @@ heartbeat_callback(time_t now, const or_options_t 
*options)
   return options->HeartbeatPeriod;
 }
 
+#define CDM_CLEAN_CALLBACK_INTERVAL 600
+static int
+clean_consdiffmgr_callback(time_t now, const or_options_t *options)
+{
+  (void)now;
+  if (server_mode(options)) {
+consdiffmgr_cleanup();
+  }
+  return CDM_CLEAN_CALLBACK_INTERVAL;
+}
+
 /** Timer: used to invoke second_elapsed_callback() once per second. */
 static periodic_timer_t *second_timer = NULL;
 /** Number of libevent errors in the last second: we die if we get too many. */



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Pass incoming consensus documents to the consdiffmgr code

2017-04-28 Thread nickm
commit ab73bda0604dccd899061f338122ed7f9faf8c4f
Author: Nick Mathewson 
Date:   Wed Apr 26 08:44:01 2017 -0400

Pass incoming consensus documents to the consdiffmgr code
---
 src/or/networkstatus.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 9d27e57..188e753 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -46,6 +46,7 @@
 #include "config.h"
 #include "connection.h"
 #include "connection_or.h"
+#include "consdiffmgr.h"
 #include "control.h"
 #include "directory.h"
 #include "dirserv.h"
@@ -1981,6 +1982,9 @@ networkstatus_set_current_consensus(const char *consensus,
flavor,
>digests,
c->valid_after);
+if (server_mode(get_options())) {
+  consdiffmgr_add_consensus(consensus, c);
+}
   }
 
   if (!from_cache) {



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Functionality to ensure there is space to add files to cache.

2017-04-28 Thread nickm
commit 7a0964279fafc9912ed5cc4b82abfb81328f5150
Author: Nick Mathewson 
Date:   Wed Apr 26 10:42:11 2017 -0400

Functionality to ensure there is space to add files to cache.
---
 src/common/storagedir.c | 10 ++
 src/common/storagedir.h |  1 +
 src/or/conscache.c  | 13 
 src/or/conscache.h  |  1 +
 src/or/consdiffmgr.c| 81 +
 5 files changed, 106 insertions(+)

diff --git a/src/common/storagedir.c b/src/common/storagedir.c
index 9d3c32e..309d42d 100644
--- a/src/common/storagedir.c
+++ b/src/common/storagedir.c
@@ -530,3 +530,13 @@ storage_dir_remove_all(storage_dir_t *d)
   return storage_dir_shrink(d, 0, d->max_files);
 }
 
+/**
+ * Return the largest number of non-temporary files we're willing to
+ * store in d.
+ */
+int
+storage_dir_get_max_files(storage_dir_t *d)
+{
+  return d->max_files;
+}
+
diff --git a/src/common/storagedir.h b/src/common/storagedir.h
index 7811944..db25057 100644
--- a/src/common/storagedir.h
+++ b/src/common/storagedir.h
@@ -45,6 +45,7 @@ int storage_dir_shrink(storage_dir_t *d,
uint64_t target_size,
int min_to_remove);
 int storage_dir_remove_all(storage_dir_t *d);
+int storage_dir_get_max_files(storage_dir_t *d);
 
 #endif
 
diff --git a/src/or/conscache.c b/src/or/conscache.c
index 7760d13..5ffa129 100644
--- a/src/or/conscache.c
+++ b/src/or/conscache.c
@@ -400,6 +400,19 @@ consensus_cache_unmap_lazy(consensus_cache_t *cache, 
time_t cutoff)
 }
 
 /**
+ * Return the number of currently unused filenames available in this cache.
+ */
+int
+consensus_cache_get_n_filenames_available(consensus_cache_t *cache)
+{
+  tor_assert(cache);
+  int max = storage_dir_get_max_files(cache->dir);
+  int used = smartlist_len(storage_dir_list(cache->dir));
+  tor_assert_nonfatal(max >= used);
+  return max - used;
+}
+
+/**
  * Delete every element of cache has been marked with
  * consensus_cache_entry_mark_for_removal.  If force is false,
  * retain those entries which are not in use except by the cache.
diff --git a/src/or/conscache.h b/src/or/conscache.h
index ea27733..aef5420 100644
--- a/src/or/conscache.h
+++ b/src/or/conscache.h
@@ -19,6 +19,7 @@ int consensus_cache_register_with_sandbox(consensus_cache_t 
*cache,
 void consensus_cache_unmap_lazy(consensus_cache_t *cache, time_t cutoff);
 void consensus_cache_delete_pending(consensus_cache_t *cache,
 int force);
+int consensus_cache_get_n_filenames_available(consensus_cache_t *cache);
 consensus_cache_entry_t *consensus_cache_add(consensus_cache_t *cache,
  const config_line_t *labels,
  const uint8_t *data,
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 1f3915f..ba52650 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -107,6 +107,7 @@ static consdiff_cfg_t consdiff_cfg = {
   /* .cache_max_num = */ 128
 };
 
+static int consdiffmgr_ensure_space_for_files(int n);
 static int consensus_diff_queue_diff_work(consensus_cache_entry_t *diff_from,
   consensus_cache_entry_t *diff_to);
 static void consdiffmgr_set_cache_flags(void);
@@ -413,6 +414,8 @@ consdiffmgr_add_consensus(const char *consensus,
   }
 
   /* We don't have it. Add it to the cache. */
+  consdiffmgr_ensure_space_for_files(1);
+
   {
 size_t bodylen = strlen(consensus);
 config_line_t *labels = NULL;
@@ -853,6 +856,82 @@ consdiffmgr_rescan(void)
 }
 
 /**
+ * Helper: compare two files by their from-valid-after and valid-after labels,
+ * trying to sort in ascending order by from-valid-after (when present) and
+ * valid-after (when not).  Place everything that has neither label first in
+ * the list.
+ */
+static int
+compare_by_staleness_(const void **a, const void **b)
+{
+  const consensus_cache_entry_t *e1 = *a;
+  const consensus_cache_entry_t *e2 = *b;
+  const char *va1, *fva1, *va2, *fva2;
+  va1 = consensus_cache_entry_get_value(e1, LABEL_VALID_AFTER);
+  va2 = consensus_cache_entry_get_value(e2, LABEL_VALID_AFTER);
+  fva1 = consensus_cache_entry_get_value(e1, LABEL_FROM_VALID_AFTER);
+  fva2 = consensus_cache_entry_get_value(e2, LABEL_FROM_VALID_AFTER);
+
+  if (fva1)
+va1 = fva1;
+  if (fva2)
+va2 = fva2;
+
+  /* See note about iso-encoded values in compare_by_valid_after_.  Also note
+   * that missing dates will get placed first. */
+  return strcmp_opt(va1, va2);
+}
+
+/** If there are not enough unused filenames to store n files, then
+ * delete old consensuses until there are.  (We have to keep track of the
+ * number of filenames because of the way that the seccomp2 cache works.)
+ *
+ * Return 0 on success, -1 on failure.
+ **/
+static int
+consdiffmgr_ensure_space_for_files(int n)
+{
+  consensus_cache_t *cache = cdm_cache_get();
+  if (consensus_cache_get_n_filenames_available(cache) >= n) {
+// 

[tor-commits] [tor/master] Increase MALLOC_MP_LIM to 16MB

2017-04-28 Thread nickm
commit 531835f5611994def74d790f43df01d828724513
Author: Nick Mathewson 
Date:   Fri Apr 28 10:53:05 2017 -0400

Increase MALLOC_MP_LIM to 16MB

Increase the maximum allowed size passed to mprotect(PROT_WRITE)
from 1MB to 16MB. This was necessary with the glibc allocator
in order to allow worker threads to allocate more memory --
which in turn is necessary because of our new use of worker
threads for compression.

Closes ticket #22096. Found while working on #21648.
---
 changes/bug22096 | 6 ++
 src/common/sandbox.c | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/changes/bug22096 b/changes/bug22096
new file mode 100644
index 000..83dac9c
--- /dev/null
+++ b/changes/bug22096
@@ -0,0 +1,6 @@
+  o Minor features (linux seccomp2 sandbox):
+- Increase the maximum allowed size passed to mprotect(PROT_WRITE)
+  from 1MB to 16MB. This was necessary with the glibc allocator in
+  order to allow worker threads to allocate more memory -- which in
+  turn is necessary because of our new use of worker threads for
+  compression. Closes ticket 22096.
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
index ddb1f02..ab2de52 100644
--- a/src/common/sandbox.c
+++ b/src/common/sandbox.c
@@ -20,7 +20,7 @@
 #endif
 
 /** Malloc mprotect limit in bytes. */
-#define MALLOC_MP_LIM 1048576
+#define MALLOC_MP_LIM (16*1024*1024)
 
 #include 
 #include 



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Merge branches 'consdiffmgr_orig_squashed' and 'actually_compute_diffs_squashed'

2017-04-28 Thread nickm
commit 00a12337ff068d47d92352541665ee73cbd9ff4b
Merge: 480dab4 1e1581a 7a09642
Author: Nick Mathewson 
Date:   Thu Apr 27 21:42:51 2017 -0400

Merge branches 'consdiffmgr_orig_squashed' and 
'actually_compute_diffs_squashed'

 src/common/storagedir.c |  21 ++-
 src/common/storagedir.h |   1 +
 src/or/config.c |  10 +
 src/or/conscache.c  |  40 +++-
 src/or/conscache.h  |   7 +-
 src/or/consdiffmgr.c| 439 +++-
 src/or/consdiffmgr.h|   8 +-
 src/or/main.c   |  23 +++
 src/or/networkstatus.c  |   4 +
 src/test/test_conscache.c   |   2 +-
 src/test/test_consdiffmgr.c |  26 +--
 11 files changed, 470 insertions(+), 111 deletions(-)

diff --cc src/or/consdiffmgr.c
index a57edf9,9a3c56d,ba52650..4329fb2
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
 -1050,20 -1202,35 -1139,22 +1299,37  
consensus_diff_worker_replyfn(void *wor
   cache = 0;
 }
   
- -  int status;
- -  consensus_cache_entry_handle_t *handle = NULL;
- -  if (job->body_out && job->bodylen_out && job->labels_out) {
- -/* Success! Store the results */
- -log_info(LD_DIRSERV, "Adding consensus diff from %s to %s",
- - lv_from_digest, lv_to_digest);
  -
  -consdiffmgr_ensure_space_for_files(1);
- -consensus_cache_entry_t *ent =
- -  consensus_cache_add(cdm_cache_get(), job->labels_out,
- -  job->body_out,
- -  job->bodylen_out);
- -status = CDM_DIFF_PRESENT;
- -handle = consensus_cache_entry_handle_new(ent);
- -consensus_cache_entry_decref(ent);
- -  } else {
+ +  int status = CDM_DIFF_ERROR;
+ +  consensus_cache_entry_handle_t *handles[ARRAY_LENGTH(compress_diffs_with)];
+ +  memset(handles, 0, sizeof(handles));
+ +
+++  consdiffmgr_ensure_space_for_files(n_diff_compression_methods());
+++
+ +  unsigned u;
+ +  for (u = 0; u < n_diff_compression_methods(); ++u) {
+ +compress_method_t method = compress_diffs_with[u];
+ +uint8_t *body_out = job->out[u].body;
+ +size_t bodylen_out = job->out[u].bodylen;
+ +config_line_t *labels = job->out[u].labels;
+ +const char *methodname = compression_method_get_name(method);
+ +if (body_out && bodylen_out && labels) {
+ +  /* Success! Store the results */
+ +  log_info(LD_DIRSERV, "Adding consensus diff from %s to %s, "
+ +   "compressed with %s",
+ +   lv_from_digest, lv_to_digest, methodname);
+ +
+ +  consensus_cache_entry_t *ent =
+ +consensus_cache_add(cdm_cache_get(),
+ +labels,
+ +body_out,
+ +bodylen_out);
+ +
+ +  status = CDM_DIFF_PRESENT;
+ +  handles[u] = consensus_cache_entry_handle_new(ent);
+ +  consensus_cache_entry_decref(ent);
+ +}
+ +  }
+ +  if (status != CDM_DIFF_PRESENT) {
   /* Failure! Nothing to do but complain */
   log_warn(LD_DIRSERV,
"Worker was unable to compute consensus diff "



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] Lower the file limit in consdiffmgr, to support seccomp2

2017-04-28 Thread nickm
commit 466e9140888f0a6a504dc642a0426bd2352f0490
Author: Nick Mathewson 
Date:   Wed Apr 26 09:29:58 2017 -0400

Lower the file limit in consdiffmgr, to support seccomp2
---
 src/or/consdiffmgr.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index 160dcaf..fb09d21 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -101,7 +101,10 @@ static HT_HEAD(cdm_diff_ht, cdm_diff_t) cdm_diff_ht = 
HT_INITIALIZER();
  */
 static consdiff_cfg_t consdiff_cfg = {
   /* .cache_max_age_hours = */ 24 * 90,
-  /* .cache_max_num = */ 1440
+  //  I'd like to make this number bigger, but it interferes with the
+  //  seccomp2 syscall filter, which tops out at BPF_MAXINS (4096)
+  //  rules.
+  /* .cache_max_num = */ 128
 };
 
 static int consensus_diff_queue_diff_work(consensus_cache_entry_t *diff_from,



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tor/master] New force-delete option on consensus_cache_delete_pending()

2017-04-28 Thread nickm
commit 920475f293a8a69dd846cd06249b4b699857a3d4
Author: Nick Mathewson 
Date:   Wed Apr 26 10:13:25 2017 -0400

New force-delete option on consensus_cache_delete_pending()

If we're out of file space in the storage directory, we'll need to
get rid of old files fast.
---
 src/or/conscache.c| 16 +---
 src/or/conscache.h|  3 ++-
 src/or/consdiffmgr.c  |  2 +-
 src/test/test_conscache.c |  2 +-
 4 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/or/conscache.c b/src/or/conscache.c
index 2544f56..7760d13 100644
--- a/src/or/conscache.c
+++ b/src/or/conscache.c
@@ -95,7 +95,7 @@ consensus_cache_register_with_sandbox(consensus_cache_t 
*cache,
 static void
 consensus_cache_clear(consensus_cache_t *cache)
 {
-  consensus_cache_delete_pending(cache);
+  consensus_cache_delete_pending(cache, 0);
 
   SMARTLIST_FOREACH_BEGIN(cache->entries, consensus_cache_entry_t *, ent) {
 ent->in_cache = NULL;
@@ -401,17 +401,19 @@ consensus_cache_unmap_lazy(consensus_cache_t *cache, 
time_t cutoff)
 
 /**
  * Delete every element of cache has been marked with
- * consensus_cache_entry_mark_for_removal, and which is not in use except by
- * the cache.
+ * consensus_cache_entry_mark_for_removal.  If force is false,
+ * retain those entries which are not in use except by the cache.
  */
 void
-consensus_cache_delete_pending(consensus_cache_t *cache)
+consensus_cache_delete_pending(consensus_cache_t *cache, int force)
 {
   SMARTLIST_FOREACH_BEGIN(cache->entries, consensus_cache_entry_t *, ent) {
 tor_assert_nonfatal(ent->in_cache == cache);
-if (ent->refcnt > 1 || BUG(ent->in_cache == NULL)) {
-  /* Somebody is using this entry right now */
-  continue;
+if (! force) {
+  if (ent->refcnt > 1 || BUG(ent->in_cache == NULL)) {
+/* Somebody is using this entry right now */
+continue;
+  }
 }
 if (ent->can_remove == 0) {
   /* Don't want to delete this. */
diff --git a/src/or/conscache.h b/src/or/conscache.h
index f3110e2..ea27733 100644
--- a/src/or/conscache.h
+++ b/src/or/conscache.h
@@ -17,7 +17,8 @@ struct sandbox_cfg_elem;
 int consensus_cache_register_with_sandbox(consensus_cache_t *cache,
   struct sandbox_cfg_elem **cfg);
 void consensus_cache_unmap_lazy(consensus_cache_t *cache, time_t cutoff);
-void consensus_cache_delete_pending(consensus_cache_t *cache);
+void consensus_cache_delete_pending(consensus_cache_t *cache,
+int force);
 consensus_cache_entry_t *consensus_cache_add(consensus_cache_t *cache,
  const config_line_t *labels,
  const uint8_t *data,
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index fb09d21..1f3915f 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -614,7 +614,7 @@ consdiffmgr_cleanup(void)
   smartlist_free(diffs);
 
   // Actually remove files, if they're not used.
-  consensus_cache_delete_pending(cdm_cache_get());
+  consensus_cache_delete_pending(cdm_cache_get(), 0);
   return n_to_delete;
 }
 
diff --git a/src/test/test_conscache.c b/src/test/test_conscache.c
index c316411..aee1ba8 100644
--- a/src/test/test_conscache.c
+++ b/src/test/test_conscache.c
@@ -203,7 +203,7 @@ test_conscache_cleanup(void *arg)
   tt_assert(e_tmp == NULL); // not found because pending deletion.
 
   /* Delete the pending-deletion items. */
-  consensus_cache_delete_pending(cache);
+  consensus_cache_delete_pending(cache, 0);
   {
 smartlist_t *entries = smartlist_new();
 consensus_cache_find_all(entries, cache, NULL, NULL);



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [collector/master] Also rename properties from 'Torperf' to 'Onionperf'.

2017-04-28 Thread karsten
commit 67aea3dfac326a77163cb0cd1b3505195779bf0a
Author: iwakeh 
Date:   Thu Apr 27 09:49:31 2017 +

Also rename properties from 'Torperf' to 'Onionperf'.
---
 src/main/java/org/torproject/collector/Main.java|  2 +-
 src/main/java/org/torproject/collector/conf/Annotation.java |  2 +-
 .../java/org/torproject/collector/conf/Configuration.java   |  2 +-
 src/main/java/org/torproject/collector/conf/Key.java|  6 +++---
 src/main/resources/collector.properties |  8 
 src/test/java/org/torproject/collector/MainTest.java|  2 +-
 .../java/org/torproject/collector/cron/SchedulerTest.java   | 13 +++--
 7 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/torproject/collector/Main.java 
b/src/main/java/org/torproject/collector/Main.java
index 95da01a..6676eb8 100644
--- a/src/main/java/org/torproject/collector/Main.java
+++ b/src/main/java/org/torproject/collector/Main.java
@@ -50,7 +50,7 @@ public class Main {
 collecTorMains.put(Key.ExitlistsActivated, ExitListDownloader.class);
 collecTorMains.put(Key.UpdateindexActivated, CreateIndexJson.class);
 collecTorMains.put(Key.RelaydescsActivated, ArchiveWriter.class);
-collecTorMains.put(Key.TorperfActivated, OnionperfDownloader.class);
+collecTorMains.put(Key.OnionperfActivated, OnionperfDownloader.class);
   }
 
   private static Configuration conf = new Configuration();
diff --git a/src/main/java/org/torproject/collector/conf/Annotation.java 
b/src/main/java/org/torproject/collector/conf/Annotation.java
index 5bdfbe6..ec983fc 100644
--- a/src/main/java/org/torproject/collector/conf/Annotation.java
+++ b/src/main/java/org/torproject/collector/conf/Annotation.java
@@ -16,7 +16,7 @@ public enum Annotation {
   Microdescriptor("@type microdescriptor 1.0\n"),
   Server("@type server-descriptor 1.0\n"),
   Status("@type bridge-network-status 1.1\n"),
-  Torperf("@type torperf 1.0\n"),
+  Onionperf("@type torperf 1.0\n"),
   Vote("@type network-status-vote-3 1.0\n");
 
   private final String annotation;
diff --git a/src/main/java/org/torproject/collector/conf/Configuration.java 
b/src/main/java/org/torproject/collector/conf/Configuration.java
index 7c7acc6..4e24a7b 100644
--- a/src/main/java/org/torproject/collector/conf/Configuration.java
+++ b/src/main/java/org/torproject/collector/conf/Configuration.java
@@ -92,7 +92,7 @@ public class Configuration extends Observable implements 
Cloneable {
 || this.getBool(Key.BridgedescsActivated)
 || this.getBool(Key.ExitlistsActivated)
 || this.getBool(Key.UpdateindexActivated)
-|| this.getBool(Key.TorperfActivated))) {
+|| this.getBool(Key.OnionperfActivated))) {
   throw new ConfigurationException("Nothing is activated!\n"
   + "Please edit collector.properties. Exiting.");
 }
diff --git a/src/main/java/org/torproject/collector/conf/Key.java 
b/src/main/java/org/torproject/collector/conf/Key.java
index 9473421..e3bcff1 100644
--- a/src/main/java/org/torproject/collector/conf/Key.java
+++ b/src/main/java/org/torproject/collector/conf/Key.java
@@ -42,9 +42,9 @@ public enum Key {
   RelaydescsActivated(Boolean.class),
   RelaydescsOffsetMinutes(Integer.class),
   RelaydescsPeriodMinutes(Integer.class),
-  TorperfActivated(Boolean.class),
-  TorperfOffsetMinutes(Integer.class),
-  TorperfPeriodMinutes(Integer.class),
+  OnionperfActivated(Boolean.class),
+  OnionperfOffsetMinutes(Integer.class),
+  OnionperfPeriodMinutes(Integer.class),
   UpdateindexActivated(Boolean.class),
   UpdateindexOffsetMinutes(Integer.class),
   UpdateindexPeriodMinutes(Integer.class),
diff --git a/src/main/resources/collector.properties 
b/src/main/resources/collector.properties
index f152644..54caf5a 100644
--- a/src/main/resources/collector.properties
+++ b/src/main/resources/collector.properties
@@ -30,11 +30,11 @@ RelaydescsPeriodMinutes = 30
 # offset in minutes since the epoch and
 RelaydescsOffsetMinutes = 5
 ## the following defines, if this module is activated
-TorperfActivated = false
+OnionperfActivated = false
 # period in minutes
-TorperfPeriodMinutes = 360
+OnionperfPeriodMinutes = 360
 # offset in minutes since the epoch and
-TorperfOffsetMinutes = 1
+OnionperfOffsetMinutes = 1
 # the following defines, if this module is activated
 UpdateindexActivated = false
 # period in minutes
@@ -139,7 +139,7 @@ ExitlistSyncOrigins = https://collector.torproject.org
 ## Where to download exit-lists from.
 ExitlistUrl = https://check.torproject.org/exit-addresses
 #
- Torperf downloader 
+ Onionperf downloader 
 #
 ## OnionPerf base URLs
 ## Hosts must be configured to use the first subdomain part of the given URL as
diff --git a/src/test/java/org/torproject/collector/MainTest.java 
b/src/test/java/org/torproject/collector/MainTest.java
index 53a875d..2e9c0ce 100644
--- a/src/test/java/org/torproject/collector/MainTest.java

[tor-commits] [collector/master] Tweak a log statement.

2017-04-28 Thread karsten
commit ec0ae34a190a551ca7d45f917c0ef3c4697816bb
Author: iwakeh 
Date:   Thu Apr 27 09:49:29 2017 +

Tweak a log statement.
---
 .../java/org/torproject/collector/torperf/TorperfDownloader.java| 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java 
b/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java
index 7574665..b4f91fd 100644
--- a/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java
+++ b/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java
@@ -280,10 +280,10 @@ public class TorperfDownloader extends CollecTorMain {
 bw.newLine();
   }
 } catch (IOException e) {
-  logger.warn("Unable to write download history file '"
-  + this.onionPerfDownloadedFile.getAbsolutePath() + "'.  This may "
+  logger.warn("Unable to write download history file '{}'.  This may "
   + "result in ignoring history and downloading all available .tpf "
-  + "files in the next execution.", e);
+  + "files in the next execution.",
+  this.onionPerfDownloadedFile.getAbsolutePath(), e);
 }
   }
 



___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [collector/master] Rename Torperf class and package to Onionperf.

2017-04-28 Thread karsten
commit 0a324223d90c2aac1c5198a7f8c9c00548ee1f0b
Author: iwakeh 
Date:   Thu Apr 27 09:49:30 2017 +

Rename Torperf class and package to Onionperf.
---
 src/main/java/org/torproject/collector/Main.java   |   4 +-
 .../collector/onionperf/OnionperfDownloader.java   | 304 
 .../collector/torperf/TorperfDownloader.java   | 307 -
 3 files changed, 306 insertions(+), 309 deletions(-)

diff --git a/src/main/java/org/torproject/collector/Main.java 
b/src/main/java/org/torproject/collector/Main.java
index 9ce709a..95da01a 100644
--- a/src/main/java/org/torproject/collector/Main.java
+++ b/src/main/java/org/torproject/collector/Main.java
@@ -12,8 +12,8 @@ import org.torproject.collector.cron.Scheduler;
 import org.torproject.collector.cron.ShutdownHook;
 import org.torproject.collector.exitlists.ExitListDownloader;
 import org.torproject.collector.index.CreateIndexJson;
+import org.torproject.collector.onionperf.OnionperfDownloader;
 import org.torproject.collector.relaydescs.ArchiveWriter;
-import org.torproject.collector.torperf.TorperfDownloader;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,7 +50,7 @@ public class Main {
 collecTorMains.put(Key.ExitlistsActivated, ExitListDownloader.class);
 collecTorMains.put(Key.UpdateindexActivated, CreateIndexJson.class);
 collecTorMains.put(Key.RelaydescsActivated, ArchiveWriter.class);
-collecTorMains.put(Key.TorperfActivated, TorperfDownloader.class);
+collecTorMains.put(Key.TorperfActivated, OnionperfDownloader.class);
   }
 
   private static Configuration conf = new Configuration();
diff --git 
a/src/main/java/org/torproject/collector/onionperf/OnionperfDownloader.java 
b/src/main/java/org/torproject/collector/onionperf/OnionperfDownloader.java
new file mode 100644
index 000..7453234
--- /dev/null
+++ b/src/main/java/org/torproject/collector/onionperf/OnionperfDownloader.java
@@ -0,0 +1,304 @@
+/* Copyright 2012-2017 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.collector.onionperf;
+
+import org.torproject.collector.conf.Configuration;
+import org.torproject.collector.conf.ConfigurationException;
+import org.torproject.collector.conf.Key;
+import org.torproject.collector.cron.CollecTorMain;
+import org.torproject.descriptor.Descriptor;
+import org.torproject.descriptor.DescriptorParseException;
+import org.torproject.descriptor.DescriptorParser;
+import org.torproject.descriptor.DescriptorSourceFactory;
+import org.torproject.descriptor.TorperfResult;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.Stack;
+import java.util.TimeZone;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/** Download download .tpf files from OnionPerf hosts. */
+public class OnionperfDownloader extends CollecTorMain {
+
+  private static final Logger logger = LoggerFactory.getLogger(
+  OnionperfDownloader.class);
+
+  private static final String TORPERF = "torperf";
+
+  public OnionperfDownloader(Configuration config) {
+super(config);
+  }
+
+  /** File containing the download history, which is necessary, because
+   * OnionPerf does not delete older .tpf files, but which enables us to do
+   * so. */
+  private File onionPerfDownloadedFile;
+
+  /** Full URLs of .tpf files downloaded in the current or in past
+   * executions. */
+  private SortedSet downloadedTpfFiles = new TreeSet<>();
+
+  /** Base URLs of configured OnionPerf hosts. */
+  private URL[] onionPerfHosts = null;
+
+  /** Directory for storing archived .tpf files. */
+  private File archiveDirectory = null;
+
+  /** Directory for storing recent .tpf files. */
+  private File recentDirectory = null;
+
+  @Override
+  public String module() {
+return TORPERF;
+  }
+
+  @Override
+  protected String syncMarker() {
+return "TorperfFiles";
+  }
+
+  @Override
+  protected void startProcessing() throws ConfigurationException {
+this.onionPerfDownloadedFile =
+new File(config.getPath(Key.StatsPath).toFile(),
+"onionperf-downloaded");
+this.onionPerfHosts = config.getUrlArray(Key.OnionPerfHosts);
+this.readDownloadedOnionPerfTpfFiles();
+this.archiveDirectory = new File(config.getPath(Key.OutputPath).toFile(),
+TORPERF);
+this.recentDirectory = new 

[tor-commits] [collector/master] Stop downloading and merging Torperf files.

2017-04-28 Thread karsten
commit fe9de218921bd10aee8cda7e722d6a1208ca28ea
Author: Karsten Loesing 
Date:   Thu Apr 27 11:42:59 2017 +0200

Stop downloading and merging Torperf files.

We recently switched to downloading .tpf files from OnionPerf hosts,
and we ran out of functioning Torperf hosts, so let's remove the code
for downloading and merging Torperf files.  Part of #21272.
---
 CHANGELOG.md   |   2 +
 .../java/org/torproject/collector/conf/Key.java|   2 -
 .../collector/torperf/TorperfDownloader.java   | 565 -
 src/main/resources/collector.properties|  10 -
 .../collector/conf/ConfigurationTest.java  |  29 +-
 5 files changed, 3 insertions(+), 605 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5e1107f..8d23f01 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
 
  * Major changes
- Download .tpf files from OnionPerf hosts.
+   - Stop downloading and merging .data and .extradata files from
+ Torperf hosts.
 
  * Medium changes
- Clean up files in recent/exit-lists/ again.
diff --git a/src/main/java/org/torproject/collector/conf/Key.java 
b/src/main/java/org/torproject/collector/conf/Key.java
index dd35322..9473421 100644
--- a/src/main/java/org/torproject/collector/conf/Key.java
+++ b/src/main/java/org/torproject/collector/conf/Key.java
@@ -56,8 +56,6 @@ public enum Key {
   KeepDirectoryArchiveImportHistory(Boolean.class),
   ReplaceIpAddressesWithHashes(Boolean.class),
   BridgeDescriptorMappingsLimit(Integer.class),
-  TorperfFilesLines(String[].class),
-  TorperfHosts(String[][].class),
   OnionPerfHosts(URL[].class);
 
   private Class clazz;
diff --git 
a/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java 
b/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java
index 2cd99df..7574665 100644
--- a/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java
+++ b/src/main/java/org/torproject/collector/torperf/TorperfDownloader.java
@@ -3,7 +3,6 @@
 
 package org.torproject.collector.torperf;
 
-import org.torproject.collector.conf.Annotation;
 import org.torproject.collector.conf.Configuration;
 import org.torproject.collector.conf.ConfigurationException;
 import org.torproject.collector.conf.Key;
@@ -25,7 +24,6 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.file.Files;
@@ -35,14 +33,10 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
 import java.util.SortedSet;
 import java.util.Stack;
 import java.util.TimeZone;
-import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -62,12 +56,6 @@ public class TorperfDownloader extends CollecTorMain {
 super(config);
   }
 
-  private File torperfOutputDirectory = null;
-  private Map torperfSources = new HashMap<>();
-  private String[] torperfFilesLines = null;
-  private SimpleDateFormat dateFormat;
-  private File torperfLastMergedFile;
-
   /** File containing the download history, which is necessary, because
* OnionPerf does not delete older .tpf files, but which enables us to do
* so. */
@@ -98,25 +86,6 @@ public class TorperfDownloader extends CollecTorMain {
 
   @Override
   protected void startProcessing() throws ConfigurationException {
-this.torperfFilesLines = config.getStringArray(Key.TorperfFilesLines);
-this.torperfOutputDirectory
-= new File(config.getPath(Key.OutputPath).toString(), TORPERF);
-this.torperfLastMergedFile =
-new File(config.getPath(Key.StatsPath).toFile(), 
"torperf-last-merged");
-if (!this.torperfOutputDirectory.exists()) {
-  this.torperfOutputDirectory.mkdirs();
-}
-this.dateFormat = new SimpleDateFormat("-MM-dd");
-this.dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
-this.readLastMergedTimestamps();
-for (String[] source : config.getStringArrayArray(Key.TorperfHosts)) {
-  torperfSources.put(source[0], source[1]);
-}
-for (String torperfFilesLine : this.torperfFilesLines) {
-  this.downloadAndMergeFiles(torperfFilesLine);
-}
-this.writeLastMergedTimestamps();
-
 this.onionPerfDownloadedFile =
 new File(config.getPath(Key.StatsPath).toFile(),
 "onionperf-downloaded");
@@ -130,543 +99,9 @@ public class TorperfDownloader extends CollecTorMain {
   this.downloadFromOnionPerfHost(baseUrl);
 }
 this.writeDownloadedOnionPerfTpfFiles();
-
 this.cleanUpRsyncDirectory();
   }
 
-  SortedMap lastMergedTimestamps = new TreeMap<>();
-
-  private void 

[tor-commits] [translation/exoneratorproperties] Update translations for exoneratorproperties

2017-04-28 Thread translation
commit ce0494e339f74ce93f9abc2ad56066d6a62025f5
Author: Translation commit bot 
Date:   Fri Apr 28 11:48:14 2017 +

Update translations for exoneratorproperties
---
 uk/exonerator.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/uk/exonerator.properties b/uk/exonerator.properties
index 72be3f7..3d29eac 100644
--- a/uk/exonerator.properties
+++ b/uk/exonerator.properties
@@ -41,12 +41,12 @@ technicaldetails.exit.yes=Так
 technicaldetails.exit.no=Ні
 permanentlink.heading=Постійне посилання
 footer.abouttor.heading=Про Tor
-footer.abouttor.body.text=Tor is an international software project to 
anonymize Internet traffic by %s. Therefore, if you see traffic from a 
Tor relay, this traffic usually originates from someone using Tor, rather than 
from the relay operator. The Tor Project and Tor relay operators have no 
records of the traffic that passes over the network and therefore cannot 
provide any information about its origin. Be sure to %s, and don't 
hesitate to %s for more information.
+footer.abouttor.body.text=Tor є міжнародний проект 
програмного забезпечення від %s, створений 
для забезпечення анонімності 
Internet-трафіку. Це значить, що коли ви 
бачите трафік із ланки Tor, то цей трафік, 
скоріш за все, походить від якогось 
користувача Tor, а не від оператора ланки. 
Проект Tor і оператори ланок Tor не ведуть 
записів про трафік, що проходить мережею, і 
тому не можуть надати жодної інформації 
про його походження. Не забудьте %s, і не 
вагайтеся %s, щоб отримати більше 
інформації.
 footer.abouttor.body.link1=шифрування пакетів та 
надсилання їх серією стрибків до 
досягнення їх місця призначення
 footer.abouttor.body.link2=дізнатися більше про Tor
 footer.abouttor.body.link3=зв'язатися з The Tor Project, Inc.
 footer.aboutexonerator.heading=Про ExoneraTor
-footer.aboutexonerator.body=The ExoneraTor service maintains a database of IP 
addresses that have been part of the Tor network. It answers the question 
whether there was a Tor relay running on a given IP address on a given 
date. ExoneraTor may store more than one IP address per relay if relays 
use a different IP address for exiting to the Internet than for registering in 
the Tor network, and it stores whether a relay permitted transit of Tor traffic 
to the open Internet at that time.
+footer.aboutexonerator.body=Сервіс ExoneraTor підтримує 
базу даних IP-адрес, які є частиною мережі Tor. 
З його допомогою можна дізнатися, чи було 
запущено Tor-реле з певної IP-адреси певної 
дати. ExoneraTor може зберігати більше, ніж одну 
IP-адресу на реле, якщо реле використовують 
IP-адресу для виходу в інтернет, відмінну 
від тої, з якою реєструються в мережі Tor, і 
зберігає дані про те, чи реле тоді 
дозволило транзит трафіку Tor у відкритий 
Інтернет.
 footer.trademark.text=«Tor» і «Onion Logo» — %s The Tor Project, Inc.
 footer.trademark.link=зареєстровані торгові марки
 footer.language.name=English

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tor-messenger-prefsdtd] Update translations for tor-messenger-prefsdtd

2017-04-28 Thread translation
commit c3181e80cf0ee3536814c4714aa352943574529c
Author: Translation commit bot 
Date:   Fri Apr 28 10:47:50 2017 +

Update translations for tor-messenger-prefsdtd
---
 uk/prefs.dtd | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/uk/prefs.dtd b/uk/prefs.dtd
index cceded5..48a5ced 100644
--- a/uk/prefs.dtd
+++ b/uk/prefs.dtd
@@ -17,6 +17,6 @@
 
 
 
-
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tor-messenger-prefsdtd_completed] Update translations for tor-messenger-prefsdtd_completed

2017-04-28 Thread translation
commit 2819b5ebe57abac9cba6a17641fba9d8f37df525
Author: Translation commit bot 
Date:   Fri Apr 28 10:47:53 2017 +

Update translations for tor-messenger-prefsdtd_completed
---
 uk/prefs.dtd | 13 +++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/uk/prefs.dtd b/uk/prefs.dtd
index 51dae84..48a5ced 100644
--- a/uk/prefs.dtd
+++ b/uk/prefs.dtd
@@ -1,6 +1,8 @@
 
+
+
 
-
+
 
 
 
@@ -10,4 +12,11 @@
 
 
 
-
\ No newline at end of file
+
+
+
+
+
+
+
+
\ No newline at end of file

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tech-reports/master] Email obfuscation.

2017-04-28 Thread karsten
commit 84b39ca2559f05fb480669939aa00c1a310cff8e
Author: iwakeh 
Date:   Thu Apr 27 20:51:01 2017 +0100

Email obfuscation.
---
 2017/metrics-privacy/privacy-in-memory.tex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/2017/metrics-privacy/privacy-in-memory.tex 
b/2017/metrics-privacy/privacy-in-memory.tex
index 72cdf2a..3cb4be6 100644
--- a/2017/metrics-privacy/privacy-in-memory.tex
+++ b/2017/metrics-privacy/privacy-in-memory.tex
@@ -32,7 +32,7 @@
 
 
 \title{Privacy analysis of Tor's in-memory statistics}
-\author{Karin Herm\\The Tor Project\\ iwakeh$\bowtie$torproject.org}% avoiding 
spam
+\author{Karin Herm\\The Tor Project\\ iwakeh$\bowtie$torproject$\cdot$org}% 
avoiding spam
 
 \reportid{2017-04-001}
 \date{April 2017}

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tor-messenger-prefsdtd] Update translations for tor-messenger-prefsdtd

2017-04-28 Thread translation
commit 6b729eb4244f772c37ea4693b280b3207a9475f8
Author: Translation commit bot 
Date:   Fri Apr 28 10:17:46 2017 +

Update translations for tor-messenger-prefsdtd
---
 uk/prefs.dtd | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/uk/prefs.dtd b/uk/prefs.dtd
index a323e1a..cceded5 100644
--- a/uk/prefs.dtd
+++ b/uk/prefs.dtd
@@ -2,7 +2,7 @@
 
 
 
-
+
 
 
 
@@ -13,10 +13,10 @@
 
 
 
-
-
-
-
+
+
+
+
 
 
 
\ No newline at end of file

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tor-browser-manual] Update translations for tor-browser-manual

2017-04-28 Thread translation
commit 9f69bd0fe69b36546ab5f3f62b1271cb9aeb1e00
Author: Translation commit bot 
Date:   Fri Apr 28 09:18:24 2017 +

Update translations for tor-browser-manual
---
 uk/uk.po | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/uk/uk.po b/uk/uk.po
index 3b22906..a487ddd 100644
--- a/uk/uk.po
+++ b/uk/uk.po
@@ -3,12 +3,13 @@
 # Oleksii Golub , 2016
 # muhozhrun , 2016
 # Pinro Lomil , 2016
+# Serge Thirdlingson , 2017
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "POT-Creation-Date: 2016-12-06 16:36-0600\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Pinro Lomil , 2016\n"
+"Last-Translator: Serge Thirdlingson , 2017\n"
 "Language-Team: Ukrainian (https://www.transifex.com/otf/teams/1519/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -494,7 +495,7 @@ msgstr ""
 
 #: index.page:6
 msgid "Tor Browser User Manual"
-msgstr ""
+msgstr "Підручник з користування браузером Tor"
 
 #: known-issues.page:6
 msgid "A list of known issues."

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tails-greeter-2] Update translations for tails-greeter-2

2017-04-28 Thread translation
commit 5eed013ecbdfcf558c5704bc4a891e71e55c359b
Author: Translation commit bot 
Date:   Fri Apr 28 09:18:11 2017 +

Update translations for tails-greeter-2
---
 uk/uk.po | 31 +--
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/uk/uk.po b/uk/uk.po
index ce5861d..a044967 100644
--- a/uk/uk.po
+++ b/uk/uk.po
@@ -231,23 +231,23 @@ msgstr "_Підміна MAC-адреси"
 
 #: ../data/greeter.ui.h:48
 msgid "On (default)"
-msgstr ""
+msgstr "Увімкнуто (за промовчанням)"
 
 #: ../data/greeter.ui.h:49
 msgid "_Network Connection"
-msgstr ""
+msgstr "_З'єднання з мережею"
 
 #: ../data/greeter.ui.h:50 ../tailsgreeter/gui.py:382
 msgid "Direct (default)"
-msgstr ""
+msgstr "Безпосередньо (за промовчанням)"
 
 #: ../data/greeter.ui.h:51
 msgid "_Windows Camouflage"
-msgstr ""
+msgstr "_Маскування під Windows"
 
 #: ../tailsgreeter/gui.py:388
 msgid "Bridge & Proxy"
-msgstr ""
+msgstr "Міст і проксі"
 
 #: ../tailsgreeter/gui.py:394
 msgid "Offline"
@@ -255,15 +255,15 @@ msgstr "Офлайн"
 
 #: ../tailsgreeter/gui.py:478
 msgid "Failed to relock persistent storage."
-msgstr ""
+msgstr "Не вдалося заблокувати постійне сх
овище"
 
 #: ../tailsgreeter/gui.py:496
 msgid "Unlocking…"
-msgstr ""
+msgstr "Розблокування..."
 
 #: ../tailsgreeter/gui.py:591
 msgid "Additional Settings"
-msgstr ""
+msgstr "Додаткові налаштування"
 
 #: ../tailsgreeter/gui.py:599
 msgid "Cancel"
@@ -283,13 +283,13 @@ msgstr "Вимкнути"
 
 #: ../tailsgreeter/gui.py:721
 msgid "_Start Tails"
-msgstr ""
+msgstr "_Запустити Tails"
 
 #. Translators: translate to default:RTL if your language
 #. is written from right to left
 #: ../tailsgreeter/language.py:133
 msgid "default:LTR"
-msgstr ""
+msgstr "за промовчанням:LTR"
 
 #: ../tailsgreeter/persistence.py:89
 #, python-brace-format
@@ -297,6 +297,8 @@ msgid ""
 "live-persist failed with return code {returncode}:\n"
 "{stderr}"
 msgstr ""
+"невдача в live-persist, код поверення {returncode}:\n"
+"{stderr}"
 
 #: ../tailsgreeter/persistence.py:120 ../tailsgreeter/persistence.py:137
 #, python-brace-format
@@ -305,6 +307,9 @@ msgid ""
 "{stdout}\n"
 "{stderr}"
 msgstr ""
+"невдача в cryptsetup, код повернення {returncode}:\n"
+"{stdout}\n"
+"{stderr}"
 
 #: ../tailsgreeter/persistence.py:154
 #, python-brace-format
@@ -313,6 +318,9 @@ msgid ""
 "{stdout}\n"
 "{stderr}"
 msgstr ""
+"невдача в live-persist, код поверення {returncode}:\n"
+"{stdout}\n"
+"{stderr}"
 
 #: ../tailsgreeter/persistence.py:168
 #, python-brace-format
@@ -321,3 +329,6 @@ msgid ""
 "{stdout}\n"
 "{stderr}"
 msgstr ""
+"невдача в umount, код повернення {returncode}:\n"
+"{stdout}\n"
+"{stderr}"

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tails-greeter-2_completed] Update translations for tails-greeter-2_completed

2017-04-28 Thread translation
commit d6713cf3e40e169c1b1c0580c1c43659e99c9148
Author: Translation commit bot 
Date:   Fri Apr 28 09:18:15 2017 +

Update translations for tails-greeter-2_completed
---
 uk/uk.po | 334 +++
 1 file changed, 334 insertions(+)

diff --git a/uk/uk.po b/uk/uk.po
new file mode 100644
index 000..a044967
--- /dev/null
+++ b/uk/uk.po
@@ -0,0 +1,334 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+# 
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-03-20 09:46+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Konstantin Tiler , 2016\n"
+"Language-Team: Ukrainian (https://www.transifex.com/otf/teams/1519/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && 
n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../data/greeter.ui.h:1
+msgid "Administration Password"
+msgstr "Пароль адміністратора"
+
+#: ../data/greeter.ui.h:2
+msgid ""
+"Set up an administration password if you need to perform administrative "
+"tasks. Otherwise, the administration password is disabled for better "
+"security."
+msgstr ""
+"Встановіть пароль адміністатора, щоб 
виконувати адміністрування. Інакше він "
+"буде вимкнений для покращення безпеки."
+
+#: ../data/greeter.ui.h:3
+msgid "Enter an administration password"
+msgstr "Введіть пароль адміністратора"
+
+#: ../data/greeter.ui.h:4
+msgid "Confirm"
+msgstr "Підтвердити"
+
+#: ../data/greeter.ui.h:5
+msgid "Confirm your administration password"
+msgstr "Підтвердіть свій пароль 
адміністратора"
+
+#: ../data/greeter.ui.h:6
+msgid "Disable"
+msgstr "Вимкнути"
+
+#. This string will never be displayed in the 1st version of the greeter.
+#: ../data/greeter.ui.h:8
+msgid "Windows Camouflage"
+msgstr "Маскування під Windows"
+
+#. This string will never be displayed in the 1st version of the greeter.
+#: ../data/greeter.ui.h:10
+msgid ""
+"This option makes Tails look like Microsoft Windows 10. This can be useful "
+"to avoid attracting suspicion in public places."
+msgstr ""
+"Ця опція надає Tails вигляду Microsoft Windows 10. 
Можна скористатися, щоб "
+"не викликати підозри в людних місцях."
+
+#. This string will never be displayed in the 1st version of the greeter.
+#: ../data/greeter.ui.h:12
+msgid "Microsoft Windows 10 camouflage"
+msgstr "Маскування під Microsoft Windows 10"
+
+#: ../data/greeter.ui.h:13
+msgid "MAC Address Spoofing"
+msgstr "Підміна MAC-адреси"
+
+#: ../data/greeter.ui.h:14
+msgid ""
+"MAC address spoofing hides the serial number of your network interface (Wi-"
+"Fi or wired) to the local network. Spoofing MAC addresses is generally safer"
+" as it helps you hide your geographical location. But it might also create "
+"connectivity problems or look suspicious."
+msgstr ""
+"Підміна MAC-адреси приховує серійний номер 
вашого мережного інтерфейсу "
+"(провідного чи безпровідного) з локальною 
мережею. Підміна MAC-адреси в "
+"загальному безпечніша, бо допомагає вам 
приховати ваше географічне "
+"розташування. Але може створити проблеми 
зі зв'язком або виглядати "
+"підозріло."
+
+#: ../data/greeter.ui.h:15
+msgid "Spoof all MAC addresses (default)"
+msgstr "Підмінювати всі MAC-адреси (за 
промовчанням)"
+
+#: ../data/greeter.ui.h:16
+msgid "Don't spoof MAC addresses"
+msgstr "Не підмінювати MAC-адреси"
+
+#: ../data/greeter.ui.h:17 ../tailsgreeter/gui.py:529
+msgid "Cannot unlock encrypted storage with this passphrase."
+msgstr "Неможливо розблокувати зашифроване сх
овище цим паролем."
+
+#: ../data/greeter.ui.h:18
+msgid ""
+"You will configure the Tor bridge and local proxy later on after connecting "
+"to a network."
+msgstr "Ви налаштуєте міст Tor і локальний 
проксі після приєднання до мережі."
+
+#: ../data/greeter.ui.h:19
+msgid "Welcome to Tails!"
+msgstr "Ласкаво просимо до Tails!"
+
+#. This string will never be displayed in 

[tor-commits] [translation/abouttor-homepage_completed] Update translations for abouttor-homepage_completed

2017-04-28 Thread translation
commit 7d0009b558c6d3848288c30442d83f7cd92b0441
Author: Translation commit bot 
Date:   Fri Apr 28 09:16:23 2017 +

Update translations for abouttor-homepage_completed
---
 uk/aboutTor.dtd | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/uk/aboutTor.dtd b/uk/aboutTor.dtd
index 155de74..0c8ef51 100644
--- a/uk/aboutTor.dtd
+++ b/uk/aboutTor.dtd
@@ -19,10 +19,7 @@
 
 
 
-
-https://startpage.com/rth/search;>
-https://duckduckgo.com/html/;>
-https://search.disconnect.me/searchTerms/search?ses=Googlelocation_option=USsource=tor;>
+https://duckduckgo.com;>
 
 
 
@@ -32,6 +29,8 @@
 
 
 https://www.torproject.org/download/download.html.en#warning;>
+
+
 
 
 

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/abouttor-homepage] Update translations for abouttor-homepage

2017-04-28 Thread translation
commit 7a93507954bfa117c7b9fb2c08a9eb9cd6c6c8ed
Author: Translation commit bot 
Date:   Fri Apr 28 09:16:19 2017 +

Update translations for abouttor-homepage
---
 uk/aboutTor.dtd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/uk/aboutTor.dtd b/uk/aboutTor.dtd
index 20b2c39..0c8ef51 100644
--- a/uk/aboutTor.dtd
+++ b/uk/aboutTor.dtd
@@ -30,7 +30,7 @@
 
 https://www.torproject.org/download/download.html.en#warning;>
 
-
+
 
 
 

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tails-greeter-2] Update translations for tails-greeter-2

2017-04-28 Thread translation
commit d8e66153d58966b0155efc7180432f240e848b24
Author: Translation commit bot 
Date:   Fri Apr 28 08:48:07 2017 +

Update translations for tails-greeter-2
---
 uk/uk.po | 55 +++
 1 file changed, 31 insertions(+), 24 deletions(-)

diff --git a/uk/uk.po b/uk/uk.po
index 1b93b02..ce5861d 100644
--- a/uk/uk.po
+++ b/uk/uk.po
@@ -103,87 +103,89 @@ msgstr "Ви налаштуєте міст Tor і 
локальний прокс
 
 #: ../data/greeter.ui.h:19
 msgid "Welcome to Tails!"
-msgstr ""
+msgstr "Ласкаво просимо до Tails!"
 
 #. This string will never be displayed in the 1st version of the greeter.
 #: ../data/greeter.ui.h:21
 msgctxt ""
 msgid ""
 "To get guided through Tails' settings, click on Take a Tour above"
-msgstr ""
+msgstr "Для проходження налаштувань Tails 
натисніть вище Take a Tour"
 
 #: ../data/greeter.ui.h:22
 msgid "Language & Region"
-msgstr ""
+msgstr "Мова і розташування"
 
 #: ../data/greeter.ui.h:23
 msgid "Default Settings"
-msgstr ""
+msgstr "Налаштування за промовчанням"
 
 #: ../data/greeter.ui.h:24
 msgid "Save Language & Region Settings"
-msgstr ""
+msgstr "Зберегти зміни мови і розташування"
 
 #: ../data/greeter.ui.h:25
 msgid "_Language"
-msgstr ""
+msgstr "_Мова"
 
 #: ../data/greeter.ui.h:26
 msgid "_Keyboard Layout"
-msgstr ""
+msgstr "_Розкладка клавіатури"
 
 #: ../data/greeter.ui.h:27
 msgid "_Formats"
-msgstr ""
+msgstr "_Формати"
 
 #: ../data/greeter.ui.h:28
 msgid "_Time Zone"
-msgstr ""
+msgstr "_Часовий пояс"
 
 #: ../data/greeter.ui.h:29
 msgid "Encrypted _Persistent Storage"
-msgstr ""
+msgstr "Зашифроване _Постійне сховище"
 
 #: ../data/greeter.ui.h:30
 msgid "Show Passphrase"
-msgstr ""
+msgstr "Показати пароль"
 
 #: ../data/greeter.ui.h:31
 msgid "Configure Persistent Storage"
-msgstr ""
+msgstr "Налаштувати Постійне сховище"
 
 #: ../data/greeter.ui.h:32
 msgid "Enter your passphrase to unlock the persistent storage"
-msgstr ""
+msgstr "Введіть свій пароль, щоб розблокувати 
постійне сховище"
 
 #: ../data/greeter.ui.h:33 ../tailsgreeter/gui.py:475
 #: ../tailsgreeter/gui.py:525
 msgid "Unlock"
-msgstr ""
+msgstr "Розблокувати"
 
 #: ../data/greeter.ui.h:34
 msgid "Relock Persistent Storage"
-msgstr ""
+msgstr "Заблокувати Постійне сховище"
 
 #: ../data/greeter.ui.h:35
 msgid "Your persistent storage is unlocked. Restart Tails to lock it again."
 msgstr ""
+"Ваше постійне сховище розблоковане. 
Перезапустіть Tails, щоб заблокувати "
+"його знов."
 
 #: ../data/greeter.ui.h:36
 msgid "_Additional Settings"
-msgstr ""
+msgstr "_Додаткові налаштування"
 
 #: ../data/greeter.ui.h:37
 msgid "Save Additional Settings"
-msgstr ""
+msgstr "Зберегти Додаткові налаштування"
 
 #: ../data/greeter.ui.h:38
 msgid "Add an additional setting"
-msgstr ""
+msgstr "Додати ще одне додаткове налаштування"
 
 #: ../data/greeter.ui.h:39
 msgid "Network Configuration"
-msgstr ""
+msgstr "Налаштування мережі"
 
 #: ../data/greeter.ui.h:40
 msgid ""
@@ -191,14 +193,17 @@ msgid ""
 "configure a Tor bridge or a local proxy. To work completely offline, you can"
 " disable all networking."
 msgstr ""
+"Якщо ваше з'єднання з Інтернет проходить 
цензуру, фільтр або проксі, ви "
+"можете налаштувати міст Tor або локальний 
проксі. Щоб працювати цілком "
+"офлайн, можна вимкнути всі з'єднання."
 
 #: ../data/greeter.ui.h:41
 msgid "Connect directly to the Tor network (default)"
-msgstr ""
+msgstr "З'єднатися з мережею Tor безпосередньо 
(за промовчанням)."
 
 #: ../data/greeter.ui.h:42
 msgid "Configure a Tor bridge, firewall, or proxy settings"
-msgstr ""
+msgstr "Налаштувати для Tor міст, фаєрвол або 
проксі"
 
 #: ../data/greeter.ui.h:43
 msgid "Disable all networking"
@@ -209,18 +214,20 @@ msgid ""
 "The default settings are safe in most situations. To add a custom setting, "
 "press the \"+\" button below."
 msgstr ""
+"Налаштування за промовчанням безпечні в 
більшості випадків. Щоб додати ваше "
+"власне налаштування, натисніть знизу \"+\"."
 
 #: ../data/greeter.ui.h:45
 msgid "_Administration Password"
-msgstr ""
+msgstr "_Пароль адміністратора"
 
 #: ../data/greeter.ui.h:46
 

[tor-commits] [tech-reports/master] Add .gitignore for latest report.

2017-04-28 Thread karsten
commit 7ddad27ce23557bf55aeede3fb7480304986184c
Author: Karsten Loesing 
Date:   Fri Apr 28 10:30:58 2017 +0200

Add .gitignore for latest report.
---
 2017/metrics-privacy/.gitignore | 4 
 1 file changed, 4 insertions(+)

diff --git a/2017/metrics-privacy/.gitignore b/2017/metrics-privacy/.gitignore
new file mode 100644
index 000..70f6e9a
--- /dev/null
+++ b/2017/metrics-privacy/.gitignore
@@ -0,0 +1,4 @@
+.DS_Store
+privacy-in-memory-2017-04-28.pdf
+*.toc
+

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [tech-reports/master] Sources for tr-2017-04-001.

2017-04-28 Thread karsten
commit e8d6663c6ea45deb4e8e3ceabc0be053480e78a3
Author: iwakeh 
Date:   Thu Apr 27 20:51:00 2017 +0100

Sources for tr-2017-04-001.
---
 ...ts-bridge-combined-aq-2016-01-01-2017-01-01.png |  Bin 0 -> 22445 bytes
 ...ts-bridge-combined-va-2016-01-01-2017-01-01.png |  Bin 0 -> 46376 bytes
 ...ats-bridge-country-aq-2016-01-01-2017-01-01.png |  Bin 0 -> 10695 bytes
 ...ats-bridge-country-va-2016-01-01-2017-01-01.png |  Bin 0 -> 24626 bytes
 ...-relay-country-aq-2016-01-01-2017-01-01-off.png |  Bin 0 -> 22730 bytes
 ...-relay-country-va-2016-01-01-2017-01-01-off.png |  Bin 0 -> 23626 bytes
 2017/metrics-privacy/privacy-in-memory.tex | 1560 
 2017/metrics-privacy/references.bib|  153 ++
 2017/metrics-privacy/tortechrep.cls|1 +
 9 files changed, 1714 insertions(+)

diff --git 
a/2017/metrics-privacy/images/userstats-bridge-combined-aq-2016-01-01-2017-01-01.png
 
b/2017/metrics-privacy/images/userstats-bridge-combined-aq-2016-01-01-2017-01-01.png
new file mode 100644
index 000..a01faf7
Binary files /dev/null and 
b/2017/metrics-privacy/images/userstats-bridge-combined-aq-2016-01-01-2017-01-01.png
 differ
diff --git 
a/2017/metrics-privacy/images/userstats-bridge-combined-va-2016-01-01-2017-01-01.png
 
b/2017/metrics-privacy/images/userstats-bridge-combined-va-2016-01-01-2017-01-01.png
new file mode 100644
index 000..d61cf9c
Binary files /dev/null and 
b/2017/metrics-privacy/images/userstats-bridge-combined-va-2016-01-01-2017-01-01.png
 differ
diff --git 
a/2017/metrics-privacy/images/userstats-bridge-country-aq-2016-01-01-2017-01-01.png
 
b/2017/metrics-privacy/images/userstats-bridge-country-aq-2016-01-01-2017-01-01.png
new file mode 100644
index 000..572482b
Binary files /dev/null and 
b/2017/metrics-privacy/images/userstats-bridge-country-aq-2016-01-01-2017-01-01.png
 differ
diff --git 
a/2017/metrics-privacy/images/userstats-bridge-country-va-2016-01-01-2017-01-01.png
 
b/2017/metrics-privacy/images/userstats-bridge-country-va-2016-01-01-2017-01-01.png
new file mode 100644
index 000..b3eea7e
Binary files /dev/null and 
b/2017/metrics-privacy/images/userstats-bridge-country-va-2016-01-01-2017-01-01.png
 differ
diff --git 
a/2017/metrics-privacy/images/userstats-relay-country-aq-2016-01-01-2017-01-01-off.png
 
b/2017/metrics-privacy/images/userstats-relay-country-aq-2016-01-01-2017-01-01-off.png
new file mode 100644
index 000..b808134
Binary files /dev/null and 
b/2017/metrics-privacy/images/userstats-relay-country-aq-2016-01-01-2017-01-01-off.png
 differ
diff --git 
a/2017/metrics-privacy/images/userstats-relay-country-va-2016-01-01-2017-01-01-off.png
 
b/2017/metrics-privacy/images/userstats-relay-country-va-2016-01-01-2017-01-01-off.png
new file mode 100644
index 000..a6e966b
Binary files /dev/null and 
b/2017/metrics-privacy/images/userstats-relay-country-va-2016-01-01-2017-01-01-off.png
 differ
diff --git a/2017/metrics-privacy/privacy-in-memory.tex 
b/2017/metrics-privacy/privacy-in-memory.tex
new file mode 100644
index 000..72cdf2a
--- /dev/null
+++ b/2017/metrics-privacy/privacy-in-memory.tex
@@ -0,0 +1,1560 @@
+\documentclass{tortechrep}
+\usepackage{url}
+\usepackage{amsthm}
+\usepackage{thmtools}
+\usepackage{mathtools}
+\usepackage{hyperref}
+\usepackage{comment}
+\usepackage{fancyvrb}
+\usepackage{fancyhdr}
+\usepackage[Q=yes]{examplep}
+\usepackage{marginnote}
+\usepackage[light]{draftcopy}
+\usepackage{graphicx}
+\usepackage{caption}
+\usepackage{subcaption}
+
+%%% useful definitions and settings
+\setcounter{tocdepth}{1}
+
+%%% no break in verbatim/code.
+\newcommand{\Qx}[1]{\mbox{\Q{#1}}}
+
+%%%
+
+\begin{document}
+ Settings inside document-env.
+% general setting for Verbatim environment
+\fvset{frame=leftline,numbers=left,numbersep=2pt,gobble=4,stepnumber=1}
+\VerbatimFootnotes
+\graphicspath{{./images/}}
+
+
+
+\title{Privacy analysis of Tor's in-memory statistics}
+\author{Karin Herm\\The Tor Project\\ iwakeh$\bowtie$torproject.org}% avoiding 
spam
+
+\reportid{2017-04-001}
+\date{April 2017}
+\maketitle
+\tableofcontents
+
+\begin{abstract}
+  This report analyzes which possibly sensitive, potentially
+  personally identifying data is stored in memory of Tor relays and
+  bridges or reported to the directory authorities and makes
+  suggestions to reduce the collection and temporary storage of such
+  data. %
+\end{abstract}
+\pagebreak
+\section{Introduction}\label{intro} %
+Tor network metrics and the underlying data have been available for
+many years by now and proven to be a valuable source for analyzing and
+improving the network as well as for censorship detection.%
+\footnote{Network analysis estimation of cell traffic, estimation of
+  onion services induced traffic and user count estimation as well as
+  censorship detection \cite{tr200908001,tr201210001,tr201504001} and
+  all data and visualizations on
+  

[tor-commits] [translation/tails-greeter-2] Update translations for tails-greeter-2

2017-04-28 Thread translation
commit b03c15ede19edff7b317c6c3b97e508d9a425b9a
Author: Translation commit bot 
Date:   Fri Apr 28 08:18:08 2017 +

Update translations for tails-greeter-2
---
 uk/uk.po | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/uk/uk.po b/uk/uk.po
index b983b07..1b93b02 100644
--- a/uk/uk.po
+++ b/uk/uk.po
@@ -99,7 +99,7 @@ msgstr "Неможливо розблокувати 
зашифроване сх
 msgid ""
 "You will configure the Tor bridge and local proxy later on after connecting "
 "to a network."
-msgstr ""
+msgstr "Ви налаштуєте міст Tor і локальний 
проксі після приєднання до мережі."
 
 #: ../data/greeter.ui.h:19
 msgid "Welcome to Tails!"

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tails-greeter-2] Update translations for tails-greeter-2

2017-04-28 Thread translation
commit 1a343cfd42172eaa74c282e011dd8765e05a7728
Author: Translation commit bot 
Date:   Fri Apr 28 07:48:08 2017 +

Update translations for tails-greeter-2
---
 uk/uk.po | 31 ---
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/uk/uk.po b/uk/uk.po
index dd366a5..b983b07 100644
--- a/uk/uk.po
+++ b/uk/uk.po
@@ -20,7 +20,7 @@ msgstr ""
 
 #: ../data/greeter.ui.h:1
 msgid "Administration Password"
-msgstr ""
+msgstr "Пароль адміністратора"
 
 #: ../data/greeter.ui.h:2
 msgid ""
@@ -28,27 +28,29 @@ msgid ""
 "tasks. Otherwise, the administration password is disabled for better "
 "security."
 msgstr ""
+"Встановіть пароль адміністатора, щоб 
виконувати адміністрування. Інакше він "
+"буде вимкнений для покращення безпеки."
 
 #: ../data/greeter.ui.h:3
 msgid "Enter an administration password"
-msgstr ""
+msgstr "Введіть пароль адміністратора"
 
 #: ../data/greeter.ui.h:4
 msgid "Confirm"
-msgstr ""
+msgstr "Підтвердити"
 
 #: ../data/greeter.ui.h:5
 msgid "Confirm your administration password"
-msgstr ""
+msgstr "Підтвердіть свій пароль 
адміністратора"
 
 #: ../data/greeter.ui.h:6
 msgid "Disable"
-msgstr ""
+msgstr "Вимкнути"
 
 #. This string will never be displayed in the 1st version of the greeter.
 #: ../data/greeter.ui.h:8
 msgid "Windows Camouflage"
-msgstr "Windows Camouflage"
+msgstr "Маскування під Windows"
 
 #. This string will never be displayed in the 1st version of the greeter.
 #: ../data/greeter.ui.h:10
@@ -56,15 +58,17 @@ msgid ""
 "This option makes Tails look like Microsoft Windows 10. This can be useful "
 "to avoid attracting suspicion in public places."
 msgstr ""
+"Ця опція надає Tails вигляду Microsoft Windows 10. 
Можна скористатися, щоб "
+"не викликати підозри в людних місцях."
 
 #. This string will never be displayed in the 1st version of the greeter.
 #: ../data/greeter.ui.h:12
 msgid "Microsoft Windows 10 camouflage"
-msgstr ""
+msgstr "Маскування під Microsoft Windows 10"
 
 #: ../data/greeter.ui.h:13
 msgid "MAC Address Spoofing"
-msgstr ""
+msgstr "Підміна MAC-адреси"
 
 #: ../data/greeter.ui.h:14
 msgid ""
@@ -73,18 +77,23 @@ msgid ""
 " as it helps you hide your geographical location. But it might also create "
 "connectivity problems or look suspicious."
 msgstr ""
+"Підміна MAC-адреси приховує серійний номер 
вашого мережного інтерфейсу "
+"(провідного чи безпровідного) з локальною 
мережею. Підміна MAC-адреси в "
+"загальному безпечніша, бо допомагає вам 
приховати ваше географічне "
+"розташування. Але може створити проблеми 
зі зв'язком або виглядати "
+"підозріло."
 
 #: ../data/greeter.ui.h:15
 msgid "Spoof all MAC addresses (default)"
-msgstr ""
+msgstr "Підмінювати всі MAC-адреси (за 
промовчанням)"
 
 #: ../data/greeter.ui.h:16
 msgid "Don't spoof MAC addresses"
-msgstr ""
+msgstr "Не підмінювати MAC-адреси"
 
 #: ../data/greeter.ui.h:17 ../tailsgreeter/gui.py:529
 msgid "Cannot unlock encrypted storage with this passphrase."
-msgstr ""
+msgstr "Неможливо розблокувати зашифроване сх
овище цим паролем."
 
 #: ../data/greeter.ui.h:18
 msgid ""

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits


[tor-commits] [translation/tails-misc_completed] Update translations for tails-misc_completed

2017-04-28 Thread translation
commit 53a50844f96464eafae94a719e216d772509fbf8
Author: Translation commit bot 
Date:   Fri Apr 28 07:16:18 2017 +

Update translations for tails-misc_completed
---
 uk.po | 95 +--
 1 file changed, 30 insertions(+), 65 deletions(-)

diff --git a/uk.po b/uk.po
index 02e1b4d..08747ef 100644
--- a/uk.po
+++ b/uk.po
@@ -4,21 +4,22 @@
 # 
 # Translators:
 # jonny_nut, 2014
-# Konstantin Tiler , 2016
+# Konstantin Tiler , 2016
 # LinuxChata, 2014
 # Oleksii Golub , 2015
 # Pinro Lomil , 2013
+# Serge Thirdlingson , 2017
 # Vira Motorko , 2015-2016
-# Yasha , 2015
+# Yasha, 2015
 # Андрій Бандура , 2014
 # Владислав , 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: The Tor Project\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-09-02 16:02+0200\n"
-"PO-Revision-Date: 2016-09-03 08:57+\n"
-"Last-Translator: carolyn \n"
+"POT-Creation-Date: 2017-04-18 12:55+0200\n"
+"PO-Revision-Date: 2017-04-28 07:11+\n"
+"Last-Translator: Serge Thirdlingson \n"
 "Language-Team: Ukrainian 
(http://www.transifex.com/otf/torproject/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -49,7 +50,7 @@ msgid ""
 "an opportunity for eavesdroppers, like your email or Internet provider, to\n"
 "confirm that you are using Tails.\n"
 "\n"
-msgstr " Допоможіть нам виправити нашу 
помилку! \n Прочитайте  наші 
інструкції, як повідомляти про помилки 
.\n Не повідомляйте більше 
особистої інформації, ніж необхідно! 
\n Про надання нам адреси 
електронної пошти \n\nНадання нам 
адреси електронної пошти дозволяє нам 
зв'язатися з Вами для уточнення проблеми. 
Це\nнеобхідно в переважній більшості 
випадків, коли ми отримуємо повідомлення 
про помилки,\n оскільки більшість 
повідомлень без контактної інформації 
марні. З іншого боку, це також дає 
можливість засобаÐ
 ¼ перехоплення\n та збору інформації 
інформації, наприклад, провайдеру Вашої 
електронної пошти або Інтернет-провайдеру, 
встановити,\n що Ви використовуєте Tails.\n\n"
+msgstr " Допоможіть нам виправити нашу 
помилку! \n Прочитайте  наші 
інструкції, як повідомляти про помилки 
.\n Не повідомляйте більше 
особистої інформації, ніж необхідно! 
\n Про надання нам адреси 
електронної пошти \n\nНадання нам 
адреси електронної пошти дозволяє нам 
зв'язатися з Вами для уточнення проблеми. 
Це\nнеобхідно в переважній більшості 
випадків, коли ми отримуємо повідомлення 
про помилки,\n оскільки більшість 
повідомлень без контактної інформації 
марні. З іншого боку, це також дає 
можливість засобаÐ
 ¼ перехоплення\n та збору інформації, 
наприклад, провайдеру Вашої електронної 
пошти або Інтернет-провайдеру, 
встановити,\n що Ви використовуєте Tails.\n\n"
 
 #: config/chroot_local-includes/usr/local/bin/electrum:17
 msgid "Persistence is disabled for Electrum"
@@ -104,6 +105,19 @@ msgstr "Перезавантажити"
 msgid "Power Off"
 msgstr "Вимкнення живлення"
 
+#: config/chroot_local-includes/usr/local/lib/tails-32-bit-notify-user:59
+msgid "Warning: Tails 3.0 won't work on this computer!"
+msgstr "Увага: Tails 3.0 на цьому комп'ютері не 
працюватиме!"
+
+#: config/chroot_local-includes/usr/local/lib/tails-32-bit-notify-user:60
+msgid "Tails 3.0 will require a 64-bit processor."
+msgstr "Для Tails 3.0 потрібен 64-бітний процесор."
+
+#: config/chroot_local-includes/usr/local/lib/tails-32-bit-notify-user:63
+#: config/chroot_local-includes/usr/local/lib/tails-virt-notify-user:83
+msgid "Learn more"
+msgstr "Детальніше"
+
 

[tor-commits] [translation/tails-misc] Update translations for tails-misc

2017-04-28 Thread translation
commit 1c0137b8ba60b2ae40f60d544eb9defc556b0726
Author: Translation commit bot 
Date:   Fri Apr 28 07:16:12 2017 +

Update translations for tails-misc
---
 uk.po | 13 +++--
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/uk.po b/uk.po
index 9252a16..08747ef 100644
--- a/uk.po
+++ b/uk.po
@@ -8,6 +8,7 @@
 # LinuxChata, 2014
 # Oleksii Golub , 2015
 # Pinro Lomil , 2013
+# Serge Thirdlingson , 2017
 # Vira Motorko , 2015-2016
 # Yasha, 2015
 # Андрій Бандура , 2014
@@ -16,9 +17,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: The Tor Project\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-04-06 21:07+0200\n"
-"PO-Revision-Date: 2017-04-07 10:06+\n"
-"Last-Translator: carolyn \n"
+"POT-Creation-Date: 2017-04-18 12:55+0200\n"
+"PO-Revision-Date: 2017-04-28 07:11+\n"
+"Last-Translator: Serge Thirdlingson \n"
 "Language-Team: Ukrainian 
(http://www.transifex.com/otf/torproject/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -49,7 +50,7 @@ msgid ""
 "an opportunity for eavesdroppers, like your email or Internet provider, to\n"
 "confirm that you are using Tails.\n"
 "\n"
-msgstr " Допоможіть нам виправити нашу 
помилку! \n Прочитайте  наші 
інструкції, як повідомляти про помилки 
.\n Не повідомляйте більше 
особистої інформації, ніж необхідно! 
\n Про надання нам адреси 
електронної пошти \n\nНадання нам 
адреси електронної пошти дозволяє нам 
зв'язатися з Вами для уточнення проблеми. 
Це\nнеобхідно в переважній більшості 
випадків, коли ми отримуємо повідомлення 
про помилки,\n оскільки більшість 
повідомлень без контактної інформації 
марні. З іншого боку, це також дає 
можливість засобаÐ
 ¼ перехоплення\n та збору інформації 
інформації, наприклад, провайдеру Вашої 
електронної пошти або Інтернет-провайдеру, 
встановити,\n що Ви використовуєте Tails.\n\n"
+msgstr " Допоможіть нам виправити нашу 
помилку! \n Прочитайте  наші 
інструкції, як повідомляти про помилки 
.\n Не повідомляйте більше 
особистої інформації, ніж необхідно! 
\n Про надання нам адреси 
електронної пошти \n\nНадання нам 
адреси електронної пошти дозволяє нам 
зв'язатися з Вами для уточнення проблеми. 
Це\nнеобхідно в переважній більшості 
випадків, коли ми отримуємо повідомлення 
про помилки,\n оскільки більшість 
повідомлень без контактної інформації 
марні. З іншого боку, це також дає 
можливість засобаÐ
 ¼ перехоплення\n та збору інформації, 
наприклад, провайдеру Вашої електронної 
пошти або Інтернет-провайдеру, 
встановити,\n що Ви використовуєте Tails.\n\n"
 
 #: config/chroot_local-includes/usr/local/bin/electrum:17
 msgid "Persistence is disabled for Electrum"
@@ -106,11 +107,11 @@ msgstr "Вимкнення живлення"
 
 #: config/chroot_local-includes/usr/local/lib/tails-32-bit-notify-user:59
 msgid "Warning: Tails 3.0 won't work on this computer!"
-msgstr ""
+msgstr "Увага: Tails 3.0 на цьому комп'ютері не 
працюватиме!"
 
 #: config/chroot_local-includes/usr/local/lib/tails-32-bit-notify-user:60
 msgid "Tails 3.0 will require a 64-bit processor."
-msgstr ""
+msgstr "Для Tails 3.0 потрібен 64-бітний процесор."
 
 #: config/chroot_local-includes/usr/local/lib/tails-32-bit-notify-user:63
 #: config/chroot_local-includes/usr/local/lib/tails-virt-notify-user:83

___
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits