diff -uNr clamdmail-0.15a.orig/clamdmail.c clamdmail-0.15a/clamdmail.c
--- clamdmail-0.15a.orig/clamdmail.c	2004-03-24 16:24:32.000000000 +0100
+++ clamdmail-0.15a/clamdmail.c	2004-06-05 14:08:19.425200872 +0200
@@ -33,6 +33,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <clamav.h>
+#if !defined(C_CYGWIN) && !defined(C_BEOS)
+#include <pwd.h>
+#endif
 
 
 #include "options.h"
@@ -40,6 +43,7 @@
 #include "shared.h"
 #include "defaults.h"
 #include "ripmime-api.h"
+#include "output.h"
 
 #define CLAMDMAIL_VER "0.15"
 
@@ -49,6 +53,9 @@
 void printtag(void);
 int quarantine(int fd, char *quarname, long timestamp, char **virname, char *From, char *FromR, char *To, char *out, struct optstruct *opt);
 
+struct s_info claminfo;
+short printinfected = 0;
+
 /* this local macro takes care about freeing memory at exit */
 /*
 #define mexit(i)    if(opt) free_opt(opt);			    \
@@ -167,11 +174,6 @@
 			tmpdir = "/tmp";
 #endif
 
-
-		if(writeaccess(tmpdir, UNPUSER) != 1) {
-			mprintf("@Can't write to the temporary directory.\n");
-			mexit(64);
-		}
 		/* generate the temporary directory */
 
 		dir = cl_gentemp(tmpdir);
@@ -185,11 +187,6 @@
 
 
 			tmper = tempnam(tmpfil, pfx);
-			/*if((tmp = tmpfile()) == NULL) {
-        			cli_dbgmsg("Can't generate tmpfile().\n");
-        			return CL_ETMPFILE;
-    			}
-			*/
 
     			fd = open(tmper,O_RDWR|O_CREAT, S_IRWXU);
 
@@ -230,7 +227,9 @@
 
 		free(dir);
 
+#ifdef USE_SPAMC
 		if(ret == CL_CLEAN && optl(opt, "spam")) isspam = spamc(fd,rcptto,maxsize);
+#endif
 
 		ret = spoolstdin(fd, ret, &virname, &bndrystore, opt);
 		
@@ -466,7 +465,9 @@
     mprintf("	  \n");
     mprintf("    --help		-h	Show help\n");
     mprintf("    --version		-V	Print version number and exit\n");
+#ifdef USE_SPAMC
     mprintf("    --spam			Pass message to spamc/spamd first.\n");
+#endif
     mprintf("    --tag			Tag messages as scanned.\n");
     mprintf("    --admin=you@you.com		The from address you want clamdmail to use when informing recipients\n");
     mprintf("				they have been sent an infected message. Basically, your postmaster account.\n");
diff -uNr clamdmail-0.15a.orig/client.c clamdmail-0.15a/client.c
--- clamdmail-0.15a.orig/client.c	2003-11-22 19:41:23.000000000 +0100
+++ clamdmail-0.15a/client.c	2004-06-05 13:34:39.870219896 +0200
@@ -35,9 +35,11 @@
 #include <dirent.h>
 
 #include "others.h"
-#include "cfgfile.h"
 #include "defaults.h"
 #include "shared.h"
