From f72035291347ecbd806f478a330df40a0fab2bc2 Mon Sep 17 00:00:00 2001 From: aCaB Date: Thu, 4 Dec 2008 16:26:58 +0000 Subject: [PATCH] fix connpool cleanup and add Chroot git-svn: trunk@4528 --- clamav-milter/clamav-milter.c | 11 +++++++++++ clamav-milter/connpool.c | 13 +++++++++---- etc/clamav-milter.conf | 6 +++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/clamav-milter/clamav-milter.c b/clamav-milter/clamav-milter.c index 0751eac24..8f84c1c97 100644 --- a/clamav-milter/clamav-milter.c +++ b/clamav-milter/clamav-milter.c @@ -113,6 +113,17 @@ int main(int argc, char **argv) { opt_free(opt); + if((cpt = cfgopt(copt, "Chroot"))->enabled) { + if(chdir(cpt->strarg) != 0) { + logg("!Cannot change directory to %s\n", cpt->strarg); + return 1; + } + if(chroot(cpt->strarg) != 0) { + logg("!chroot to %s failed. Are you root?\n", cpt->strarg); + return 1; + } + } + if(geteuid() == 0 && (cpt = cfgopt(copt, "User"))->enabled) { struct passwd *user = NULL; if((user = getpwnam(cpt->strarg)) == NULL) { diff --git a/clamav-milter/connpool.c b/clamav-milter/connpool.c index a194ce60c..600a1fc27 100644 --- a/clamav-milter/connpool.c +++ b/clamav-milter/connpool.c @@ -285,10 +285,15 @@ void cpool_init(struct cfgstruct *copt) { void cpool_free(void) { unsigned int i; - for(i=0; ientries; i++) - FREESRV(cp->pool[i]); - free(cp->pool); - free(cp); + if(cp) { + if(cp->pool) { + for(i=0; ientries; i++) + FREESRV(cp->pool[i]); + free(cp->pool); + } + free(cp); + cp = NULL; + } } diff --git a/etc/clamav-milter.conf b/etc/clamav-milter.conf index 46794c14d..a25b30e91 100644 --- a/etc/clamav-milter.conf +++ b/etc/clamav-milter.conf @@ -45,6 +45,10 @@ Example # Default: no ##Foreground yes +# Chroot to the specified directory. +# Chrooting is performed just after reading the config file and before dropping privileges. +# Default: unset (don't chroot) +#Chroot /newroot ## ## Clamd options @@ -84,7 +88,7 @@ Example # This option takes a host(name)/mask pair in CIRD notation and can be # repeated several times. If "/mask" is omitted, a host is assumed. # To specify a locally orignated, non-smtp, email use the keyword "local" -# Default: unset +# Default: unset (scan everything regardless of the origin) #LocalNet local #LocalNet 192.168.0.0/24 #LocalNet 1111:2222:3333::/48