mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-23 20:03:31 +01:00
Clean the contrib directory with torch and machete.
We've accumulated a lot of cruft in this directory over the years: so much, that it passed the point of being so disorganized that we no longer browsed through it to see how bad it had gotten. This patch (based on changes by rl1987) tries to remove the most useless items, and split the others into reasonable directories. It creates a new scripts/ directory for maint and test scripts. This patch was generated with the script below. No other changes are made in this patch. ############# # new directories mkdir -p contrib/test-tools mkdir -p contrib/or-tools mkdir -p contrib/dirauth-tools mkdir -p contrib/operator-tools mkdir -p contrib/client-tools mkdir -p contrib/test-tools mkdir -p contrib/dist mkdir -p contrib/dist/suse mkdir -p contrib/win32build mkdir -p scripts/maint mkdir -p scripts/test ############ # Deleted -- nobody who wants this is going to be looking for it here any # longer. Also, nobody wants it. git rm contrib/auto-naming/README # Deleted: We no longer do polipo. git rm contrib/polipo/Makefile.mingw git rm contrib/polipo/README git rm contrib/polipo/polipo-mingw.nsi # We haven't even tried to run this for ages. It is a relic of a bygone era git rm contrib/mdd.py # contrib/dir-tools/directory-archive/ # Tools for running a directory archive. No longer used - deleting them. git rm contrib/directory-archive/crontab.sample git rm contrib/directory-archive/fetch-all git rm contrib/directory-archive/fetch-all-v3 git rm contrib/directory-archive/tar-them-up git rm contrib/directory-archive/fetch-all-functions git rm contrib/directory-archive/sort-into-month-folder # This appears to be related to very old windows packaging stuff. git rm contrib/bundle.nsi git rm contrib/package_nsis-weasel.sh git rm contrib/package_nsis.sh git rm contrib/netinst.nsi git rm contrib/torinst32.ico git rm contrib/xenobite.ico # This should not be needed for cross-compilation any more, should it? git rm contrib/cross.sh # I don't think anyone ever used this. git rm contrib/make-signature.sh # These are attempts to send tor controller commands from the command-line. # They don't support modern authentication. git rm contrib/tor-ctrl.sh # this is for fetching about a tor server from a dirauth. But it # doesn't authenticate the dirauth: yuck. git rm contrib/sd # wow, such unused, very perl4. git rm contrib/tor-stress ####### contrib/dirauth-tools/ # Tools for running a directory authority git mv contrib/add-tor contrib/dirauth-tools/ git mv contrib/nagios-check-tor-authority-cert contrib/dirauth-tools/ ####### # contrib/or-tools/ # Tools for examining relays git mv contrib/check-tor contrib/or-tools/check-tor git mv contrib/checksocks.pl contrib/or-tools/checksocks.pl git mv contrib/exitlist contrib/or-tools/exitlist ####### # contrib/operator-tools # Tools for running a relay. git mv contrib/linux-tor-prio.sh contrib/operator-tools/linux-tor-prio.sh git mv contrib/tor-exit-notice.html contrib/operator-tools/tor-exit-notice.html git mv contrib/tor.logrotate.in contrib/operator-tools/ ###### # contrib/dist git mv contrib/rc.subr contrib/dist/ git mv contrib/tor.sh.in contrib/dist/ git mv contrib/torctl.in contrib/dist/ git mv contrib/suse/* contrib/dist/suse/ ###### # client-tools git mv contrib/torify contrib/client-tools/torify git mv contrib/tor-resolve.py contrib/client-tools/ ###### # win32build git mv contrib/package_nsis-mingw.sh contrib/win32build/ git mv contrib/tor.nsi.in contrib/win32build/ # Erinn didn't ask for this... git mv contrib/tor-mingw.nsi.in contrib/win32build/ git mv contrib/tor.ico contrib/win32build/ ###### # scripts/test git mv contrib/cov-blame scripts/test/cov-blame git mv contrib/cov-diff scripts/test/cov-diff git mv contrib/coverage scripts/test/coverage git mv contrib/scan-build.sh scripts/test/ ######## scripts/maint # Maintainance scripts # # These are scripts for developers to use when hacking on Tor. They mostly # look at the Tor source in one way or another. git mv contrib/findMergedChanges.pl scripts/maint/findMergedChanges.pl git mv contrib/checkOptionDocs.pl scripts/maint/checkOptionDocs.pl git mv contrib/checkSpace.pl scripts/maint/checkSpace.pl git mv contrib/redox.py scripts/maint/redox.py git mv contrib/updateVersions.pl scripts/maint/updateVersions.pl git mv contrib/checkLogs.pl scripts/maint/checkLogs.pl git mv contrib/format_changelog.py scripts/maint/
This commit is contained in:
parent
78b431d3e3
commit
9230bc7c65
@ -1,6 +0,0 @@
|
|||||||
Tor directory authorities may maintain a binding of server identities
|
|
||||||
(their long term identity key) and nicknames.
|
|
||||||
|
|
||||||
The auto-naming scripts have been moved to svn in
|
|
||||||
projects/tor-naming/auto-naming/trunk/
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
!include "MUI.nsh"
|
|
||||||
!include "LogicLib.nsh"
|
|
||||||
!include "FileFunc.nsh"
|
|
||||||
|
|
||||||
!define VERSION "0.2.1.13"
|
|
||||||
!define INSTALLER "TorBundle.exe"
|
|
||||||
!define WEBSITE "https://www.torproject.org/"
|
|
||||||
!define LICENSE "LICENSE"
|
|
||||||
|
|
||||||
SetCompressor /SOLID BZIP2
|
|
||||||
RequestExecutionLevel user
|
|
||||||
OutFile ${INSTALLER}
|
|
||||||
InstallDir "$LOCALAPPDATA\TorInstPkgs"
|
|
||||||
SetOverWrite on
|
|
||||||
Name "Tor ${VERSION} Bundle"
|
|
||||||
Caption "Tor ${VERSION} Bundle Setup"
|
|
||||||
BrandingText "Tor Bundle Installer"
|
|
||||||
CRCCheck on
|
|
||||||
XPStyle on
|
|
||||||
ShowInstDetails hide
|
|
||||||
VIProductVersion "${VERSION}"
|
|
||||||
VIAddVersionKey "ProductName" "Tor"
|
|
||||||
VIAddVersionKey "Comments" "${WEBSITE}"
|
|
||||||
VIAddVersionKey "LegalTrademarks" "Three line BSD"
|
|
||||||
VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
|
|
||||||
VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
|
|
||||||
VIAddVersionKey "FileVersion" "${VERSION}"
|
|
||||||
|
|
||||||
!define MUI_ICON "torinst32.ico"
|
|
||||||
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
|
|
||||||
!insertmacro MUI_PAGE_INSTFILES
|
|
||||||
!insertmacro MUI_LANGUAGE "English"
|
|
||||||
|
|
||||||
Section "Tor" Tor
|
|
||||||
SectionIn RO
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
Call ExtractPackages
|
|
||||||
Call RunInstallers
|
|
||||||
Call LaunchVidalia
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Function ExtractPackages
|
|
||||||
File "license.msi"
|
|
||||||
File "tor.msi"
|
|
||||||
File "torbutton.msi"
|
|
||||||
File "thandy.msi"
|
|
||||||
File "polipo.msi"
|
|
||||||
File "vidalia.msi"
|
|
||||||
File "tbcheck.bat"
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function RunInstallers
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\license.msi" /qn'
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\tor.msi" NOSC=1 /qn'
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\thandy.msi" NOSC=1 /qn'
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\polipo.msi" NOSC=1 /qn'
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\torbutton.msi" /qn'
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\vidalia.msi" /qn'
|
|
||||||
ExpandEnvStrings $0 %COMSPEC%
|
|
||||||
Exec '"$0" /C "$INSTDIR\tbcheck.bat"'
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function LaunchVidalia
|
|
||||||
SetOutPath "$LOCALAPPDATA\Programs\Vidalia"
|
|
||||||
Exec 'vidalia.exe -loglevel info -logfile log.txt'
|
|
||||||
FunctionEnd
|
|
||||||
|
|
195
contrib/cross.sh
195
contrib/cross.sh
@ -1,195 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright 2006 Michael Mohr with modifications by Roger Dingledine
|
|
||||||
# See LICENSE for licensing information.
|
|
||||||
|
|
||||||
#######################################################################
|
|
||||||
# Tor-cross: a tool to help cross-compile Tor
|
|
||||||
#
|
|
||||||
# The purpose of a cross-compiler is to produce an executable for
|
|
||||||
# one system (CPU) on another. This is useful, for example, when
|
|
||||||
# the target system does not have a native compiler available.
|
|
||||||
# You might, for example, wish to cross-compile a program on your
|
|
||||||
# host (the computer you're working on now) for a target such as
|
|
||||||
# a router or handheld computer.
|
|
||||||
#
|
|
||||||
# A number of environment variables must be set in order for this
|
|
||||||
# script to work:
|
|
||||||
# $PREFIX, $CROSSPATH, $HOST_TRIPLET, $HOST,
|
|
||||||
# and (optionally) $BUILD
|
|
||||||
# Please run the script for a description of each one. If automated
|
|
||||||
# builds are desired, the above variables can be exported at the top
|
|
||||||
# of this script.
|
|
||||||
#
|
|
||||||
# Recent releases of Tor include test programs in configure. Normally
|
|
||||||
# this is a good thing, since it catches a number of problems.
|
|
||||||
# However, this also presents a problem when cross compiling, since
|
|
||||||
# you can't run binary images for the target system on the host.
|
|
||||||
#
|
|
||||||
# Tor-cross assumes that you know what you're doing and removes a
|
|
||||||
# number of checks known to cause problems with this process.
|
|
||||||
# Note that this does not guarantee that the program will run or
|
|
||||||
# even compile; it simply allows configure to generate the Makefiles.
|
|
||||||
#
|
|
||||||
# Stripping the binaries should almost always be done for an
|
|
||||||
# embedded environment where space is at an exacting premium.
|
|
||||||
# However, the default is NOT to strip them since they are useful for
|
|
||||||
# debugging. If you do not plan to do any debugging and you
|
|
||||||
# don't care about the debugging symbols, set $STRIP to "yes" before
|
|
||||||
# running this script.
|
|
||||||
#
|
|
||||||
# Tor-cross was written by Michael Mohr. He can be contacted at
|
|
||||||
# m(dot)mohr(at)laposte(dot)net. Comments are appreciated, but
|
|
||||||
# flames go to /dev/null.
|
|
||||||
#
|
|
||||||
# The target with which this script is tested is little-endian
|
|
||||||
# MIPS Linux, built on an Athlon-based Linux desktop.
|
|
||||||
#
|
|
||||||
#######################################################################
|
|
||||||
|
|
||||||
# disable the platform-specific tests in configure
|
|
||||||
export CROSS_COMPILE=yes
|
|
||||||
|
|
||||||
# for error conditions
|
|
||||||
EXITVAL=0
|
|
||||||
|
|
||||||
if [ ! -f autogen.sh ]
|
|
||||||
then
|
|
||||||
echo "Please run this script from the root of the Tor distribution"
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f configure ]
|
|
||||||
then
|
|
||||||
if [ -z $GEN_BUILD ]
|
|
||||||
then
|
|
||||||
echo "To automatically generate the build environment, set \$GEN_BUILD"
|
|
||||||
echo "to yes; for example,"
|
|
||||||
echo " export GEN_BUILD=yes"
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $PREFIX ]
|
|
||||||
then
|
|
||||||
echo "You must define \$PREFIX since you are cross-compiling."
|
|
||||||
echo "Select a non-system location (i.e. /tmp/tor-cross):"
|
|
||||||
echo " export PREFIX=/tmp/tor-cross"
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $CROSSPATH ]
|
|
||||||
then
|
|
||||||
echo "You must define the location of your cross-compiler's"
|
|
||||||
echo "directory using \$CROSSPATH; for example,"
|
|
||||||
echo " export CROSSPATH=/opt/cross/staging_dir_mipsel/bin"
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $HOST_TRIPLET ]
|
|
||||||
then
|
|
||||||
echo "You must define \$HOST_TRIPLET to continue. For example,"
|
|
||||||
echo "if you normally cross-compile applications using"
|
|
||||||
echo "mipsel-linux-uclibc-gcc, you would set \$HOST_TRIPLET like so:"
|
|
||||||
echo " export HOST_TRIPLET=mipsel-linux-uclibc-"
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $HOST ]
|
|
||||||
then
|
|
||||||
echo "You must specify a target processor with \$HOST; for example:"
|
|
||||||
echo " export HOST=mipsel-unknown-elf"
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $BUILD ]
|
|
||||||
then
|
|
||||||
echo "You should specify the host machine's type with \$BUILD; for example:"
|
|
||||||
echo " export BUILD=i686-pc-linux-gnu"
|
|
||||||
echo "If you wish to let configure autodetect the host, set \$BUILD to 'auto':"
|
|
||||||
echo " export BUILD=auto"
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -x $CROSSPATH/$HOST_TRIPLETgcc ]
|
|
||||||
then
|
|
||||||
echo "The specified toolchain does not contain an executable C compiler."
|
|
||||||
echo "Please double-check your settings and rerun cross.sh."
|
|
||||||
EXITVAL=-1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $EXITVAL -ne 0 ]
|
|
||||||
then
|
|
||||||
echo "Remember, you can hard-code these values in cross.sh if needed."
|
|
||||||
exit $EXITVAL
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z "$GEN_BUILD" -a ! -f configure ]
|
|
||||||
then
|
|
||||||
export NOCONF=yes
|
|
||||||
./autogen.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
# clean up any existing object files
|
|
||||||
if [ -f src/or/tor ]
|
|
||||||
then
|
|
||||||
make clean
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set up the build environment and try to run configure
|
|
||||||
export PATH=$PATH:$CROSSPATH
|
|
||||||
export RANLIB=${HOST_TRIPLET}ranlib
|
|
||||||
export CC=${HOST_TRIPLET}gcc
|
|
||||||
|
|
||||||
if [ $BUILD == "auto" ]
|
|
||||||
then
|
|
||||||
./configure \
|
|
||||||
--enable-debug \
|
|
||||||
--enable-eventdns \
|
|
||||||
--prefix=$PREFIX \
|
|
||||||
--host=$HOST
|
|
||||||
else
|
|
||||||
./configure \
|
|
||||||
--enable-debug \
|
|
||||||
--enable-eventdns \
|
|
||||||
--prefix=$PREFIX \
|
|
||||||
--host=$HOST \
|
|
||||||
--build=$BUILD
|
|
||||||
fi
|
|
||||||
|
|
||||||
# has a problem occurred?
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
echo ""
|
|
||||||
echo "A problem has been detected with configure."
|
|
||||||
echo "Please check the output above and rerun cross.sh"
|
|
||||||
echo ""
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now we're cookin'
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
# has a problem occurred?
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
echo ""
|
|
||||||
echo "A problem has been detected with make."
|
|
||||||
echo "Please check the output above and rerun make."
|
|
||||||
echo ""
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if $STRIP has length (i.e. STRIP=yes), strip the binaries
|
|
||||||
if [ ! -z $STRIP ]
|
|
||||||
then
|
|
||||||
${HOST_TRIPLET}strip \
|
|
||||||
src/or/tor \
|
|
||||||
src/test/test \
|
|
||||||
src/tools/tor-resolve
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Tor should be compiled at this point. Now run 'make install' to"
|
|
||||||
echo "install to $PREFIX"
|
|
||||||
echo ""
|
|
@ -1,3 +0,0 @@
|
|||||||
10 * * * * cd projects/tor-v2dir && ./fetch-all-v3
|
|
||||||
40 * * * * cd projects/tor-v2dir && ./fetch-all
|
|
||||||
15 3 6 * * cd projects/tor-v2dir && ./sort-into-month-folder > /dev/null && ./tar-them-up last > /dev/null
|
|
@ -1,77 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Download all current v2 directory status documents, then download
|
|
||||||
# the descriptors and extra info documents.
|
|
||||||
|
|
||||||
# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
|
|
||||||
TZ=UTC
|
|
||||||
export TZ
|
|
||||||
|
|
||||||
DIRSERVERS=""
|
|
||||||
DIRSERVERS="$DIRSERVERS 86.59.21.38:80" # tor26
|
|
||||||
DIRSERVERS="$DIRSERVERS 128.31.0.34:9031" # moria1
|
|
||||||
DIRSERVERS="$DIRSERVERS 128.31.0.34:9032" # moria2
|
|
||||||
DIRSERVERS="$DIRSERVERS 194.109.206.212:80" # dizum
|
|
||||||
|
|
||||||
DATEDIR=$(date "+%Y/%m/%d")
|
|
||||||
TIME=$(date "+%Y%m%d-%H%M%S")
|
|
||||||
|
|
||||||
. fetch-all-functions
|
|
||||||
|
|
||||||
statuses=""
|
|
||||||
for dirserver in $DIRSERVERS; do
|
|
||||||
authorities=$(wget -q -O - http://$dirserver/tor/status/all | egrep '^fingerprint ' | awk '{print $2}')
|
|
||||||
if [ "$authorities" == "" ]; then
|
|
||||||
echo "Did not get a list of authorities from $dirserver, going to next" 2>&1
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
dir="status/$DATEDIR"
|
|
||||||
[ -d "$dir" ] || mkdir -p "$dir"
|
|
||||||
|
|
||||||
authprefix="$dir/$TIME-"
|
|
||||||
for fp in $authorities; do
|
|
||||||
wget -q -O "$authprefix$fp" http://$dirserver/tor/status/fp/"$fp"
|
|
||||||
bzip2 "$authprefix$fp"
|
|
||||||
statuses="$statuses $authprefix$fp.bz2"
|
|
||||||
done
|
|
||||||
if [ "$statuses" == "" ]; then
|
|
||||||
echo "Did not get any statuses from $dirserver, going to next" 2>&1
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$statuses" = "" ]; then
|
|
||||||
echo "No statuses available" 2>&1
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
digests=$( for i in ` bzcat $statuses | awk '$1 == "r" {printf "%s=\n", $4}' | sort -u `; do
|
|
||||||
echo $i | \
|
|
||||||
base64-decode | \
|
|
||||||
perl -e 'undef $/; $a=<>; print unpack("H\*", $a),"\n";';
|
|
||||||
done )
|
|
||||||
for digest in $digests; do
|
|
||||||
fetch_digest "$digest" "server-descriptor"
|
|
||||||
done
|
|
@ -1,82 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# function used by fetch-all* to download server descriptors and
|
|
||||||
# extra info documents
|
|
||||||
|
|
||||||
# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
|
|
||||||
|
|
||||||
fetch_digest() {
|
|
||||||
local digest
|
|
||||||
local objecttype
|
|
||||||
local urlpart
|
|
||||||
local pathpart
|
|
||||||
local target
|
|
||||||
local targetdir
|
|
||||||
local dirserver
|
|
||||||
local ei
|
|
||||||
|
|
||||||
digest="$1"
|
|
||||||
objecttype="$2"
|
|
||||||
if [ "$objecttype" = "server-descriptor" ] ; then
|
|
||||||
urlpart="server"
|
|
||||||
pathpart="server-descriptor"
|
|
||||||
elif [ "$objecttype" = "extra-info" ] ; then
|
|
||||||
urlpart="extra"
|
|
||||||
pathpart="extra-info"
|
|
||||||
else
|
|
||||||
echo "Called fetch_digest with illegal objecttype '$objecttype'" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
target=$( echo $digest | sed -e 's#^\(.\)\(.\)#'"$pathpart"'/\1/\2/\1\2#' )
|
|
||||||
targetdir=$( dirname $target )
|
|
||||||
[ -d "$targetdir" ] || mkdir -p "$targetdir"
|
|
||||||
if ! [ -e "$target" ]; then
|
|
||||||
for dirserver in $DIRSERVERS; do
|
|
||||||
wget -q -O "$target" http://$dirserver/tor/$urlpart/d/"$digest" || rm -f "$target"
|
|
||||||
if [ -s "$target" ]; then
|
|
||||||
if egrep '^opt extra-info-digest ' "$target" > /dev/null; then
|
|
||||||
ei=$( egrep '^opt extra-info-digest ' "$target" | awk '{print $3}' | tr 'A-F' 'a-f' )
|
|
||||||
fetch_digest "$ei" "extra-info"
|
|
||||||
elif egrep '^extra-info-digest ' "$target" > /dev/null; then
|
|
||||||
ei=$( egrep '^extra-info-digest ' "$target" | awk '{print $2}' | tr 'A-F' 'a-f' )
|
|
||||||
fetch_digest "$ei" "extra-info"
|
|
||||||
fi
|
|
||||||
break
|
|
||||||
else
|
|
||||||
rm -f "$target"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
#if ! [ -e "$target" ]; then
|
|
||||||
# echo "$objecttype $digest" >> failed
|
|
||||||
#fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -x /usr/bin/base64 ] ; then
|
|
||||||
base64-decode() {
|
|
||||||
/usr/bin/base64 -d
|
|
||||||
}
|
|
||||||
else
|
|
||||||
base64-decode() {
|
|
||||||
perl -MMIME::Base64 -e 'print decode_base64(<>)'
|
|
||||||
}
|
|
||||||
fi
|
|
@ -1,111 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Download all current v3 directory status votes and the consensus document,
|
|
||||||
# then download the descriptors and extra info documents.
|
|
||||||
|
|
||||||
# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
|
|
||||||
TZ=UTC
|
|
||||||
export TZ
|
|
||||||
|
|
||||||
DIRSERVERS=""
|
|
||||||
DIRSERVERS="$DIRSERVERS 86.59.21.38:80" # tor26
|
|
||||||
DIRSERVERS="$DIRSERVERS 128.31.0.34:9031" # moria1
|
|
||||||
DIRSERVERS="$DIRSERVERS 216.224.124.114:9030" # ides
|
|
||||||
DIRSERVERS="$DIRSERVERS 80.190.246.100:80" # gabelmoo
|
|
||||||
#DIRSERVERS="$DIRSERVERS 140.247.60.64:80" # lefkada
|
|
||||||
DIRSERVERS="$DIRSERVERS 194.109.206.212:80" # dizum
|
|
||||||
#DIRSERVERS="$DIRSERVERS 128.31.0.34:9032" # moria2
|
|
||||||
DIRSERVERS="$DIRSERVERS 213.73.91.31:80" # dannenberg
|
|
||||||
DIRSERVERS="$DIRSERVERS 208.83.223.34:443" # urras
|
|
||||||
TIME=$(date "+%Y%m%d-%H%M%S")
|
|
||||||
|
|
||||||
. fetch-all-functions
|
|
||||||
|
|
||||||
consensus=""
|
|
||||||
tmpdir="consensus/tmp"
|
|
||||||
[ -d "$tmpdir" ] || mkdir -p "$tmpdir"
|
|
||||||
for dirserver in $DIRSERVERS; do
|
|
||||||
wget -q -O "$tmpdir/$TIME-consensus" http://$dirserver/tor/status-vote/current/consensus
|
|
||||||
if [ "$?" != 0 ]; then
|
|
||||||
rm -f "$tmpdir/$TIME-consensus"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
freshconsensus="$tmpdir/$TIME-consensus"
|
|
||||||
|
|
||||||
timestamp=$(awk '$1=="valid-after" {printf "%s-%s", $2, $3}' < "$freshconsensus")
|
|
||||||
datedir=$(awk '$1=="valid-after" {printf "%s", $2}' < "$freshconsensus" | tr '-' '/')
|
|
||||||
dir="consensus/$datedir"
|
|
||||||
[ -d "$dir" ] || mkdir -p "$dir"
|
|
||||||
|
|
||||||
|
|
||||||
consensus="$dir/$timestamp-consensus.bz2"
|
|
||||||
if ! [ -e "$consensus" ]; then
|
|
||||||
# the consensus is new, or at least we don't have it yet
|
|
||||||
bzip2 "$freshconsensus"
|
|
||||||
mv "$freshconsensus.bz2" "$consensus"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f "$freshconsensus"
|
|
||||||
echo "Consensus from $timestamp (gotten from $dirserver) already exists!" >&2
|
|
||||||
# maybe there is a newer one on a different authority, so try again.
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$consensus" = "" ]; then
|
|
||||||
echo "No consensus available" 2>&1
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
votes=$(bzcat $consensus | awk '$1 == "vote-digest" {print $2}')
|
|
||||||
for vote in $votes; do
|
|
||||||
for dirserver in $DIRSERVERS; do
|
|
||||||
wget -q -O "$dir/$TIME-vote-$vote" http://$dirserver/tor/status-vote/current/d/$vote
|
|
||||||
if [ "$?" != 0 ]; then
|
|
||||||
rm -f "$dir/$TIME-vote-$vote"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
break
|
|
||||||
done
|
|
||||||
if [ -e "$dir/$TIME-vote-$vote" ]; then
|
|
||||||
voteridentity=$(awk '$1=="fingerprint" {print $2}' < "$dir/$TIME-vote-$vote")
|
|
||||||
if [ -e "$dir/$timestamp-vote-$voteridentity-$vote.bz2" ]; then
|
|
||||||
echo "Vote $vote from $voteridentity already exists!" >&2
|
|
||||||
rm -f "$dir/$TIME-vote-$vote"
|
|
||||||
continue;
|
|
||||||
fi
|
|
||||||
mv "$dir/$TIME-vote-$vote" "$dir/$timestamp-vote-$voteridentity-$vote"
|
|
||||||
bzip2 "$dir/$timestamp-vote-$voteridentity-$vote"
|
|
||||||
else
|
|
||||||
echo "Failed to get vote $vote!" >&2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
digests=$( for i in ` bzcat $consensus | awk '$1 == "r" {printf "%s=\n", $4}' | sort -u `; do
|
|
||||||
echo $i | \
|
|
||||||
base64-decode | \
|
|
||||||
perl -e 'undef $/; $a=<>; print unpack("H\*", $a),"\n";';
|
|
||||||
done )
|
|
||||||
for digest in $digests; do
|
|
||||||
fetch_digest "$digest" "server-descriptor"
|
|
||||||
done
|
|
@ -1,74 +0,0 @@
|
|||||||
#!/usr/bin/perl -w
|
|
||||||
|
|
||||||
# Sort dumped consensuses, statuses, descriptors etc into per-month folders.
|
|
||||||
|
|
||||||
# Copyright (c) 2006, 2007, 2008 Peter Palfrader
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use File::Find;
|
|
||||||
use File::Basename;
|
|
||||||
use File::stat;
|
|
||||||
use Time::Local;
|
|
||||||
|
|
||||||
|
|
||||||
my $cutofftime;
|
|
||||||
|
|
||||||
|
|
||||||
sub wanted() {
|
|
||||||
return unless -f;
|
|
||||||
my $mtime = stat($_)->mtime;
|
|
||||||
return if $mtime >= $cutofftime;
|
|
||||||
|
|
||||||
my (undef,undef,undef,undef,$mon,$year,undef,undef,undef) = gmtime $mtime;
|
|
||||||
|
|
||||||
my $bn = basename $_;
|
|
||||||
my $dn = dirname $_;
|
|
||||||
my @path = split /\//, $dn;
|
|
||||||
$path[0] .= sprintf 's-%4d-%02d', 1900+$year, $mon+1;
|
|
||||||
$dn = join '/', @path;
|
|
||||||
|
|
||||||
if (! -d $dn) {
|
|
||||||
my $p = '.';
|
|
||||||
for my $component (@path) {
|
|
||||||
$p .= '/'.$component;
|
|
||||||
if (! -d $p) {
|
|
||||||
mkdir $p or die ("Cannot mkdir $p: $!\n");
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
print "$_ -> $dn/$bn\n";
|
|
||||||
rename $_, $dn.'/'.$bn or die ("Cannot rename $_ to $dn/$bn: $!\n");
|
|
||||||
};
|
|
||||||
|
|
||||||
my (undef,undef,undef,undef,$mon,$year,undef,undef,undef) = gmtime(time - 5*24*3600);
|
|
||||||
$cutofftime = timegm(0,0,0,1,$mon,$year);
|
|
||||||
find( {
|
|
||||||
wanted => \&wanted,
|
|
||||||
no_chdir => 1
|
|
||||||
},
|
|
||||||
'server-descriptor');
|
|
||||||
|
|
||||||
find( {
|
|
||||||
wanted => \&wanted,
|
|
||||||
no_chdir => 1
|
|
||||||
},
|
|
||||||
'extra-info');
|
|
@ -1,127 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Tar up dumped consensuses, statuses, descriptors etc from per-month folders
|
|
||||||
# into per-month tarballs.
|
|
||||||
|
|
||||||
# Copyright (c) 2006, 2007, 2008 Peter Palfrader
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
set -u
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
echo "Usage: $0 <year> <month>" >&2
|
|
||||||
echo " $0 last (does last month)" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -z "${1:-}" ]; then
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "last" ]; then
|
|
||||||
year=`date --date="last month" +'%Y'`
|
|
||||||
month=`date --date="last month" +'%m'`
|
|
||||||
elif [ -z "${2:-}" ]; then
|
|
||||||
usage
|
|
||||||
else
|
|
||||||
year="$1"
|
|
||||||
month="$2"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$year" -lt 2000 ] || [ "$year" -gt 2020 ] ||
|
|
||||||
[ "$month" -lt 1 ] || [ "$month" -gt 12 ] ||
|
|
||||||
[ "`echo -n $month | wc -c`" != 2 ]; then
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
this_year=`date --utc +'%Y'`
|
|
||||||
this_month=`date --utc +'%m'`
|
|
||||||
|
|
||||||
if [ "`date -d $this_year-$this_month-01 +%s`" -le "`date -d $year-$month-01 +%s`" ]; then
|
|
||||||
echo "Date in the future or current month?" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for file in \
|
|
||||||
"extra-infos-$year-$month.tar.bz2" \
|
|
||||||
"server-descriptors-$year-$month.tar.bz2" \
|
|
||||||
"consensuses-$year-$month.tar.bz2" \
|
|
||||||
"statuses-$year-$month.tar.bz2" \
|
|
||||||
; do
|
|
||||||
if [ -e "$file" ]; then
|
|
||||||
echo "$file already exists" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for dir in \
|
|
||||||
"extra-infos-$year-$month" \
|
|
||||||
"server-descriptors-$year-$month" \
|
|
||||||
"consensus/$year/$month" \
|
|
||||||
"status/$year/$month" \
|
|
||||||
; do
|
|
||||||
if ! [ -d "$dir" ]; then
|
|
||||||
echo "$dir not found" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for dir in \
|
|
||||||
"consensuses-$year-$month" \
|
|
||||||
"statuses-$year-$month" \
|
|
||||||
; do
|
|
||||||
if [ -e "$dir" ]; then
|
|
||||||
echo "$dir already exists" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for kind in consensus status; do
|
|
||||||
mv "$kind"/$year/$month "$kind"es-$year-$month
|
|
||||||
find "$kind"es-$year-$month -type f -name '*.bz2' -print0 | xargs -0 bunzip2 -v
|
|
||||||
tar cjvf "$kind"es-$year-$month.tar.bz2 "$kind"es-$year-$month
|
|
||||||
rm -rf "$kind"es-$year-$month
|
|
||||||
done
|
|
||||||
|
|
||||||
for kind in extra-infos server-descriptors; do
|
|
||||||
tar cjvf "$kind"-$year-$month.tar.bz2 "$kind"-$year-$month
|
|
||||||
rm -rf "$kind"-$year-$month
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[ -d Archive ] || mkdir Archive
|
|
||||||
|
|
||||||
for kind in consensus status; do
|
|
||||||
t="$kind"es-$year-$month.tar.bz2
|
|
||||||
! [ -e Archive/"$t" ] && mv "$t" Archive/"$t"
|
|
||||||
done
|
|
||||||
|
|
||||||
for kind in extra-infos server-descriptors; do
|
|
||||||
t="$kind"-$year-$month.tar.bz2
|
|
||||||
! [ -e Archive/"$t" ] && mv "$t" Archive/"$t"
|
|
||||||
done
|
|
0
contrib/rc.subr → contrib/dist/rc.subr
vendored
0
contrib/rc.subr → contrib/dist/rc.subr
vendored
@ -1,79 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
if test "$1" = "" ; then
|
|
||||||
echo "I need a package as an argument."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
PACKAGEFILE=$1
|
|
||||||
|
|
||||||
if test ! -f "$PACKAGEFILE" ; then
|
|
||||||
echo "$PACKAGEFILE is not a file."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
DIGESTNAME=sha256
|
|
||||||
DIGESTOUTPUT=`gpg --print-md $DIGESTNAME $PACKAGEFILE`
|
|
||||||
|
|
||||||
RAWDIGEST=`gpg --print-md $DIGESTNAME $PACKAGEFILE | sed -e 's/^[^ ]*: //' `
|
|
||||||
|
|
||||||
# These regexes are a little fragile, but I think they work for us.
|
|
||||||
VERSION=`echo $PACKAGEFILE | sed -e 's/^[a-z\-]*//' -e 's/\.[\.a-z]*$//' `
|
|
||||||
PACKAGE=`echo $PACKAGEFILE | sed -e 's/-[0-9].*//'`
|
|
||||||
SIGFILE_UNSIGNED="$PACKAGE-$VERSION-signature"
|
|
||||||
SIGNATUREFILE="$SIGFILE_UNSIGNED.asc"
|
|
||||||
|
|
||||||
cat >$SIGFILE_UNSIGNED <<EOF
|
|
||||||
This is the signature file for "$PACKAGEFILE",
|
|
||||||
which contains version "$VERSION" of "$PACKAGE".
|
|
||||||
|
|
||||||
Here's how to check this signature.
|
|
||||||
|
|
||||||
1) Make sure that this is really a signature file, and not a forgery,
|
|
||||||
with:
|
|
||||||
|
|
||||||
"gpg --verify $SIGNATUREFILE"
|
|
||||||
|
|
||||||
The key should be one of the keys that signs the Tor release; the
|
|
||||||
official Tor website has more information on those.
|
|
||||||
|
|
||||||
If this step fails, then either you are missing the correct key, or
|
|
||||||
this signature file was not really signed by a Tor packager.
|
|
||||||
Beware!
|
|
||||||
|
|
||||||
2) Make sure that the package you wanted is indeed "$PACKAGE", and that
|
|
||||||
its version you wanted is indeed "$VERSION". If you wanted a
|
|
||||||
different package, or a different version, this signature file is
|
|
||||||
not the right one!
|
|
||||||
|
|
||||||
3) Now that you're sure you have the right signature file, make sure
|
|
||||||
that you got the right package. Check its $DIGESTNAME digest with
|
|
||||||
|
|
||||||
"gpg --print-md $DIGESTNAME $PACKAGEFILE"
|
|
||||||
|
|
||||||
The output should match this, exactly:
|
|
||||||
|
|
||||||
$DIGESTOUTPUT
|
|
||||||
|
|
||||||
Make sure that every part of the output matches: don't just check the
|
|
||||||
first few characters. If the digest does not match, you do not have
|
|
||||||
the right package file. It could even be a forgery.
|
|
||||||
|
|
||||||
Frequently asked questions:
|
|
||||||
|
|
||||||
Q: Why not just sign the package file, like you used to do?
|
|
||||||
A: GPG signatures authenticate file contents, but not file names. If
|
|
||||||
somebody gave you a renamed file with a matching renamed signature
|
|
||||||
file, the signature would still be given as "valid".
|
|
||||||
|
|
||||||
--
|
|
||||||
FILENAME: $PACKAGEFILE
|
|
||||||
PACKAGE: $PACKAGE
|
|
||||||
VERSION: $VERSION
|
|
||||||
DIGESTALG: $DIGESTNAME
|
|
||||||
DIGEST: $RAWDIGEST
|
|
||||||
EOF
|
|
||||||
|
|
||||||
gpg --clearsign $SIGFILE_UNSIGNED
|
|
169
contrib/mdd.py
169
contrib/mdd.py
@ -1,169 +0,0 @@
|
|||||||
#!/usr/bin/env python2.3
|
|
||||||
|
|
||||||
import re, sys
|
|
||||||
import textwrap
|
|
||||||
|
|
||||||
files = sys.argv[1:]
|
|
||||||
funcDeclaredIn = {}
|
|
||||||
fileDeclares = {}
|
|
||||||
functionCalls = {}
|
|
||||||
funcCalledByFile = {}
|
|
||||||
funcCalledByFunc = {}
|
|
||||||
|
|
||||||
cpp_re = re.compile(r'//.*$')
|
|
||||||
c_re = re.compile(r'/[*]+(?:[^*]+|[*]+[^/*])*[*]+/', re.M|re.S)
|
|
||||||
|
|
||||||
for fname in files:
|
|
||||||
f = open(fname, 'r')
|
|
||||||
curFunc = "???"
|
|
||||||
functionCalls.setdefault(curFunc,{})
|
|
||||||
lineno = 0
|
|
||||||
body = f.read()
|
|
||||||
body = cpp_re.sub(" ",body)
|
|
||||||
body = c_re.sub(" ",body)
|
|
||||||
#if fname == 'dns.c': print body
|
|
||||||
for line in body.split("\n"):
|
|
||||||
lineno += 1
|
|
||||||
m = re.match(r'^[^\s/].*\s(\w+)\([^;]*$', line)
|
|
||||||
if m:
|
|
||||||
#print line, "->", m.group(1)
|
|
||||||
curFunc = m.group(1)
|
|
||||||
if curFunc[0] == '_': curFunc = curFunc[1:]
|
|
||||||
functionCalls.setdefault(curFunc,{})
|
|
||||||
funcDeclaredIn[m.group(1)] = fname
|
|
||||||
fileDeclares.setdefault(fname, {})[m.group(1)] = 1
|
|
||||||
continue
|
|
||||||
m = re.match(r'^(\w+)\([^;]', line)
|
|
||||||
if m:
|
|
||||||
#print line, "->", m.group(1)
|
|
||||||
curFunc = m.group(1)
|
|
||||||
if curFunc[0] == '_': curFunc = curFunc[1:]
|
|
||||||
functionCalls.setdefault(curFunc,{})
|
|
||||||
funcDeclaredIn[m.group(1)] = fname
|
|
||||||
fileDeclares.setdefault(fname, {})[m.group(1)] = 1
|
|
||||||
continue
|
|
||||||
while line:
|
|
||||||
m = re.search(r'(\w+)\(', line)
|
|
||||||
if not m: break
|
|
||||||
#print fname, line, curFunc, "->", m.group(1)
|
|
||||||
fn = m.group(1)
|
|
||||||
if fn[0] == '_':
|
|
||||||
fn = fn[1:]
|
|
||||||
functionCalls[curFunc][m.group(1)] = 1
|
|
||||||
#if curFunc == "???":
|
|
||||||
# print ">>!!!!! at %s:%s"%(fname,lineno)
|
|
||||||
funcCalledByFunc.setdefault(m.group(1), {})[curFunc]=1
|
|
||||||
funcCalledByFile.setdefault(m.group(1), {})[fname]=1
|
|
||||||
line = line[m.end():]
|
|
||||||
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
fileUsers = {}
|
|
||||||
fileUses = {}
|
|
||||||
|
|
||||||
for fname in files:
|
|
||||||
print "%s:"%fname
|
|
||||||
users = {}
|
|
||||||
for func in fileDeclares[fname]:
|
|
||||||
cb = funcCalledByFile.get(func,{}).keys()
|
|
||||||
for f in cb: users[f] = 1
|
|
||||||
#print "users[%s] = %s"%(f,users[f])
|
|
||||||
users = users.keys()
|
|
||||||
users.sort()
|
|
||||||
fileUsers[fname] = users
|
|
||||||
for user in users:
|
|
||||||
fileUses.setdefault(user,[]).append(fname)
|
|
||||||
if user == fname: continue
|
|
||||||
print " from %s:"%user
|
|
||||||
for func in fileDeclares[fname]:
|
|
||||||
if funcCalledByFile.get(func,{}).get(user,0):
|
|
||||||
print " %s()"%func
|
|
||||||
|
|
||||||
def wrap(s, pre):
|
|
||||||
return textwrap.fill(s,
|
|
||||||
width=77, initial_indent=pre,
|
|
||||||
subsequent_indent=" "*len(pre))
|
|
||||||
|
|
||||||
for fname in files:
|
|
||||||
print
|
|
||||||
print "===== %s"%fname
|
|
||||||
print wrap(" ".join(fileUses[fname]),
|
|
||||||
" Calls: ")
|
|
||||||
print wrap(" ".join(fileUsers[fname]),
|
|
||||||
" Called by: ")
|
|
||||||
|
|
||||||
print "=============================="
|
|
||||||
|
|
||||||
funcnames = functionCalls.keys()
|
|
||||||
funcnames.sort()
|
|
||||||
|
|
||||||
if 1:
|
|
||||||
for func in funcnames:
|
|
||||||
print "===== %s"%func
|
|
||||||
callers = [c for c in funcCalledByFunc.get(func,{}).keys()
|
|
||||||
if c != "???"]
|
|
||||||
callers.sort()
|
|
||||||
called = [c for c in functionCalls[func].keys() if c != "???" and
|
|
||||||
c in funcnames]
|
|
||||||
called.sort()
|
|
||||||
print wrap(" ".join(callers),
|
|
||||||
" Called by:")
|
|
||||||
print wrap(" ".join(called),
|
|
||||||
" Calls:")
|
|
||||||
|
|
||||||
# simple topological sort.
|
|
||||||
functionDepth = {}
|
|
||||||
while 1:
|
|
||||||
BIG = 1000000
|
|
||||||
any = 0
|
|
||||||
for func in funcnames:
|
|
||||||
if functionDepth.has_key(func):
|
|
||||||
continue
|
|
||||||
called = [c for c in functionCalls[func] if c != func and
|
|
||||||
functionCalls.has_key(c)]
|
|
||||||
if len(called) == 0:
|
|
||||||
functionDepth[func] = 0
|
|
||||||
#print "Depth(%s)=%s"%(func,0)
|
|
||||||
any = 1
|
|
||||||
continue
|
|
||||||
calledDepths = [ functionDepth.get(c,BIG) for c in called ]
|
|
||||||
if max(calledDepths) < BIG:
|
|
||||||
d = functionDepth[func] = max(calledDepths)+1
|
|
||||||
#print "Depth(%s)=%s"%(func,d)
|
|
||||||
any = 1
|
|
||||||
continue
|
|
||||||
if not any:
|
|
||||||
break
|
|
||||||
|
|
||||||
# compute lexical closure.
|
|
||||||
cycCalls = {}
|
|
||||||
for func in funcnames:
|
|
||||||
if not functionDepth.has_key(func):
|
|
||||||
calls = [ c for c in functionCalls[func] if c != func and
|
|
||||||
functionCalls.has_key(c) and not functionDepth.has_key(c)]
|
|
||||||
cycCalls[func] = d = {}
|
|
||||||
for c in calls:
|
|
||||||
d[c]=1
|
|
||||||
|
|
||||||
cycNames = cycCalls.keys()
|
|
||||||
while 1:
|
|
||||||
any = 0
|
|
||||||
for func in cycNames:
|
|
||||||
L = len(cycCalls[func])
|
|
||||||
for called in cycCalls[func].keys():
|
|
||||||
cycCalls[func].update(cycCalls[called])
|
|
||||||
if L != len(cycCalls[func]):
|
|
||||||
any = 1
|
|
||||||
if not any:
|
|
||||||
break
|
|
||||||
|
|
||||||
depthList = [ (v,k) for k,v in functionDepth.items() ]
|
|
||||||
depthList.sort()
|
|
||||||
cycList = [ (len(v),k) for k,v in cycCalls.items() ]
|
|
||||||
cycList.sort()
|
|
||||||
for depth,name in depthList:
|
|
||||||
print "Depth[%s]=%s"%(name,depth)
|
|
||||||
for bredth,name in cycList:
|
|
||||||
print "Width[%s]=%s"%(name,bredth)
|
|
||||||
|
|
||||||
print "Sorted %s / %s"%(len(functionDepth),len(funcnames))
|
|
@ -1,74 +0,0 @@
|
|||||||
!include "MUI.nsh"
|
|
||||||
!include "LogicLib.nsh"
|
|
||||||
!include "FileFunc.nsh"
|
|
||||||
|
|
||||||
!define VERSION "0.2.1.13"
|
|
||||||
!define INSTALLER "TorNetInstaller.exe"
|
|
||||||
!define WEBSITE "https://www.torproject.org/"
|
|
||||||
!define LICENSE "LICENSE"
|
|
||||||
|
|
||||||
SetCompressor /SOLID BZIP2
|
|
||||||
RequestExecutionLevel user
|
|
||||||
OutFile ${INSTALLER}
|
|
||||||
InstallDir "$TEMP\TorInstTmp"
|
|
||||||
SetOverWrite on
|
|
||||||
Name "Tor Network Installer"
|
|
||||||
Caption "Tor Network Installer"
|
|
||||||
BrandingText "Tor Network Installer"
|
|
||||||
CRCCheck on
|
|
||||||
XPStyle on
|
|
||||||
ShowInstDetails hide
|
|
||||||
VIProductVersion "${VERSION}"
|
|
||||||
VIAddVersionKey "ProductName" "Tor"
|
|
||||||
VIAddVersionKey "Comments" "${WEBSITE}"
|
|
||||||
VIAddVersionKey "LegalTrademarks" "Three line BSD"
|
|
||||||
VIAddVersionKey "LegalCopyright" "©2004-2011, Roger Dingledine, Nick Mathewson, The Tor Project, Inc."
|
|
||||||
VIAddVersionKey "FileDescription" "Tor is an implementation of Onion Routing. You can read more at ${WEBSITE}"
|
|
||||||
VIAddVersionKey "FileVersion" "${VERSION}"
|
|
||||||
|
|
||||||
!define MUI_ICON "torinst32.ico"
|
|
||||||
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
|
|
||||||
!insertmacro MUI_PAGE_INSTFILES
|
|
||||||
!insertmacro MUI_LANGUAGE "English"
|
|
||||||
|
|
||||||
Section "Tor" Tor
|
|
||||||
SectionIn RO
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
Call ExtractPackages
|
|
||||||
Call RunInstallers
|
|
||||||
Call LaunchVidalia
|
|
||||||
Call CleanUpTemp
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Function ExtractPackages
|
|
||||||
File "license.msi"
|
|
||||||
File "thandy.msi"
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function RunInstallers
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\license.msi" /qn'
|
|
||||||
ExecWait 'msiexec /i "$INSTDIR\thandy.msi" NOSC=1 /qn'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Tor Updates" /bundleinfo/tor/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Polipo Updates" /bundleinfo/polipo/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\TorButton Updates" /bundleinfo/torbutton/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update "--repo=$LOCALAPPDATA\Thandy\Vidalia Updates" /bundleinfo/vidalia/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Tor Updates" /bundleinfo/tor/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Polipo Updates" /bundleinfo/polipo/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\TorButton Updates" /bundleinfo/torbutton/win32/'
|
|
||||||
ExecWait '"$LOCALAPPDATA\Programs\Thandy\thandy.exe" update --install "--repo=$LOCALAPPDATA\Thandy\Vidalia Updates" /bundleinfo/vidalia/win32/'
|
|
||||||
ExpandEnvStrings $0 %COMSPEC%
|
|
||||||
Exec '"$0" /C "$INSTDIR\tbcheck.bat"'
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function LaunchVidalia
|
|
||||||
SetOutPath "$LOCALAPPDATA\Programs\Vidalia"
|
|
||||||
Exec 'vidalia.exe -loglevel info -logfile log.txt'
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function CleanUpTemp
|
|
||||||
ExecWait '"del" "$INSTDIR\license.msi"'
|
|
||||||
ExecWait '"del" "$INSTDIR\thandy.msi"'
|
|
||||||
SetOutPath $TEMP
|
|
||||||
RMDir /r $TEMP\TorInstTmp
|
|
||||||
FunctionEnd
|
|
||||||
|
|
@ -1,90 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
#
|
|
||||||
# Script to package a Tor installer on win32. This script assumes that
|
|
||||||
# you have already built Tor, that you are running cygwin, and that your
|
|
||||||
# environment is basically exactly the same as Nick's.
|
|
||||||
|
|
||||||
if ! [ -d Win32Build ] || ! [ -d contrib ]; then
|
|
||||||
echo "No Win32Build and/or no contrib directory here. Are we in the right place?" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -rf win_tmp
|
|
||||||
mkdir win_tmp
|
|
||||||
mkdir win_tmp/bin
|
|
||||||
mkdir win_tmp/contrib
|
|
||||||
mkdir win_tmp/doc
|
|
||||||
mkdir win_tmp/doc/website
|
|
||||||
mkdir win_tmp/doc/design-paper
|
|
||||||
mkdir win_tmp/doc/contrib
|
|
||||||
mkdir win_tmp/src
|
|
||||||
mkdir win_tmp/src/config
|
|
||||||
mkdir win_tmp/tmp
|
|
||||||
|
|
||||||
cp Win32Build/vc7/Tor/Debug/Tor.exe win_tmp/bin/tor.exe
|
|
||||||
cp Win32Build/vc7/tor_resolve/Debug/tor_resolve.exe win_tmp/bin
|
|
||||||
cp ../c-windows-system32/libeay32.dll win_tmp/bin
|
|
||||||
cp ../c-windows-system32/ssleay32.dll win_tmp/bin
|
|
||||||
|
|
||||||
man2html doc/tor.1.in > win_tmp/tmp/tor-reference.html
|
|
||||||
man2html doc/tor-resolve.1 > win_tmp/tmp/tor-resolve.html
|
|
||||||
|
|
||||||
clean_newlines() {
|
|
||||||
perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg;' $1 >$2
|
|
||||||
}
|
|
||||||
|
|
||||||
clean_localstatedir() {
|
|
||||||
perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg; s{\@LOCALSTATEDIR\@/(lib|log)/tor/}{C:\\Documents and Settings\\Application Data\\Tor\\}' $1 >$2
|
|
||||||
}
|
|
||||||
|
|
||||||
for fn in \
|
|
||||||
doc/HACKING \
|
|
||||||
doc/control-spec.txt \
|
|
||||||
doc/dir-spec.txt \
|
|
||||||
doc/rend-spec.txt \
|
|
||||||
doc/socks-extensions.txt \
|
|
||||||
doc/tor-spec.txt \
|
|
||||||
doc/version-spec.txt \
|
|
||||||
\
|
|
||||||
doc/website/* \
|
|
||||||
; do
|
|
||||||
clean_newlines "$fn" win_tmp/"$fn"
|
|
||||||
done
|
|
||||||
mmv win_tmp/doc/website/"*.html.*" win_tmp/doc/website/"#1.#2.html"
|
|
||||||
|
|
||||||
cp doc/design-paper/tor-design.pdf win_tmp/doc/design-paper/tor-design.pdf
|
|
||||||
|
|
||||||
for fn in tor-reference.html tor-resolve.html; do \
|
|
||||||
clean_newlines win_tmp/tmp/$fn win_tmp/doc/$fn
|
|
||||||
done
|
|
||||||
|
|
||||||
for fn in README AUTHORS ChangeLog LICENSE; do \
|
|
||||||
clean_newlines $fn win_tmp/$fn
|
|
||||||
done
|
|
||||||
|
|
||||||
clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
|
|
||||||
|
|
||||||
cp contrib/tor.nsi.in win_tmp/contrib/tor.nsi
|
|
||||||
(
|
|
||||||
echo '/WEBSITE-FILES-HERE/'
|
|
||||||
echo 'a' # append
|
|
||||||
for fn in win_tmp/doc/website/*; do
|
|
||||||
echo -n 'File "..\doc\website\'
|
|
||||||
echo -n "`basename $fn`"
|
|
||||||
echo '"'
|
|
||||||
done
|
|
||||||
echo "." # end input
|
|
||||||
echo "w" # write
|
|
||||||
echo "q" # quit
|
|
||||||
) | ed win_tmp/contrib/tor.nsi
|
|
||||||
|
|
||||||
cd win_tmp/contrib
|
|
||||||
|
|
||||||
echo "Now run"
|
|
||||||
echo ' t:'
|
|
||||||
echo ' cd \tor\win_tmp\contrib'
|
|
||||||
echo ' c:\programme\nsis\makensis tor.nsi'
|
|
||||||
echo ' move tor-*.exe ../../..'
|
|
@ -1,57 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Script to package a Tor installer on win32. This script assumes that
|
|
||||||
# you have already built Tor, that you are running cygwin, and that your
|
|
||||||
# environment is basically exactly the same as Nick's.
|
|
||||||
|
|
||||||
# This file is obsolete.
|
|
||||||
|
|
||||||
rm -rf win_tmp
|
|
||||||
mkdir win_tmp
|
|
||||||
mkdir win_tmp/bin
|
|
||||||
mkdir win_tmp/contrib
|
|
||||||
mkdir win_tmp/doc
|
|
||||||
mkdir win_tmp/doc/design-paper
|
|
||||||
mkdir win_tmp/doc/contrib
|
|
||||||
mkdir win_tmp/src
|
|
||||||
mkdir win_tmp/src/config
|
|
||||||
mkdir win_tmp/tmp
|
|
||||||
|
|
||||||
cp Win32Build/vc7/Tor/Debug/Tor.exe win_tmp/bin/tor.exe
|
|
||||||
cp Win32Build/vc7/tor_resolve/Debug/tor_resolve.exe win_tmp/bin
|
|
||||||
cp c:/windows/system32/libeay32.dll win_tmp/bin
|
|
||||||
cp c:/windows/system32/ssleay32.dll win_tmp/bin
|
|
||||||
|
|
||||||
man2html doc/tor.1.in > win_tmp/tmp/tor-reference.html
|
|
||||||
man2html doc/tor-resolve.1 > win_tmp/tmp/tor-resolve.html
|
|
||||||
|
|
||||||
clean_newlines() {
|
|
||||||
perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg;' $1 >$2
|
|
||||||
}
|
|
||||||
|
|
||||||
clean_localstatedir() {
|
|
||||||
perl -pe 's/^\n$/\r\n/mg; s/([^\r])\n$/\1\r\n/mg; s{\@LOCALSTATEDIR\@/(lib|log)/tor/}{C:\\Documents and Settings\\Application Data\\Tor\\}' $1 >$2
|
|
||||||
}
|
|
||||||
|
|
||||||
for fn in tor-spec.txt HACKING rend-spec.txt control-spec.txt \
|
|
||||||
tor-doc.html tor-doc.css version-spec.txt; do
|
|
||||||
clean_newlines doc/$fn win_tmp/doc/$fn
|
|
||||||
done
|
|
||||||
|
|
||||||
cp doc/design-paper/tor-design.pdf win_tmp/doc/design-paper/tor-design.pdf
|
|
||||||
|
|
||||||
for fn in tor-reference.html tor-resolve.html; do \
|
|
||||||
clean_newlines win_tmp/tmp/$fn win_tmp/doc/$fn
|
|
||||||
done
|
|
||||||
|
|
||||||
for fn in README AUTHORS ChangeLog LICENSE; do \
|
|
||||||
clean_newlines $fn win_tmp/$fn
|
|
||||||
done
|
|
||||||
|
|
||||||
clean_localstatedir src/config/torrc.sample.in win_tmp/src/config/torrc.sample
|
|
||||||
|
|
||||||
cp contrib/tor.nsi win_tmp/contrib
|
|
||||||
|
|
||||||
cd win_tmp/contrib
|
|
||||||
makensis tor.nsi
|
|
||||||
mv tor-*.exe ../..
|
|
@ -1,100 +0,0 @@
|
|||||||
PREFIX = Polipo
|
|
||||||
BINDIR = $(PREFIX)\bin
|
|
||||||
MANDIR = $(PREFIX)\man
|
|
||||||
INFODIR = $(PREFIX)\info
|
|
||||||
LOCAL_ROOT = $(PREFIX)
|
|
||||||
DISK_CACHE_ROOT = $(PREFIX)\cache
|
|
||||||
|
|
||||||
# To compile with Unix CC:
|
|
||||||
|
|
||||||
# CDEBUGFLAGS=-O
|
|
||||||
|
|
||||||
# To compile with GCC:
|
|
||||||
|
|
||||||
# CC = gcc
|
|
||||||
# CDEBUGFLAGS = -Os -g -Wall -std=gnu99
|
|
||||||
CDEBUGFLAGS = -Os -g -Wall
|
|
||||||
# CDEBUGFLAGS = -Os -Wall
|
|
||||||
# CDEBUGFLAGS = -g -Wall
|
|
||||||
|
|
||||||
# To compile on a pure POSIX system:
|
|
||||||
|
|
||||||
# CC = c89
|
|
||||||
# CC = c99
|
|
||||||
# CDEBUGFLAGS=-O
|
|
||||||
|
|
||||||
# To compile with icc 7, you need -restrict. (Their bug.)
|
|
||||||
|
|
||||||
# CC=icc
|
|
||||||
# CDEBUGFLAGS = -O -restrict
|
|
||||||
|
|
||||||
# On System V (Solaris, HP/UX) you need the following:
|
|
||||||
|
|
||||||
# PLATFORM_DEFINES = -DSVR4
|
|
||||||
|
|
||||||
# On Solaris, you need the following:
|
|
||||||
|
|
||||||
# LDLIBS = -lsocket -lnsl -lresolv
|
|
||||||
|
|
||||||
# On mingw, you need
|
|
||||||
|
|
||||||
EXE=.exe
|
|
||||||
LDLIBS = -lwsock32 -lregex
|
|
||||||
|
|
||||||
FILE_DEFINES = -DHAVE_REGEX
|
|
||||||
|
|
||||||
# You may optionally also add any of the following to DEFINES:
|
|
||||||
#
|
|
||||||
# -DNO_DISK_CACHE to compile out the on-disk cache and local web server;
|
|
||||||
# -DNO_IPv6 to avoid using the RFC 3493 API and stick to stock
|
|
||||||
# Berkeley sockets;
|
|
||||||
# -DHAVE_IPv6 to force the use of the RFC 3493 API on systems other
|
|
||||||
# than GNU/Linux and BSD (let me know if it works);
|
|
||||||
# -DNO_FANCY_RESOLVER to compile out the asynchronous name resolution
|
|
||||||
# code;
|
|
||||||
# -DNO_STANDARD_RESOLVER to compile out the code that falls back to
|
|
||||||
# gethostbyname/getaddrinfo when DNS requests fail;
|
|
||||||
# -DNO_TUNNEL to compile out the code that handles CONNECT requests;
|
|
||||||
# -DNO_SOCKS to compile out the SOCKS gateway code.
|
|
||||||
# -DNO_FORBIDDEN to compile out the all of the forbidden URL code
|
|
||||||
# -DNO_REDIRECTOR to compile out the Squid-style redirector code
|
|
||||||
# -DNO_SYSLOG to compile out logging to syslog
|
|
||||||
|
|
||||||
DEFINES = $(FILE_DEFINES) $(PLATFORM_DEFINES)
|
|
||||||
|
|
||||||
CFLAGS = $(MD5INCLUDES) $(CDEBUGFLAGS) $(DEFINES) $(EXTRA_DEFINES)
|
|
||||||
|
|
||||||
SRCS = util.c event.c io.c chunk.c atom.c object.c log.c diskcache.c main.c \
|
|
||||||
config.c local.c http.c client.c server.c auth.c tunnel.c \
|
|
||||||
http_parse.c parse_time.c dns.c forbidden.c \
|
|
||||||
md5import.c md5.c ftsimport.c fts_compat.c socks.c mingw.c
|
|
||||||
|
|
||||||
OBJS = util.o event.o io.o chunk.o atom.o object.o log.o diskcache.o main.o \
|
|
||||||
config.o local.o http.o client.o server.o auth.o tunnel.o \
|
|
||||||
http_parse.o parse_time.o dns.o forbidden.o \
|
|
||||||
md5import.o ftsimport.o socks.o mingw.o
|
|
||||||
|
|
||||||
polipo$(EXE): $(OBJS)
|
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) -o polipo$(EXE) $(OBJS) $(MD5LIBS) $(LDLIBS)
|
|
||||||
|
|
||||||
ftsimport.o: ftsimport.c fts_compat.c
|
|
||||||
|
|
||||||
md5import.o: md5import.c md5.c
|
|
||||||
|
|
||||||
.PHONY: all install install.binary install.man
|
|
||||||
|
|
||||||
all: polipo$(EXE) polipo.info html/index.html localindex.html
|
|
||||||
|
|
||||||
TAGS: $(SRCS)
|
|
||||||
etags $(SRCS)
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
|
|
||||||
clean:
|
|
||||||
-rm -f polipo$(EXE) *.o *~ core TAGS gmon.out
|
|
||||||
-rm -f polipo.cp polipo.fn polipo.log polipo.vr
|
|
||||||
-rm -f polipo.cps polipo.info* polipo.pg polipo.toc polipo.vrs
|
|
||||||
-rm -f polipo.aux polipo.dvi polipo.ky polipo.ps polipo.tp
|
|
||||||
-rm -f polipo.dvi polipo.ps polipo.ps.gz polipo.pdf polipo.html
|
|
||||||
-rm -rf ./html/
|
|
||||||
-rm -f polipo.man.html
|
|
@ -1,47 +0,0 @@
|
|||||||
Copyright 2007-2008, Andrew Lewman
|
|
||||||
Copyright 2009-2011, The Tor Project
|
|
||||||
|
|
||||||
----------------
|
|
||||||
General Comments
|
|
||||||
----------------
|
|
||||||
|
|
||||||
These are some hacks for making polipo work and install a package native
|
|
||||||
to Windows.
|
|
||||||
|
|
||||||
They need some work before they can be committed upstream:
|
|
||||||
- Change the Makefile so it has a specific build such as "make
|
|
||||||
dist-win32"
|
|
||||||
- Configure the options for tor in polipo config, just leave them
|
|
||||||
commented out for easy activation.
|
|
||||||
- Work out better polipo config options for Tor.
|
|
||||||
|
|
||||||
As always, I'm happy to accept patches.
|
|
||||||
|
|
||||||
--------------------------
|
|
||||||
Pre-requisites for Windows
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
Polipo for Win32 requires the mingw gnu regex library and dlls at
|
|
||||||
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=73286&release_id=140957
|
|
||||||
|
|
||||||
You'll need to download the -bin and -dev tarballs. And extract them
|
|
||||||
into your MinGW directory.
|
|
||||||
|
|
||||||
Instructions for building polipo under mingw32 for Windows:
|
|
||||||
1) Copy Makefile.mingw over Makefile.
|
|
||||||
2) Run 'make'.
|
|
||||||
|
|
||||||
You should have a polipo.exe in the current directory.
|
|
||||||
|
|
||||||
-------------------------------------------
|
|
||||||
Creating an installation package in Windows
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
If you want to build an installer using the Nullsoft Installer, install
|
|
||||||
the NSI Compiler. In Windows Explorer, navigate to the directory in
|
|
||||||
which you placed polipo-mingw.nsi. Right click on polipo-mingw.nsi and
|
|
||||||
choose Compile NSIS Script. You'll then create a polipo installer.
|
|
||||||
|
|
||||||
The Polipo NSI installer assumes libgnurx-0.dll is in the same directory as polipo.exe.
|
|
||||||
You'll need to copy libgnurx-0.dll into "./" in order to make the
|
|
||||||
installation package.
|
|
@ -1,172 +0,0 @@
|
|||||||
;polipo-mingw.nsi - A basic win32 installer for Polipo
|
|
||||||
; Originally written by J Doe.
|
|
||||||
; Modified by Andrew Lewman
|
|
||||||
; This is licensed under a Modified BSD license.
|
|
||||||
;-----------------------------------------
|
|
||||||
;
|
|
||||||
!include "MUI.nsh"
|
|
||||||
|
|
||||||
!define VERSION "1.0.4.0-forbidden-1"
|
|
||||||
!define INSTALLER "polipo-${VERSION}-win32.exe"
|
|
||||||
!define WEBSITE "http://www.pps.jussieu.fr/~jch/software/polipo/"
|
|
||||||
|
|
||||||
!define LICENSE "COPYING"
|
|
||||||
;BIN is where it expects to find polipo.exe
|
|
||||||
!define BIN "."
|
|
||||||
|
|
||||||
SetCompressor lzma
|
|
||||||
OutFile ${INSTALLER}
|
|
||||||
InstallDir $PROGRAMFILES\Polipo
|
|
||||||
SetOverWrite ifnewer
|
|
||||||
|
|
||||||
Name "Polipo"
|
|
||||||
Caption "Polipo ${VERSION} Setup"
|
|
||||||
BrandingText "A Caching Web Proxy"
|
|
||||||
CRCCheck on
|
|
||||||
XPStyle on
|
|
||||||
VIProductVersion "${VERSION}"
|
|
||||||
VIAddVersionKey "ProductName" "Polipo: A caching web proxy"
|
|
||||||
VIAddVersionKey "Comments" "http://www.pps.jussieu.fr/~jch/software/polipo/"
|
|
||||||
VIAddVersionKey "LegalTrademarks" "See COPYING"
|
|
||||||
VIAddVersionKey "LegalCopyright" "©2008, Juliusz Chroboczek"
|
|
||||||
VIAddVersionKey "FileDescription" "Polipo is a caching web proxy."
|
|
||||||
VIAddVersionKey "FileVersion" "${VERSION}"
|
|
||||||
|
|
||||||
!define MUI_WELCOMEPAGE_TITLE "Welcome to the Polipo ${VERSION} Setup Wizard"
|
|
||||||
!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Polipo ${VERSION}.\r\n\r\nIf you have previously installed Polipo and it is currently running, please exit Polipo first before continuing this installation.\r\n\r\n$_CLICK"
|
|
||||||
!define MUI_ABORTWARNING
|
|
||||||
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
|
|
||||||
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
|
|
||||||
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
|
|
||||||
!define MUI_HEADERIMAGE
|
|
||||||
;!define MUI_FINISHPAGE_RUN
|
|
||||||
!define MUI_FINISHPAGE_LINK "Visit the Polipo website for the latest updates."
|
|
||||||
!define MUI_FINISHPAGE_LINK_LOCATION ${WEBSITE}
|
|
||||||
|
|
||||||
!insertmacro MUI_PAGE_WELCOME
|
|
||||||
!insertmacro MUI_PAGE_COMPONENTS
|
|
||||||
!insertmacro MUI_PAGE_DIRECTORY
|
|
||||||
!insertmacro MUI_PAGE_INSTFILES
|
|
||||||
!insertmacro MUI_PAGE_FINISH
|
|
||||||
!insertmacro MUI_UNPAGE_WELCOME
|
|
||||||
!insertmacro MUI_UNPAGE_CONFIRM
|
|
||||||
!insertmacro MUI_UNPAGE_INSTFILES
|
|
||||||
!insertmacro MUI_UNPAGE_FINISH
|
|
||||||
!insertmacro MUI_LANGUAGE "English"
|
|
||||||
|
|
||||||
Var configfile
|
|
||||||
Var forbiddenfile
|
|
||||||
|
|
||||||
;Sections
|
|
||||||
;--------
|
|
||||||
|
|
||||||
Section "Polipo" Polipo
|
|
||||||
;Files that have to be installed for polipo to run and that the user
|
|
||||||
;cannot choose not to install
|
|
||||||
SectionIn RO
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
File "${BIN}\polipo.exe"
|
|
||||||
File "${BIN}\COPYING"
|
|
||||||
File "${BIN}\CHANGES"
|
|
||||||
File "${BIN}\config.sample"
|
|
||||||
File "${BIN}\forbidden.sample"
|
|
||||||
File "${BIN}\README.Windows"
|
|
||||||
File "${BIN}\libgnurx-0.dll"
|
|
||||||
WriteIniStr "$INSTDIR\Polipo Website.url" "InternetShortcut" "URL" ${WEBSITE}
|
|
||||||
|
|
||||||
StrCpy $configfile "config"
|
|
||||||
StrCpy $forbiddenfile "forbidden"
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
;If there's already a polipo config file, ask if they want to
|
|
||||||
;overwrite it with the new one.
|
|
||||||
IfFileExists "$INSTDIR\config" "" endifconfig
|
|
||||||
MessageBox MB_ICONQUESTION|MB_YESNO "You already have a Polipo config file.$\r$\nDo you want to overwrite it with the default sample config file?" IDNO yesreplace
|
|
||||||
Delete $INSTDIR\config
|
|
||||||
Goto endifconfig
|
|
||||||
yesreplace:
|
|
||||||
StrCpy $configfile ".\config.sample"
|
|
||||||
endifconfig:
|
|
||||||
File /oname=$configfile ".\config.sample"
|
|
||||||
;If there's already a polipo forbidden file, ask if they want to
|
|
||||||
;overwrite it with the new one.
|
|
||||||
IfFileExists "$INSTDIR\forbidden" "" endifforbidden
|
|
||||||
MessageBox MB_ICONQUESTION|MB_YESNO "You already have a Polipo forbidden file.$\r$\nDo you want to overwrite it with the default sample forbidden file?" IDNO forbidyesreplace
|
|
||||||
Delete $INSTDIR\forbidden
|
|
||||||
Goto endifforbidden
|
|
||||||
forbidyesreplace:
|
|
||||||
StrCpy $forbiddenfile ".\forbidden.sample"
|
|
||||||
endifforbidden:
|
|
||||||
File /oname=$forbiddenfile ".\forbidden.sample"
|
|
||||||
IfFileExists "$INSTDIR\bin\*.*" "" endifbinroot
|
|
||||||
CreateDirectory "$INSTDIR\bin"
|
|
||||||
endifbinroot:
|
|
||||||
CopyFiles "${BIN}\localindex.html" $INSTDIR\index.html
|
|
||||||
IfFileExists "$INSTDIR\cache\*.*" "" endifcache
|
|
||||||
CreateDirectory "$INSTDIR\cache"
|
|
||||||
endifcache:
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
SubSection /e "Shortcuts" Shortcuts
|
|
||||||
|
|
||||||
Section "Start Menu" StartMenu
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
IfFileExists "$SMPROGRAMS\Polipo\*.*" "" +2
|
|
||||||
RMDir /r "$SMPROGRAMS\Polipo"
|
|
||||||
CreateDirectory "$SMPROGRAMS\Polipo"
|
|
||||||
CreateShortCut "$SMPROGRAMS\Polipo\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config"
|
|
||||||
CreateShortCut "$SMPROGRAMS\Polipo\Poliporc.lnk" "Notepad.exe" "$INSTDIR\config"
|
|
||||||
CreateShortCut "$SMPROGRAMS\Polipo\Polipo Documentation.lnk" "$INSTDIR\www\index.html"
|
|
||||||
CreateShortCut "$SMPROGRAMS\Polipo\Polipo Website.lnk" "$INSTDIR\Polipo Website.url"
|
|
||||||
CreateShortCut "$SMPROGRAMS\Polipo\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section "Desktop" Desktop
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
CreateShortCut "$DESKTOP\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section /o "Run at startup" Startup
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
CreateShortCut "$SMSTARTUP\Polipo.lnk" "$INSTDIR\polipo.exe" "-c config -f forbidden" "" "" "" SW_SHOWMINIMIZED
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
SubSectionEnd
|
|
||||||
|
|
||||||
Section "Uninstall"
|
|
||||||
Delete "$DESKTOP\Polipo.lnk"
|
|
||||||
Delete "$INSTDIR\polipo.exe"
|
|
||||||
Delete "$INSTDIR\Polipo Website.url"
|
|
||||||
Delete "$INSTDIR\config"
|
|
||||||
Delete "$INSTDIR\config.sample"
|
|
||||||
Delete "$INSTDIR\forbidden.sample"
|
|
||||||
Delete "$INSTDIR\libgnurx-0.dll"
|
|
||||||
Delete "$INSTDIR\COPYING"
|
|
||||||
Delete "$INSTDIR\CHANGES"
|
|
||||||
Delete "$INSTDIR\README.Windows"
|
|
||||||
StrCmp $INSTDIR $INSTDIR +2 ""
|
|
||||||
RMDir /r $INSTDIR
|
|
||||||
Delete "$INSTDIR\Uninstall.exe"
|
|
||||||
RMDir /r "$INSTDIR\Documents"
|
|
||||||
RMDir $INSTDIR
|
|
||||||
RMDir /r "$SMPROGRAMS\Polipo"
|
|
||||||
RMDir /r "$APPDATA\Polipo"
|
|
||||||
Delete "$SMSTARTUP\Polipo.lnk"
|
|
||||||
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Polipo"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section -End
|
|
||||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
|
||||||
;The registry entries simply add the Polipo uninstaller to the Windows
|
|
||||||
;uninstall list.
|
|
||||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "DisplayName" "Polipo (remove only)"
|
|
||||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "UninstallString" '"$INSTDIR\Uninstall.exe"'
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${Polipo} "The core executable and config files needed for Polipo to run."
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${ShortCuts} "Shortcuts to easily start Polipo"
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${StartMenu} "Shortcuts to access Polipo and its documentation from the Start Menu"
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${Desktop} "A shortcut to start Polipo from the desktop"
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${Startup} "Launches Polipo automatically at startup in a minimized window"
|
|
||||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
||||||
|
|
84
contrib/sd
84
contrib/sd
@ -1,84 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright (c) 2005, 2006, 2007, 2008 Peter Palfrader <peter@palfrader.org>
|
|
||||||
# Copyright (c) 2008, 2009 Jacob Appelbaum <jacob@appelbaum.net>
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
# This small script fetches information about a server when given a nickname.
|
|
||||||
# It currently uses the v2 dir information and not the v3 consensus by default.
|
|
||||||
# It requires wget, perl, awk to function properly. This is based on a zsh
|
|
||||||
# dotfile from weasel and adapted to be a small bash utility.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Feel free to set any authority you desire, we're using weasel's by default
|
|
||||||
# You could also try the v3 directory infomation in weasel's dir authority:
|
|
||||||
# http://tor.noreply.org/tor/status-vote/current/consensus
|
|
||||||
#
|
|
||||||
|
|
||||||
# Users can select between the two
|
|
||||||
v3authority="http://tor.noreply.org/tor/status-vote/current/consensus";
|
|
||||||
v2authority="http://tor.noreply.org:80/tor/status/authority";
|
|
||||||
authority=$v2authority;
|
|
||||||
|
|
||||||
function usage {
|
|
||||||
echo "Usage: $0 [-2|-3] nodenickname";
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -z "$1" ];
|
|
||||||
then
|
|
||||||
usage;
|
|
||||||
exit;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Are we switching between v2 or v3?
|
|
||||||
if [ "$1" == "-2" -o "$1" == "-3" ];
|
|
||||||
then
|
|
||||||
if [ "$1" == "-2" -a -n "$2" ];
|
|
||||||
then
|
|
||||||
authority=$v2authority;
|
|
||||||
nickname="$2";
|
|
||||||
elif [ "$1" == "-3" -a -n "$2" ];
|
|
||||||
then
|
|
||||||
authority=$v3authority;
|
|
||||||
nickname="$2";
|
|
||||||
else
|
|
||||||
usage;
|
|
||||||
exit;
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
nickname="$1";
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fetch it and decode the fingerprint
|
|
||||||
fp=`wget -q -O - $authority | \
|
|
||||||
awk '$1 == "r" && $2 == "'$nickname'" {printf "%s===", $3}' | \
|
|
||||||
perl -MMIME::Base64 -e "print unpack(\"H*\", decode_base64(<>)),\"\n\"";`
|
|
||||||
|
|
||||||
# If we don't have a fingerprint, we don't have a match
|
|
||||||
if [ "$fp" != "" ];
|
|
||||||
then
|
|
||||||
wget -q -O - http://tor.noreply.org:80/tor/server/fp/$fp;
|
|
||||||
exit $?;
|
|
||||||
else
|
|
||||||
echo "It appears the nickname is not currently known by the directory" \
|
|
||||||
"authority."
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
@ -1,212 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# tor-ctrl is a commandline tool for executing commands on a tor server via
|
|
||||||
# the controlport. In order to get this to work, add "ControlPort 9051" and
|
|
||||||
# "CookieAuthentication 1" to your torrc and reload tor. Or - if you want a
|
|
||||||
# fixed password - leave out "CookieAuthentication 1" and use the following
|
|
||||||
# line to create the appropriate HashedControlPassword entry for your torrc
|
|
||||||
# (you need to change yourpassword, of course):
|
|
||||||
#
|
|
||||||
# echo "HashedControlPassword $(tor --hash-password yourpassword | tail -n 1)"
|
|
||||||
#
|
|
||||||
# tor-ctrl will return 0 if it was successful and 1 if not, 2 will be returned
|
|
||||||
# if something (telnet, xxd) is missing. 4 will be returned if it executed
|
|
||||||
# several commands from a file.
|
|
||||||
#
|
|
||||||
# For setting the bandwidth for specific times of the day, I suggest calling
|
|
||||||
# tor-ctrl via cron, e.g.:
|
|
||||||
#
|
|
||||||
# 0 22 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=1mb"
|
|
||||||
# 0 7 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=100kb"
|
|
||||||
#
|
|
||||||
# This would set the bandwidth to 100kb at 07:00 and to 1mb at 22:00. You can
|
|
||||||
# use notations like 1mb, 1kb or the number of bytes.
|
|
||||||
#
|
|
||||||
# Many, many other things are possible, see
|
|
||||||
# https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
|
|
||||||
#
|
|
||||||
# Copyright (c) 2007 by Stefan Behte
|
|
||||||
#
|
|
||||||
# tor-ctrl is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# tor-ctrl is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with tor-ctrl; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
#
|
|
||||||
# Written by Stefan Behte
|
|
||||||
#
|
|
||||||
# Please send bugs, comments, wishes, thanks and success stories to:
|
|
||||||
# Stefan dot Behte at gmx dot net
|
|
||||||
#
|
|
||||||
# Also have a look at my page:
|
|
||||||
# http://ge.mine.nu/
|
|
||||||
#
|
|
||||||
# 2007-10-03: First version, only changing bandwidth possible.
|
|
||||||
# 2007-10-04: Renaming to "tor-ctrl", added a lot of functions, it's now a
|
|
||||||
# general-purpose tool.
|
|
||||||
# Added control_auth_cookie/controlpassword auth, getopts,
|
|
||||||
# program checks, reading from file etc.
|
|
||||||
|
|
||||||
VERSION=v1
|
|
||||||
TORCTLIP=127.0.0.1
|
|
||||||
TORCTLPORT=9051
|
|
||||||
TOR_COOKIE="/var/lib/tor/data/control_auth_cookie"
|
|
||||||
SLEEP_AFTER_CMD=1
|
|
||||||
VERBOSE=0
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
cat <<EOF
|
|
||||||
|
|
||||||
tor-ctrl $VERSION by Stefan Behte (http://ge.mine.nu)
|
|
||||||
You should have a look at
|
|
||||||
https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
|
|
||||||
|
|
||||||
usage: tor-ctrl [-switch] [variable]
|
|
||||||
|
|
||||||
[-c] [command] = command to execute
|
|
||||||
notice: always "quote" your command
|
|
||||||
|
|
||||||
[-f] [file] = file to execute commands from
|
|
||||||
notice: only one command per line
|
|
||||||
|
|
||||||
[-a] [path] = path to tor's control_auth_cookie
|
|
||||||
default: /var/lib/tor/data/control_auth_cookie
|
|
||||||
notice: do not forget to adjust your torrc
|
|
||||||
|
|
||||||
[-s] [time] = sleep [var] seconds after each command sent
|
|
||||||
default: 1 second
|
|
||||||
notice: for GETCONF, you can use smaller pause times
|
|
||||||
than for SETCONF; this is due to telnet's behaviour.
|
|
||||||
|
|
||||||
[-p] [pwd] = Use password [var] instead of tor's control_auth_cookie
|
|
||||||
default: not used
|
|
||||||
notice: do not forget to adjust your torrc
|
|
||||||
|
|
||||||
[-P] [port] = Tor ControlPort
|
|
||||||
default: 9051
|
|
||||||
|
|
||||||
[-v] = verbose
|
|
||||||
default: not set
|
|
||||||
notice: the default output is the return code ;)
|
|
||||||
You propably want to set -v when running manually
|
|
||||||
|
|
||||||
Examples: $0 -c "SETCONF bandwidthrate=1mb"
|
|
||||||
$0 -v -c "GETINFO version"
|
|
||||||
$0 -v -s 0 -P 9051 -p foobar -c "GETCONF bandwidthrate"
|
|
||||||
|
|
||||||
EOF
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
checkprogs()
|
|
||||||
{
|
|
||||||
programs="telnet"
|
|
||||||
if [ "$PASSWORD" = "" ]
|
|
||||||
then
|
|
||||||
# you only need xxd when using control_auth_cookie
|
|
||||||
programs="$programs xxd"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for p in $programs
|
|
||||||
do
|
|
||||||
which $p &>/dev/null # are you there?
|
|
||||||
if [ "$?" != "0" ]
|
|
||||||
then
|
|
||||||
echo "$p is missing."
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
sendcmd()
|
|
||||||
{
|
|
||||||
echo "$@"
|
|
||||||
sleep ${SLEEP_AFTER_CMD}
|
|
||||||
}
|
|
||||||
|
|
||||||
login()
|
|
||||||
{
|
|
||||||
if [ "$PASSWORD" = "" ]
|
|
||||||
then
|
|
||||||
sendcmd "AUTHENTICATE $(xxd -c 32 -g 0 ${TOR_COOKIE} | awk '{print $2}')"
|
|
||||||
else
|
|
||||||
sendcmd "AUTHENTICATE \"${PASSWORD}\""
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdpipe()
|
|
||||||
{
|
|
||||||
login
|
|
||||||
sendcmd "$@"
|
|
||||||
sendcmd "QUIT"
|
|
||||||
}
|
|
||||||
|
|
||||||
vecho()
|
|
||||||
{
|
|
||||||
if [ $VERBOSE -ge 1 ]
|
|
||||||
then
|
|
||||||
echo "$@"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
myecho()
|
|
||||||
{
|
|
||||||
STR=$(cat)
|
|
||||||
vecho "$STR"
|
|
||||||
|
|
||||||
echo "$STR" | if [ "$(grep -c ^"250 ")" = 3 ]
|
|
||||||
then
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
filepipe()
|
|
||||||
{
|
|
||||||
login
|
|
||||||
cat "$1" | while read line
|
|
||||||
do
|
|
||||||
sendcmd "$line"
|
|
||||||
done
|
|
||||||
sendcmd "QUIT"
|
|
||||||
}
|
|
||||||
|
|
||||||
while getopts ":a:c:s:p:P:f:vh" Option
|
|
||||||
do
|
|
||||||
case $Option in
|
|
||||||
a) TOR_COOKIE="${OPTARG}";;
|
|
||||||
c) CMD="${OPTARG}";;
|
|
||||||
s) SLEEP_AFTER_CMD="${OPTARG}";;
|
|
||||||
p) PASSWORD="${OPTARG}";;
|
|
||||||
P) TORCTLPORT="${OPTARG}";;
|
|
||||||
f) FILE="${OPTARG}";;
|
|
||||||
v) VERBOSE=1;;
|
|
||||||
h) usage;;
|
|
||||||
*) usage;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -e "$FILE" ]
|
|
||||||
then
|
|
||||||
checkprogs
|
|
||||||
filepipe "$FILE" | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
|
|
||||||
exit 4
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$CMD" != "" ]
|
|
||||||
then
|
|
||||||
checkprogs
|
|
||||||
cmdpipe $CMD | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
|
|
||||||
else
|
|
||||||
usage
|
|
||||||
fi
|
|
@ -1,27 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
#require 'sys/syscall.ph';
|
|
||||||
$|=1;
|
|
||||||
|
|
||||||
$total = 1;
|
|
||||||
$target = "http://www.cnn.com/";
|
|
||||||
|
|
||||||
for($i=0;$i<$total;$i++) {
|
|
||||||
print "Starting client $i\n";
|
|
||||||
$pid = fork();
|
|
||||||
if(!$pid) {
|
|
||||||
open(FD,"wget -q -O - $target|");
|
|
||||||
$c = 0;
|
|
||||||
while(<FD>) {
|
|
||||||
$c += length($_);
|
|
||||||
}
|
|
||||||
# $TIMEVAL_T = "LL";
|
|
||||||
# $now = pack($TIMEVAL_T, ());
|
|
||||||
# syscall(&SYS_gettimeofday, $now, 0) != -1 or die "gettimeofday: $!";
|
|
||||||
# @now = unpack($TIMEVAL_T, $now);
|
|
||||||
print "Client $i exiting ($c chars).\n";
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
# sleep(1);
|
|
||||||
}
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
Loading…
Reference in New Issue
Block a user