tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
March 2013
- 21 participants
- 1373 discussions

[translation/tails-persistence-setup_completed] Update translations for tails-persistence-setup_completed
by translation@torproject.org 18 Mar '13
by translation@torproject.org 18 Mar '13
18 Mar '13
commit ad1f1baaeec1a6cdaf0909ef8ba1e915103a391e
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Mar 18 04:16:49 2013 +0000
Update translations for tails-persistence-setup_completed
---
zh_CN/zh_CN.po | 29 +++++++++++++++++++----------
1 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/zh_CN/zh_CN.po b/zh_CN/zh_CN.po
index f792314..d8d4d5f 100644
--- a/zh_CN/zh_CN.po
+++ b/zh_CN/zh_CN.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# J Tsai <tsaizb(a)gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
-"POT-Creation-Date: 2012-10-29 19:33+0100\n"
-"PO-Revision-Date: 2012-11-14 04:30+0000\n"
-"Last-Translator: xtoaster <zhazhenzhong(a)gmail.com>\n"
+"POT-Creation-Date: 2012-11-27 21:00+0100\n"
+"PO-Revision-Date: 2013-03-18 03:52+0000\n"
+"Last-Translator: simabull tsai <tsaizb(a)gmail.com>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -74,26 +75,34 @@ msgid "Configuration of network devices and connections"
msgstr "配置网络设备和连接"
#: ../lib/Tails/Persistence/Configuration/Presets.pm:118
+msgid "Browser bookmarks"
+msgstr "浏览器书签"
+
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:120
+msgid "Bookmarks saved in Iceweasel browser"
+msgstr "保存在 Iceweasel 浏览器中的书签"
+
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:128
msgid "APT Packages"
msgstr "APT 软件包"
-#: ../lib/Tails/Persistence/Configuration/Presets.pm:120
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:130
msgid "Packages downloaded by APT"
msgstr "APT 下载的软件包"
-#: ../lib/Tails/Persistence/Configuration/Presets.pm:128
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:138
msgid "APT Lists"
msgstr "APT 列表"
-#: ../lib/Tails/Persistence/Configuration/Presets.pm:130
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:140
msgid "Lists downloaded by APT"
msgstr "APT 下载的软件包列表"
-#: ../lib/Tails/Persistence/Configuration/Presets.pm:138
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:148
msgid "Dotfiles"
msgstr ".用户配置文件"
-#: ../lib/Tails/Persistence/Configuration/Presets.pm:140
+#: ../lib/Tails/Persistence/Configuration/Presets.pm:150
msgid ""
"Symlink into $HOME every file or directory found in the `dotfiles' directory"
msgstr "连入 $HOME 的符号链接,'.'开头目录中的所有文件和文件夹"
@@ -192,8 +201,8 @@ msgstr "输入一个密码来保护您的持久卷"
#, perl-format
msgid ""
"A %s persistent volume will be created on the <b>%s %s</b> device. Data on "
-"this device will be stored in an encrypted form protected by a passphrase."
-msgstr "系统将创建一个 %s 的持久卷保存于 <b>%s %s</b> 设备上。此卷中的数据将加密存储与此设备上并受密码保护。"
+"this volume will be stored in an encrypted form protected by a passphrase."
+msgstr "A %s persistent volume will be created on the <b>%s %s</b> device. Data on this volume will be stored in an encrypted form protected by a passphrase."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:66
msgid "Create"
1
0

[translation/tails-persistence-setup] Update translations for tails-persistence-setup
by translation@torproject.org 18 Mar '13
by translation@torproject.org 18 Mar '13
18 Mar '13
commit ecdeb1a63261c47138d33651d691461d74d6c941
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Mar 18 04:16:46 2013 +0000
Update translations for tails-persistence-setup
---
zh_CN/zh_CN.po | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/zh_CN/zh_CN.po b/zh_CN/zh_CN.po
index c85875a..d8d4d5f 100644
--- a/zh_CN/zh_CN.po
+++ b/zh_CN/zh_CN.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: https://trac.torproject.org/projects/tor\n"
"POT-Creation-Date: 2012-11-27 21:00+0100\n"
-"PO-Revision-Date: 2013-03-09 13:28+0000\n"
+"PO-Revision-Date: 2013-03-18 03:52+0000\n"
"Last-Translator: simabull tsai <tsaizb(a)gmail.com>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
"MIME-Version: 1.0\n"
@@ -202,7 +202,7 @@ msgstr "输入一个密码来保护您的持久卷"
msgid ""
"A %s persistent volume will be created on the <b>%s %s</b> device. Data on "
"this volume will be stored in an encrypted form protected by a passphrase."
-msgstr ""
+msgstr "A %s persistent volume will be created on the <b>%s %s</b> device. Data on this volume will be stored in an encrypted form protected by a passphrase."
#: ../lib/Tails/Persistence/Step/Bootstrap.pm:66
msgid "Create"
1
0

r26114: {website} Adding a project for cross txtorcon/stem integration Project (website/trunk/getinvolved/en)
by Damian Johnson 17 Mar '13
by Damian Johnson 17 Mar '13
17 Mar '13
Author: atagar
Date: 2013-03-17 15:17:23 +0000 (Sun, 17 Mar 2013)
New Revision: 26114
Modified:
website/trunk/getinvolved/en/volunteer.wml
Log:
Adding a project for cross txtorcon/stem integration
Project proposal from meejah where I'd be the backup mentor.
Modified: website/trunk/getinvolved/en/volunteer.wml
===================================================================
--- website/trunk/getinvolved/en/volunteer.wml 2013-03-17 01:45:47 UTC (rev 26113)
+++ website/trunk/getinvolved/en/volunteer.wml 2013-03-17 15:17:23 UTC (rev 26114)
@@ -660,6 +660,7 @@
<p>
<b>Project Ideas:</b><br />
+ <i><a href="#txtorcon-stemIntegration">Txtorcon/Stem Integration</a></i><br />
<i><a href="#stemUsability">Stem Usability and Porting</a></i><br />
<i><a href="#stemTestingForTor">Stem Tests for Tor</a></i>
</p>
@@ -675,6 +676,11 @@
Used by OONI and APAF.
</p>
+ <p>
+ <b>Project Ideas:</b><br />
+ <i><a href="#txtorcon-stemIntegration">Txtorcon/Stem Integration</a></i>
+ </p>
+
<a id="project-tlsdate"></a>
<h3>Tlsdate (<a href="https://github.com/ioerror/tlsdate">code</a>)</h3>
@@ -920,6 +926,28 @@
</li>
-->
+ <a id="txtorcon-stemIntegration"></a>
+ <li>
+ <b>Txtorcon/Stem Integration</b>
+ <br>
+ Effort Level: <i>Medium</i>
+ <br>
+ Skill Level: <i>Medium</i>
+ <br>
+ Likely Mentors: <i>meejah, Damian (atagar)</i>
+ <p>Txtorcon is a Twisted-based Python controller library, and Stem is a
+ synchronous (threaded) one, also in Python. There is no need to have
+ two implementations of (at least) the protocol parsing code. This
+ project would entail eliminating duplication by leveraging Stem's
+ parsing in txtorcon while keeping txtorcon's API the same (or at least
+ close).</p>
+ <p>This would very likely involve changes to both libraries, although
+ most would be expected to be in txtorcon. meejah is available to
+ mentor txtorcon changes, and Damian (atagar) can help with Stem.</p>
+ <p>It would help if you're already familiar with event-based programming,
+ bonus points if it's Twisted.</p>
+ </li>
+
<!--
<a id="orbot-userInterface"></a>
<li>
1
0

