[tor-commits] [tor-messenger-build/master] Add tor-mail

boklm at torproject.org boklm at torproject.org
Thu Mar 19 21:59:49 UTC 2015


commit 5655a5361e3d831c9679a31f4d046b9409e2c0f9
Author: Nicolas Vigier <boklm at torproject.org>
Date:   Thu Mar 19 22:55:43 2015 +0100

    Add tor-mail
    
    Based on files and instructions provided by Sukhbir.
---
 Makefile                         |   12 +-
 projects/tor-mail/build          |   41 +++++
 projects/tor-mail/config         |   25 +++
 projects/tor-mail/start-tor-mail |  309 ++++++++++++++++++++++++++++++++++++++
 projects/tor-mail/user.js        |    1 +
 5 files changed, 387 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index b2472b7..9fd18a8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,10 @@
 rbm=./rbm/rbm
 
-all: submodule-update tor-messenger-linux-x86_64 tor-messenger-linux-i686 tor-messenger-windows-i686
+all: tor-messenger
+
+tor-messenger: submodule-update tor-messenger-linux-x86_64 tor-messenger-linux-i686 tor-messenger-windows-i686
+
+tor-mail: submodule-update tor-mail-linux-x86_64 tor-mail-linux-i686
 
 tor-messenger-linux-x86_64:
 	$(rbm) build tor-messenger --target tor-messenger --target linux-x86_64
@@ -11,6 +15,12 @@ tor-messenger-linux-i686:
 tor-messenger-windows-i686:
 	$(rbm) build tor-messenger --target tor-messenger --target windows-i686
 
+tor-mail-linux-x86_64:
+	$(rbm) build tor-mail --target tor-mail --target linux-x86_64
+
+tor-mail-linux-i686:
+	$(rbm) build tor-mail --target tor-mail --target linux-i686
+
 submodule-update:
 	git submodule update --init
 
