summaryrefslogtreecommitdiff
path: root/contrib/osx/TorPostflight
blob: ec117a56eb30e3d5b75195609d539d0581b570ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/sh
# ====================================================================
#  TorPostFlight is distributed under this license
#
#  Copyright (c) 2006 Andrew Lewman
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#
#     * Neither the names of the copyright owners nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ======================================================================

# TorPostflight gets invoked after any install or upgrade.

ADDSYSUSER=$RECEIPT_PATH/addsysuser
if [ ! -x "$ADDSYSUSER" ]; then
  echo "Could not find addsysuser script."
  exit 1
fi

TORUSER=_tor
TORGROUP=daemon
TARGET=$2/Library/Tor
TORDIR=$TARGET/var/lib/tor
LOGFILE=/var/log/tor.log
TORBUTTON_VERSION="1.0.4.01-fx+tb"

# Check defaults for TARGET
if [ "$TARGET" == "//Library/Tor" ]; then
	TARGET=/Library/Tor
fi

# Create user $TORUSER in group daemon.  If it's already there, great.
$ADDSYSUSER $TORUSER "Tor System user" $TORDIR

# Create the tor directory, if it doesn't exist.
if [ ! -d $TORDIR ]; then
  mkdir -p $TORDIR
fi
# Check its permissions.
chown $TORUSER $TORDIR
chgrp daemon $TORDIR
chmod 700 $TORDIR

if [ ! -f $LOGFILE ]; then
    touch $LOGFILE
    chown $TORUSER $LOGFILE
    chgrp daemon $LOGFILE
    chmod 660 $LOGFILE
fi

# Create the configuration file only if there wasn't one already.
if [ ! -f $TARGET/torrc ]; then
  cp $TARGET/torrc.sample $TARGET/torrc
fi

# Ensure symbolic links
cd /usr/bin
if [ -e /usr/bin/tor -a ! -L /usr/bin/tor ]; then
  mv tor tor_old
fi
if [ -e /usr/bin/tor-resolve -a ! -L /usr/bin/tor-resolve ]; then
  mv tor-resolve tor-resolve_old
fi
ln -sf $TARGET/tor .
ln -sf $TARGET/tor-resolve .

cd /usr/share/man/man1
MAN1=$TARGET/share/man/man1
#ln -sf $MAN1/*.1 .

if [ -d /Library/StartupItems/Privoxy ]; then
  find /Library/StartupItems/Privoxy -print0 | xargs -0 chown root:wheel
fi

# Copy Documentation
if [ -d $PACKAGE_PATH/Contents/Resources/documents ];then
   cp -r $PACKAGE_PATH/Contents/Resources/documents $TARGET/documents
fi

# Copy Uninstaller
if [ -f $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.applescript ]; then 
   cp $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.applescript $TARGET/Tor_Uninstaller.applescript
   chmod 550 $TARGET/Tor_Uninstaller.applescript
fi

if [ -f $PACKAGE_PATH/Contents/Resources/uninstall_tor_bundle.sh ]; then
   cp $PACKAGE_PATH/Contents/Resources/uninstall_tor_bundle.sh $TARGET/uninstall_tor_bundle.sh
   chmod 550 $TARGET/uninstall_tor_bundle.sh
fi

if [ -f $PACKAGE_PATH/Contents/Resources/package_list.txt ]; then
   cp $PACKAGE_PATH/Contents/Resources/package_list.txt $TARGET/package_list.txt
fi

if [ -d /Library/StartupItems/Tor ]; then
   rm -f /Library/StartupItems/Tor/Tor.loc
   echo "$TARGET" > /Library/StartupItems/Tor/Tor.loc
fi

if [ -f /Applications/Firefox.app/Contents/MacOS/firefox ]; then
  if [ -f $TARGET/torbutton-$TORBUTTON_VERSION.xpi ]; then
      /Applications/Firefox.app/Contents/MacOS/firefox -install-global-extension $TARGET/torbutton-$TORBUTTON_VERSION.xpi
# The following is a kludge to get around the fact that the installer
# runs as root.  This means the Torbutton extension will install with
# root permissions; thereby making uninstalling Torbutton from inside
# Firefox impossible.  The user will be caught in an endless loop of
# uninstall -> automatic re-installation of Torbutton.  The OSX
# installer doesn't tell you the owner of Firefox, therefore we have to
# parse it.
      USR=`ls -alrt /Applications/Firefox.app/Contents/MacOS/extensions/ | tail -1 | awk '{print $3}'`
      GRP=`ls -alrt /Applications/Firefox.app/Contents/MacOS/extensions/ | tail -1 | awk '{print $4}'`
      chown -R $USR:$GRP /Applications/Firefox.app/Contents/MacOS/extensions/
  fi
fi