diff --git a/contrib/polipo/Makefile.mingw b/contrib/polipo/Makefile.mingw new file mode 100644 index 0000000000..16a6572c35 --- /dev/null +++ b/contrib/polipo/Makefile.mingw @@ -0,0 +1,60 @@ +PREFIX = "." +BINDIR = $(PREFIX)\ +LDLIBS = -lwsock32 + +FILE_DEFINES = -DLOCAL_ROOT=\".\www\" -DDISK_CACHE_ROOT=\".\cache\" + +# 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 + +DEFINES = $(FILE_DEFINES) $(PLATFORM_DEFINES) + +CFLAGS = -O3 -g -Wall $(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) -lwsock32 + +ftsimport.o: ftsimport.c fts_compat.c + +md5import.o: md5import.c md5.c + +.PHONY: all install install.binary install.man + +all: polipo$(EXE) 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 diff --git a/contrib/polipo/Makefile.osx b/contrib/polipo/Makefile.osx new file mode 100644 index 0000000000..2314c3e327 --- /dev/null +++ b/contrib/polipo/Makefile.osx @@ -0,0 +1,99 @@ +PREFIX = /Library/Polipo +BINDIR = $(PREFIX)/bin +MANDIR = $(PREFIX)/man +INFODIR = $(PREFIX)/info +LOCAL_ROOT = $(PREFIX)/www +DISK_CACHE_ROOT = $(PREFIX)/cache + +CC = gcc +# CDEBUGFLAGS = -Os -g -Wall -std=gnu99 +CDEBUGFLAGS = -Os -g -Wall + +FILE_DEFINES = -DLOCAL_ROOT=\"$(LOCAL_ROOT)/\" \ + -DDISK_CACHE_ROOT=\"$(DISK_CACHE_ROOT)/\" + +# 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 + +DEFINES = $(FILE_DEFINES) $(PLATFORM_DEFINES) + +UNIVERSAL = -O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc +LDFLAGS = -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk +CFLAGS = $(MD5INCLUDES) $(CDEBUGFLAGS) $(DEFINES) $(EXTRA_DEFINES) $(UNIVERSAL) + +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 + +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 + +polipo: $(OBJS) + $(CC) $(CFLAGS) $(LDFLAGS) -o polipo $(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 + +install: install.binary install.man + +install.binary: all + mkdir -p $(TARGET)$(BINDIR) + mkdir -p $(TARGET)$(LOCAL_ROOT) + mkdir -p $(TARGET)$(LOCAL_ROOT)/doc + mkdir -p $(TARGET)$(DISK_CACHE_ROOT) + cp -f polipo $(TARGET)$(BINDIR)/ + cp -f localindex.html $(TARGET)$(LOCAL_ROOT)/index.html + cp -f config.osx $(TARGET)$(LOCAL_ROOT)/config + texi2html polipo.texi && cp -f polipo.html $(TARGET)$(LOCAL_ROOT)/doc/index.html + groff polipo.man -T ps -m man | pstopdf -i -o $(TARGET)/polipo.pdf + mkdir -p /Library/StartupItems/Polipo + cp -f contrib/Polipo /Library/StartupItems/Polipo/ + cp -f contrib/StartupParameters.plist /Library/StartupItems/Polipo/ + echo "POLIPO=-YES-" >> /etc/hostconfig + +install.man: all + mkdir -p $(TARGET)$(MANDIR)/man1 + cp -f polipo.man $(TARGET)$(MANDIR)/man1/polipo.1 + +TAGS: $(SRCS) + etags $(SRCS) + +.PHONY: clean + +clean: + -rm -f polipo *.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 + +.PHONY: uninstall + +uninstall: + rm -rf /Library/Polipo + rm -rf /Library/StartupItems/Polipo + cp -f /etc/hostconfig /etc/hostconfig.polipo.saved + cat /etc/hostconfig.polipo.saved | grep -v POLIPO > /etc/hostconfig diff --git a/contrib/polipo/Polipo b/contrib/polipo/Polipo new file mode 100644 index 0000000000..14589c84db --- /dev/null +++ b/contrib/polipo/Polipo @@ -0,0 +1,40 @@ +#!/bin/sh + +## +# Polipo +## + +. /etc/rc.common + +StartService () +{ + if [ -f /Library/Polipo/bin/polipo ]; then + if pid=$(GetPID polipo); then + return 0 + else if [ "${POLIPO:=-NO-}" = "-YES-" ]; then + ConsoleMessage "Starting Polipo" + /Library/Polipo/bin/polipo -c /Library/Polipo/www/config + fi + fi + fi +} + +StopService () +{ + if pid=$(GetPID polipo); then + ConsoleMessage "Stopping Polipo" + kill -TERM "${pid}" + else + ConsoleMessage "Polipo not responding." +# Just for sanity (sometimes necessary.) + killall tor 2>/dev/null + fi +} + +RestartService () +{ + StopService + StartService +} + +RunService "$1" diff --git a/contrib/polipo/PolipoDesc.plist b/contrib/polipo/PolipoDesc.plist new file mode 100644 index 0000000000..ae87b0d307 --- /dev/null +++ b/contrib/polipo/PolipoDesc.plist @@ -0,0 +1,10 @@ + + + + + IFPkgDescriptionTitle + Polipo + IFPkgDescriptionVersion + 20061218 + + diff --git a/contrib/polipo/PolipoInfo.plist b/contrib/polipo/PolipoInfo.plist new file mode 100644 index 0000000000..ed25630dd6 --- /dev/null +++ b/contrib/polipo/PolipoInfo.plist @@ -0,0 +1,28 @@ + + + + + CFBundleIdentifier + Polipo 20061218 + CFBundleGetInfoString + Polipo 20061218 + CFBundleName + Polipo + CFBundleSortVersionString + 20061218 + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + RootAuthorization + IFPkgFlagFollowLinks + + IFPkgFlagIsRequired + + IFPkgFlagRootVolumeOnly + + IfPkgFlagBackgroundScaling + proportional + IFPkgFlagBackgroundAlignment + bottomleft + + diff --git a/contrib/polipo/PolipoPostflight b/contrib/polipo/PolipoPostflight new file mode 100644 index 0000000000..4c24c5eb37 --- /dev/null +++ b/contrib/polipo/PolipoPostflight @@ -0,0 +1,56 @@ +#!/bin/sh + +# PolipoPostflight gets invoked after any install or upgrade. + +ADDSYSUSER=$RECEIPT_PATH/addsysuser +if [ ! -x "$ADDSYSUSER" ]; then + echo "Could not find addsysuser script." + exit 1 +fi + +POLIPOUSER=_polipo +POLIPOGROUP=daemon +TARGET=$2/Library/Polipo +LOGDIR=$TARGET/log + +# Check defaults for TARGET +if [ "$TARGET" == "//Library/Polipo" ]; then + TARGET=/Library/Polipo +fi + +# Create user $POLIPOUSER in group daemon. If it's already there, great. +$ADDSYSUSER $POLIPOUSER "Polipo System user" $POLIPODIR + +# Create the polipo direcpolipoy, if it doesn't exist. +if [ ! -d $POLIPODIR ]; then + mkdir -p $POLIPODIR +fi +if [ ! -d $LOGDIR ]; then + mkdir -p $LOGDIR +fi +# Check its permissions. +chown $POLIPOUSER $POLIPODIR +chgrp daemon $POLIPODIR +chmod 700 $POLIPODIR +chown $POLIPOUSER $LOGDIR +chgrp daemon $LOGDIR +chmod 700 $LOGDIR + +# Create the configuration file only if there wasn't one already. +if [ ! -f $TARGET/config]; then + cp $TARGET/config.osx $TARGET/config +fi + +cd /usr/share/man/man1 +MAN1=$TARGET/man/man1 +ln -sf $MAN1/*.1 . + +if [ -d /Library/StartupItems/Polipo ]; then + find /Library/StartupItems/Polipo -print0 | xargs -0 chown root:wheel +fi + +# Copy Uninstaller +if [ -f $PACKAGE_PATH/Contents/Resources/uninstall_polipo_bundle.sh ]; then + cp $PACKAGE_PATH/Contents/Resources/uninstall_polipo_bundle.sh $TARGET/uninstall_polipo_bundle.sh + chmod 755 $TARGET/uninstall_polipo_bundle.sh +fi diff --git a/contrib/polipo/StartupParameters.plist b/contrib/polipo/StartupParameters.plist new file mode 100644 index 0000000000..8309e930cb --- /dev/null +++ b/contrib/polipo/StartupParameters.plist @@ -0,0 +1,11 @@ +{ + Description = "Polipo"; + Provides = ("Polipo"); + Requires = ("NetworkExtensions","Resolver"); + OrderPreference = "Late"; + Messages = + { + start = "Starting Polipo"; + stop = "Stopping Polipo"; + }; +} diff --git a/contrib/polipo/addsysuser b/contrib/polipo/addsysuser new file mode 100644 index 0000000000..7f1d79a97c --- /dev/null +++ b/contrib/polipo/addsysuser @@ -0,0 +1,45 @@ +#!/bin/sh +# +# Original adduser 05 Feb 2002 by Jon L. Gardner +# +# Modified for Tor installer by Nick Mathewson + +ROOTPROP=/ + +if [ "`whoami`" != "root" ]; then +echo "You must be root to execute this script." +exit +fi +if [ "x$3" = "x" ]; then +echo 'Usage: addsysuser "" ' +exit 0 +fi +username=$1 +realname=$2 +homedir=$3 +# GID 20 is "staff" which is the default. Change it if you want. +gid=`niutil -readprop $ROOTPROP /groups/daemon gid` +if [ "x`niutil -list $ROOTPROP /users|cut -f2 -d' '|grep $username`" != "x" ]; then +echo The account $username already exists. +exit 0 +fi +# home is the local path to the home directory +home=/Users/$username +# defhome is what goes into NetInfo +defhome="/Network/Servers/MyServer/Users" +#echo "Determining next available system uid (please be patient)..." +# Uids over 500 are for system users. +uiddef=`nidump passwd / | cut -d: -f3 | sort -n | grep -v '^[56789]..' |grep -v '^....$' | tail -n 1` +uiddef=`echo $uiddef + 1 |bc` +echo Creating account for $username... +niutil -create $ROOTPROP /users/$username +niutil -createprop $ROOTPROP /users/$username _writers_tim_passwd $username +niutil -createprop $ROOTPROP /users/$username realname $realname +niutil -createprop $ROOTPROP /users/$username _writers_passwd $username +niutil -createprop $ROOTPROP /users/$username uid $uiddef +#niutil -createprop $ROOTPROP /users/$username home_loc "afp://afp.server.com/Users/$username" +niutil -createprop $ROOTPROP /users/$username gid $gid +niutil -createprop $ROOTPROP /users/$username home $homedir +niutil -createprop $ROOTPROP /users/$username name $username +niutil -createprop $ROOTPROP /users/$username passwd '*' +niutil -createprop $ROOTPROP /users/$username shell /dev/null diff --git a/contrib/polipo/package.sh b/contrib/polipo/package.sh new file mode 100644 index 0000000000..c41a9a837c --- /dev/null +++ b/contrib/polipo/package.sh @@ -0,0 +1,85 @@ +#!/bin/sh +# $Id: package.sh 8992 2006-12-23 03:12:09Z phobos $ +# Copyright 2004-2005 Nick Mathewson & Andrew Lewman. +# See LICENSE in Polipo distribution for licensing information. + +### +# Helpful info on OS X packaging: +# http://developer.apple.com/documentation/DeveloperTools/Conceptual/SoftwareDistribution/index.html +# man packagemaker + +VERSION="1.0.2" + +## 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" ARCH="universal";; + "10.4") OS="tiger" ARCH="universal";; + "10.3") OS="panther" ARCH="ppc";; + "10.2") OS="jaguar" ARCH="ppc";; + "10.1") OS="puma" ARCH="ppc";; + "10.0") OS="cheetah" ARCH="ppc";; + *) OS="unknown";; + esac +else + OS="unknown" +fi + +# Where will we put our temporary files? +BUILD_DIR=/tmp/polipo-osx-$$ +# Path to PackageMaker app. +PACKAGEMAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker + +umask 022 + +echo I might ask you for your password now, so you can sudo. + +sudo rm -rf $BUILD_DIR +mkdir $BUILD_DIR || exit 1 +for subdir in polipo_packageroot output; do + mkdir $BUILD_DIR/$subdir +done + +### Make Polipo package. +chmod 755 contrib/PolipoPostflight +cp polipo $BUILD_DIR/polipo_packageroot/polipo +cp config.osx $BUILD_DIR/polipo_packageroot/config +cp contrib/PolipoPostflight $BUILD_DIR/polipo_packageroot/postflight +cp contrib/addsysuser $BUILD_DIR/polipo_packageroot/addsysuser +cp contrib/uninstall_polipo_bundle.sh $BUILD_DIR/polipo_packageroot/uninstall_polipo_bundle.sh +cp localindex.html $BUILD_DIR/polipo_packageroot/index.html +cat < $BUILD_DIR/polipo_packageroot/Welcome.txt +Polipo: a caching web proxy + +Polipo is a small and fast caching web proxy (a web cache, an HTTP +proxy, a proxy server). +EOF + +### Assemble documentation + +groff polipo.man -T ps -m man | pstopdf -i -o $BUILD_DIR/polipo_packageroot/polipo.pdf +texi2html polipo.texi && cp polipo.html $BUILD_DIR/polipo_packageroot/polipo.html + +find $BUILD_DIR/polipo_packageroot -print0 |sudo xargs -0 chown root:wheel + +$PACKAGEMAKER -build \ + -p $BUILD_DIR/output/Polipo.pkg \ + -f $BUILD_DIR/polipo_packageroot \ + -i contrib/PolipoInfo.plist \ + -d contrib/PolipoDesc.plist + +### Package it all into a DMG + +find $BUILD_DIR/output -print0 | sudo xargs -0 chown root:wheel + +mv $BUILD_DIR/output "$BUILD_DIR/Polipo-$VERSION-$OS-$ARCH" +rm -f "Polipo-$VERSION-$OS-$ARCH-Bundle.dmg" +USER="`whoami`" +sudo hdiutil create -format UDZO -srcfolder "$BUILD_DIR/Polipo-$VERSION-$OS-$ARCH" "Polipo-$VERSION-$OS-$ARCH.dmg" +sudo chown "$USER" "Polipo-$VERSION-$OS-$ARCH.dmg" + +#sudo rm -rf $BUILD_DIR diff --git a/contrib/polipo/polipo-mingw.nsi b/contrib/polipo/polipo-mingw.nsi new file mode 100644 index 0000000000..cac7aa7c97 --- /dev/null +++ b/contrib/polipo/polipo-mingw.nsi @@ -0,0 +1,159 @@ +;polipo-mingw.nsi - A basic win32 installer for Polipo +; Originally written by J Doe. +; Modified by Andrew Lewman +; See LICENSE for licencing information +;----------------------------------------- +; +!include "MUI.nsh" + +!define VERSION "1.0.2" +!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" "©2007, 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 "$INSTDIR\polipo.exe -c $configdir\config" +!define MUI_FINISHPAGE_LINK "Visit the Polipo website for the latest updates." +!define MUI_FINISHPAGE_LINK_LOCATION ${WEBSITE} + +!insertmacro MUI_PAGE_WELCOME +; There's no point in having a clickthrough license: Our license adds +; certain rights, but doesn't remove them. +; !insertmacro MUI_PAGE_LICENSE "${LICENSE}" +!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 configdir +Var configfile + +;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.windows" + File "${BIN}\forbidden.sample" + File "${BIN}\README.Windows" + WriteIniStr "$INSTDIR\Polipo Website.url" "InternetShortcut" "URL" ${WEBSITE} + + StrCpy $configfile "config" + StrCpy $configdir $INSTDIR + SetOutPath $configdir + ;If there's already a polipo config file, ask if they want to + ;overwrite it with the new one. + IfFileExists "$configdir\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 $configdir\config + Goto endifconfig + yesreplace: + StrCpy $configfile ".\config.windows" + endifconfig: + File /oname=$configfile ".\config.windows" + IfFileExists "$INSTDIR\www\*.*" "" endifwebroot + CreateDirectory "$INSTDIR\www" + endifwebroot: + CopyFiles "${BIN}\localindex.html" $INSTDIR\www\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 $configdir\config" + CreateShortCut "$SMPROGRAMS\Polipo\Poliporc.lnk" "Notepad.exe" "$configdir\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 $configdir\config" +SectionEnd + +Section /o "Run at startup" Startup + SetOutPath $INSTDIR + CreateShortCut "$SMSTARTUP\Polipo.lnk" "$INSTDIR\polipo.exe -c $configdir\config" "" "" "" 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" + StrCmp $configdir $INSTDIR +2 "" + RMDir /r $configdir + 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 it's 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 + diff --git a/contrib/polipo/uninstall_polipo_bundle.sh b/contrib/polipo/uninstall_polipo_bundle.sh new file mode 100644 index 0000000000..26a2a6554e --- /dev/null +++ b/contrib/polipo/uninstall_polipo_bundle.sh @@ -0,0 +1,97 @@ +#!/bin/sh +# + + +### this is the location of a file which contains all the actual package names +## (ie "Polipo", "polipostartup", ...) the list should be new-line-delimited. +PACKAGE_LIST_SRC="Polipo polipostartup" + +### this is the name of the user created in the install process of Polipo +POLIPO_USER=_polipo + +### these should be constant across all osX installs (so leave them be) +STARTUP_ITEMS_DIR=/Library/StartupItems +PKG_RCPT_BASE_DIR=/Library/Receipts +BOM_INTERMEDIATE_DIR=Contents/Resources +INFO_INTERMEDIATE_DIR=$BOM_INTERMEDIATE_DIR/English.lproj +TEMP_BOM_CONTENTS=/tmp/polipo_uninst_scratch + + +### make sure the script is being run as root, barf if not +if [ "`whoami`" != "root" ]; then + echo "Must be root to run the uninstall script." + exit -1 +fi + +### check to see if polipo is currently running, kill it if it is +## we grep on 'Polipo/polipo ' because 'polipo' is too common (like in 'direcpolipoy') +## -- this relies on the fact that polipo has been started with command +## line arguments.. :-/ +POLIPO_PID=`ps -uax | grep 'Polipo/polipo ' | grep -v grep | awk '{print $2;}'` +if [ ${#POLIPO_PID} -gt 0 ]; then + echo ". Killing currently running polipo process, pid is $POLIPO_PID" + kill -9 $POLIPO_PID +else + echo ". polipo process appears to already be stopped" +fi + + +## grab each package name from the package list file +while read LINE; do + if [ ${#LINE} -gt 0 ]; then + PACKAGE_NAME=$LINE.pkg + PACKAGE_PATH=$PKG_RCPT_BASE_DIR/$PACKAGE_NAME + echo ". Uninstalling $PACKAGE_NAME" + if [ ! -d $PACKAGE_PATH ]; then + echo " . No receipt exists for this package -- skipping." + + continue + fi + + + ## get rid of the startup item if it exists + STARTUP_DIR=$STARTUP_ITEMS_DIR/$LINE + if [ -d $STARTUP_DIR ]; then + echo " . Deleting startup item $STARTUP_DIR" + rm -rf $STARTUP_DIR + fi + + + ## determine the root direcpolipoy of the the relative paths specified in the bom + DEFAULT_LOC=`grep DefaultLocation $PACKAGE_PATH/$INFO_INTERMEDIATE_DIR/$LINE.info | awk '{print $2;}'` + if [ ${#DEFAULT_LOC} -eq 0 ]; then + echo "!! Could not find default location for $LINE package -- skipping package." + + continue + fi + + ## examine the list of installed items desribed in the bom + BOM_FILE=$PACKAGE_PATH/$BOM_INTERMEDIATE_DIR/$LINE.bom + lsbom $BOM_FILE > $TEMP_BOM_CONTENTS + while read BOM_ITEM; do + ## 3 column items describe just direcpolipoies, 5 column items describe actual files + COL_COUNT=$(echo $BOM_ITEM | awk '{print NF;}') + if [ "$COL_COUNT" -eq 5 ]; then + FILE_NAME=$DEFAULT_LOC/$(echo $BOM_ITEM | awk '{print $1;}') + + echo " . Removing $FILE_NAME" + rm -rf $FILE_NAME + fi + done < $TEMP_BOM_CONTENTS + + ## remove package receipt + echo " . Removing package receipt $PACKAGE_PATH" + rm -rf $PACKAGE_PATH + fi +done < $PACKAGE_LIST_SRC + +## nuke the user created by the install process. +echo ". Removing created user $POLIPO_USER" +niutil -destroy . /users/$POLIPO_USER + +## clean up +echo ". Cleaning up" +rm -rf $TEMP_BOM_CONTENTS +rm -rf /Library/Polipo/ /Library/StartupItems/Polipo/ +echo ". Finished" +