aboutsummaryrefslogtreecommitdiff
path: root/contrib/osx/TorPostflight
blob: 9f8d990b33e505c3035e302251c82b3415dd7c74 (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
139
140
141
142
143
144
145
#!/bin/sh

# 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
LOGDIR=$TARGET/var/log/tor

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

## Determine OSX Version
# map version to name
if [ -x /usr/bin/sw_vers ]; then
# This is poor, yet functional.  We don't care about the 3rd number in
# the OS version
  OSVER=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 | cut -d"." -f1,2`
  case "$OSVER" in
 	"10.5") OS="leopard";;
	"10.4") OS="tiger";;
	"10.3") OS="panther";;
	"10.2") OS="jaguar";;
	"10.1") OS="puma";;
	"10.0") OS="cheetah";;
	*) OS="unknown";;
  esac
else
  OS="unknown"
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
if [ ! -d $LOGDIR ]; then
  mkdir -p $LOGDIR
fi
# Check its permissions.
chown $TORUSER $TORDIR
chgrp daemon $TORDIR
chmod 700 $TORDIR
chown $TORUSER $LOGDIR
chgrp daemon $LOGDIR
chmod 700 $LOGDIR

# 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/man/man1
ln -sf $MAN1/*.1 .

if [ ! -e /var/log/tor -o -L /var/log/tor ]; then
  cd /var/log
  rm -f tor
  ln -sf $LOGDIR tor
fi

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 755 $TARGET/Tor_Uninstaller.applescript
fi

if [ -f $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.app.tar.gz ]; then 
   cp $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.app.tar.gz $TARGET/Tor_Uninstaller.app.tar.gz
   cd $TARGET && tar zxf Tor_Uninstaller.app.tar.gz 
   chmod -R 755 $TARGET/Tor_Uninstaller.app
   chown -R _tor:_tor Tor_Uninstaller.app
   rm $TARGET/Tor_Uninstaller.app.tar.gz
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 755 $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 the pre-install script did it's thing, it should have saved the
# config and server keys; put these back and clean up
if [ -f /tmp/TorSavedMe.tar.gz ]; then
	tar zxf /tmp/TorSavedMe.tar.gz -C /
	rm /tmp/TorSavedMe.tar.gz
fi

# Determine how to start by OS Version
if [ $OS = "tiger" ]; then
  if [ -f $PACKAGE_PATH/Contents/Resources/net.freehaven.tor.plist ]; then
     cp $PACKAGE_PATH/Contents/Resources/net.freehaven.tor.plist /System/Library/LaunchDaemons/net.freehaven.tor.plist
     chmod 644 /System/Library/LaunchDaemons/net.freehaven.tor.plist
     echo "#--START required settings--" >> $TARGET/torrc
     echo "RunAsDaemon 0" >> $TARGET/torrc
     echo "Log notice file $TARGET/var/log/tor/tor.log" >> $TARGET/torrc
     echo "DataDirectory $TARGET/var/lib/tor" >> $TARGET/torrc
     echo "Group daemon" >> $TARGET/torrc
     echo "User _tor" >> $TARGET/torrc
     echo "PidFile /var/run/Tor.pid" >> $TARGET/torrc
     echo "#--END required settings--" >> $TARGET/torrc
  fi
     /bin/launchctl load /System/Library/LaunchDaemons/net.freehaven.tor.plist
     /bin/launchctl start net.freehaven.tor
else
  if [ -d /Library/StartupItems/Tor ]; then
    rm -f /Library/StartupItems/Tor/Tor.loc
    echo "$TARGET" > /Library/StartupItems/Tor/Tor.loc
  fi
fi