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