+#include "cfgparser.h"
+#include "memory.h"
+#include "output.h"
 
 int client(const char *dirname, struct optstruct *opt, char **virname)
 {
diff -uNr clamdmail-0.15a.orig/Makefile.am clamdmail-0.15a/Makefile.am
--- clamdmail-0.15a.orig/Makefile.am	2003-11-22 22:29:47.000000000 +0100
+++ clamdmail-0.15a/Makefile.am	2004-06-05 13:34:39.870219896 +0200
@@ -20,6 +20,12 @@
 bin_PROGRAMS = clamdmail
 
 clamdmail_SOURCES = \
+	../shared/output.c \
+	../shared/output.h \
+	../shared/cfgparser.c \
+	../shared/cfgparser.h \
+	../shared/memory.c \
+	../shared/memory.h \
     options.c \
     options.h \
     clamdmail.c \
@@ -28,9 +34,9 @@
     treewalk.c \
     defaults.h
 
-clamdmail_LDADD = ../clamscan/getopt.o ../clamscan/others.o ../clamd/cfgfile.o
+clamdmail_LDADD = ../clamscan/getopt.o ../clamscan/others.o
 
 endif
 
-INCLUDES = -I../clamscan -I../clamd -I../libclamav
+INCLUDES = -I../clamscan -I../clamd -I../libclamav -I../shared
 LIBS = -L../libclamav -lclamav @FRESHCLAM_LIBS@
diff -uNr clamdmail-0.15a.orig/Makefile.in clamdmail-0.15a/Makefile.in
--- clamdmail-0.15a.orig/Makefile.in	2004-03-24 15:58:14.000000000 +0100
+++ clamdmail-0.15a/Makefile.in	2004-06-05 13:34:39.872219592 +0200
@@ -119,19 +119,26 @@
 @USE_PTHREAD_TRUE@bin_PROGRAMS = clamdmail
 
 @USE_PTHREAD_TRUE@clamdmail_SOURCES = \
+@USE_PTHREAD_TRUE@    ../shared/output.c \
+@USE_PTHREAD_TRUE@    ../shared/output.h \
+@USE_PTHREAD_TRUE@    ../shared/cfgparser.c \
+@USE_PTHREAD_TRUE@    ../shared/cfgparser.h \
+@USE_PTHREAD_TRUE@    ../shared/memory.c \
+@USE_PTHREAD_TRUE@    ../shared/memory.h \
 @USE_PTHREAD_TRUE@    options.c \
 @USE_PTHREAD_TRUE@    options.h \
 @USE_PTHREAD_TRUE@    clamdmail.c \
 @USE_PTHREAD_TRUE@    client.c \
 @USE_PTHREAD_TRUE@    treewalk.c \
-@USE_PTHREAD_TRUE@    spamcc.c \
-@USE_PTHREAD_TRUE@    defaults.h
+@USE_PTHREAD_TRUE@    defaults.h \
+#@USE_PTHREAD_TRUE@    spamcc.c
 
 
-@USE_PTHREAD_TRUE@clamdmail_LDADD = ../clamscan/getopt.o ../clamscan/others.o ../clamd/cfgfile.o
+@USE_PTHREAD_TRUE@clamdmail_LDADD = ../clamscan/getopt.o ../clamscan/others.o
 
-INCLUDES = -I../clamscan -I../clamd -I../libclamav
-LIBS = -L../libclamav -lclamav -lripmime -lspamc @FRESHCLAM_LIBS@
+INCLUDES = -I../clamscan -I../clamd -I../libclamav -I../shared
+#LIBS = -L../libclamav -lclamav -lripmime -lspamc @FRESHCLAM_LIBS@
+LIBS = -L../libclamav -lclamav -lripmime @FRESHCLAM_LIBS@
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -141,11 +148,13 @@
 PROGRAMS = $(bin_PROGRAMS)
 
 @USE_PTHREAD_TRUE@am_clamdmail_OBJECTS = options.$(OBJEXT) \
+@USE_PTHREAD_TRUE@	cfgparser.$(OBJEXT) memory.$(OBJEXT) \
+@USE_PTHREAD_TRUE@	output.$(OBJEXT) \
 @USE_PTHREAD_TRUE@	clamdmail.$(OBJEXT) client.$(OBJEXT) \
-@USE_PTHREAD_TRUE@	treewalk.$(OBJEXT) spamcc.$(OBJEXT)
+@USE_PTHREAD_TRUE@	treewalk.$(OBJEXT) # spamcc.$(OBJEXT)
 clamdmail_OBJECTS = $(am_clamdmail_OBJECTS)
 @USE_PTHREAD_TRUE@clamdmail_DEPENDENCIES = ../clamscan/getopt.o \
-@USE_PTHREAD_TRUE@	../clamscan/others.o ../clamd/cfgfile.o
+@USE_PTHREAD_TRUE@	../clamscan/others.o
 @USE_PTHREAD_FALSE@clamdmail_DEPENDENCIES =
 clamdmail_LDFLAGS =
 
@@ -157,6 +166,8 @@
 am__depfiles_maybe = depfiles
 @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/clamdmail.Po ./$(DEPDIR)/client.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/options.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/cfgparser.Po ./$(DEPDIR)/output.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/memory.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/treewalk.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -222,6 +233,9 @@
 	  echo " rm -f $$p $$f"; \
 	  rm -f $$p $$f ; \
 	done
+output.$(OBJEXT): ../shared/output.c
+cfgparser.$(OBJEXT): ../shared/cfgparser.c
+memory.$(OBJEXT): ../shared/memory.c
 clamdmail$(EXEEXT): $(clamdmail_OBJECTS) $(clamdmail_DEPENDENCIES) 
 	@rm -f clamdmail$(EXEEXT)
 	$(LINK) $(clamdmail_LDFLAGS) $(clamdmail_OBJECTS) $(clamdmail_LDADD) $(LIBS)
@@ -259,6 +273,61 @@
 	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 CCDEPMODE = @CCDEPMODE@
 
+output.o: ../shared/output.c
+@AMDEP_TRUE@	source='../shared/output.c' object='output.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/output.Po' tmpdepfile='$(DEPDIR)/output.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o output.o `test -f '../shared/output.c' || echo '$(srcdir)/'`../shared/output.c
+
+output.obj: ../shared/output.c
+@AMDEP_TRUE@	source='../shared/output.c' object='output.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/output.Po' tmpdepfile='$(DEPDIR)/output.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o output.obj `cygpath -w ../shared/output.c`
+
+output.lo: ../shared/output.c
+@AMDEP_TRUE@	source='../shared/output.c' object='output.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/output.Plo' tmpdepfile='$(DEPDIR)/output.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o output.lo `test -f '../shared/output.c' || echo '$(srcdir)/'`../shared/output.c
+
+cfgparser.o: ../shared/cfgparser.c
+@AMDEP_TRUE@	source='../shared/cfgparser.c' object='cfgparser.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/cfgparser.Po' tmpdepfile='$(DEPDIR)/cfgparser.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfgparser.o `test -f '../shared/cfgparser.c' || echo '$(srcdir)/'`../shared/cfgparser.c
+
+cfgparser.obj: ../shared/cfgparser.c
+@AMDEP_TRUE@	source='../shared/cfgparser.c' object='cfgparser.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/cfgparser.Po' tmpdepfile='$(DEPDIR)/cfgparser.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfgparser.obj `cygpath -w ../shared/cfgparser.c`
+
+cfgparser.lo: ../shared/cfgparser.c
+@AMDEP_TRUE@	source='../shared/cfgparser.c' object='cfgparser.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/cfgparser.Plo' tmpdepfile='$(DEPDIR)/cfgparser.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfgparser.lo `test -f '../shared/cfgparser.c' || echo '$(srcdir)/'`../shared/cfgparser.c
+
+memory.o: ../shared/memory.c
+@AMDEP_TRUE@	source='../shared/memory.c' object='memory.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/memory.Po' tmpdepfile='$(DEPDIR)/memory.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memory.o `test -f '../shared/memory.c' || echo '$(srcdir)/'`../shared/memory.c
+
+memory.obj: ../shared/memory.c
+@AMDEP_TRUE@	source='../shared/memory.c' object='memory.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/memory.Po' tmpdepfile='$(DEPDIR)/memory.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memory.obj `cygpath -w ../shared/memory.c`
+
+memory.lo: ../shared/memory.c
+@AMDEP_TRUE@	source='../shared/memory.c' object='memory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/memory.Plo' tmpdepfile='$(DEPDIR)/memory.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memory.lo `test -f '../shared/memory.c' || echo '$(srcdir)/'`../shared/memory.c
+CCDEPMODE = @CCDEPMODE@
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
