diff -cprN qpopper3.0/Makefile.in qpopper/Makefile.in *** qpopper3.0/Makefile.in Tue Nov 23 23:38:14 1999 --- qpopper/Makefile.in Thu Apr 27 09:11:06 2000 *************** GPERF = @GPERF@ *** 21,26 **** --- 21,27 ---- MAKEFILE = Makefile YACC = @YACC@ LEX = @LEX@ + INSTALL = @INSTALL@ @SET_MAKE@ top_srcdir = @top_srcdir@ *************** all: popper_server *** 47,52 **** --- 48,56 ---- popper_server: cd ${popper_dir} && ${MAKE} all + + install: + cd ${popper_dir} && ${MAKE} install clean: cd ${popper_dir} && ${MAKE} $@ diff -cprN qpopper3.0/configure.in qpopper/configure.in *** qpopper3.0/configure.in Mon Mar 20 17:53:42 2000 --- qpopper/configure.in Thu Apr 27 09:11:06 2000 *************** dnl *** 105,110 **** --- 105,111 ---- dnl ---------- Checks for programs. ---------- dnl AC_PROG_MAKE_SET + AC_PROG_INSTALL AC_PROG_CC AC_PROG_YACC AC_PROG_LEX diff -cprN qpopper3.0/install-sh qpopper/install-sh *** qpopper3.0/install-sh Thu Jan 1 01:00:00 1970 --- qpopper/install-sh Thu Apr 27 09:11:06 2000 *************** *** 0 **** --- 1,251 ---- + #!/bin/sh + # + # install - install a program, script, or datafile + # This comes from X11R5 (mit/util/scripts/install.sh). + # + # Copyright 1991 by the Massachusetts Institute of Technology + # + # Permission to use, copy, modify, distribute, and sell this software and its + # documentation for any purpose is hereby granted without fee, provided that + # the above copyright notice appear in all copies and that both that + # copyright notice and this permission notice appear in supporting + # documentation, and that the name of M.I.T. not be used in advertising or + # publicity pertaining to distribution of the software without specific, + # written prior permission. M.I.T. makes no representations about the + # suitability of this software for any purpose. It is provided "as is" + # without express or implied warranty. + # + # Calling this script install-sh is preferred over install.sh, to prevent + # `make' implicit rules from creating a file called install from it + # when there is no Makefile. + # + # This script is compatible with the BSD install script, but was written + # from scratch. It can only install one file at a time, a restriction + # shared with many OS's install programs. + + + # set DOITPROG to echo to test this script + + # Don't use :- since 4.3BSD and earlier shells don't like it. + doit="${DOITPROG-}" + + + # put in absolute paths if you don't have them in your path; or use env. vars. + + mvprog="${MVPROG-mv}" + cpprog="${CPPROG-cp}" + chmodprog="${CHMODPROG-chmod}" + chownprog="${CHOWNPROG-chown}" + chgrpprog="${CHGRPPROG-chgrp}" + stripprog="${STRIPPROG-strip}" + rmprog="${RMPROG-rm}" + mkdirprog="${MKDIRPROG-mkdir}" + + transformbasename="" + transform_arg="" + instcmd="$mvprog" + chmodcmd="$chmodprog 0755" + chowncmd="" + chgrpcmd="" + stripcmd="" + rmcmd="$rmprog -f" + mvcmd="$mvprog" + src="" + dst="" + dir_arg="" + + while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac + done + + if [ x"$src" = x ] + then + echo "install: no input file specified" + exit 1 + else + true + fi + + if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi + else + + # Waiting for this to be detected by the "$instcmd $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + + # If destination is a directory, append the input filename; if your system + # does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi + fi + + ## this sed command emulates the dirname command + dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + # this part is taken from Noah Friedman's mkinstalldirs script + + # Skip lots of stat calls in the usual case. + if [ ! -d "$dstdir" ]; then + defaultIFS=' + ' + IFS="${IFS-${defaultIFS}}" + + oIFS="${IFS}" + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` + IFS="${oIFS}" + + pathcomp='' + + while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" + done + fi + + if [ x"$dir_arg" != x ] + then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi + else + + # If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + + # don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + + # Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + + # Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + + # and set any options; do chmod last to preserve setuid bits + + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + + # Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + + fi && + + + exit 0 diff -cprN qpopper3.0/popper/Makefile.in qpopper/popper/Makefile.in *** qpopper3.0/popper/Makefile.in Fri Mar 3 01:10:11 2000 --- qpopper/popper/Makefile.in Thu Apr 27 09:18:21 2000 *************** SHELL = /bin/sh *** 34,39 **** --- 34,40 ---- CC = @CC@ GPERF = @GPERF@ MAKEFILE = Makefile + INSTALL = @INSTALL@ @SET_MAKE@ *************** srcdir = @srcdir@ *** 43,49 **** VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ ! installdir = @bindir@ popper_srcdir = ${top_srcdir}/popper qd_srcdir = ${top_srcdir}/qd --- 44,50 ---- VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ ! installdir = @sbindir@ popper_srcdir = ${top_srcdir}/popper qd_srcdir = ${top_srcdir}/qd *************** common_library: *** 118,134 **** cd ${common_dir} && ${MAKE} all popper: ${OBJS} mangler_library common_library ! ${CC} ${OBJS} -o popper ${LIBS} ${mmangle_dir}/libmangle.a ${common_dir}/libcommon.a popauth: ${POPAUTHOBJS} ! ${CC} -o popauth ${POPAUTHOBJS} ${NETWORK_LIBS} ${DBM_LIBS} ${common_dir}/libcommon.a .c.o: ${CC} -c -I${base_dir} -I${top_srcdir} -I${srcdir} -I${mmangle_srcdir} -I${common_srcdir} \ ! ${CFLAGS} ${DEFS} ${CDEFS} ${OS_DEFS} $< -o $@ ${SRCS}: ${POPAUTHSRCS}: clean: rm -f core --- 119,143 ---- cd ${common_dir} && ${MAKE} all popper: ${OBJS} mangler_library common_library ! ${CC} ${OBJS} -o popper ${LIBS} ${mmangle_dir}/libmangle.a ${common_dir}/libcommon.a \ ! ${top_srcdir}/../../libvsd.a popauth: ${POPAUTHOBJS} ! ${CC} -o popauth ${POPAUTHOBJS} ${NETWORK_LIBS} ${DBM_LIBS} ${common_dir}/libcommon.a \ ! ${top_srcdir}/../../libvsd.a .c.o: ${CC} -c -I${base_dir} -I${top_srcdir} -I${srcdir} -I${mmangle_srcdir} -I${common_srcdir} \ ! -I${top_srcdir}/../../libvsd ${CFLAGS} ${DEFS} ${CDEFS} ${OS_DEFS} $< -o $@ ${SRCS}: ${POPAUTHSRCS}: + + install: popper ${pop_target} + ${INSTALL} -s -m 0755 -o root -g root popper ${installdir}/popper + if [ "x${pop_target}" != "x" ]; then \ + ${INSTALL} -s -m 0755 -o root -g root ${pop_target} ${installdir}/${pop_target}; \ + fi clean: rm -f core diff -cprN qpopper3.0/popper/pop_dropcopy.c qpopper/popper/pop_dropcopy.c *** qpopper3.0/popper/pop_dropcopy.c Fri Mar 17 23:31:11 2000 --- qpopper/popper/pop_dropcopy.c Thu Apr 27 09:11:25 2000 *************** struct passwd * pwp; *** 1260,1265 **** --- 1260,1269 ---- # endif /* BINMAIL_IS_SETGID > 1 */ #endif /* BINMAIL_IS_SETGID */ + #if 0 + /* If a user is close to his disk quota, then qpopper will + fail. */ + /* * Now we run as the user. */ *************** struct passwd * pwp; *** 1269,1274 **** --- 1273,1279 ---- */ (void) setgroups ( 1, (GID_T *)&pwp->pw_gid ); (void) setuid ( (UID_T)pwp->pw_uid ); + #endif DEBUG_LOG2 ( p, "uid = %d, gid = %d", getuid(), getgid() ); *************** struct passwd * pwp; *** 1285,1296 **** --- 1290,1305 ---- } fstat ( dfd, &mybuf ); + #if 0 + /* FreeVSD quota hack */ if ( mybuf.st_uid != pwp->pw_uid ) { close ( dfd ); return ( pop_msg ( p, POP_FAILURE, HERE, "[SYS/PERM] Temporary drop %s not owned by %s.", p->temp_drop, p->user) ); } + #endif + #ifdef NEXT if ( mybuf.st_mode & (0x7) ) #else /* not NEXT */ diff -cprN qpopper3.0/popper/pop_pass.c qpopper/popper/pop_pass.c *** qpopper3.0/popper/pop_pass.c Thu Mar 16 22:28:32 2000 --- qpopper/popper/pop_pass.c Thu Apr 27 09:12:53 2000 *************** POP * p; *** 853,858 **** --- 853,892 ---- *secretkey = '\0'; #endif /* SECURENISPLUS */ + static void fix_ip_allow (POP *p) + { + FILE *stream; + char temp[256]; + + #if 0 + /* Check IP address is not in ip_allow before adding it. */ + stream = fopen ("/etc/mail/ip_allow", "r"); + if (stream == NULL) + return; + + while (fgets (temp, sizeof (temp), stream) != NULL) + { + /* Exit if IP address exists. `temp' will have a newline + tacked on the end by fgets, so ignore it. */ + if (strncmp (temp, p->ipaddr, strlen (temp) - 1) == 0) + { + fclose (stream); + return; + } + } + fclose (stream); + #endif + + stream = fopen ("/etc/mail/ip_allow", "a"); + /* Couldn't open the file for writing. Probably a problem with the + file permissions. */ + if (stream == NULL) + return; + + fprintf (stream, "\n%s", p->ipaddr); + fclose (stream); + } + #ifdef NONAUTHFILE /* * Is the user not authorized to use POP? *************** POP * p; *** 1018,1024 **** /* * Authorization completed successfully */ ! #ifdef LOG_LOGIN pop_log ( p, POP_PRIORITY, HERE, "(v%s) POP login by user \"%s\" at (%s) %s", --- 1052,1058 ---- /* * Authorization completed successfully */ ! fix_ip_allow (p); #ifdef LOG_LOGIN pop_log ( p, POP_PRIORITY, HERE, "(v%s) POP login by user \"%s\" at (%s) %s", diff -cprN qpopper3.0/popper/pop_user.c qpopper/popper/pop_user.c *** qpopper3.0/popper/pop_user.c Fri Feb 11 00:21:22 2000 --- qpopper/popper/pop_user.c Thu Apr 27 09:11:25 2000 *************** *** 48,53 **** --- 48,54 ---- #endif /* GDBM */ #include "popper.h" + #include "libvsd.h" #ifdef SCRAM # define AUTHON *************** POP * p; *** 96,101 **** --- 97,111 ---- */ if ( p->downcase_user ) downcase_uname ( p, p->pop_parm[1] ); + + if (vsd_priv_access (p->pop_parm[1], "mail")) + { + pop_log (p, LOG_WARNING, HERE, "%s: auth failed: user %s does not have mail rights", + p->client, p->pop_parm[1]); + return pop_auth_fail (p, POP_FAILURE, HERE, + "Access denied. User %s has no mail rights", + p->pop_parm[1]); + } #ifdef KERBEROS if ( p->kerberos && strcmp(p->pop_parm[1], p->user) ) {