r26113: {website} update mirrors table with netgull mirror and current status. (in website/trunk: . include)
by Andrew Lewman 17 Mar '13
by Andrew Lewman 17 Mar '13
17 Mar '13
Author: phobos
Date: 2013-03-17 01:45:47 +0000 (Sun, 17 Mar 2013)
New Revision: 26113
Modified:
website/trunk/include/mirrors-table.wmi
website/trunk/update-mirrors.pl
Log:
update mirrors table with netgull mirror and current status.
Modified: website/trunk/include/mirrors-table.wmi
===================================================================
--- website/trunk/include/mirrors-table.wmi 2013-03-17 01:43:52 UTC (rev 26112)
+++ website/trunk/include/mirrors-table.wmi 2013-03-17 01:45:47 UTC (rev 26113)
@@ -1,15 +1,15 @@
<tr>
- <td>IS</td>
+ <td>CZ</td>
- <td>torproject.is</td>
+ <td>Lightning-bolt.net</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://torproject.is/dist/">http</a></td>
- <td><a href="http://torproject.is/">http</a></td>
+ <td><a href="http://torproject.lightning-bolt.net/dist/">http</a></td>
+ <td><a href="http://torproject.lightning-bolt.net/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -18,32 +18,32 @@
<tr>
- <td>AT</td>
+ <td>TN</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://torproject.ph3x.at/dist/">http</a></td>
- <td><a href="http://torproject.ph3x.at/">http</a></td>
<td> - </td>
+ <td><a href="http://torproject.antagonism.org/">http</a></td>
<td> - </td>
+ <td><a href="https://torproject.antagonism.org/">https</a></td>
<td> - </td>
<td> - </td>
</tr>
<tr>
- <td>US</td>
+ <td>NL</td>
- <td></td>
+ <td>CCC</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.minibofh.org/dist/">http</a></td>
- <td><a href="http://tor.minibofh.org/">http</a></td>
+ <td><a href="http://tor.ccc.de/dist/">http</a></td>
+ <td><a href="http://tor.ccc.de/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -52,15 +52,15 @@
<tr>
- <td>AT</td>
+ <td>DK</td>
- <td></td>
+ <td>Zentrum der Gesundheit</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.dont-know-me.at/dist/">http</a></td>
- <td><a href="http://tor.dont-know-me.at/">http</a></td>
+ <td><a href="http://tor.idnr.ws/dist/">http</a></td>
+ <td><a href="http://tor.idnr.ws/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -69,49 +69,32 @@
<tr>
- <td>DE</td>
+ <td>EE</td>
- <td>torservers</td>
+ <td>CyberSIDE</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://www.torservers.net/mirrors/torproject.org/dist/">http</a></td>
- <td><a href="http://www.torservers.net/mirrors/torproject.org/">http</a></td>
- <td><a href="https://www.torservers.net/mirrors/torproject.org/dist/">https</a></td>
- <td><a href="https://www.torservers.net/mirrors/torproject.org/">https</a></td>
+ <td><a href="http://cyberside.net.ee/tor/">http</a></td>
+ <td><a href="http://cyberside.planet.ee/tor/">http</a></td>
<td> - </td>
<td> - </td>
-</tr>
-
-<tr>
-
- <td>DE</td>
-
- <td></td>
-
- <td>Up to date</td>
-
<td> - </td>
- <td><a href="http://tor.dev-random.de/dist/">http</a></td>
- <td><a href="http://tor.dev-random.de/">http</a></td>
- <td><a href="https://tor.dev-random.de/dist/">https</a></td>
- <td><a href="https://tor.dev-random.de/">https</a></td>
<td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>DE</td>
+ <td>IS</td>
- <td>chaos darmstadt</td>
+ <td>torproject.is</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://mirrors.chaos-darmstadt.de/tor-mirror/dist/">http</a></td>
- <td><a href="http://mirrors.chaos-darmstadt.de/tor-mirror/">http</a></td>
+ <td><a href="http://torproject.is/dist/">http</a></td>
+ <td><a href="http://torproject.is/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -120,15 +103,15 @@
<tr>
- <td>US</td>
+ <td>IT</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.onthegetgo.com/dist/">http</a></td>
- <td><a href="http://tor.onthegetgo.com/">http</a></td>
+ <td><a href="http://torproject.jcsh.it/dist/">http</a></td>
+ <td><a href="http://torproject.jcsh.it/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -137,15 +120,15 @@
<tr>
- <td>US</td>
+ <td>AT</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://199.175.55.215/dist/">http</a></td>
- <td><a href="http://199.175.55.215/">http</a></td>
+ <td><a href="http://torproject.ph3x.at/dist/">http</a></td>
+ <td><a href="http://torproject.ph3x.at/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -154,49 +137,32 @@
<tr>
- <td>DE</td>
+ <td>US</td>
- <td>beme it</td>
+ <td>BarkerJr</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.beme-it.de/dist/">http</a></td>
- <td><a href="http://tor.beme-it.de/">http</a></td>
- <td><a href="https://tor.beme-it.de/dist/">https</a></td>
- <td><a href="https://tor.beme-it.de/">https</a></td>
+ <td><a href="http://www.torproject.us/dist/">http</a></td>
+ <td><a href="http://www.torproject.us/">http</a></td>
+ <td><a href="https://www.torproject.us/dist/">https</a></td>
+ <td><a href="https://www.torproject.us/">https</a></td>
<td> - </td>
- <td><a href="rsync://tor.beme-it.de/tor">rsync</a></td>
+ <td><a href="rsync://rsync.torproject.us/tor">rsync</a></td>
</tr>
<tr>
- <td>DE</td>
-
- <td>borgmann.tv</td>
-
- <td>Up to date</td>
-
- <td> - </td>
- <td><a href="http://tor.borgmann.tv/dist/">http</a></td>
- <td><a href="http://tor.borgmann.tv/">http</a></td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
-</tr>
-
-<tr>
-
<td>US</td>
- <td>AskApache</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.askapache.com/dist/">http</a></td>
- <td><a href="http://tor.askapache.com/">http</a></td>
+ <td><a href="http://tor.minibofh.org/dist/">http</a></td>
+ <td><a href="http://tor.minibofh.org/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -205,15 +171,15 @@
<tr>
- <td>IS</td>
+ <td>AT</td>
- <td>TheOnionRouter</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://theonionrouter.com/dist/">http</a></td>
- <td><a href="http://theonionrouter.com/">http</a></td>
+ <td><a href="http://tor.dont-know-me.at/dist/">http</a></td>
+ <td><a href="http://tor.dont-know-me.at/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -222,49 +188,49 @@
<tr>
- <td>GB</td>
+ <td>DE</td>
- <td>torland</td>
+ <td>torservers</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://mirror.torland.me/torproject.org/dist/">http</a></td>
- <td><a href="http://mirror.torland.me/torproject.org/">http</a></td>
- <td><a href="https://mirror.torland.me/torproject.org/dist/">https</a></td>
- <td><a href="https://mirror.torland.me/torproject.org/">https</a></td>
+ <td><a href="http://www.torservers.net/mirrors/torproject.org/dist/">http</a></td>
+ <td><a href="http://www.torservers.net/mirrors/torproject.org/">http</a></td>
+ <td><a href="https://www.torservers.net/mirrors/torproject.org/dist/">https</a></td>
+ <td><a href="https://www.torservers.net/mirrors/torproject.org/">https</a></td>
<td> - </td>
<td> - </td>
</tr>
<tr>
- <td>INT</td>
+ <td>IS</td>
- <td>CoralCDN</td>
+ <td>myRL.net</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://www.torproject.org.nyud.net/dist/">http</a></td>
- <td><a href="http://www.torproject.org.nyud.net/">http</a></td>
+ <td><a href="http://tor.myrl.net/dist/">http</a></td>
+ <td><a href="http://tor.myrl.net/">http</a></td>
+ <td><a href="https://tor.myrl.net/dist/">https</a></td>
+ <td><a href="https://tor.myrl.net/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>CZ</td>
+ <td>US</td>
- <td>Lightning-bolt.net</td>
+ <td>hessmo</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://torproject.lightning-bolt.net/dist/">http</a></td>
- <td><a href="http://torproject.lightning-bolt.net/">http</a></td>
+ <td><a href="http://mirror.hessmo.com/tor/dist/">http</a></td>
+ <td><a href="http://mirror.hessmo.com/tor/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -273,49 +239,49 @@
<tr>
- <td>TN</td>
+ <td>DE</td>
<td></td>
<td>Up to date</td>
<td> - </td>
+ <td><a href="http://tor.linuxlounge.net/dist/">http</a></td>
+ <td><a href="http://tor.linuxlounge.net/">http</a></td>
+ <td><a href="https://tor.linuxlounge.net/dist/">https</a></td>
+ <td><a href="https://tor.linuxlounge.net/">https</a></td>
<td> - </td>
- <td><a href="http://torproject.antagonism.org/">http</a></td>
<td> - </td>
- <td><a href="https://torproject.antagonism.org/">https</a></td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>NL</td>
+ <td>DE</td>
- <td>Amorphis</td>
+ <td>crazyhaze.de</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.amorphis.eu/dist/">http</a></td>
- <td><a href="http://tor.amorphis.eu/">http</a></td>
+ <td><a href="http://tor.crazyhaze.de/dist/">http</a></td>
+ <td><a href="http://tor.crazyhaze.de/">http</a></td>
+ <td><a href="https://tor.crazyhaze.de/dist/">https</a></td>
+ <td><a href="https://tor.crazyhaze.de/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>NL</td>
+ <td>RO</td>
- <td>CCC</td>
+ <td>me0w.cc</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.ccc.de/dist/">http</a></td>
- <td><a href="http://tor.ccc.de/">http</a></td>
+ <td><a href="http://tor.me0w.cc/dist/">http</a></td>
+ <td><a href="http://tor.me0w.cc/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -324,32 +290,32 @@
<tr>
- <td>DK</td>
+ <td>CH</td>
- <td>Zentrum der Gesundheit</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.idnr.ws/dist/">http</a></td>
- <td><a href="http://tor.idnr.ws/">http</a></td>
+ <td><a href="http://torproject.pillo-srv.ch/dist/">http</a></td>
+ <td><a href="http://torproject.pillo-srv.ch/">http</a></td>
+ <td><a href="https://torproject.pillo-srv.ch/dist/">https</a></td>
+ <td><a href="https://torproject.pillo-srv.ch/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>EE</td>
+ <td>LT</td>
- <td>CyberSIDE</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://cyberside.net.ee/tor/">http</a></td>
- <td><a href="http://cyberside.planet.ee/tor/">http</a></td>
+ <td><a href="http://tor.vesta.nu/dist/">http</a></td>
+ <td><a href="http://tor.vesta.nu/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -358,53 +324,36 @@
<tr>
- <td>US</td>
+ <td>DE</td>
- <td>BarkerJr</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://www.torproject.us/dist/">http</a></td>
- <td><a href="http://www.torproject.us/">http</a></td>
- <td><a href="https://www.torproject.us/dist/">https</a></td>
- <td><a href="https://www.torproject.us/">https</a></td>
+ <td><a href="http://torproject.cryptowars.info/dist/">http</a></td>
+ <td><a href="http://torproject.cryptowars.info/">http</a></td>
+ <td><a href="https://torproject.cryptowars.info/dist/">https</a></td>
+ <td><a href="https://torproject.cryptowars.info/">https</a></td>
<td> - </td>
- <td><a href="rsync://rsync.torproject.us/tor">rsync</a></td>
+ <td><a href="rsync://torproject.cryptowars.info/">rsync</a></td>
</tr>
<tr>
- <td>IS</td>
+ <td>UK</td>
- <td>myRL.net</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.myrl.net/dist/">http</a></td>
- <td><a href="http://tor.myrl.net/">http</a></td>
- <td><a href="https://tor.myrl.net/dist/">https</a></td>
- <td><a href="https://tor.myrl.net/">https</a></td>
+ <td><a href="http://tor.mage.me.uk/dist/">http</a></td>
+ <td><a href="http://tor.mage.me.uk/">http</a></td>
<td> - </td>
<td> - </td>
-</tr>
-
-<tr>
-
- <td>US</td>
-
- <td>hessmo</td>
-
- <td>Up to date</td>
-
<td> - </td>
- <td><a href="http://mirror.hessmo.com/tor/dist/">http</a></td>
- <td><a href="http://mirror.hessmo.com/tor/">http</a></td>
<td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
@@ -416,59 +365,59 @@
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.linuxlounge.net/dist/">http</a></td>
- <td><a href="http://tor.linuxlounge.net/">http</a></td>
- <td><a href="https://tor.linuxlounge.net/dist/">https</a></td>
- <td><a href="https://tor.linuxlounge.net/">https</a></td>
+ <td><a href="http://tor.dev-random.de/dist/">http</a></td>
+ <td><a href="http://tor.dev-random.de/">http</a></td>
+ <td><a href="https://tor.dev-random.de/dist/">https</a></td>
+ <td><a href="https://tor.dev-random.de/">https</a></td>
<td> - </td>
<td> - </td>
</tr>
<tr>
- <td>RO</td>
+ <td>FR</td>
- <td>me0w.cc</td>
+ <td>BarkerJr</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.me0w.cc/dist/">http</a></td>
- <td><a href="http://tor.me0w.cc/">http</a></td>
+ <td><a href="http://www.oignon.net/dist/">http</a></td>
+ <td><a href="http://www.oignon.net/">http</a></td>
+ <td><a href="https://www.oignon.net/dist/">https</a></td>
+ <td><a href="https://www.oignon.net/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>CH</td>
+ <td>US</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://torproject.pillo-srv.ch/dist/">http</a></td>
- <td><a href="http://torproject.pillo-srv.ch/">http</a></td>
- <td><a href="https://torproject.pillo-srv.ch/dist/">https</a></td>
- <td><a href="https://torproject.pillo-srv.ch/">https</a></td>
+ <td><a href="http://tor.mirrors.whitedholdings.org/dist/">http</a></td>
+ <td><a href="http://tor.mirrors.whitedholdings.org/">http</a></td>
+ <td><a href="https://tor.mirrors.whitedholdings.org/dist/">https</a></td>
+ <td><a href="https://tor.mirrors.whitedholdings.org/">https</a></td>
<td> - </td>
- <td> - </td>
+ <td><a href="rsync://mirrors.whitedholdings.org/tor">rsync</a></td>
</tr>
<tr>
- <td>LT</td>
+ <td>FR</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.vesta.nu/dist/">http</a></td>
- <td><a href="http://tor.vesta.nu/">http</a></td>
+ <td><a href="http://torproject.c3l.lu/dist/">http</a></td>
+ <td><a href="http://torproject.c3l.lu/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -477,117 +426,83 @@
<tr>
- <td>EE</td>
+ <td>FR</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.li/dist/">http</a></td>
- <td><a href="http://tor.li/">http</a></td>
- <td><a href="https://tor.li/dist/">https</a></td>
- <td><a href="https://tor.li/">https</a></td>
+ <td><a href="http://tor.mirror.chekanov.net/dist/">http</a></td>
+ <td><a href="http://tor.mirror.chekanov.net/">http</a></td>
<td> - </td>
<td> - </td>
+ <td> - </td>
+ <td> - </td>
</tr>
<tr>
<td>DE</td>
- <td></td>
+ <td>chaos darmstadt</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://torproject.cryptowars.info/dist/">http</a></td>
- <td><a href="http://torproject.cryptowars.info/">http</a></td>
- <td><a href="https://torproject.cryptowars.info/dist/">https</a></td>
- <td><a href="https://torproject.cryptowars.info/">https</a></td>
+ <td><a href="http://mirrors.chaos-darmstadt.de/tor-mirror/dist/">http</a></td>
+ <td><a href="http://mirrors.chaos-darmstadt.de/tor-mirror/">http</a></td>
<td> - </td>
- <td><a href="rsync://torproject.cryptowars.info/">rsync</a></td>
-</tr>
-
-<tr>
-
- <td>FR</td>
-
- <td>BarkerJr</td>
-
- <td>Up to date</td>
-
<td> - </td>
- <td><a href="http://www.oignon.net/dist/">http</a></td>
- <td><a href="http://www.oignon.net/">http</a></td>
- <td><a href="https://www.oignon.net/dist/">https</a></td>
- <td><a href="https://www.oignon.net/">https</a></td>
<td> - </td>
<td> - </td>
</tr>
<tr>
- <td>AT</td>
+ <td>US</td>
- <td>cyberarmy</td>
+ <td></td>
<td>Up to date</td>
<td> - </td>
+ <td><a href="http://tor.onthegetgo.com/dist/">http</a></td>
+ <td><a href="http://tor.onthegetgo.com/">http</a></td>
<td> - </td>
- <td><a href="http://tor.cyberarmy.at/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>US</td>
+ <td>HU</td>
- <td></td>
+ <td>Unknown</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.mirrors.whitedholdings.org/dist/">http</a></td>
- <td><a href="http://tor.mirrors.whitedholdings.org/">http</a></td>
- <td><a href="https://tor.mirrors.whitedholdings.org/dist/">https</a></td>
- <td><a href="https://tor.mirrors.whitedholdings.org/">https</a></td>
+ <td><a href="http://mirror.tor.hu/dist/">http</a></td>
+ <td><a href="http://mirror.tor.hu/">http</a></td>
<td> - </td>
- <td><a href="rsync://mirrors.whitedholdings.org/tor">rsync</a></td>
-</tr>
-
-<tr>
-
- <td>FR</td>
-
- <td></td>
-
- <td>Up to date</td>
-
<td> - </td>
- <td><a href="http://torproject.c3l.lu/dist/">http</a></td>
- <td><a href="http://torproject.c3l.lu/">http</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
<tr>
- <td>FR</td>
+ <td>US</td>
<td></td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.mirror.chekanov.net/dist/">http</a></td>
- <td><a href="http://tor.mirror.chekanov.net/">http</a></td>
+ <td><a href="http://199.175.55.215/dist/">http</a></td>
+ <td><a href="http://199.175.55.215/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -596,19 +511,19 @@
<tr>
- <td>HU</td>
+ <td>DE</td>
- <td>Unknown</td>
+ <td>beme it</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://mirror.tor.hu/dist/">http</a></td>
- <td><a href="http://mirror.tor.hu/">http</a></td>
+ <td><a href="http://tor.beme-it.de/dist/">http</a></td>
+ <td><a href="http://tor.beme-it.de/">http</a></td>
+ <td><a href="https://tor.beme-it.de/dist/">https</a></td>
+ <td><a href="https://tor.beme-it.de/">https</a></td>
<td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
+ <td><a href="rsync://tor.beme-it.de/tor">rsync</a></td>
</tr>
<tr>
@@ -664,6 +579,23 @@
<tr>
+ <td>DE</td>
+
+ <td>borgmann.tv</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://tor.borgmann.tv/dist/">http</a></td>
+ <td><a href="http://tor.borgmann.tv/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>LU</td>
<td></td>
@@ -715,6 +647,40 @@
<tr>
+ <td>IS</td>
+
+ <td>TheOnionRouter</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://theonionrouter.com/dist/">http</a></td>
+ <td><a href="http://theonionrouter.com/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
+ <td>GB</td>
+
+ <td>torland</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://mirror.torland.me/torproject.org/dist/">http</a></td>
+ <td><a href="http://mirror.torland.me/torproject.org/">http</a></td>
+ <td><a href="https://mirror.torland.me/torproject.org/dist/">https</a></td>
+ <td><a href="https://mirror.torland.me/torproject.org/">https</a></td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>DE</td>
<td>spline</td>
@@ -766,6 +732,23 @@
<tr>
+ <td>INT</td>
+
+ <td>CoralCDN</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://www.torproject.org.nyud.net/dist/">http</a></td>
+ <td><a href="http://www.torproject.org.nyud.net/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>US</td>
<td></td>
@@ -783,23 +766,40 @@
<tr>
- <td>DE</td>
+ <td>NL</td>
- <td>crazyhaze.de</td>
+ <td>Amorphis</td>
<td>Out of date</td>
<td> - </td>
- <td><a href="http://tor.crazyhaze.de/dist/">http</a></td>
- <td><a href="http://tor.crazyhaze.de/">http</a></td>
- <td><a href="https://tor.crazyhaze.de/dist/">https</a></td>
- <td><a href="https://tor.crazyhaze.de/">https</a></td>
+ <td><a href="http://tor.amorphis.eu/dist/">http</a></td>
+ <td><a href="http://tor.amorphis.eu/">http</a></td>
<td> - </td>
<td> - </td>
+ <td> - </td>
+ <td> - </td>
</tr>
<tr>
+ <td>EE</td>
+
+ <td></td>
+
+ <td>Out of date</td>
+
+ <td> - </td>
+ <td><a href="http://tor.li/dist/">http</a></td>
+ <td><a href="http://tor.li/">http</a></td>
+ <td><a href="https://tor.li/dist/">https</a></td>
+ <td><a href="https://tor.li/">https</a></td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>US</td>
<td>searchprivate</td>
@@ -902,15 +902,15 @@
<tr>
- <td>IT</td>
+ <td>UA</td>
<td></td>
<td>Unknown</td>
<td> - </td>
- <td><a href="http://torproject.jcsh.it/dist/">http</a></td>
- <td><a href="http://torproject.jcsh.it/">http</a></td>
+ <td><a href="http://torua.reactor-xg.kiev.ua/dist/">http</a></td>
+ <td><a href="http://torua.reactor-xg.kiev.ua/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -919,32 +919,32 @@
<tr>
- <td>UA</td>
+ <td>AT</td>
- <td></td>
+ <td>cyberarmy</td>
<td>Unknown</td>
<td> - </td>
- <td><a href="http://torua.reactor-xg.kiev.ua/dist/">http</a></td>
- <td><a href="http://torua.reactor-xg.kiev.ua/">http</a></td>
<td> - </td>
+ <td><a href="http://tor.cyberarmy.at/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
+ <td> - </td>
</tr>
<tr>
- <td>UK</td>
+ <td>US</td>
<td></td>
<td>Unknown</td>
+ <td><a href="ftp://mirrors.go-part.com/tor/dist/">ftp</a></td>
+ <td><a href="http://mirrors.go-part.com/tor/dist/">http</a></td>
<td> - </td>
- <td><a href="http://tor.mage.me.uk/dist/">http</a></td>
- <td><a href="http://tor.mage.me.uk/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -953,36 +953,36 @@
<tr>
- <td>US</td>
+ <td>NL</td>
<td></td>
- <td>Unknown</td>
+ <td>Out of date</td>
- <td><a href="ftp://mirrors.go-part.com/tor/dist/">ftp</a></td>
- <td><a href="http://mirrors.go-part.com/tor/dist/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
+ <td><a href="https://www.coevoet.nl/tor/dist/">https</a></td>
<td> - </td>
<td> - </td>
+ <td> - </td>
</tr>
<tr>
- <td>NL</td>
+ <td>US</td>
- <td></td>
+ <td>AskApache</td>
- <td>Out of date</td>
+ <td>Unknown</td>
<td> - </td>
+ <td><a href="http://tor.askapache.com/dist/">http</a></td>
+ <td><a href="http://tor.askapache.com/">http</a></td>
<td> - </td>
<td> - </td>
- <td><a href="https://www.coevoet.nl/tor/dist/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
</tr>
<tr>
@@ -1001,3 +1001,20 @@
<td> - </td>
<td> - </td>
</tr>
+
+<tr>
+
+ <td>US</td>
+
+ <td></td>
+
+ <td>Out of date</td>
+
+ <td> - </td>
+ <td><a href="http://www.netgull.com/torproject/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
Modified: website/trunk/update-mirrors.pl
===================================================================
--- website/trunk/update-mirrors.pl 2013-03-17 01:43:52 UTC (rev 26112)
+++ website/trunk/update-mirrors.pl 2013-03-17 01:45:47 UTC (rev 26113)
@@ -1178,6 +1178,24 @@
httpsDistMirror => "",
rsyncDistMirror => "rsync://mirrors.go-part.com/tor/dist/",
hiddenServiceMirror => "",
+ },
+ mirror089 => {
+ adminContact => "",
+ orgName => "",
+ isoCC => "US",
+ subRegion => "",
+ region => "US",
+ ipv4 => "True",
+ ipv6 => "False",
+ loadBalanced => "No",
+ httpWebsiteMirror => "",
+ httpsWebsiteMirror => "",
+ rsyncWebsiteMirror => "",
+ ftpWebsiteMirror => "",
+ httpDistMirror => "http://www.netgull.com/torproject/",
+ httpsDistMirror => "",
+ rsyncDistMirror => "",
+ hiddenServiceMirror => "",
}
);
1
0