diff --git a/projects/tor-mail/build b/projects/tor-mail/build
new file mode 100644
index 0000000..135f9fe
--- /dev/null
+++ b/projects/tor-mail/build
@@ -0,0 +1,41 @@
+#!/bin/sh
+set -e
+rootdir=$(pwd)
+mkdir bundle
+
+[% IF c("var/windows") -%]
+7z x -y -obundle [% c('input_files_by_name/thunderbird') %]
+mv bundle/thunderbird bundle/Mail
+[% ELSE -%]
+mkdir bundle/Mail
+tar xf [% c('input_files_by_name/thunderbird') %] -C bundle/Mail --strip 1
+[% END -%]
+
+mv start-tor-mail bundle/
+
+mkdir bundle/Mail/defaults/profile/
+mv user.js bundle/Mail/defaults/profile/
+
+cd bundle/Mail/extensions
+mkdir torbirdy
+7z x -y -otorbirdy $rootdir/[% c('input_files_by_name/torbirdy') %]
+mkdir tor-launcher at torproject.org
+7z x -y -otor-launcher at torproject.org $rootdir/[% c('input_files_by_name/tor-launcher') %]
+mkdir -p tor-launcher at torproject.org/TorBrowser/Data
+[% IF c("var/windows") -%]
+7z x ../../../[% c('input_files_by_name/tor-browser') %]
+mv \$_OUTDIR tor-browser_en-US
+[% ELSE -%]
+tar xf ../../../[% c('input_files_by_name/tor-browser') %]
+[% END -%]
+sed -i 's/^SocksPort .*/SocksPort 9152/' tor-browser_en-US/Browser/TorBrowser/Data/Tor/torrc-defaults
+sed -i 's/^ControlPort .*/ControlPort 9153/' tor-browser_en-US/Browser/TorBrowser/Data/Tor/torrc-defaults
+mv tor-browser_en-US/Browser/TorBrowser/Tor tor-launcher at torproject.org/TorBrowser/Tor
+mv tor-browser_en-US/Browser/TorBrowser/Data/Tor tor-launcher at torproject.org/TorBrowser/Data/Tor
+rm -Rf tor-browser_en-US
+cd $rootdir
+mv bundle tor-mail
+[% c('tar', {
+        tar_src => [ 'tor-mail' ],
+        tar_args => '-cJf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/tor-mail/config b/projects/tor-mail/config
new file mode 100644
index 0000000..0fa7dcb
--- /dev/null
+++ b/projects/tor-mail/config
@@ -0,0 +1,25 @@
+# vim: filetype=yaml
+version: 0.0.1
+filename: 'tor-mail-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.xz'
+input_files:
+  - project: thunderbird
+    name: thunderbird
+  - project: torbirdy
+    name: torbirdy
+  - project: tor-launcher
+    name: tor-launcher
+  - project: tor-browser
+    name: tor-browser
+  - filename: start-tor-mail
+  - filename: user.js
+  - project: docker-image
+
+remote_docker: 1
+lsb_release:
+    id: Ubuntu
+    release: 12.04
+    codename: precise
+var:
+    deps:
+        - bzip2
+        - p7zip-full
diff --git a/projects/tor-mail/start-tor-mail b/projects/tor-mail/start-tor-mail
new file mode 100644
index 0000000..c563601
--- /dev/null
+++ b/projects/tor-mail/start-tor-mail
@@ -0,0 +1,309 @@
+#!/bin/bash
+# 
+# Based on the start-tor-browser and start-tor-messenger scripts
+#
+# GNU/Linux does not really require something like RelativeLink.c
+# However, we do want to have the same look and feel with similar features.
+#
+# To run in debug mode simply pass --debug
+#
+# Copyright 2014 The Tor Project.  See LICENSE for licensing information.
+
+complain_dialog_title="Tor Mail"
+
+# First, make sure DISPLAY is set.  If it isn't, we're hosed; scream
+# at stderr and die.
+if [ "x$DISPLAY" = "x" ]; then
+	echo "$complain_dialog_title must be run within the X Window System." >&2
+	echo "Exiting." >&2
+	exit 1
+fi
+
+# Do not (try to) connect to the session manager 
+unset SESSION_MANAGER 
+
+# Determine whether we are running in a terminal.  If we are, we
+# should send our error messages to stderr...
+ARE_WE_RUNNING_IN_A_TERMINAL=0
+if [ -t 1 -o -t 2 ]; then
+	ARE_WE_RUNNING_IN_A_TERMINAL=1
+fi
+
+# ...unless we're running in the same terminal as startx or xinit.  In
+# that case, the user is probably running us from a GUI file manager
+# in an X session started by typing startx at the console.
+#
+# Hopefully, the local ps command supports BSD-style options.  (The ps
+# commands usually used on Linux and FreeBSD do; do any other OSes
+# support running Linux binaries?)
+ps T 2>/dev/null |grep startx 2>/dev/null |grep -v grep 2>&1 >/dev/null
+not_running_in_same_terminal_as_startx="$?"
+ps T 2>/dev/null |grep xinit 2>/dev/null |grep -v grep 2>&1 >/dev/null
+not_running_in_same_terminal_as_xinit="$?"
+
+# not_running_in_same_terminal_as_foo has the value 1 if we are *not*
+# running in the same terminal as foo.
+if [ "$not_running_in_same_terminal_as_startx" -eq 0 -o \
+     "$not_running_in_same_terminal_as_xinit" -eq 0 ]; then
+	ARE_WE_RUNNING_IN_A_TERMINAL=0
+fi
+
+# Complain about an error, by any means necessary.
+# Usage: complain message
+# message must not begin with a dash.
+complain () {
+	# Trim leading newlines, to avoid breaking formatting in some dialogs.
+	complain_message="`echo "$1" | sed '/./,$!d'`"
+
+	# If we're being run in a terminal, complain there.
+	if [ "$ARE_WE_RUNNING_IN_A_TERMINAL" -ne 0 ]; then
+		echo "$complain_message" >&2
+		return
+	fi
+
+	# Otherwise, we're being run by a GUI program of some sort;
+	# try to pop up a message in the GUI in the nicest way
+	# possible.
+	#
+	# In mksh, non-existent commands return 127; I'll assume all
+	# other shells set the same exit code if they can't run a
+	# command.  (xmessage returns 1 if the user clicks the WM
+	# close button, so we do need to look at the exact exit code,
+	# not just assume the command failed to display a message if
+	# it returns non-zero.)
+
+	# First, try zenity.
+	zenity --error \
+		--title="$complain_dialog_title" \
+		--text="$complain_message"
+	if [ "$?" -ne 127 ]; then
+		return
+	fi
+
+	# Try kdialog.
+	kdialog --title "$complain_dialog_title" \
+		--error "$complain_message"
+	if [ "$?" -ne 127 ]; then
+		return
+	fi
+
+	# Try xmessage.
+	xmessage -title "$complain_dialog_title" \
+		-center \
+		-buttons OK \
+		-default OK \
+		-xrm '*message.scrollVertical: Never' \
+		"$complain_message"
+	if [ "$?" -ne 127 ]; then
+		return
+	fi
+
+	# Try gxmessage.  This one isn't installed by default on
+	# Debian with the default GNOME installation, so it seems to
+	# be the least likely program to have available, but it might
+	# be used by one of the 'lightweight' Gtk-based desktop
+	# environments.
+	gxmessage -title "$complain_dialog_title" \
+		-center \
+		-buttons GTK_STOCK_OK \
+		-default OK \
+		"$complain_message"
+	if [ "$?" -ne 127 ]; then
+		return
+	fi
+}
+
+if [ "`id -u`" -eq 0 ]; then
+	complain "Tor Mail should not be run as root.  Exiting."
+	exit 1
+fi
+
+debug=0
+usage_message="usage: $0 [--debug]"
+# !!! We may have more than one argument, changed -eq to -ge in if & elif clauses below
+if [ "$#" -ge 1 -a \( "x$1" = "x--debug" -o "x$1" = "x-debug" \) ]; then
+	debug=1
+	shift # pop the debug argument
+	printf "\nDebug enabled.\n\n"
+elif [ "$#" -ge 1 -a \( "x$1" = "x--help" -o "x$1" = "x-help" \) ]; then
+	echo "$usage_message"
+	exit 0
+fi
+
+# If the user hasn't requested 'debug mode', close whichever of stdout
+# and stderr are not ttys, to keep Firefox and the stuff loaded by/for
+# it (including the system's shared-library loader) from printing
+# messages to $HOME/.xsession-errors .  (Users wouldn't have seen
+# messages there anyway.)
+#
+# If the user has requested 'debug mode', don't muck with the FDs.
+if [ "$debug" -ne 1 ]; then
+  if [ '!' -t 1 ]; then
+    # stdout is not a tty
+    exec >/dev/null
+  fi
+  if [ '!' -t 2 ]; then
+    # stderr is not a tty
+    exec 2>/dev/null
+  fi
+fi
+
+# If XAUTHORITY is unset, set it to its default value of $HOME/.Xauthority
+# before we change HOME below.  (See xauth(1) and #1945.)  XDM and KDM rely
+# on applications using this default value.
+if [ -z "$XAUTHORITY" ]; then
+	XAUTHORITY=~/.Xauthority
+	export XAUTHORITY
+fi
+
+# If this script is being run through a symlink, we need to know where
+# in the filesystem the script itself is, not where the symlink is.
+myname="$0"
+if [ -L "$myname" ]; then
+	# XXX readlink is not POSIX, but is present in GNU coreutils
+	# and on FreeBSD.  Unfortunately, the -f option (which follows
+	# a whole chain of symlinks until it reaches a non-symlink
+	# path name) is a GNUism, so we have to have a fallback for
+	# FreeBSD.  Fortunately, FreeBSD has realpath instead;
+	# unfortunately, that's also non-POSIX and is not present in
+	# GNU coreutils.
+	#
+	# If this launcher were a C program, we could just use the
+	# realpath function, which *is* POSIX.  Too bad POSIX didn't
+	# make that function accessible to shell scripts.
+
+	# If realpath is available, use it; it Does The Right Thing.
+	possibly_my_real_name="`realpath "$myname" 2>/dev/null`"
+	if [ "$?" -eq 0 ]; then
+		myname="$possibly_my_real_name"
+	else
+		# realpath is not available; hopefully readlink -f works.
+		myname="`readlink -f "$myname" 2>/dev/null`"
+		if [ "$?" -ne 0 ]; then
+			# Ugh.
+			complain "start-tor-mail cannot be run using a symlink on this operating system."
+		fi
+	fi
+fi
+
+# Try to be agnostic to where we're being started from, chdir to where
+# the script is.
+mydir="`dirname "$myname"`"
+test -d "$mydir" && cd "$mydir"
+
+# This is a fix for an ibus issue on some Linux systems. See #9353 for more
+# details. The symlink needs to be created before we change HOME.
+if [ ! -d ".config/ibus" ]; then
+  mkdir -p .config/ibus
+  ln -nsf ~/.config/ibus/bus .config/ibus
+fi
+
+# If ${PWD} results in a zero length HOME, we can try something else...
+if [ ! "${PWD}" ]; then
+	# "hacking around some braindamage"
+	HOME="`pwd`"
+	export HOME
+	surveysays="This system has a messed up shell.\n"
+else
+	HOME="${PWD}/Mail"
+	export HOME
+fi
+
+SYSARCHITECTURE=$(getconf LONG_BIT)
+TORARCHITECTURE=$(expr "$(file Mail/thunderbird)" : '.*ELF \([[:digit:]]*\)')
+
+if [ $SYSARCHITECTURE -ne $TORARCHITECTURE ]; then
+   complain "Wrong architecture? 32-bit vs. 64-bit."
+   exit 1
+fi
+
+LD_LIBRARY_PATH="${HOME}/lib/:${HOME}/extensions/tor-launcher at torproject.org/TorBrowser/Tor"
+export LD_LIBRARY_PATH
+
+function setControlPortPasswd() {
+    local ctrlPasswd=$1
+
+    if test -z "$ctrlPasswd" -o "$ctrlPasswd" = $'\"secret\"' ; then
+        unset TOR_CONTROL_PASSWD
+        return
+    fi
+
+    if test "${ctrlPasswd:0:1}" = $'\"'; then  # First 2 chars were '"
+        printf "Using system Tor process.\n"
+        export TOR_CONTROL_PASSWD
+    else
+        complain "There seems to have been a quoting problem with your \
+TOR_CONTROL_PASSWD environment variable."
+        cat <<EOF
+
+The Tor ControlPort password should be given inside double quotes, inside single
+quotes, i.e. if the ControlPort password is “secret” (without curly quotes) then
+we must start this script after setting the environment variable exactly like
+this:
+
+  \$ TOR_CONTROL_PASSWD='"secret"' $myname
+
+EOF
+    fi
+}
+
+# Using a system-installed Tor process with Tor Mail:
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# The Tor ControlPort password should be given inside double quotes, inside
+# single quotes, i.e. if the ControlPort password is “secret” (without
+# curly quotes) then we must set the environment variable *exactly* like
+# this:
+#
+# TOR_CONTROL_PASSWD='"secret"'
+#
+# Yes, the variable MUST be double-quoted, then single-quoted, exactly as
+# shown. This is used by TorButtom to authenticate to Tor's ControlPort, and
+# is necessary for using TBB with a with a system-installed Tor.
+#
+# Additionally, if using a system-installed Tor, the following about:config
+# options should be set (values in <> mean they are the value taken from your
+# torrc):
+#
+# SETTING NAME                            VALUE
+# extensions.torbutton.banned_ports       [...],<SocksPort>,<ControlPort>
+# extensions.torbutton.block_disk         false
+# extensions.torbutton.custom.socks_host  127.0.0.1
+# extensions.torbutton.custom.socks_port  <SocksPort>
+# extensions.torbutton.inserted_button    true
+# extensions.torbutton.launch_warning     false
+# extensions.torbutton.loglevel           2
+# extensions.torbutton.logmethod          0
+# extensions.torbutton.settings_method    custom
+# extensions.torbutton.socks_port         <SocksPort>
+# extensions.torbutton.use_privoxy        false
+# extensions.torlauncher.control_port      <ControlPort>
+# extensions.torlauncher.loglevel          2
+# extensions.torlauncher.logmethod         0
+# extensions.torlauncher.prompt_at_startup false
+# extensions.torlauncher.start_tor         false
+#
+# where the '[...]' in the banned_ports option means "leave anything that was
+# already in the preference alone, just append the things specified after it".
+
+# Either set `TOR_CONTROL_PASSWD` before running ./start-tor-browser, or put
+# your password in the following line where the word “secret” is:
+setControlPortPasswd ${TOR_CONTROL_PASSWD:='"secret"'}
+
+# XXX: Debug mode for Firefox??
+
+# not in debug mode, run proceed normally
+printf "Launching Tor Mail for Linux in ${HOME}...\n"
+cd "${HOME}"
+# XXX Someday we should pass whatever command-line arguments we got
+# (probably filenames or URLs) to Firefox.
+# !!! Dash above comment! Now we pass command-line arguments we got (except --debug) to Firefox.
+# !!! Use at your own risk!
+# Adding --class for fixing bug 11102.
+TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./thunderbird "${@}"
+exitcode="$?"
+if [ "$exitcode" -ne 0 ]; then
+	complain "Tor Mail exited abnormally.  Exit code: $exitcode"
+	exit "$exitcode"
+else
+	printf '\nTor Mail exited cleanly.\n'
+fi
diff --git a/projects/tor-mail/user.js b/projects/tor-mail/user.js
new file mode 100644
index 0000000..03608fc
--- /dev/null
+++ b/projects/tor-mail/user.js
@@ -0,0 +1 @@
+pref("extensions.autoDisableScopes", 0);



More information about the tor-commits mailing list