URI: 
       tInstall - mixmaster - mixmaster 3.0 patched for libressl
  HTML git clone git://parazyd.org/mixmaster.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
       ---
       tInstall (28319B)
       ---
            1 #!/bin/sh
            2 # Mixmaster version 3.0  --  (C) 1999-2008 Anonymizer Inc. and others.
            3 
            4 # Mixmaster may be redistributed and modified under certain conditions.
            5 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
            6 # ANY KIND, either express or implied. See the file COPYRIGHT for
            7 # details.
            8 
            9 # $Id: Install 979 2008-03-03 18:17:07Z rabbi $
           10 
           11 #whereis program default-path
           12 whereis()
           13 {
           14   #echo "Looking for $1..."
           15   found=""
           16   for i in $* `which $1 2>&1`
           17   do
           18     if [ -f "$i" -a -x "$i" ]
           19     then
           20       found=$i
           21     fi
           22   done
           23   if [ "$found" = "" ]
           24   then
           25     found=$2
           26 #    echo "$1 not found. Using $found."
           27 #  else
           28 #    echo "$1 is at $found."
           29   fi
           30 }
           31 
           32 if echo -n | grep n >/dev/null
           33 then
           34  echo1=""
           35  echo2="\c"
           36 else
           37  echo1="-n"
           38  echo2=""
           39 fi
           40 
           41 # readln text default
           42 readln()
           43 {
           44   echo $echo1 "$1 [$2] $echo2"
           45   read ans
           46   if [ -z "$ans" ]
           47   then
           48     ans="$2"
           49   fi
           50 }
           51 
           52 # findlib libxxx.a -- find and configure libraries
           53 #    Input:
           54 #       $1       library name
           55 #       $CONFIG  library configure options
           56 #       $INCDIR  possible include directories
           57 #       $SRCDIR  possible library source directories
           58 #       $LIBDIR  possible library binary directories
           59 #
           60 #    Output:
           61 #       $found   library directory
           62 #       $lib     library name
           63 #       $INCDIR  include directory if required, empty otherwise
           64 #       $LDFLAG  linker options
           65 #       $LIB     path to library file
           66 #       $MAKELIB Makefile entry to compile library
           67 findlib()
           68 {
           69  lib=$1
           70  libso=`echo $lib | sed 's/\.a$/.so/'`
           71  echo "Looking for $lib..."
           72 
           73  found=
           74  source=
           75  type=
           76  LIB=
           77  LDFLAG=
           78  MAKELIB=
           79 
           80  for i in /usr/local/lib /usr/lib /lib /usr/lib64
           81  do
           82   if [ -r $i/$lib -o -r $i/$libso ]
           83   then
           84    found=$i
           85    type=system
           86   fi
           87  done
           88 
           89  for i in $LIBDIR
           90  do
           91   if [ -r $i/$lib -o -r $i/$libso ]
           92   then
           93    found=$i
           94    type=installed
           95   fi
           96  done
           97 
           98  for i in $SRCDIR
           99  do
          100   if [ -r $i/$lib -o -r $i/lib/$lib ]
          101   then
          102    found=$i
          103    type=binary
          104   fi
          105  done
          106 
          107  if [ -r "$found/$libso" ]
          108  then
          109   echo "Found at $found/$libso."
          110  elif [ -r "$found/$lib" ]
          111  then
          112   echo "Found at $found/$lib."
          113  elif [ -r "$found/lib/$lib" ]
          114  then
          115   echo "Found at $found/lib/$lib."
          116  fi
          117 
          118  for i in $SRCDIR
          119  do
          120   if [ -d $i -a ! "$type" = binary ]
          121   then
          122    source=$i
          123   fi
          124  done
          125 
          126  if [ "$source" != "" ]
          127  then
          128   echo "Found source directory $source."
          129   if [ "$found" = "" ]
          130   then
          131    ans=y
          132   else
          133    echo "Use the source if the pre-installed library causes compilation problems."
          134    readln "Use source?" n
          135   fi
          136   if [ "$ans" = "y" ]
          137   then
          138    found=$source
          139    type=source
          140   fi
          141  fi
          142 
          143  if [ "$found" = "" ]
          144  then
          145   echo "Not found."
          146  fi
          147 
          148  if [ -r $found/lib/$lib ]
          149  then
          150   LIB=$found/lib/$lib
          151  else
          152   LIB=$found/$lib
          153  fi
          154  if [ "$type" = system ]
          155  then
          156   LIB=
          157   LDFLAG="-l`echo $lib | sed 's/^lib//;s/\.a$//'` -L$found"
          158   if [ "$found" = "/usr/local/lib" ]
          159   then
          160     INCDIR="/usr/local/include $INCDIR"
          161   fi
          162  fi
          163 
          164  incdir=$INCDIR
          165  INCDIR=
          166  for i in $incdir
          167  do
          168   if [ -d $i ]
          169   then
          170    INCDIR=$i
          171   fi
          172  done
          173 
          174  if [ "$type" = source -o "$type" = binary ]
          175  then
          176   if [ ! -r $found/lib/$lib ]
          177   then
          178    MAKELIB="$found/$lib:
          179         cd $found; make $lib"
          180   fi
          181   if [ -d $found/include ]
          182   then
          183    INCDIR=$found/include
          184   else
          185    INCDIR=$found
          186   fi
          187  fi
          188 
          189  if [ "$type" = source ]
          190  then
          191   dir=`pwd`
          192   if [ "$dir" = "" ]
          193   then
          194    dir=$PWD
          195   fi
          196 
          197   cd $found
          198   if [ -x configure ]
          199   then
          200    echo "Configuring..."
          201    ./configure $CONFIG
          202   fi
          203   if [ "$lib" = "libcrypto.a" ]
          204   then
          205    if [ -f config ]
          206    then
          207     sh config
          208    elif [ -x Configure ]
          209    then
          210     ./Configure 2>tmp.$$
          211     cat tmp.$$
          212     readln "Your system?" `cat tmp.$$ | tr ' ' '\n' | grep -i \`uname\` | tail -1`
          213     rm -f tmp.$$
          214     echo "Configuring..."
          215     ./Configure $ans
          216    fi
          217   fi
          218   cd $dir
          219  fi
          220 }
          221 
          222 # Global installation.
          223 
          224 
          225 ##########################################################################
          226 umask 077
          227 
          228 #FIXME -- Mixmaster now should be installed as root, and Install should
          229 #create a remailer user. /var/spool/mixmaster is a good home.
          230 
          231 if [ `whoami` = root ]
          232 then
          233  echo "Please create a new user, e.g, \`mix', and install Mixmaster under that
          234 user id.  Installing Mixmaster as root is not recommended."
          235  readln "Continue anyway?" n
          236  if [ "$ans" = n ]
          237  then
          238   exit 1
          239  fi
          240 fi
          241 
          242 MIXDIR="$PWD"
          243 if [ "$MIXDIR" = "" ]
          244 then
          245  MIXDIR=`pwd`
          246 fi
          247 MIXCFG="$MIXDIR/conf"
          248 MIXSRC="$MIXDIR/Src"
          249 MIXDEST0=${MIXPATH:-$HOME/Mix}
          250 
          251 system=`uname`
          252 if [ "$system" = "MS-DOS" ]
          253 then
          254  system=msdos
          255 fi
          256 
          257 if [ "$HOSTNAME" = "" ]
          258 then
          259  HOSTNAME=`hostname`
          260 fi
          261 if [ "$HOSTNAME" = "" ]
          262 then
          263  HOSTNAME=msdos
          264  system=msdos
          265 fi
          266 
          267 if [ "$system" = msdos ]
          268 then
          269  MIXDEST0=${MIXPATH:-C:/Mix}
          270 fi
          271 
          272 if [ -f "$MIXSRC/Makefile" ]
          273 then
          274  if grep "#Makefile generated.*$HOSTNAME" $MIXSRC/Makefile
          275  then
          276   echo "Found a Makefile for this system."
          277   readln "Use this Makefile?" y
          278   if [ "$ans" = n ]
          279   then
          280    rm -f "$MIXSRC/Makefile"
          281   fi
          282  else
          283   readln "Remove old Makefile?" y
          284   if [ "$ans" = y ]
          285   then
          286    rm -f "$MIXSRC/Makefile"
          287   fi
          288  fi
          289 fi
          290 
          291 if [ -f "$MIXSRC/Makefile" ]
          292 then
          293  MIXDEST=`grep "DSPOOL=" $MIXSRC/Makefile | sed 's/.*DSPOOL=..//;s/\".*//'`
          294  if [ "$MIXDEST" = "" ]
          295  then
          296   MIXDEST="$MIXDEST0"
          297  fi
          298 fi
          299 
          300 if [ "$MIXDEST" = "" ]
          301 then
          302  readln "Mixmaster directory?" "$MIXDEST0"
          303  MIXDEST=$ans
          304 else
          305  echo "Mixmaster directory: $MIXDEST"
          306 fi
          307 
          308 if [ ! -d "$MIXDEST" ]
          309 then
          310   echo "Creating directory $MIXDEST"
          311   mkdir "$MIXDEST"
          312 fi
          313 
          314 if [ ! -d "$MIXDEST" ]
          315 then
          316   echo "Cannot not create $MIXDEST"
          317   exit 1
          318 fi
          319 
          320 if [ -f "$MIXDEST/mix.cfg" ]
          321 then
          322   if [ -f "$MIXDEST/secring.mix" ]
          323   then
          324     remailer=y
          325     if grep PASSPHRASE "$MIXDEST/mix.cfg" >/dev/null
          326     then
          327       PASSINCONFIG=1
          328     fi
          329   else
          330     readln "Do you want to set up a remailer?" n
          331     remailer=$ans
          332   fi
          333 elif [ -f "$MIXDEST/mixmaster.conf" ]
          334 then
          335   echo "Upgrading from Mixmaster 2.0.*"
          336   remailer=n
          337 else
          338   readln "Do you want to set up a remailer?" y
          339   remailer=$ans
          340 fi
          341 
          342 
          343 ans=""
          344 if [ "$remailer" = "y" ]
          345 then
          346   ans="n"
          347   if [ "$PASSINCONFIG" != 1 ]
          348   then
          349     echo ""
          350     echo "You can either compile your secret passphrase into the binary
          351 or you can set it in your config file. Note that the former does not
          352 really increase security as the passphrase can still be discovered by
          353 running something like \`strings mixmaster'."
          354     echo ""
          355     echo "Most users should answer \`n' to this question:"
          356     echo ""
          357     readln "Do you want to compile the passphrase into the binary?" n
          358   fi
          359 
          360   rm -f "$MIXSRC/mix.o" # make sure our new passphrase takes effect
          361   if [ "$ans" = "y" ]
          362   then
          363     ans=""
          364     echo "Please enter a passphrase for your remailer (must be the same
          365 whenever you re-compile Mixmaster)."
          366     read ans
          367 
          368     if [ "$ans" != "" ]
          369     then
          370       PASS="PASS=$ans"
          371     else
          372       echo "WARNING: not setting a passphrase"
          373     fi
          374   else
          375     if [ "$PASSINCONFIG" != 1 ]
          376     then
          377       ans=""
          378       echo "Please enter a passphrase for your remailer (it will be 
          379 stored in mix.cfg in clear)."
          380       read ans
          381 
          382       if [ "$ans" = "" ]
          383       then
          384         echo "WARNING: setting empty passphrase"
          385       fi
          386       PASSPHRASE="PASSPHRASE        $ans"
          387       if [ -f $MIXDEST/mix.cfg ]
          388       then
          389         echo "$PASSPHRASE" >> $MIXDEST/mix.cfg
          390       fi
          391     fi
          392   fi
          393 fi
          394 
          395 
          396 cd "$MIXSRC"
          397 if [ ! -f Makefile ]
          398 then
          399  LIBS=
          400  INC=
          401  DEF=
          402  LDFLAGS=
          403 
          404  if [ ! -z "$PASS" ]
          405  then
          406    DEF="$DEF -DCOMPILEDPASS='\"\$(PASS)\"'"
          407  fi
          408 
          409  if [ "$system" = msdos ]
          410  then
          411   readln "Use WIN32 GUI?" y
          412   if [ "$ans" = y ]
          413   then
          414    system=win32
          415    LDFLAGS=-lwsock32
          416   fi
          417  fi
          418  if [ "$system" = SunOS ]
          419  then
          420   LDFLAGS="-lsocket -lnsl"
          421  fi
          422 
          423  LIBDIR=
          424  INCDIR=
          425  SRCDIR=zlib*
          426  findlib libz.a
          427  if [ "$found" = "" ]
          428  then
          429   readln "Continue anyway?" n
          430   if [ "$ans" = "n" ]
          431   then
          432    echo "Please install zlib 1.1.4 or 1.2.3 or greater now."
          433    exit 1
          434   fi
          435  else
          436   ZLIB="$MAKELIB"
          437   DEF="$DEF -DUSE_ZLIB"
          438   LIBS="$LIBS $LIB"
          439   LDFLAGS="$LDFLAGS $LDFLAG"
          440   if [ "$INCDIR" != "" ]
          441   then
          442    INC="$INC -I$INCDIR"
          443   fi
          444  fi
          445 
          446  LIBDIR=
          447  INCDIR="/usr/include /usr/include/pcre /usr/local/pcre/include"
          448  SRCDIR=pcre*
          449  findlib libpcre.a
          450  if [ "$found" != "" ]
          451  then
          452   PCRE="$MAKELIB"
          453   DEF="$DEF -DUSE_PCRE"
          454   LIBS="$LIBS $LIB"
          455   LDFLAGS="$LDFLAGS $LDFLAG"
          456   if [ "$INCDIR" != "" ]
          457   then
          458    INC="$INC -I$INCDIR"
          459   fi
          460  fi
          461 
          462  opensslinfo="Please get OpenSSL 0.9.6l or greater from http://www.openssl.org/"
          463  opensslwarning6="WARNING: This version of OpenSSL contains known vulnerabilities. Please upgrade to OpenSSL 0.9.6l or greater!"
          464  opensslwarning7="WARNING: This version of OpenSSL contains known vulnerabilities. Please upgrade to OpenSSL 0.9.7c or greater!"
          465  opensslwarning0=$opensslwarning7
          466  LIBDIR=/usr/local/ssl/lib
          467  INCDIR="/usr/include /usr/include/ssl /usr/lib/ssl/include /usr/local/ssl/include"
          468  SRCDIR="openssl*"
          469 
          470  opensslwarn()
          471  {
          472  if [ "$1" = "6" ]
          473  then
          474   echo $opensslwarning6
          475  elif [ "$1" = "7" ]
          476  then
          477   echo $opensslwarning7
          478  else 
          479   echo $opensslwarning0
          480  fi
          481   readln "Continue anyway?" y
          482   if [ "$ans" = "n" ]
          483   then
          484    echo $opensslinfo
          485    exit 1
          486   fi
          487  }
          488 
          489  if [ "$system" = win32 ]
          490  then
          491   findlib libeay32.a
          492  else
          493   findlib libcrypto.a
          494  fi
          495  if [ "$found" = "" ]
          496  then
          497   echo $opensslinfo
          498   exit 1
          499  fi
          500 
          501  OPENSSLLIB="$LIB"
          502  LIBS="$LIBS $LIB"
          503  LDFLAGS="$LDFLAGS $LDFLAG"
          504  if [ "$MAKELIB" != "" ]
          505  then
          506   OPENSSL="$found/$lib:
          507         cd $found/crypto; make"
          508  fi
          509  if [ -d "$INCDIR/openssl" ]
          510  then
          511   INC="$INC -I$INCDIR"
          512  else
          513   # detect old SSLeay versions
          514   if [ -f "$INCDIR/crypto.h" ]
          515   then
          516    version=800
          517    if grep OPENSSL "$INCDIR/crypto.h" > /dev/null
          518    then
          519     version=920
          520    fi
          521   fi
          522  fi
          523 
          524  # Find the OpenSSL version header
          525  if [ -f "$INCDIR/openssl/opensslv.h" ]
          526  then
          527   version=`grep 'SSL.*_VERSION_NUMBER.*0x' $INCDIR/openssl/opensslv.h | sed 's/.*0x0*//;s/[         ].*//;s/L$//' | tr '[a-f]' '[A-F]'`
          528  elif [ -f "$INCDIR/opensslv.h" ]
          529  then
          530   version=`grep 'SSL.*_VERSION_NUMBER.*0x' $INCDIR/opensslv.h | sed 's/.*0x0*//;s/[         ].*//;s/L$//' | tr '[a-f]' '[A-F]'`
          531  fi
          532  if [ "$version" = "" ]
          533  then
          534   echo "Warning: Can't find OpenSSL version number!"
          535   readln "Continue anyway?" y
          536   if [ "$ans" = "n" ]
          537   then
          538    echo $opensslinfo
          539    exit 1
          540   fi
          541 #
          542 # Here we match against known OpenSSL versions
          543 #
          544  elif [ "$version" = "90581F" ]
          545  then
          546   decimalversion=9459743
          547   echo "Compiling with OpenSSL 0.9.5a."
          548   opensslwarn 6
          549  elif [ "$version" = "90601F" ]
          550  then
          551   decimalversion=9461791
          552   echo "Compiling with OpenSSL 0.9.6a."
          553   opensslwarn 6
          554  elif [ "$version" = "90602F" ]
          555  then
          556   decimalversion=9461807
          557   echo "Compiling with OpenSSL 0.9.6b."
          558   opensslwarn 6
          559  elif [ "$version" = "90603F" ]
          560  then
          561   decimalversion=9461823
          562   echo "Compiling with OpenSSL 0.9.6c."
          563   opensslwarn 6
          564  elif [ "$version" = "90604F" ]
          565  then
          566   decimalversion=9461839
          567   echo "Compiling with OpenSSL 0.9.6d."
          568   opensslwarn 6
          569  elif [ "$version" = "90605F" ]
          570  then
          571   decimalversion=9461855
          572   echo "Compiling with OpenSSL 0.9.6e."
          573   opensslwarn 6
          574  elif [ "$version" = "90606F" ]
          575  then
          576   decimalversion=9461871
          577   echo "Compiling with OpenSSL 0.9.6f."
          578   opensslwarn 6
          579  elif [ "$version" = "90607F" ]
          580  then
          581   decimalversion=9461887
          582   echo "Compiling with OpenSSL 0.9.6g."
          583   opensslwarn 6
          584  elif [ "$version" = "90608F" ]
          585  then
          586   decimalversion=9461903
          587   echo "Compiling with OpenSSL 0.9.6h."
          588   opensslwarn 6
          589 elif [ "$version" = "90609F" ]
          590  then
          591   decimalversion=9461919
          592   echo "Compiling with OpenSSL 0.9.6i."
          593   opensslwarn 6
          594  elif [ "$version" = "9060A0" ]
          595  then
          596   decimalversion=9461920
          597   echo "Compiling with OpenSSL 0.9.6j."
          598   opensslwarn 6
          599  elif [ "$version" = "9060B0" ]
          600  then
          601   decimalversion=9461936
          602   echo "Compiling with OpenSSL 0.9.6k."
          603   opensslwarn 6
          604  elif [ "$version" = "9060C0" ]
          605  then
          606   decimalversion=9461952
          607   echo "Compiling with OpenSSL 0.9.6l."
          608  elif [ "$version" = "9060D0" ]
          609  then
          610   decimalversion=9461968
          611   echo "Compiling with OpenSSL 0.9.6m."
          612  elif [ "$version" = "90700F" ]
          613  then
          614   decimalversion=9465871
          615   echo "Compiling with OpenSSL 0.9.7."
          616   opensslwarn 7
          617   DEF="$DEF -DUSE_AES"
          618  elif [ "$version" = "90701F" ]
          619  then
          620   decimalversion=9465887
          621   echo "Compiling with OpenSSL 0.9.7a."
          622   opensslwarn 7
          623   DEF="$DEF -DUSE_AES"
          624  elif [ "$version" = "90702F" ]
          625  then
          626   decimalversion=9465903
          627   echo "Compiling with OpenSSL 0.9.7b."
          628   opensslwarn 7
          629   DEF="$DEF -DUSE_AES"
          630  elif [ "$version" = "90703F" ]
          631  then
          632   decimalversion=9465919
          633   echo "Compiling with OpenSSL 0.9.7c."
          634   DEF="$DEF -DUSE_AES"
          635  elif [ "$version" = "90704F" ]
          636  then
          637   decimalversion=9465935
          638   echo "Compiling with OpenSSL 0.9.7d."
          639   DEF="$DEF -DUSE_AES"
          640  elif [ "$version" = "90705F" ]
          641  then
          642   decimalversion=9465951
          643   echo "Compiling with OpenSSL 0.9.7e."
          644   DEF="$DEF -DUSE_AES"
          645  elif [ "$version" = "90706F" ]
          646  then
          647   decimalversion=9465967
          648   echo "Compiling with OpenSSL 0.9.7f."
          649   DEF="$DEF -DUSE_AES"
          650  elif [ "$version" = "90707F" ]
          651  then
          652   decimalversion=9465983
          653   echo "Compiling with OpenSSL 0.9.7g."
          654   DEF="$DEF -DUSE_AES"
          655  elif [ "$version" = "90708F" ]
          656  then
          657   decimalversion=9465999
          658   echo "Compiling with OpenSSL 0.9.7h."
          659   DEF="$DEF -DUSE_AES"
          660  elif [ "$version" = "90709F" ]
          661  then
          662   decimalversion=9466015
          663   echo "Compiling with OpenSSL 0.9.7i."
          664   DEF="$DEF -DUSE_AES"
          665 
          666  elif [ "$version" = "9070AF" ]
          667  then
          668   decimalversion=9466031
          669   echo "Compiling with OpenSSL 0.9.7j."
          670   DEF="$DEF -DUSE_AES"
          671  elif [ "$version" = "9070BF" ]
          672  then
          673   decimalversion=9466047
          674   echo "Compiling with OpenSSL 0.9.7k."
          675   DEF="$DEF -DUSE_AES"
          676  elif [ "$version" = "9070CF" ]
          677  then
          678   decimalversion=9466063
          679   echo "Compiling with OpenSSL 0.9.7l."
          680   DEF="$DEF -DUSE_AES"
          681  elif [ "$version" = "9070DF" ]
          682  then
          683   decimalversion=9466079
          684   echo "Compiling with OpenSSL 0.9.7m."
          685   DEF="$DEF -DUSE_AES"
          686  elif [ "$version" = "9070EF" ]
          687  then
          688   decimalversion=9466095
          689   echo "Compiling with OpenSSL 0.9.7n."
          690   echo "This version was unreleased at the time of packaging."
          691   echo "It is not guaranteed to work. Please report any problems."
          692   DEF="$DEF -DUSE_AES"
          693  elif [ "$version" = "90800F" ]
          694  then
          695   decimalversion=9469967
          696   echo "Compiling with OpenSSL 0.9.8."
          697   DEF="$DEF -DUSE_AES"
          698  elif [ "$version" = "90801F" ]
          699  then
          700   decimalversion=9469983
          701   echo "Compiling with OpenSSL 0.9.8a."
          702   DEF="$DEF -DUSE_AES"
          703  elif [ "$version" = "90802F" ]
          704  then
          705   decimalversion=9469999
          706   echo "Compiling with OpenSSL 0.9.8b."
          707   DEF="$DEF -DUSE_AES"
          708  elif [ "$version" = "90803F" ]
          709  then
          710   decimalversion=9470015
          711   echo "Compiling with OpenSSL 0.9.8c."
          712   DEF="$DEF -DUSE_AES"
          713  elif [ "$version" = "90804F" ]
          714  then
          715   decimalversion=9470031
          716   echo "Compiling with OpenSSL 0.9.8d."
          717   DEF="$DEF -DUSE_AES"
          718  elif [ "$version" = "90805F" ]
          719  then
          720   decimalversion=9470047
          721   echo "Compiling with OpenSSL 0.9.8e."
          722   DEF="$DEF -DUSE_AES"
          723  elif [ "$version" = "90806F" ]
          724  then
          725   decimalversion=9470063
          726   echo "Compiling with OpenSSL 0.9.8f."
          727   DEF="$DEF -DUSE_AES"
          728  elif [ "$version" = "90807F" ]
          729  then
          730   decimalversion=9470079
          731   echo "Compiling with OpenSSL 0.9.8g."
          732   DEF="$DEF -DUSE_AES"
          733  elif [ "$version" = "90808F" ]
          734  then
          735   decimalversion=9470095
          736   echo "Compiling with OpenSSL 0.9.8h."
          737   DEF="$DEF -DUSE_AES"
          738  elif [ "$version" = "90809F" ]
          739  then
          740   decimalversion=9470111
          741   echo "Compiling with OpenSSL 0.9.8h."
          742   echo "This version was unreleased at the time of packaging."
          743   echo "It is not guaranteed to work. Please report any problems."
          744   DEF="$DEF -DUSE_AES"
          745  fi
          746 #
          747 # Now we try to guess about unknown versions: 
          748 #
          749  if [ "$decimalversion" = "" ]
          750  then
          751   decimalversion=`echo 16i $version p | dc`
          752  fi
          753  if [ "$decimalversion" = "" ]
          754  then
          755   echo "Warning: This version: ${version} of OpenSSL is not recognized."
          756   readln "Continue anyway?" y
          757   if [ "$ans" = "n" ]
          758   then
          759    echo $opensslinfo
          760    exit 1
          761   else
          762    echo "Does this version of OpenSSL contain AES support?"
          763    readln "If unsure of the answer, say \`n'" n
          764     if [ "$ans" = "y" ]
          765     then
          766     DEF="$DEF -DUSE_AES"
          767     fi
          768   fi
          769  elif [ "$decimalversion" -lt "2336" ]  # 920
          770  then
          771   echo "This version: ${version} of SSLeay is not supported."
          772   echo $opensslinfo
          773   exit 1
          774  elif [ "$decimalversion" -lt "9449728" ]  # 903100
          775  then
          776   echo "This version: ${version} of OpenSSL is not supported."
          777   echo $opensslinfo
          778   exit 1
          779  elif [ "$decimalversion" -gt "9470111" ]  # 0.9.8h
          780  then
          781   echo "Warning: This version: ${version} of OpenSSL is untested."
          782   readln "Continue anyway?" y
          783   if [ "$ans" = "n" ]
          784   then
          785    echo $opensslinfo
          786    exit 1
          787   else 
          788    echo "Does this version of OpenSSL contain AES support?"
          789    readln "If unsure of the answer, say \`n'" n
          790     if [ "$ans" = "y" ]
          791     then
          792     DEF="$DEF -DUSE_AES"
          793     fi
          794   fi
          795  fi
          796 
          797  LIBDIR=
          798  INCDIR=/usr/include/ncurses
          799  SRCDIR=ncurses*
          800  CONFIG=--enable-termcap
          801  if [ "$TERMINFO" != "" ]
          802  then
          803   CONFIG="--datadir=$TERMINFO"
          804  fi
          805  if [ -d /usr/share/terminfo ]
          806  then
          807   CONFIG=
          808  fi
          809  if [ -d /usr/lib/terminfo ]
          810  then
          811   CONFIG=--datadir=/usr/lib/terminfo
          812  fi
          813 
          814   if [ `uname` = OpenBSD ]
          815   then
          816    findlib libcurses.a
          817   else
          818    findlib libncurses.a
          819   fi
          820  if [ "$found" = "" ]
          821  then
          822   if [ "$system" != win32 ]
          823   then
          824    readln "Do you want to use Mixmaster's menu-based user interface?" y
          825    if [ "$ans" = "y" ]
          826    then
          827     echo "Please install ncurses now. It is available from http://www.clark.net/pub/dickey/ncurses/ncurses.tar.gz"
          828     exit 1
          829    fi
          830   fi
          831  else
          832   DEF="$DEF -DUSE_NCURSES"
          833   if [ "$type" = system -o "$type" = installed ]
          834   then
          835    LIBS="$LIBS $LIB"
          836    LDFLAGS="$LDFLAGS $LDFLAG"
          837   else
          838    LIBS="$LIBS $found/lib/$lib"
          839    NCURSES="$found/lib/$lib:
          840         cd $found/ncurses; make ../lib/$lib"
          841   fi
          842   if [ "$INCDIR" != "" ]
          843   then
          844    INC="$INC -I$INCDIR"
          845   elif [ -f "/usr/include/ncurses.h" ]
          846   then
          847    DEF="$DEF -DHAVE_NCURSES_H"
          848   fi
          849  fi
          850 
          851  ideawarn()
          852  {
          853     echo "
          854   WARNING: Your version of OpenSSL has been configured without IDEA support.
          855   If you continue, Mixmaster will be installed with reduced functionality.
          856   This means (among other things) that Mixmaster will not create an RSA
          857   OpenPGP key (to avoid mail loss in the Type I system). You may want to
          858   re-install OpenSSL before proceeding.
          859 
          860   This will not concern you if you only plan to run a type II remailer or
          861   simply want a type II client."
          862     readln "Continue anyway?" y
          863     if [ "$ans" = "n" ]
          864     then
          865      exit 1
          866     fi
          867  }
          868 
          869  if [ "$system" = OpenBSD ]
          870  then
          871   LIBDIR=
          872   INCDIR=
          873   SRCDIR=idea*
          874   findlib libidea.a
          875   if [ "$found" = "" ]
          876   then
          877    ideawarn
          878   else
          879    DEF="$DEF -DUSE_IDEA"
          880    IDEALIB="$MAKELIB"
          881    LIBS="$LIBS $LIB"
          882    LDFLAGS="$LDFLAGS $LDFLAG"
          883    if [ "$INCDIR" != "" ]
          884    then
          885     INC="$INC -I$INCDIR"
          886    fi
          887   fi
          888  elif [ "$system" = msdos -o "$system" = win32 ]
          889  then
          890   DEF="$DEF -DUSE_IDEA"
          891  else
          892    echo "Checking for IDEA support..."
          893    cat <<END >tmptst.c
          894 #include <openssl/idea.h>
          895 int main() {
          896   void *dummy;
          897   dummy = idea_cfb64_encrypt;
          898   exit(0);
          899 }
          900 END
          901    if gcc $LDFLAGS $INC tmptst.c -o tmptst $OPENSSLLIB
          902    then
          903      DEF="$DEF -DUSE_IDEA"
          904    else
          905      ideawarn
          906    fi
          907    rm -f tmptst.c tmptst
          908  fi
          909 
          910  echo "testing for setenv()..."
          911  cat <<END >tmptst.c
          912 int main() {
          913 #include <stdlib.h>
          914  setenv("TZ", "GMT", 0);
          915  exit(0);
          916 }
          917 END
          918  if gcc tmptst.c -o tmptst
          919  then
          920    DEF="$DEF -DHAVE_SETENV"
          921  fi
          922  echo "done"
          923  rm -f tmptst.c tmptst
          924 
          925 # if [ "$MIXDEST" = "$HOME/Mix" ]
          926 # then
          927 #  SPOOL=
          928 # else
          929   SPOOL=-DSPOOL=\'\"$MIXDEST\"\'
          930 # fi
          931 
          932  echo "Generating Makefile."
          933  echo "#Makefile generated on $HOSTNAME `date`" >Makefile
          934  sed -e "s#%MIXDIR#$SPOOL#" \
          935      -e "s#%LIBS#$LIBS#" \
          936      -e "s#%LDFLAGS#$LDFLAGS#" \
          937      -e "s#%INC#$INC#" \
          938      -e "s#%DEF#$DEF#" < Makefile.in >> Makefile
          939 # echo "$ZLIB" >>Makefile
          940 # echo "$PCRE" >>Makefile
          941  echo "$IDEALIB" >>Makefile
          942  echo "$NCURSES" >>Makefile
          943  echo "$OPENSSL" >>Makefile
          944 fi
          945 
          946 
          947 
          948 
          949 
          950 echo "Compiling. Please wait."
          951 whereis make
          952 make=$found
          953 
          954 if [ "$system" = win32 ]
          955 then
          956 # (cd zlib*; make libz.a)
          957 # (cd pcre*; make libpcre.a)
          958  if [ "$PASS" != "" ]
          959  then
          960   $make "$PASS" dllmix
          961  else
          962   $make dllmix
          963  fi
          964 else
          965  if [ "$PASS" != "" ]
          966  then
          967   $make "$PASS"
          968  else
          969   $make
          970  fi
          971 fi
          972 
          973 if [ -x mixmaster ]
          974 then
          975  echo
          976 else
          977  echo "Error: The compilation failed. Please consult the documentation (section
          978 \`Installation problems')."
          979  readln "Remove the old Makefile?" y
          980  if [ "$ans" = y ]
          981  then
          982   rm -f Makefile
          983  fi
          984  exit 1
          985 fi
          986 
          987 if [ -f "$MIXDEST/mixmaster.conf" -a ! -f "$MIXDEST/mix.cfg" ]
          988 then
          989  export MIXDEST
          990  export MIXDIR
          991  export MIXSRC
          992  "${MIXDIR}/upgrade"
          993  exit 0
          994 fi
          995 
          996 if [ -f mixmaster.exe ]
          997 then
          998  cp mixmaster.exe "$MIXDEST"
          999 else
         1000  cp mixmaster "$MIXDEST"
         1001 fi
         1002 
         1003 cd "$MIXCFG"
         1004 for i in mlist.txt pubring.mix rlist.txt pubring.asc
         1005 do
         1006  if [ ! -f "$MIXDEST/$i" ]
         1007  then
         1008   cp "$i" "$MIXDEST"
         1009  fi
         1010 done
         1011 
         1012 if [ "$remailer" = "y" ]
         1013 then
         1014  cd "$MIXCFG"
         1015  for i in adminkey.txt dest.alw
         1016  do
         1017   if [ ! -f "$MIXDEST/$i" ]
         1018   then
         1019    cp "$i" "$MIXDEST"
         1020   fi
         1021  done
         1022 fi
         1023 
         1024 if [ "$remailer" = "n" ]
         1025 then
         1026  if [ ! -f "$MIXDEST/mix.cfg" ]
         1027  then
         1028   whereis sendmail /usr/lib/sendmail /usr/sbin/sendmail
         1029   echo "SENDMAIL        $found -t" >"$MIXDEST/mix.cfg"
         1030   cat mix.cfg >>"$MIXDEST/mix.cfg"
         1031  fi
         1032  echo "Client installation complete."
         1033  exit
         1034 fi
         1035 
         1036 for i in *.blk
         1037 do
         1038  if [ ! -f "$MIXDEST/$i" ]
         1039  then
         1040   cp "$i" "$MIXDEST"
         1041  fi
         1042 done
         1043 
         1044 cd "$MIXDEST"
         1045 
         1046 installed=n
         1047 if [ -f mix.cfg ]
         1048 then
         1049  if grep REMAILERADDR mix.cfg >/dev/null
         1050  then
         1051   installed=y
         1052  fi
         1053 fi
         1054 
         1055 if [ "$installed" = "n" ]
         1056 then
         1057  Date=`date`
         1058  whereis sendmail /usr/lib/sendmail /usr/sbin/sendmail
         1059  sendmail=$found
         1060 
         1061  echo "Mixmaster can be installed in the low-maintenance \`middleman' mode.
         1062 In that mode, it will send mail to other remailers only, to avoid
         1063 complaints about anonymous messages."
         1064  readln "Install as middleman?" n
         1065  middle=$ans
         1066 
         1067  readln "The e-mail address of your remailer:" `whoami`@$HOSTNAME
         1068  RMA=$ans
         1069 
         1070  echo "Do you want Mixmaster to send auto-replies to messages it does not
         1071 understand (If the address <$RMA> is also used"
         1072  readln "for mail to be read by a human, type \`n')?" y
         1073  autoreply=$ans
         1074 
         1075  if [ "$middle" = n ]
         1076  then
         1077   readln "An address to appear in the \`From:' line of anonymous messages:" `echo $RMA | sed 's/.*@/nobody@/'`
         1078   RAA=$ans
         1079 
         1080   readln "Address for complaints to be sent to:" `echo $RMA | sed 's/.*@/abuse@/'`
         1081   CA=$ans
         1082  else
         1083   RAA=$RMA
         1084   CA=$RMA
         1085  fi
         1086 
         1087  echo "Choose a name for your remailer.  It will appear in remailer status messages."
         1088  readln "Long name:" "Anonymous Remailer"
         1089  RMN=$ans
         1090 
         1091  if [ "$middle" = n ]
         1092  then
         1093   echo "Choose a name to be used in the \`From:' line of remailed messages."
         1094   readln "Anon long name:" "Anonymous"
         1095   RAN=$ans
         1096  fi
         1097 
         1098  readln "A short name to appear in lists:" `echo $HOSTNAME|sed 's/\..*//'`
         1099  SN=$ans
         1100 
         1101  readln "Accept Mixmaster (Type II) messages?" y
         1102  mix=$ans
         1103 
         1104  readln "Accept PGP (Type I) remailer messages?" n
         1105  pgp=$ans
         1106 
         1107  unencrypted=n
         1108  if [ "$pgp" = "y" ]
         1109  then
         1110   readln "Accept unencrypted remailer messages?" n
         1111   unencrypted=$ans
         1112  fi
         1113 
         1114  echo "Mixmaster will log error messages and warnings. Do you want to log"
         1115  readln "informational messages about normal operation as well?" y
         1116  if [ "$ans" = y ]
         1117  then
         1118   verbose=2
         1119  else
         1120   verbose=1
         1121  fi
         1122 
         1123  readln "Filter binary attachments?" n
         1124  binfilter=$ans
         1125 
         1126  if [ "$middle" = n ]
         1127  then
         1128   if [ "$autoreply" = y ]
         1129   then
         1130    readln "Allow users to add themselves to the list of blocked addresses?" y
         1131    autoblock=$ans
         1132   fi
         1133 
         1134   echo "Do you want to allow posting? Newsgroups can be restricted in dest.blk.
         1135 y)es, post locally; use m)ail-to-news gateway; n)o."
         1136   readln "Allow posting to Usenet?" m
         1137   post="$ans"
         1138   if [ "$ans" = y ]
         1139   then
         1140    whereis inews /usr/lib/news/inews
         1141    readln "News posting software:" "$found -h"
         1142    news=$ans
         1143    readln "Organization line for anonymous Usenet posts:" "Anonymous Posting Service"
         1144    orga=$ans
         1145    readln "Use anti-spam message IDs?" y
         1146    mid=$ans
         1147   elif [ "$ans" = m ]
         1148   then
         1149    readln "Mail-to-news gateway:" mail2news@nym.alias.net
         1150    news=$ans
         1151   fi
         1152  fi
         1153 
         1154 # Commented the poolsize question out, since poolsize is the least
         1155 # important of the three pool parameters.
         1156 #
         1157 # echo "How many messages do you want to keep in the reordering pool?
         1158 #A larger pool is more secure, but also causes higher latency.
         1159 #0 means to remail immediately."
         1160 # readln "Pool size:" 45
         1161 # poolsize=$ans
         1162 
         1163  mbox=
         1164  if [ -f ~/.forward ]
         1165  then
         1166   mbox=`head -1 ~/.forward | sed 's/^"//;s/"$//'`
         1167   if echo "$mbox" | grep 'mix' >/dev/null 2>/dev/null
         1168   then
         1169    mbox=
         1170   elif echo "$mbox" | grep 'procmail' >/dev/null 2>/dev/null
         1171   then
         1172    if grep mix ~/.procmailrc >/dev/null 2>/dev/null
         1173    then
         1174     mbox=
         1175    fi
         1176   fi
         1177  fi
         1178 
         1179  if [ "$mbox" = "" ]
         1180  then
         1181   mbox=${MAIL:-/usr/spool/mail/$NAME}
         1182   touch "$mbox"
         1183   if [ ! -w "$mbox" ]
         1184   then
         1185    echo "$mbox is not writeable."
         1186    readln "Mailbox for non-remailer messages:" "${MIXDEST}/mbox"
         1187    mbox=$ans
         1188   fi
         1189  fi
         1190 
         1191  cat <<END >mix.cfg
         1192 # mix.cfg -- installed $Date
         1193 SENDMAIL        $sendmail -t
         1194 
         1195 # Where to store non-remailer messages:
         1196 MAILBOX                $mbox
         1197 #MAILABUSE        mbox.abuse
         1198 #MAILBLOCK        mbox.block
         1199 #MAILUSAGE        mbox.usage
         1200 #MAILANON        mbox.anon
         1201 #MAILERROR        mbox.error
         1202 #MAILBOUNCE        mbox.bounce
         1203 
         1204 REMAIL                y
         1205 MIDDLEMAN        $middle
         1206 
         1207 BINFILTER        $binfilter
         1208 AUTOBLOCK        $autoblock
         1209 
         1210 ERRLOG          error.log
         1211 VERBOSE                $verbose
         1212 
         1213 # Remailer name and addresses
         1214 REMAILERADDR        $RMA
         1215 ANONADDR        $RAA
         1216 COMPLAINTS        $CA
         1217 
         1218 SHORTNAME        $SN
         1219 REMAILERNAME        $RMN
         1220 ANONNAME        $RAN
         1221 
         1222 # Supported formats:
         1223 MIX             $mix
         1224 PGP             $pgp
         1225 UNENCRYPTED     $unencrypted
         1226 
         1227 # Maximum message size in kB (0 for no limit):
         1228 SIZELIMIT       0
         1229 
         1230 # Usenet news:
         1231 NEWS                $news
         1232 ORGANIZATION        $orga
         1233 MID                $mid
         1234 
         1235 # Remailing strategy:
         1236 SENDPOOLTIME    15m
         1237 POOLSIZE        45
         1238 RATE            65
         1239 INDUMMYP        10
         1240 OUTDUMMYP       90
         1241 CHAIN           *,*,*,*
         1242 IDEXP           7d
         1243 PACKETEXP       7d
         1244 
         1245 $PASSPHRASE
         1246 
         1247 END
         1248 
         1249 fi # not yet installed
         1250 
         1251 
         1252 REPLACE="s/%RMN/$RMN/g;s/%RMA/$RMA/g;s/%CA/$CA/g;s/%RAA/$RAA/g"
         1253 if [ "$installed" = "n" ]
         1254 then
         1255  cd "$MIXCFG"
         1256  if [ ! -f "$MIXDEST/help.txt" ]
         1257  then
         1258   sed "$REPLACE" < intro.hlp >"$MIXDEST/help.txt"
         1259   if [ "$mix" = y ]
         1260   then
         1261    sed "$REPLACE" < mix.hlp >>"$MIXDEST/help.txt"
         1262   fi
         1263   if [ "$unencrypted" = y ]
         1264   then
         1265    sed "$REPLACE" < type1.hlp >>"$MIXDEST/help.txt"
         1266    if [ "$pgp" = y ]
         1267    then
         1268     sed "$REPLACE" < pgp.hlp >>"$MIXDEST/help.txt"
         1269    fi
         1270   elif [ "$pgp" = y ]
         1271   then
         1272    sed "$REPLACE" < pgponly.hlp >>"$MIXDEST/help.txt"
         1273   fi
         1274   if [ "$post" = y ]
         1275   then
         1276    if [ "$pgp" = y -o "$unencrypted" = y ]
         1277    then
         1278     sed "$REPLACE" < news.hlp >>"$MIXDEST/help.txt"
         1279    fi
         1280   fi
         1281   sed "$REPLACE" < end.hlp >>"$MIXDEST/help.txt"
         1282  fi
         1283 
         1284  for i in *.txt.in
         1285  do
         1286   j=`echo $i | sed 's/\.in$//'`
         1287   if [ ! -f "$MIXDEST/$j" ]
         1288   then
         1289     sed "$REPLACE" < "$i" >"$MIXDEST/$j"
         1290   fi
         1291  done
         1292  cd "$MIXDEST"
         1293 fi
         1294 
         1295 echo
         1296 if [ ! -f secring.mix ]
         1297 then
         1298  echo "Generating secret keys. This may take a while..."
         1299 else
         1300  echo "Updating secret keys..."
         1301 fi
         1302 ./mixmaster -K
         1303 if [ -f key.txt ]
         1304 then
         1305  echo "Done."
         1306  echo
         1307 else
         1308  echo "Installation failed. Please consult the Mixmaster documentation."
         1309  exit 1
         1310 fi
         1311 
         1312 if [ "$system" = msdos -o "$system" = win32 ]
         1313 then
         1314  exit
         1315 fi
         1316 
         1317 umask 033
         1318 
         1319 # Set .forward?
         1320 # 
         1321 set=y
         1322 # FIXME -- Mixmastger should run in daemon mode, not from procmail
         1323 # Make the Install script do that.
         1324 
         1325 if grep procmail ~/.forward >/dev/null 2>/dev/null
         1326 then
         1327  if grep mix ~/.procmailrc >/dev/null 2>/dev/null
         1328  then
         1329   echo "Mixmaster is installed in your .procmailrc file."
         1330   set=n
         1331  fi
         1332 fi
         1333 
         1334 if [ "$set" = y -a -f ~/.forward ]
         1335 then
         1336  echo "Your current .forward is:"
         1337  cat ~/.forward
         1338  echo
         1339  if grep mix ~/.forward >/dev/null 2>/dev/null
         1340  then
         1341   echo "Mixmaster already is installed in your .forward file."
         1342   set=n
         1343  elif [ "$mbox" != "" ]
         1344  then
         1345   if echo "$mbox" | grep '|' >/dev/null 2>/dev/null
         1346   then
         1347    echo "Mixmaster will pipe messages to $mbox"
         1348   elif echo $mbox | grep '@' >/dev/null 2>/dev/null
         1349   then
         1350    echo "Mixmaster will forward messages to $mbox"
         1351   else
         1352    echo "Mixmaster will store messages to $mbox"
         1353   fi
         1354  fi
         1355 fi
         1356 
         1357 if [ "$set" = y ]
         1358 then
         1359  echo "Set .forward to the following line:"
         1360  echo "\"|${MIXDEST}/mixmaster -RM\""
         1361  if [ -f ~/.forward ]
         1362  then
         1363   readln "Overwrite now?" n
         1364  else
         1365   readln "Do that now?" n
         1366  fi
         1367  if [ "$ans" = "y" ]
         1368  then
         1369   echo "\"|${MIXDEST}/mixmaster -RM\"" >~/.forward
         1370  fi
         1371 fi
         1372 
         1373 #FIXME -- we need a second script that can re-generate help files
         1374 # when the conf changes.
         1375 
         1376 if [ "$RMA" != "" ]
         1377 then
         1378  echo "
         1379 Mixmaster will send the following files as auto-replies:
         1380 Mail to <$RMA> with Subject: remailer-help => help.txt"
         1381  echo "Mail to <$RMA> with Subject: remailer-adminkey => adminkey.txt
         1382 Remember to add your Remailer Admin public PGP key to the adminkey.txt file."
         1383  if [ "$autoblock" = y ]
         1384  then
         1385   echo "Mail to <$RMA> with line DESTINATION-BLOCK => blocked.txt"
         1386  fi
         1387  if [ "$autoreply" = y ]
         1388  then
         1389   echo "Other mail to <$RMA> => usage.txt"
         1390   echo
         1391   if [ "$CA" != "$RMA" ]
         1392   then
         1393    echo "If you arrange for mail to <$CA> and <$RAA>
         1394 to be forwarded to <$RMA>:
         1395 Mail to <$CA> => abuse.txt
         1396 Mail to <$RAA> => reply.txt"
         1397   fi
         1398  fi
         1399 fi
         1400 
         1401 echo
         1402 echo "Mixmaster installation complete."
         1403