r26112: {} add my presentation from NorthEast LinuxFest today. pandoc f (in projects/presentations: . images)
by Andrew Lewman 17 Mar '13
by Andrew Lewman 17 Mar '13
17 Mar '13
Author: phobos
Date: 2013-03-17 01:43:52 +0000 (Sun, 17 Mar 2013)
New Revision: 26112
Added:
projects/presentations/2013-03-16-NELinuxFest-Presentation.pdf
projects/presentations/2013-03-16-NELinuxFest-Presentation.txt
projects/presentations/images/2013-02-19-tails-bootscreen.png
Log:
add my presentation from NorthEast LinuxFest today. pandoc ftw.
Added: projects/presentations/2013-03-16-NELinuxFest-Presentation.pdf
===================================================================
(Binary files differ)
Property changes on: projects/presentations/2013-03-16-NELinuxFest-Presentation.pdf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: projects/presentations/2013-03-16-NELinuxFest-Presentation.txt
===================================================================
--- projects/presentations/2013-03-16-NELinuxFest-Presentation.txt (rev 0)
+++ projects/presentations/2013-03-16-NELinuxFest-Presentation.txt 2013-03-17 01:43:52 UTC (rev 26112)
@@ -0,0 +1,142 @@
+% Free Software, Free Company, Free Internet
+% Andrew Lewman andrew(a)torproject.org
+% 16 March 2013
+
+# Who is this guy?
+
+501(c)(3) non-profit organization dedicated to the research and development of technologies for online anonymity and privacy
+
+[https://www.torproject.org](https://www.torproject.org)
+
+\begin{center}
+\includegraphics[keepaspectratio,width=\textwidth, height=.8\textheight]{images/2009-oval_sticker_new}
+\end{center}
+
+# Internet Freedom
+
+> Governments of the Industrial World, you weary giants of flesh and steel, I come from Cyberspace, the new home of Mind. On behalf of the future, I ask you of the past to leave us alone. You are not welcome among us. You have no sovereignty where we gather.
+
+> — John Perry Barlow, "A Declaration of the Independence of Cyberspace"
+
+> February 8, 1996
+
+# ...applied theory...
+\begin{center}
+\includegraphics<1>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/2011-06-08-china-net-censorship-piracy-porn-crop}
+\includegraphics<2>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/cropped-saudi-arabia-filter-message}
+\includegraphics<3>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/wikipedia-internet-blackholes.pdf}
+\includegraphics<4>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/procera-evolved-dpi}
+\includegraphics<5>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/2011-10-arstechnica-major-isps-usa-6strikes}
+\includegraphics<6>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/iran-ssl-dpi-26-seconds-to-death}
+\includegraphics<7>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/2009-knowprivacy-report-webbug-domains}
+\includegraphics<8>[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/dataflow-futureprivacychart}
+\end{center}
+
+# ...spring is in the air...
+\begin{center}
+\includegraphics[[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/paco-primera-pagina-oleo-lienzo-110-x-150-cms-2008-red}
+\end{center}
+
+# Free Software
+
+We write a lot of free software.
+
+About half is GPLv2 and the other half 3-Clause BSD.
+
+# Free Software
+
+We write in C, C++, python, ruby, shell, javascript, java, perl, and whatever else I forgot.
+
+All our code is available at Tor's gitweb, https://gitweb.torproject.org
+
+or our old svn server, https://svn.torproject.org/.
+
+# Free Software - People
+
+33 core people. 6 female and 27 male.
+
+12 countries. Virtual team, virtual office.
+
+we talk via email, irc, xmpp, and mumble.
+
+3,000+ volunteers, 85 countries.
+
+See what we've done in the past few years in our 2012 Annual Report
+
+[https://www.torproject.org/about/findoc/2012-TorProject-Annual-Report.pdf](https://www.torproject.org/about/findoc/2012-TorProject-Annual-Report.pdf)
+
+# Free Software - Products
+
+We focus on six main products:
+
+ - tor browser, [https://www.torproject.org/projects/torbrowser](https://www.torproject.org/…
+ - arm, [http://www.atagar.com/arm/](http://www.atagar.com/arm/)
+ - atlas/compass/metrics, https://(atlas|compass|metrics).torproject.org
+ - obfsproxy, [https://www.torproject.org/projects/obfsproxy](https://www.torproject.org/p…
+ - tor cloud, [https://cloud.torproject.org](https://cloud.torproject.org) and
+ - tor itself.
+
+# Free Software - Tor Ecosystem
+
+Growing ecosystem of products:
+
+ - tails, [https://tails.boum.org](https://tails.boum.org)
+ - orbot, [https://guardianproject.info](https://guardianproject.info)
+ - torchat, [https://github.com/prof7bit/TorChat](https://github.com/prof7bit/TorChat)
+ - TorTV, [http://www.dyne.org/software/tortv/](http://www.dyne.org/software/tortv/)
+ - Torouter, [https://trac.torproject.org/projects/tor/wiki/doc/Torouter](https://trac.to…
+ - Onion Browser, [https://mike.tig.as/onionbrowser/](https://mike.tig.as/onionbrowser/)
+
+# Free Anonymous Operating System - Tails
+
+Tails is a live DVD or live USB that aims at preserving your privacy and anonymity.
+
+It's based on Debian Stable.
+
+# Free Anonymous Operating System - Tails
+
+It's used in 94 countries with an average client boot seen every 24 seconds around the clock.
+
+We sponsor Tails.
+
+We're doing a bug bounty program. This will fix a lot of bugs/feature requests in upstream.
+
+# Tails
+
+\includegraphics[keepaspectratio,width=\textwidth, height=.8\textheight]{./images/2013-02-19-tails-bootscreen.png}
+
+# Free Company
+
+The Tor Project, Inc runs on free software.
+
+We believe in transparency and sharing. Our code, designs, and content are all freely licensed (3-Clause BSD, GPL, or CC-BY-3.0)
+
+We publish our tickets, discussions, and contract details with the world on our wiki, [https://wiki.torproject.org](https://wiki.torproject.org).
+
+# Free Company - Infrastructure
+
+Mix of Debian Stable and Wheezy servers.
+
+If it's not in Debian repos, we don't run it.
+
+2 volunteer sysadmins.
+
+We only have 5 physical servers. The other 30 are virtual. All spread across 3 datacenters: US, Iceland, and Germany.
+
+
+# Thanks!
+
+\begin{center}
+\includegraphics[keepaspectratio,width=\textwidth, height=.8\textheight]{images/thankyou_img}
+\end{center}
+
+Visit [https://www.torproject.org](https://www.torproject.org) for more information, links, and ideas.
+
+# Copyrights
+\begin{itemize}
+\item applied theory, first image: Reporters without Borders, http://www.rsf.org
+\item applied theory, second image: Tor Project, Inc, https://blog.torproject.org/blog/update-internet-censorship-iran
+\item applied theory, third image: Information Week,2011-04-09, http://www.informationweek.com/news/security/attacks/229400850
+\item applied theory, fourth image: Al Jazeera, February 2011
+\item spring is in the air, Paco Pomet, http://pacopomet.wordpress.com/
+\end{itemize}
Property changes on: projects/presentations/2013-03-16-NELinuxFest-Presentation.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
Added: projects/presentations/images/2013-02-19-tails-bootscreen.png
===================================================================
(Binary files differ)
Property changes on: projects/presentations/images/2013-02-19-tails-bootscreen.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
1
0

r26111: {website} fix up the nginx directions from a tor-mirrors post. (website/trunk/docs/en)
by Andrew Lewman 17 Mar '13
by Andrew Lewman 17 Mar '13
17 Mar '13
Author: phobos
Date: 2013-03-17 01:34:10 +0000 (Sun, 17 Mar 2013)
New Revision: 26111
Modified:
website/trunk/docs/en/running-a-mirror.wml
Log:
fix up the nginx directions from a tor-mirrors post.
Modified: website/trunk/docs/en/running-a-mirror.wml
===================================================================
--- website/trunk/docs/en/running-a-mirror.wml 2013-03-16 23:47:12 UTC (rev 26110)
+++ website/trunk/docs/en/running-a-mirror.wml 2013-03-17 01:34:10 UTC (rev 26111)
@@ -65,9 +65,9 @@
configuration file to use:
<tt>
<pre>
- <VirtualHost 0.1.2.3:80>
+ <VirtualHost 10.10.10.10:80>
ServerAdmin youremail(a)example.com<br/>
- ServerName 0.1.2.3<br/>
+ ServerName ServerNameHere<br/>
DocumentRoot /var/www/mirrors/torproject.org<br/>
@@ -86,11 +86,15 @@
<tt>
<pre>
server {
- listen 0.1.2.3:80;
+ listen 10.10.10.10:80;
server_name your.example.com;
root /var/www/mirrors/torproject.org;
index index.html.en;
+
+ location ^~ /dist/ {
+ autoindex on;
+ }
}
</pre>
</tt>
1
0

r26110: {website} TBB design doc: Fix typos, clarify extensions policy a bit. (website/trunk/projects/torbrowser/design)
by Mike Perry 16 Mar '13
by Mike Perry 16 Mar '13
16 Mar '13
Author: mikeperry
Date: 2013-03-16 23:47:12 +0000 (Sat, 16 Mar 2013)
New Revision: 26110
Modified:
website/trunk/projects/torbrowser/design/index.html.en
Log:
TBB design doc: Fix typos, clarify extensions policy a bit.
Modified: website/trunk/projects/torbrowser/design/index.html.en
===================================================================
--- website/trunk/projects/torbrowser/design/index.html.en 2013-03-15 21:12:09 UTC (rev 26109)
+++ website/trunk/projects/torbrowser/design/index.html.en 2013-03-16 23:47:12 UTC (rev 26110)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class=
"email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><p class="pubdate">March 11, 2013</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#idp3154416">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#components">1.1. Browser Component Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="#DesignRequirements">2. Design Requirements and Philosophy</a></span></dt><dd><dl><dt><span class="sect2"><a href="#security">2.1. Security Requirements</a></span></dt><dt><span class="sect2">
<a href="#privacy">2.2. Privacy Requirements</a></span></dt><dt><span class="sect2"><a href="#philosophy">2.3. Philosophy</a></span></dt></dl></dd><dt><span class="sect1"><a href="#adversary">3. Adversary Model</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary-goals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversary-positioning">3.2. Adversary Capabilities - Positioning</a></span></dt><dt><span class="sect2"><a href="#attacks">3.3. Adversary Capabilities - Attacks</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">4. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">4.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">4.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">4.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">4.4. Application Data Isolation</a></span>
</dt><dt><span class="sect2"><a href="#identifier-linkability">4.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">4.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">4.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#other-security">4.8. Other Security Measures</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">4.9. Description of Firefox Patches</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idp5843792">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clea
r: both"><a id="idp3154416"></a>1. Introduction</h2></div></div></div><p>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class=
"email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><p class="pubdate">March 15, 2013</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#idp2182160">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#components">1.1. Browser Component Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="#DesignRequirements">2. Design Requirements and Philosophy</a></span></dt><dd><dl><dt><span class="sect2"><a href="#security">2.1. Security Requirements</a></span></dt><dt><span class="sect2">
<a href="#privacy">2.2. Privacy Requirements</a></span></dt><dt><span class="sect2"><a href="#philosophy">2.3. Philosophy</a></span></dt></dl></dd><dt><span class="sect1"><a href="#adversary">3. Adversary Model</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary-goals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversary-positioning">3.2. Adversary Capabilities - Positioning</a></span></dt><dt><span class="sect2"><a href="#attacks">3.3. Adversary Capabilities - Attacks</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">4. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">4.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">4.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">4.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">4.4. Application Data Isolation</a></span>
</dt><dt><span class="sect2"><a href="#identifier-linkability">4.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">4.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">4.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#other-security">4.8. Other Security Measures</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">4.9. Description of Firefox Patches</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idp5896048">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clea
r: both"><a id="idp2182160"></a>1. Introduction</h2></div></div></div><p>
This document describes the <a class="link" href="#adversary" title="3. Adversary Model">adversary model</a>,
<a class="link" href="#DesignRequirements" title="2. Design Requirements and Philosophy">design requirements</a>, and <a class="link" href="#Implementation" title="4. Implementation">implementation</a> of the Tor Browser. It is current as of Tor Browser
@@ -468,7 +468,7 @@
"Open World" scenario</a>, which suffered continous near-constant decline
in the true positive rate as the "Open World" size grew (see figure 4). This
large level of classification complexity is further confounded by a noisy and
-low resolution featureset - one which is also realtively easy for the defender
+low resolution featureset - one which is also relatively easy for the defender
to manipulate at low cost.
</p><p>
@@ -497,14 +497,24 @@
Last, but definitely not least, the adversary can exploit either general
browser vulnerabilities, plugin vulnerabilities, or OS vulnerabilities to
install malware and surveillance software. An adversary with physical access
-can perform similar actions. Regrettably, this last attack capability is
-outside of the browser's ability to defend against, but it is worth mentioning
-for completeness. In fact, <a class="ulink" href="http://tails.boum.org/contribute/design/" target="_top">The Tails system</a> can
-provide some defense against this adversary, and it does include the Tor
-Browser. We do however aim to defend against an adersary that has passive
-forensic access the disk after browsing activity takes place, as part of our
+can perform similar actions.
+
+ </p><p>
+
+For the purposes of the browser itself, we limit the scope of this adversary
+to one that has passive forensic access to the disk after browsing activity
+has taken place. This adversary motivates our
<a class="link" href="#disk-avoidance" title="4.3. Disk Avoidance">Disk Avoidance</a> defenses.
+ </p><p>
+
+An adversary with arbitrary code execution typically has more power, though.
+It can be quite hard to really significantly limit the capabilities of such an
+adversary. <a class="ulink" href="http://tails.boum.org/contribute/design/" target="_top">The Tails system</a> can
+provide some defense against this adversary through the use of readonly media
+and frequent reboots, but even this can be circumvented on machines without
+Secure Boot through the use of BIOS rootkits.
+
</p></li></ol></div></div></div><div class="sect1" title="4. Implementation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Implementation"></a>4. Implementation</h2></div></div></div><p>
The Implementation section is divided into subsections, each of which
@@ -605,17 +615,35 @@
an observer event during dragging</a> to allow us to filter the drag
events from Torbutton before the OS downloads the URLs the events contained.
+ </p></li><li class="listitem">Disabling system extensions and clearing the addon whitelist
+ <p>
+
+Firefox addons can perform arbitrary activity on your computer, including
+bypassing Tor. It is for this reason we disable the addon whitelist
+(<span class="command"><strong>xpinstall.whitelist.add</strong></span>), so that users are prompted
+before installing addons regardless of the source. We also exclude
+system-level addons from the browser through the use of
+<span class="command"><strong>extensions.enabledScopes</strong></span> and
+<span class="command"><strong>extensions.autoDisableScopes</strong></span>.
+
</p></li></ol></div></div><div class="sect2" title="4.2. State Separation"><div class="titlepage"><div><div><h3 class="title"><a id="state-separation"></a>4.2. State Separation</h3></div></div></div><p>
+
Tor Browser State is separated from existing browser state through use of a
-custom Firefox profile. Furthermore, plugins are disabled, which prevents
-Flash cookies from leaking from a pre-existing Flash directory.
- </p></div><div class="sect2" title="4.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5587232"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
+custom Firefox profile, and by setting the $HOME environment variable to the
+root of the bundle's directory. The browser also does not load any
+system-wide extensions (through the use of
+<span class="command"><strong>extensions.enabledScopes</strong></span> and
+<span class="command"><strong>extensions.autoDisableScopes</strong></span>. Furthermore, plugins are
+disabled, which prevents Flash cookies from leaking from a pre-existing Flash
+directory.
+ </p></div><div class="sect2" title="4.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5639136"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
+
The User Agent MUST (at user option) prevent all disk records of browser activity.
The user should be able to optionally enable URL history and other history
features if they so desire.
- </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5588592"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
+ </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5640496"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
We achieve this goal through several mechanisms. First, we set the Firefox
Private Browsing preference
@@ -695,7 +723,7 @@
context-menu option to drill down into specific types of state or permissions.
An example of this simplification can be seen in Figure 1.
- </p><div class="figure"><a id="idp5612672"></a><p class="title"><strong>Figure 1. Improving the Privacy UI</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="NewCookieManager.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p>
+ </p><div class="figure"><a id="idp5664576"></a><p class="title"><strong>Figure 1. Improving the Privacy UI</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="NewCookieManager.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p>
This example UI is a mock-up of how isolating identifiers to the URL bar
origin can simplify the privacy UI for all data - not just cookies. Once
@@ -1182,11 +1210,11 @@
menu option in Torbutton. This context menu option is active if Torbutton can
read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT.
- </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5731056"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
+ </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5782640"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
All linkable identifiers and browser state MUST be cleared by this feature.
- </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5732304"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
+ </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5783888"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
First, Torbutton disables Javascript in all open tabs and windows by using
both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocSh…" target="_top">browser.docShell.allowJavascript</a>
@@ -1230,7 +1258,7 @@
Fingerprinting</a> is a statistical attack to attempt to recognize specific
encrypted website activity.
- </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5746320"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
+ </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5797920"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
We want to deploy a mechanism that reduces the accuracy of <a class="ulink" href="https://en.wikipedia.org/wiki/Feature_selection" target="_top">useful features</a> available
for classification. This mechanism would either impact the true and false
@@ -1252,7 +1280,7 @@
defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor
network, making them also effectively no-overhead.
- </p></blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5753216"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
+ </p></blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5804816"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pa…" target="_top">randomize
pipeline order and depth</a>. Unfortunately, pipelining is very fragile.
Many sites do not support it, and even sites that advertise support for
@@ -1589,7 +1617,7 @@
ourselves</a>, as they are comparatively rare and can be handled with site
permissions.
- </p></li></ol></div></div><div class="sect1" title="A.2. Promising Standards"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp5843792"></a>A.2. Promising Standards</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://web-send.org" target="_top">Web-Send Introducer</a><p>
+ </p></li></ol></div></div><div class="sect1" title="A.2. Promising Standards"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp5896048"></a>A.2. Promising Standards</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://web-send.org" target="_top">Web-Send Introducer</a><p>
Web-Send is a browser-based link sharing and federated login widget that is
designed to operate without relying on third-party tracking or abusing other
1
0

[bridgedb/master] 4297 - parse or-addresses from bridge descriptors
by aagbsn@torproject.org 16 Mar '13
by aagbsn@torproject.org 16 Mar '13
16 Mar '13
commit 691db20224e4311444de85b592add60a54b9d38c
Author: aagbsn <aagbsn(a)extc.org>
Date: Tue Dec 6 13:30:49 2011 -0800
4297 - parse or-addresses from bridge descriptors
Updates parseBridgeDesc to read or-address line from bridge descriptors,
and adds a container class PortList
parseBridgeDesc adds parseORAddress which parses or-address lines.
Valid address:portspec are added to each Bridge object in a dictionary
of or-address:PortList key:values.
class PortList is a container class that represents the or-address
PORTSPEC field, which is a list of ports and port ranges.
The implementation contains an efficient representation of port-ranges,
implements __contains__ for single ports and port-ranges, and will
also squash or merge port ranges that intersect.
The getPort() function returns a single valid port (as defined by the
PORTSPEC line). Each subsequent call to getPort() will iterate over the
valid ports, so that BridgeDB may return a single 'bridge' line for
inclusion in torrc and uniformly distribute the available ports.
getConfigLine may be passed 'selectFromORAddresses=True',
which will return a valid config line from the set of addresses
and ports. Filtering for IPv6 or IPv4 addresses is supported,
if there are no matches in or-addresses BridgeDB will return
the primary ip:orport instead.
Also added is a generator 'getAllConfigLines()' which will return
every valid address:port (including expanding ranges of ports -
which may be a lot of output) combination a bridge supports, one
per line.
---
lib/bridgedb/Bridges.py | 279 ++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 262 insertions(+), 17 deletions(-)
diff --git a/lib/bridgedb/Bridges.py b/lib/bridgedb/Bridges.py
index 358e362..306b757 100644
--- a/lib/bridgedb/Bridges.py
+++ b/lib/bridgedb/Bridges.py
@@ -1,5 +1,3 @@
-# BridgeDB by Nick Mathewson.
-# Copyright (c) 2007-2009, The Tor Project, Inc.
# See LICENSE for licensing information
"""
@@ -15,6 +13,8 @@ import re
import sha
import socket
import time
+import ipaddr
+import random
import bridgedb.Storage
import bridgedb.Bucket
@@ -44,15 +44,13 @@ def is_valid_ip(ip):
False
"""
- if not re.match(r'(\d+)\.(\d+)\.(\d+)\.(\d+)', ip):
- # inet_aton likes "1.2" as a synonym for "0.0.1.2". We don't.
- return False
+ # ipaddr does not treat "1.2" as a synonym for "0.0.1.2"
try:
- socket.inet_aton(ip)
- except socket.error:
+ ipaddr.IPAddress(ip)
+ except ValueError:
+ # not a valid IPv4 or IPv6 address
return False
- else:
- return True
+ return True
def is_valid_fingerprint(fp):
"""Return true iff fp in the right format to be a hex fingerprint
@@ -67,6 +65,17 @@ def is_valid_fingerprint(fp):
else:
return True
+def is_valid_or_address(or_address):
+ """Return true iff or_address is in the right format
+ (ip,frozenset(port)) or (ip, frozenset(port_low,port_high)) for ranges
+ """
+ if len(or_address) != 2: return False
+ ip,port = or_address
+ if not is_valid_ip(ip): return False
+ if type(port) is not int: return False
+ if not (1 <= port <= 65535): return False
+ return True
+
toHex = binascii.b2a_hex
fromHex = binascii.a2b_hex
@@ -105,12 +114,15 @@ class Bridge:
## no spaces.
## running,stable -- DOCDOC
## blockingCountries -- list of country codes blocking this bridge
- def __init__(self, nickname, ip, orport, fingerprint=None, id_digest=None):
+ def __init__(self, nickname, ip, orport, fingerprint=None, id_digest=None,
+ or_addresses=None):
"""Create a new Bridge. One of fingerprint and id_digest must be
set."""
self.nickname = nickname
self.ip = ip
self.orport = orport
+ if not or_addresses: or_addresses = {}
+ self.or_addresses = or_addresses
self.running = self.stable = None
self.blockingCountries = None
if id_digest is not None:
@@ -132,15 +144,63 @@ class Bridge:
def __repr__(self):
"""Return a piece of python that evaluates to this bridge."""
+ if self.or_addresses:
+ return "Bridge(%r,%r,%d,%r,or_addresses=%s)"%(
+ self.nickname, self.ip, self.orport, self.fingerprint,
+ self.or_addresses)
return "Bridge(%r,%r,%d,%r)"%(
self.nickname, self.ip, self.orport, self.fingerprint)
- def getConfigLine(self,includeFingerprint=False):
+ def getConfigLine(self,includeFingerprint=False,
+ selectFromORAddresses=False,
+ needIPv4=True, needIPv6=False):
"""Return a line describing this bridge for inclusion in a torrc."""
+
+ # select an address:port from or-addresses
+ if selectFromORAddresses and self.or_addresses:
+ filtered_addresses = None
+ # bridges may have both classes. we only return one.
+ if needIPv4:
+ f = lambda x: type(x[0]) is ipaddr.IPv4Address
+ filtered_addresses = filter(f, self.or_addresses.items())
+ elif needIPv6:
+ f = lambda x: type(x[0]) is ipaddr.IPv6Address
+ filtered_addresses = filter(f, self.or_addresses.items())
+
+ #XXX: we could instead have two lists of or-addresses
+ if filtered_addresses:
+ address,portlist = random.choice(filtered_addresses)
+ if type(address) is ipaddr.IPv6Address:
+ ip = "[%s]"%address
+ else:
+ ip = "%s"%address
+ orport = portlist.getPort() #magic
+
+ # default to ip,orport ; ex. when logging
+ else:
+ ip = self.ip
+ orport = self.orport
+
if includeFingerprint:
- return "bridge %s:%d %s" % (self.ip, self.orport, self.fingerprint)
+ return "bridge %s:%d %s" % (ip, orport, self.fingerprint)
else:
- return "bridge %s:%d" % (self.ip, self.orport)
+ return "bridge %s:%d" % (ip, orport)
+
+ def getAllConfigLines(self,includeFingerprint=False):
+ """Generator. Iterate over all valid config lines for this bridge."""
+ # warning: a bridge with large port ranges may generate thousands
+ # of lines of output
+ for address,portlist in self.or_addresses.items():
+ if type(address) is ipaddr.IPv6Address:
+ ip = "[%s]" % address
+ else:
+ ip = "%s" % address
+
+ for orport in portlist:
+ if includeFingerprint:
+ yield "bridge %s:%d %s" % (ip,orport,self.fingerprint)
+ else:
+ yield "bridge %s:%d" % (ip,orport)
def assertOK(self):
assert is_valid_ip(self.ip)
@@ -164,10 +224,37 @@ class Bridge:
return False
def parseDescFile(f, bridge_purpose='bridge'):
- """Generator. Parses a cached-descriptors file 'f', and yields a Bridge
- object for every entry whose purpose matches bridge_purpose.
+ """Generator. Parses a cached-descriptors file 'f' and yeilds a Bridge object
+ for every entry whose purpose matches bridge_purpose.
+ This Generator understands the new descriptor format described in
+ 186-multiple-orports.txt
+
+ The new specification provides for specifying multiple ORports as well
+ as supporting new address format for IPv6 addresses.
+
+ The router descriptor "or-address" may occur zero, one, or multiple times.
+ parseDescFile adds each ADDRESS:PORTSPEC to the Bridge.or_addresses list.
+
+ The "or-address" should not duplicate the address:port pair from the "router"
+ description. (Should we try to catch this case?)
+
+ A node may not list more than 8 or-address lines.
+ (should we try to enforce this too?)
+
+ Here is the new format:
+
+ or-address SP ADDRESS ":" PORTLIST NL
+ ADDRESS = IP6ADDR | IP4ADDR
+ IPV6ADDR = an ipv6 address, surrounded by square brackets.
+ IPV4ADDR = an ipv4 address, represented as a dotted quad.
+ PORTLIST = PORTSPEC | PORTSPEC "," PORTLIST
+ PORTSPEC = PORT | PORT "-" PORT
+ PORT = a number between 1 and 65535 inclusive.
"""
+
nickname = ip = orport = fingerprint = purpose = None
+ num_or_address_lines = 0
+ or_addresses = {}
for line in f:
line = line.strip()
@@ -185,14 +272,172 @@ def parseDescFile(f, bridge_purpose='bridge'):
orport = int(items[3])
elif line.startswith("fingerprint "):
fingerprint = line[12:].replace(" ", "")
+ elif line.startswith("or-address "):
+ if num_or_address_lines < 8:
+ line = line[11:]
+ address,portlist = parseORAddressLine(line)
+ try:
+ or_addresses[address].add(portlist)
+ except KeyError:
+ or_addresses[address] = portlist
+ else:
+ logging.warn("Skipping extra or-address line "\
+ "from Bridge with ID %r" % id)
+ num_or_address_lines += 1
elif line.startswith("router-signature"):
purposeMatches = (purpose == bridge_purpose or
bridge_purpose is None)
if purposeMatches and nickname and ip and orport and fingerprint:
- b = Bridge(nickname, ip, orport, fingerprint)
+ b = Bridge(nickname, ip, orport, fingerprint,
+ or_addresses=or_addresses)
b.assertOK()
yield b
- nickname = ip = orport = fingerprint = purpose = None
+ nickname = ip = orport = fingerprint = purpose = None
+ num_or_address_lines = 0
+ or_addresses = {}
+
+class PortList:
+ """ container class for port ranges
+ """
+
+ def __init__(self, *args, **kwargs):
+ self.ports = set()
+ self.ranges = []
+ self.portdispenser = None
+ if len(args) == 1:
+ if type(args[0]) is str:
+ ports = [p.split('-') for p in args[0].split(',')]
+ # truncate per spec
+ ports = ports[:16]
+ for ps in ports:
+ try: ps = [int(x) for x in ps]
+ except ValueError: break
+ if len(ps) == 1: self.add(ps[0])
+ elif len(ps) == 2: self.add(ps[0],ps[1])
+ else:
+ self.add(args[0])
+ elif len(args) == 2:
+ l,h = args
+ self.add(l,h)
+
+ def _sanitycheck(self, val):
+ #XXX: if debug=False this is disabled. bad!
+ assert type(val) is int
+ assert(val > 0)
+ assert(val <= 65535)
+
+ def __contains__(self, val1, val2=None):
+ self._sanitycheck(val1)
+ if val2: self.sanitycheck(val2)
+
+ # check a single port
+ if not val2 and val1:
+ if val1 in self.ports: return True
+ for start,end in self.ranges:
+ f = lambda x: start <= x <= end
+ if f(val1): return True
+ return False
+
+ if val2 and val1:
+ for start,end in self.ranges:
+ f = lambda x: start <= x <= end
+ if f(val1) and f(val2): return True
+
+ for start,end in self.ranges:
+ f = lambda x: start <= x <= end
+ if f(val): return True
+
+ def add(self, val1, val2=None):
+ self._sanitycheck(val1)
+
+ # add as a single port instead
+ if val2 == val1: val2 = None
+ if val2:
+ self._sanitycheck(val2)
+ start = min(val1,val2)
+ end = max(val1,val2)
+ self.ranges.append((start,end))
+ # reduce to largest continuous ranges
+ self._squash()
+ else:
+ if val1 in self: return
+ self.ports.add(val1)
+
+ # reset port dispenser
+ if self.portdispenser:
+ self.portdispenser = None
+
+ def getPort(self):
+ # returns a single valid port
+ if not self.portdispenser:
+ self.portdispenser = self.__iter__()
+ try:
+ return self.portdispenser.next()
+ except StopIteration, AttributeError:
+ self.portdispenser = self.__iter__()
+ return self.portdispenser.next()
+
+ def _squash(self):
+ # merge intersecting ranges
+ if len(self.ranges) > 1:
+ self.ranges.sort(key=lambda x: x[0])
+ squashed = [self.ranges.pop(0)]
+ for r in self.ranges:
+ if (squashed[-1][0] <= r[0] <= squashed[-1][1]):
+ #intersection, extend r1, drop r2
+ if r[1] > squashed[-1][1]:
+ squashed[-1] = (squashed[-1][0],r[1])
+ # drop r
+ else:
+ # keep r
+ squashed.append(r)
+
+ self.ranges = squashed
+
+ # drop enclosed ports
+ ports = self.ports.copy()
+ for p in self.ports:
+ for s,e in self.ranges:
+ if s <= p <= e:
+ ports.remove(p)
+ self.ports = ports
+
+ def __iter__(self):
+ for p in self.ports:
+ yield p
+ for l,h in self.ranges:
+ # +1 for inclusive range
+ for rr in xrange(l,h+1):
+ yield rr
+
+ def __str__(self):
+ s = ""
+ for p in self.ports:
+ s += "".join(", %s"%p)
+ for l,h in self.ranges:
+ s += ", %s-%s" % (l,h)
+ return s.lstrip(", ")
+
+ def __repr__(self):
+ return "PortList('%s')" % self.__str__()
+
+def parseORAddressLine(line):
+ #XXX should these go somewhere else?
+ re_ipv6 = re.compile("\[([a-fA-F0-9:]+)\]:(.*$)")
+ re_ipv4 = re.compile("((?:\d{1,3}\.?){4}):(.*$)")
+
+ address = None
+ portlist = None
+ # try regexp to discover ip version
+ for regex in [re_ipv4, re_ipv6]:
+ m = regex.match(line)
+ if m:
+ try:
+ address = ipaddr.IPAddress(m.group(1))
+ portstring = m.group(2)
+ except IndexError, ValueError: break
+ portlist = PortList(portstring)
+ return address,portlist
def parseStatusFile(f):
"""DOCDOC"""
1
0

[bridgedb/master] 4297 - FilteredBridgeSplitter - sorting bridges
by aagbsn@torproject.org 16 Mar '13
by aagbsn@torproject.org 16 Mar '13
16 Mar '13
commit cb2cdbd42eddbc75139fc886c3c1bfb0f8ed91b7
Author: aagbsn <aagbsn(a)extc.org>
Date: Fri Dec 9 19:01:04 2011 -0800
4297 - FilteredBridgeSplitter - sorting bridges
The FilteredBridgeSplitter sorts bridges into subrings. The subrings
are defined by filter functions. For example, to filter bridges by
ORport > 9000:
def filterBridgesOver9000(bridge):
if bridge.orport > 9000: return True
Example in context:
d = FilteredBridgeSplitter(key)
d.addRing(BridgeRing, 'Bridges with ORPort > 9000',
filterBridgesOver9000)
When d.insert(bridge) is called, bridges will be inserted into all
subrings whose filter function returns True.
---
lib/bridgedb/Bridges.py | 108 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 93 insertions(+), 15 deletions(-)
diff --git a/lib/bridgedb/Bridges.py b/lib/bridgedb/Bridges.py
index 306b757..b0e1fc8 100644
--- a/lib/bridgedb/Bridges.py
+++ b/lib/bridgedb/Bridges.py
@@ -160,14 +160,12 @@ class Bridge:
if selectFromORAddresses and self.or_addresses:
filtered_addresses = None
# bridges may have both classes. we only return one.
- if needIPv4:
- f = lambda x: type(x[0]) is ipaddr.IPv4Address
- filtered_addresses = filter(f, self.or_addresses.items())
- elif needIPv6:
+ if needIPv6:
f = lambda x: type(x[0]) is ipaddr.IPv6Address
filtered_addresses = filter(f, self.or_addresses.items())
-
- #XXX: we could instead have two lists of or-addresses
+ elif needIPv4:
+ f = lambda x: type(x[0]) is ipaddr.IPv4Address
+ filtered_addresses = filter(f, self.or_addresses.items())
if filtered_addresses:
address,portlist = random.choice(filtered_addresses)
if type(address) is ipaddr.IPv6Address:
@@ -613,16 +611,8 @@ class BridgeRing(BridgeHolder):
#Do not return bridges from the same /16
bridges = [ self.bridges[k] for k in keys ]
- filteredbridges = []
- slash16s = dict()
- for bridge in bridges:
- m = re.match(r'(\d+\.\d+)\.\d+\.\d+', bridge.ip)
- upper16 = m.group(1)
- if upper16 not in slash16s:
- filteredbridges.append(bridge)
- slash16s[upper16] = True
- return filteredbridges
+ return bridges
def getBridgeByID(self, fp):
"""Return the bridge whose identity digest is fp, or None if no such
@@ -794,6 +784,94 @@ class BridgeSplitter(BridgeHolder):
for name,ring in self.ringsByName.iteritems():
ring.dumpAssignments(f, "%s %s" % (description, name))
+class FilteredBridgeSplitter(BridgeHolder):
+ """ A configurable BridgeHolder that filters bridges
+ into subrings.
+ The set of subrings and conditions used to assign Bridges
+ are passed to the constructor as a list of (filterFn, ringName)
+ """
+
+#XXX: maybe limit the # of cached rings too?
+#XXX: keep the bridges around
+#XXX: when the # of rings hits RING_LIMIT drop the oldest
+#XXX: LRU is probably OK
+#XXX: max_cached_rings should be configurable
+
+
+#XXX: need a default ring (f(x): return True)
+#XXX: (don't make this a default, we'll just need to have it)
+
+#XXX: filterRings['NoFilter'] = [list,of,rings]
+#XXX: filterRings['Default'] = [list,of,rings]
+#XXX: filterRings['IPv6'] = [list,of,rings]
+
+#XXX: filterRings['more-complex-query-string?']
+
+
+ def __init__(self, key, max_cached_rings=3):
+ self.key = key
+ self.filterRings = {}
+ self.hmac = get_hmac_fn(key, hex=True)
+ self.bridges = []
+
+ #XXX: unused
+ self.max_cached_rings = max_cached_rings
+
+ def __len__(self):
+ return len(self.bridges)
+
+ def clear(self):
+ #XXX syntax?
+ [r.clear() for n,(f,r) in self.filterRings.items()]
+ self.bridges = []
+ #self.filterRings = {}
+
+ def insert(self, bridge):
+ if not bridge.running:
+ logging.debug("insert non-running bridge %s" % bridge.getID())
+ return
+
+ self.bridges.append(bridge)
+
+ # insert in all matching rings
+ for n,(f,r) in self.filterRings.items():
+ if f(bridge):
+ r.insert(bridge)
+ logging.debug("insert bridge into %s" % n)
+
+ #XXX db.insertBridgeAndGetRing ??
+ #XXX persisent mapping?
+
+ def addRing(self, ring, ringname, filterFn, populate_from=None):
+ """Add a ring to this splitter.
+ ring -- the ring to add
+ ringname -- a unique string identifying the ring
+ filterFn -- a function whose input is a Bridge, and returns
+ True or False
+ populate_from -- an iterable of Bridges
+ """
+ assert isinstance(ring, BridgeHolder)
+ assert ringname not in self.filterRings.keys()
+ logging.debug("addRing %s" % ringname)
+
+ #XXX: drop LRU ring if len(self.filterRings) > self.max_cached_rings
+ #XXX: where do rings go after cache eviction?
+ self.filterRings[ringname] = (filterFn,ring)
+
+ # populate ring from an iterable
+ if populate_from:
+ logging.debug("populating ring %s" % ringname)
+ for bridge in populate_from:
+ if isinstance(bridge, Bridge) and filterFn(bridge):
+ ring.insert(bridge)
+
+ def dumpAssignments(self, f, description=""):
+ for n,(_,r) in self.filterRings.items():
+ r.dumpAssignments(f, "%s %s" % (description, n))
+
+ def assignmentsArePersistent(self):
+ return False #XXX: is this right?
+
class BridgeBlock:
"""Base class that abstracts bridge blocking"""
def __init__(self):
1
0

[bridgedb/master] 4297 - IPBasedDistributor learns to sort bridges
by aagbsn@torproject.org 16 Mar '13
by aagbsn@torproject.org 16 Mar '13
16 Mar '13
commit 72561ea2b1b30c703efaa8f96c630a13dffd3ed3
Author: aagbsn <aagbsn(a)extc.org>
Date: Fri Dec 9 19:01:15 2011 -0800
4297 - IPBasedDistributor learns to sort bridges
IPBasedDistributor now uses the FilteredBridgeSplitter to sort
bridges into subrings based on the address class of the Bridges'
ip(s) (including addresses parsed from the new or-address spec).
---
lib/bridgedb/Bridges.py | 17 ---------
lib/bridgedb/Dist.py | 91 ++++++++++++++++++++++++++++++++++++-----------
2 files changed, 70 insertions(+), 38 deletions(-)
diff --git a/lib/bridgedb/Bridges.py b/lib/bridgedb/Bridges.py
index b0e1fc8..281e5f2 100644
--- a/lib/bridgedb/Bridges.py
+++ b/lib/bridgedb/Bridges.py
@@ -791,23 +791,6 @@ class FilteredBridgeSplitter(BridgeHolder):
are passed to the constructor as a list of (filterFn, ringName)
"""
-#XXX: maybe limit the # of cached rings too?
-#XXX: keep the bridges around
-#XXX: when the # of rings hits RING_LIMIT drop the oldest
-#XXX: LRU is probably OK
-#XXX: max_cached_rings should be configurable
-
-
-#XXX: need a default ring (f(x): return True)
-#XXX: (don't make this a default, we'll just need to have it)
-
-#XXX: filterRings['NoFilter'] = [list,of,rings]
-#XXX: filterRings['Default'] = [list,of,rings]
-#XXX: filterRings['IPv6'] = [list,of,rings]
-
-#XXX: filterRings['more-complex-query-string?']
-
-
def __init__(self, key, max_cached_rings=3):
self.key = key
self.filterRings = {}
diff --git a/lib/bridgedb/Dist.py b/lib/bridgedb/Dist.py
index bbff9f1..e2d1559 100644
--- a/lib/bridgedb/Dist.py
+++ b/lib/bridgedb/Dist.py
@@ -38,35 +38,59 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder):
def __init__(self, areaMapper, nClusters, key, ipCategories=(),
answerParameters=None):
self.areaMapper = areaMapper
+ self.answerParameters = answerParameters
self.rings = []
self.categoryRings = [] #DOCDDOC
self.categories = [] #DOCDOC
+
+ key2 = bridgedb.Bridges.get_hmac(key, "Assign-Bridges-To-Rings")
+ key3 = bridgedb.Bridges.get_hmac(key, "Order-Areas-In-Rings")
+ self.areaOrderHmac = bridgedb.Bridges.get_hmac_fn(key3, hex=False)
+ key4 = bridgedb.Bridges.get_hmac(key, "Assign-Areas-To-Rings")
+ self.areaClusterHmac = bridgedb.Bridges.get_hmac_fn(key4, hex=True)
+
+ # add splitter and cache the default rings
+ # plus leave room for dynamic filters
+ ring_cache_size = nClusters + len(ipCategories) + 5
+ self.splitter = bridgedb.Bridges.FilteredBridgeSplitter(key2,
+ max_cached_rings=ring_cache_size)
+
+ # assign bridges using a filter function
+ def filterAssignBridgesToRing(hmac, numRings, assignedRing):
+ def f(bridge):
+ digest = hmac(bridge.getID())
+ pos = long( digest[:8], 16 )
+ which = pos % numRings
+ if which == assignedRing: return True
+ return False
+ return f
+
for n in xrange(nClusters):
key1 = bridgedb.Bridges.get_hmac(key, "Order-Bridges-In-Ring-%d"%n)
- self.rings.append( bridgedb.Bridges.BridgeRing(key1,
- answerParameters) )
- self.rings[-1].setName("IP ring %s"%len(self.rings))
+ ring = bridgedb.Bridges.BridgeRing(key1, answerParameters)
+ ring.setName("IP ring %s"%n) #XXX: should be n+1 for consistency?
+
+ g = filterAssignBridgesToRing(self.splitter.hmac,
+ nClusters + len(ipCategories), n)
+ self.splitter.addRing(ring, ring.name, g)
+ self.rings.append(ring)
+
n = nClusters
for c in ipCategories:
logging.info("Building ring: Order-Bridges-In-Ring-%d"%n)
key1 = bridgedb.Bridges.get_hmac(key, "Order-Bridges-In-Ring-%d"%n)
ring = bridgedb.Bridges.BridgeRing(key1, answerParameters)
+ ring.setName("IP category ring %s"%n) #XXX: should be n+1 for consistency?
self.categoryRings.append( ring )
- self.categoryRings[-1].setName(
- "IP category ring %s"%len(self.categoryRings))
self.categories.append( (c, ring) )
- n += 1
- key2 = bridgedb.Bridges.get_hmac(key, "Assign-Bridges-To-Rings")
- self.splitter = bridgedb.Bridges.FixedBridgeSplitter(key2,
- self.rings+self.categoryRings)
+ g = filterAssignBridgesToRing(self.splitter.hmac,
+ nClusters + len(ipCategories), n)
- key3 = bridgedb.Bridges.get_hmac(key, "Order-Areas-In-Rings")
- self.areaOrderHmac = bridgedb.Bridges.get_hmac_fn(key3, hex=False)
+ self.splitter.addRing(ring, ring.name, g)
- key4 = bridgedb.Bridges.get_hmac(key, "Assign-Areas-To-Rings")
- self.areaClusterHmac = bridgedb.Bridges.get_hmac_fn(key4, hex=True)
+ n += 1
def clear(self):
self.splitter.clear()
@@ -75,7 +99,8 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder):
"""Assign a bridge to this distributor."""
self.splitter.insert(bridge)
- def getBridgesForIP(self, ip, epoch, N=1, countryCode=None):
+ def getBridgesForIP(self, ip, epoch, N=1, countryCode=None,
+ bridgeFilterRules=None):
"""Return a list of bridges to give to a user.
ip -- the user's IP address, as a dotted quad.
epoch -- the time period when we got this request. This can
@@ -96,20 +121,44 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder):
pos = self.areaOrderHmac("category<%s>%s"%(epoch,area))
return ring.getBridges(pos, N, countryCode)
- # Which bridge cluster should we look at?
- h = int( self.areaClusterHmac(area)[:8], 16)
- clusterNum = h % len(self.rings)
- ring = self.rings[clusterNum]
- # If a ring is empty, consider the next.
- while not len(ring):
- clusterNum = (clusterNum + 1) % len(self.rings)
+ # dynamic filter construction
+ if bridgeFilterRules:
+ ruleset = frozenset(bridgeFilterRules)
+ if ruleset in self.splitter.filterRings.keys():
+ # cache hit
+ _,ring = self.splitter.filterRings[ruleset]
+ else:
+ # cache miss, add new ring
+ def filterBridgesByRules(rules):
+ def g(x):
+ r = [f(x) for f in rules]
+ if False in r: return False
+ return True
+ return g
+ # add new ring
+ #XXX what key do we use here? does it matter?
+ key1 = bridgedb.Bridges.get_hmac(self.splitter.key, str(bridgeFilterRules))
+ ring = bridgedb.Bridges.BridgeRing(key1, self.answerParameters)
+ # debug log: cache miss
+ self.splitter.addRing(ring, ruleset, filterBridgesByRules(bridgeFilterRules),
+ populate_from=self.splitter.bridges)
+
+ else:
+ # Which bridge cluster should we look at?
+ h = int( self.areaClusterHmac(area)[:8], 16)
+ clusterNum = h % len(self.rings)
ring = self.rings[clusterNum]
+ # If a ring is empty, consider the next.
+ while not len(ring):
+ clusterNum = (clusterNum + 1) % len(self.rings)
+ ring = self.rings[clusterNum]
# Now get the bridge.
pos = self.areaOrderHmac("<%s>%s" % (epoch, area))
return ring.getBridges(pos, N)
def __len__(self):
+ #XXX does not include ip categories or filtered rings
return sum(len(r) for r in self.rings)
def dumpAssignments(self, f, description=""):
1
0