v. 20230718 Combined patch for vqadmin-2.3.7 by Roberto Puzzanghera https://notes.sagredo.eu/en/qmail-notes-185/vqadmin-26.html This patch modifies the following: * lang.c to lowercase the language file to solve compatibility issues with google-chrome and to avoid errors due to "invalid language file" in some browsers. * replace the files config.sub and config.guess (copied from vpopmail dir) to allow compilation on 64b platforms as well. * user.c to avoid that the clear pwd field will be showed (delete that part if you compiled vpopmail with --enable-clear-password) * html/mod_user.html to prevent the erase of the password when modifying a user in case clear passwords are disabled. Now the password field is not shown anymore. * user.c and domain.c to make the dynamic web page retrieve the vqadmin.css style sheet * Makefile.in to solve a bug that caused me a missing vqadmin.css file It embeds a big patch by Ali Erturk TURKER: * gets vqadmin to save vpopmail limits to database * fixed a core-dump due to SIGILL caused by memcpy * adds missing limits and permissions, changed the UI to be more user-friendly more info here https://notes.sagredo.eu/en/qmail-notes-185/vqadmin-26.html#comment2825 https://notes.sagredo.eu/files/qmail/patches/vqadmin/aet_vqadmin_fixes_20230218_1256.patch =============================================================================================================== diff -ruN ../vqadmin-2.3.7-original/Makefile.in vqadmin-2.3.7/Makefile.in --- ../vqadmin-2.3.7-original/Makefile.in 2005-01-11 21:36:55.000000000 +0100 +++ vqadmin-2.3.7/Makefile.in 2023-02-18 16:59:10.267902293 +0100 @@ -510,14 +510,14 @@ $(mkinstalldirs) @cgibindir@ $(mkinstalldirs) @cgibindir@/vqadmin $(mkinstalldirs) @cgibindir@/vqadmin/html - $(mkinstalldirs) @wwwroot@/images/vqadmin + $(mkinstalldirs) @cgibindir@/vqadmin/images/vqadmin install-data-local: cp vqadmin @cgibindir@/vqadmin/vqadmin.cgi strip @cgibindir@/vqadmin/vqadmin.cgi cp -R html/* @cgibindir@/vqadmin/html cp -R html/en @cgibindir@/vqadmin/html/en-us - cp html/vqadmin.css @wwwroot@/images/vqadmin + cp html/vqadmin.css @cgibindir@/vqadmin/images/vqadmin rm @cgibindir@/vqadmin/html/vqadmin.css if test -f @cgibindir@/vqadmin/vqadmin.acl ; then \ @@ -536,11 +536,11 @@ chmod 755 @cgibindir@/vqadmin chmod 755 @cgibindir@/vqadmin/html - chown @vpopuser@ @wwwroot@/images/vqadmin - chgrp @vpopgroup@ @wwwroot@/images/vqadmin - chown -R @vpopuser@ @wwwroot@/images/vqadmin/* - chgrp -R @vpopgroup@ @wwwroot@/images/vqadmin/* - chmod 755 @wwwroot@/images/vqadmin + chown @vpopuser@ @cgibindir@/vqadmin/images/vqadmin + chgrp @vpopgroup@ @cgibindir@/vqadmin/images/vqadmin + chown -R @vpopuser@ @cgibindir@/vqadmin/images/vqadmin/* + chgrp -R @vpopgroup@ @cgibindir@/vqadmin/images/vqadmin/* + chmod 755 @cgibindir@/vqadmin/images/vqadmin if test -f @cgibindir@/vqadmin/.htaccess ; then \ echo ".htaccess file already in place" ; \ diff -ruN ../vqadmin-2.3.7-original/cgi.c vqadmin-2.3.7/cgi.c --- ../vqadmin-2.3.7-original/cgi.c 2003-01-27 19:25:59.000000000 +0100 +++ vqadmin-2.3.7/cgi.c 2023-02-18 17:12:21.687617264 +0100 @@ -164,7 +164,7 @@ *p = r; - memcpy((char *)(p + 1), (char *)(p + 3), (len - 2)); + memmove((char *)(p + 1), (char *)(p + 3), (len - 2)); *(p + len - 1) = '\0'; } diff -ruN ../vqadmin-2.3.7-original/config.guess vqadmin-2.3.7/config.guess --- ../vqadmin-2.3.7-original/config.guess 2002-05-21 15:36:38.000000000 +0200 +++ vqadmin-2.3.7/config.guess 2023-02-18 16:59:10.269902287 +0100 @@ -1,7 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. -# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-04-20' + # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -22,18 +25,92 @@ # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . -# The master version of this file is at the FSF in /home/gd/gnu/lib. +# Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you -# don't specify an explicit system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break + fi + done + rm -f $dummy.c $dummy.o $dummy.rel + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) @@ -43,51 +120,180 @@ UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 - # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - news*:NEWS-OS:6.*:*) - echo mips-sony-newsos6 - exit 0 ;; + *:NetBSD:*:*) + # Netbsd (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-unknown ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE}" in + i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'` + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 + echo m68k-unknown-sysv4 exit 0;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; amiga:OpenBSD:*:*) - echo m68k-cbm-openbsd${UNAME_RELEASE} - exit 0 ;; + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; - Pyramid*:OSx*:*:*) + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; - sun4*:SunOS:5.*:*) + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) - echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -107,23 +313,67 @@ sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; - atari*:NetBSD:*:*) - echo m68k-atari-netbsd${UNAME_RELEASE} + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) - echo m68k-atari-openbsd${UNAME_RELEASE} + echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - sun3*:NetBSD:*:*) - echo m68k-sun-netbsd${UNAME_RELEASE} + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-sun-openbsd${UNAME_RELEASE} + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; - mac68k:NetBSD:*:*) - echo m68k-apple-netbsd${UNAME_RELEASE} + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) - echo m68k-apple-openbsd${UNAME_RELEASE} + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} @@ -131,12 +381,40 @@ VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; - mips:*:4*:UMIPS) - echo mips-mips-riscos4sysv + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; - mips:*:5*:RISCos) + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; @@ -152,15 +430,18 @@ AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then echo m88k-dg-dgux${UNAME_RELEASE} - else + else echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} fi - else echo i586-dg-dgux${UNAME_RELEASE} - fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 @@ -178,15 +459,23 @@ *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i[34]86:AIX:*:*) + i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include main() @@ -197,8 +486,8 @@ exit(0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 @@ -206,8 +495,9 @@ echo rs6000-ibm-aix3.2 fi exit 0 ;; - *:AIX:*:4) - if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -215,7 +505,7 @@ if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=4.${UNAME_RELEASE} + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; @@ -225,8 +515,8 @@ ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -240,18 +530,75 @@ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; - 9000/[3478]??:HP-UX:*:*) + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/7?? | 9000/8?[679] ) HP_ARCH=hppa1.1 ;; - 9000/8?? ) HP_ARCH=hppa1.0 ;; + 9000/[678][0-9][0-9]) + case "${HPUX_REV}" in + 11.[0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + esac ;; + esac + fi ;; + esac + if [ "${HP_ARCH}" = "" ]; then + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy + fi ;; esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include int main () @@ -276,8 +623,8 @@ exit (0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) @@ -286,15 +633,28 @@ 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; + *9??*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; @@ -313,120 +673,337 @@ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; - CRAY*T3E:*:*:*) - echo t3e-cray-unicos_mk - exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; - CRAY*C90:*:*:*) - echo c90-cray-unicos${UNAME_RELEASE} + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; - hp3[0-9][05]:OpenBSD:*:*) - echo m68k-hp-openbsd${UNAME_RELEASE} + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; - i[34]86:BSD/386:*:* | *:BSD/OS:*:*) + *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) - echo i386-unknown-cygwin32 + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin32 + echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; - *:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` - if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then - echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then - echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then - echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then - echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then - echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0 - elif test "${UNAME_MACHINE}" = "alpha" ; then - echo alpha-unknown-linux ; exit 0 - else - # Either a pre-BFD a.out linker (linuxoldld) or one that does not give us - # useful --help. Gcc wants to distinguish between linuxoldld and linuxaout. - test ! -d /usr/lib/ldscripts/. \ - && echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0 - # Determine whether the default compiler is a.out or elf - cat >dummy.c <$dummy.c < /* for printf() prototype */ +int main (int argc, char *argv[]) { +#else +int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __MIPSEB__ + printf ("%s-unknown-linux-gnu\n", argv[1]); +#endif +#ifdef __MIPSEL__ + printf ("%sel-unknown-linux-gnu\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + ;; + ppc:Linux:*:*) + # Determine Lib Version + cat >$dummy.c < +#if defined(__GLIBC__) +extern char __libc_version[]; +extern char __libc_release[]; +#endif main(argc, argv) -int argc; -char *argv[]; + int argc; + char *argv[]; { +#if defined(__GLIBC__) + printf("%s %s\n", __libc_version, __libc_release); +#else + printf("unknown\n"); +#endif + return 0; +} +EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then LIBC="libc1" ; fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} + exit 0 ;; + alpha:Linux:*:*) + cat <$dummy.s + .data + \$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + .text + .globl main + .align 4 + .ent main + main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + LIBC="" + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) UNAME_MACHINE="alpha" ;; + 1-0) UNAME_MACHINE="alphaev5" ;; + 1-1) UNAME_MACHINE="alphaev56" ;; + 1-101) UNAME_MACHINE="alphapca56" ;; + 2-303) UNAME_MACHINE="alphaev6" ;; + 2-307) UNAME_MACHINE="alphaev67" ;; + esac + objdump --private-headers $dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_supported_emulations=`cd /; ld --help 2>&1 \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i*86linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 + ;; + elf_i*86) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + i*86coff) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 + ;; + esac + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + case "${UNAME_MACHINE}" in + i*86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >$dummy.c < +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif #ifdef __ELF__ - printf ("%s-unknown-linux\n", argv[1]); +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif #else - printf ("%s-unknown-linuxaout\n", argv[1]); + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } EOF - ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - fi ;; + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. - i[34]86:DYNIX/ptx:4*:*) + i*86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; - i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*) + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:7*) + # Fixed at (any) Pentium or better + UNAME_MACHINE=i586 + if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then + echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} else - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; - i[34]86:*:3.2:*) + i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 - echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else - echo ${UNAME_MACHINE}-unknown-sysv32 + echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; Intel:Mach:3*:*) - echo i386-unknown-mach3 + echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 @@ -442,28 +1019,42 @@ # "miniframe" echo m68010-convergent-sysv exit 0 ;; - M680[234]0:*:R3V[567]*:*) + M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0) - uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3 && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - uname -p 2>/dev/null | grep 86 >/dev/null \ + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; - m680[234]0:LynxOS:2.[23]*:*) - echo m68k-lynx-lynxos${UNAME_RELEASE} + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; - i[34]86:LynxOS:2.[23]*:*) - echo i386-lynx-lynxos${UNAME_RELEASE} + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; - TSUNAMI:LynxOS:2.[23]*:*) - echo sparc-lynx-lynxos${UNAME_RELEASE} + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; - rs6000:LynxOS:2.[23]*:*) - echo rs6000-lynx-lynxos${UNAME_RELEASE} + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 @@ -476,22 +1067,117 @@ echo ns32k-sni-sysv fi exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; - R3000:*System_V*:*:*) + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + fi + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[KW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -cat >dummy.c <$dummy.c < # include @@ -529,7 +1215,10 @@ #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3"); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif @@ -546,7 +1235,7 @@ #endif #if defined (__386BSD__) - printf ("i386-unknown-bsd\n"); exit (0); + printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) @@ -574,11 +1263,24 @@ #endif #if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif #endif #if defined (alliant) && defined (i860) @@ -589,8 +1291,8 @@ } EOF -${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 -rm -f dummy.c dummy +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy # Apollos put the system type in the environment. @@ -622,6 +1324,48 @@ esac fi -#echo '(Unable to guess system type)' 1>&2 +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff -ruN ../vqadmin-2.3.7-original/config.sub vqadmin-2.3.7/config.sub --- ../vqadmin-2.3.7-original/config.sub 2002-05-21 15:36:38.000000000 +0200 +++ vqadmin-2.3.7/config.sub 2023-02-18 16:59:10.270902284 +0100 @@ -1,9 +1,13 @@ #! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-04-20' + # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. +# can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,6 +29,8 @@ # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. +# Please send patches to . +# # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. @@ -41,32 +47,87 @@ # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi +me=`echo "$0" | sed -e 's,.*/,,'` -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS (if any). -basic_machine=`echo $1 | sed 's/-[^-]*$//'` -if [ $basic_machine != $1 ] -then os=`echo $1 | sed 's/.*-/-/'` -else os=; fi +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also @@ -81,52 +142,56 @@ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp ) + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) os= basic_machine=$1 ;; - -sim | -cisco | -oki | -wec | -winbond ) # CYGNUS LOCAL + -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; - -apple*) # CYGNUS LOCAL - os= - basic_machine=$1 + -scout) ;; - -scout) # CYGNUS LOCAL - ;; - -wrs) # CYGNUS LOCAL - os=vxworks + -wrs) + os=-vxworks basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco4) os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos @@ -137,50 +202,90 @@ -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. - tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm | armeb \ - | armel | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ - | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \ - | powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \ - | pdp11 | mips64el | mips64orion | mips64orionel \ - | sparc | sparc8 | supersparc | microsparc | ultrasparc) + tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ + | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ + | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 \ + | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | hppa64 \ + | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ + | alphaev6[78] \ + | we32k | ns16k | clipper | i370 | sh | sh[34] \ + | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp10 | pdp11 \ + | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ + | v850 | c4x \ + | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ + | pj | pjl | h8500) basic_machine=$basic_machine-unknown ;; - m88110 | m680[012346]0 | m683?2 | m68360 | z8k | v70 | h8500 | w65) # CYGNUS LOCAL + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. basic_machine=$basic_machine-unknown + os=-none ;; - mips64vr4300 | mips64vr4300el) # CYGNUS LOCAL jsmith - basic_machine=$basic_machine-unknown + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65) ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | arme[lb]-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ - | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ - | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ - | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ - | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* \ - | mips64-* | mipsel-* | mips64el-* | mips64orion-* \ - | mips64orionel-* | sparc8-* | supersparc-* | microsparc-* | ultrasparc-*) - ;; - m88110-* | m680[012346]0-* | m683?2-* | m68360-* | z8k-* | h8500-*) # CYGNUS LOCAL - ;; - mips64vr4300-* | mips64vr4300el-*) # CYGNUS LOCAL jsmith + # FIXME: clean up the formatting here. + vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ + | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ + | hppa2.0n-* | hppa64-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ + | alphaev6[78]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ + | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ + | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* | mcore-* \ + | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ + | [cjt]90-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ + | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) # CYGNUS LOCAL + 386bsd) basic_machine=i386-unknown os=-bsd ;; @@ -190,11 +295,11 @@ 3b*) basic_machine=we32k-att ;; - a29khif) # CYGNUS LOCAL + a29khif) basic_machine=a29k-amd os=-udi ;; - adobe68k) # CYGNUS LOCAL + adobe68k) basic_machine=m68010-adobe os=-scout ;; @@ -213,40 +318,32 @@ os=-sysv ;; amiga | amiga-*) - basic_machine=m68k-cbm + basic_machine=m68k-unknown ;; - amigados) - basic_machine=m68k-cbm - os=-amigados + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos ;; amigaunix | amix) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; - apollo68bsd) # CYGNUS LOCAL + apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; - arm | armel | armeb) - basic_machine=arm-arm - os=-aout + aux) + basic_machine=m68k-apple + os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; - [ctj]90-cray) - basic_machine=c90-cray - os=-unicos - ;; - t3e-cray) - basic_machine=t3e-cray - os=-unicos_mk - ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -275,9 +372,16 @@ basic_machine=cray2-cray os=-unicos ;; + [cjt]90) + basic_machine=${basic_machine}-cray + os=-unicos + ;; crds | unos) basic_machine=m68k-crds ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; da30 | da30-*) basic_machine=m68k-da30 ;; @@ -311,7 +415,7 @@ encore | umax | mmax) basic_machine=ns32k-encore ;; - es1800 | OSE68k | ose68k | ose | OSE) # CYGNUS LOCAL + es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; @@ -325,6 +429,10 @@ basic_machine=tron-gmicro os=-sysv ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -333,11 +441,11 @@ basic_machine=h8300-hitachi os=-hms ;; - h8300xray) # CYGNUS LOCAL + h8300xray) basic_machine=h8300-hitachi os=-xray ;; - h8500hms) # CYGNUS LOCAL + h8500hms) basic_machine=h8500-hitachi os=-hms ;; @@ -356,71 +464,74 @@ basic_machine=m68k-hp os=-hpux ;; - w89k-*) # CYGNUS LOCAL - basic_machine=hppa1.1-winbond - os=-proelf - ;; - op50n-*) # CYGNUS LOCAL - basic_machine=hppa1.1-oki - os=-proelf - ;; - op60c-*) # CYGNUS LOCAL - basic_machine=hppa1.1-oki - os=-proelf - ;; - hppro) # CYGNUS LOCAL - basic_machine=hppa1.1-hp - os=-proelf - ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; - hppaosf) # CYGNUS LOCAL + hppa-next) + os=-nextstep3 + ;; + hppaosf) basic_machine=hppa1.1-hp os=-osf ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; i370-ibm* | ibm*) basic_machine=i370-ibm - os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[3456]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; - i[3456]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; - i[3456]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; - i[3456]86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; - i386mach) # CYGNUS LOCAL + i386mach) basic_machine=i386-mach os=-mach ;; - i386-vsta | vsta) # CYGNUS LOCAL + i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; - i386-go32 | go32) # CYGNUS LOCAL - basic_machine=i386-unknown - os=-go32 - ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -446,31 +557,59 @@ basic_machine=ns32k-utek os=-sysv ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; miniframe) basic_machine=m68000-convergent ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; - monitor) # CYGNUS LOCAL + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) basic_machine=m68k-rom68k os=-coff ;; - msdos) # CYGNUS LOCAL - basic_machine=i386-unknown + msdos) + basic_machine=i386-pc os=-msdos ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) - basic_machine=i386-unknown # CYGNUS LOCAL + basic_machine=i386-unknown os=-netbsd ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos @@ -483,7 +622,7 @@ basic_machine=mips-sony os=-newsos ;; - necv70) # CYGNUS LOCAL + necv70) basic_machine=v70-nec os=-sysv ;; @@ -512,14 +651,29 @@ basic_machine=i960-intel os=-nindy ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; np1) basic_machine=np1-gould ;; - OSE68000 | ose68000) # CYGNUS LOCAL + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; - os68k) # CYGNUS LOCAL + os68k) basic_machine=m68k-none os=-os68k ;; @@ -540,30 +694,28 @@ pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5) - basic_machine=i586-intel + pentium | p5 | k5 | k6 | nexgen) + basic_machine=i586-pc ;; - pentiumpro | p6) - basic_machine=i686-intel + pentiumpro | p6 | 6x86 | athlon) + basic_machine=i686-pc ;; - pentium-* | p5-*) + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro-* | p6-*) + pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - k5) - # We don't have specific support for AMD's K5 yet, so just call it a Pentium - basic_machine=i586-amd - ;; - nexgen) - # We don't have specific support for Nexgen yet, so just call it a Pentium - basic_machine=i586-nexgen + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; - power) basic_machine=rs6000-ibm + power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; @@ -578,7 +730,11 @@ ps2) basic_machine=i386-ibm ;; - rom68k) # CYGNUS LOCAL + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) basic_machine=m68k-rom68k os=-coff ;; @@ -588,7 +744,7 @@ rtpc | rtpc-*) basic_machine=romp-ibm ;; - sa29200) # CYGNUS LOCAL + sa29200) basic_machine=a29k-amd os=-udi ;; @@ -599,24 +755,10 @@ basic_machine=sh-hitachi os=-hms ;; - sparclite-wrs) # CYGNUS LOCAL + sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; - sparcfrw) # CYGNUS LOCAL - basic_machine=sparcfrw-sun - os=-sunos4 - ;; - sparcfrwcompat) # CYGNUS LOCAL - basic_machine=sparcfrwcompat-sun - os=-sunos4 - ;; - sparclitefrw) # CYGNUS LOCAL - basic_machine=sparclitefrw-fujitsu - ;; - sparclitefrwcompat) # CYGNUS LOCAL - basic_machine=sparclitefrwcompat-fujitsu - ;; sps7) basic_machine=m68k-bull os=-sysv2 @@ -624,10 +766,10 @@ spur) basic_machine=spur-unknown ;; - st2000) # CYGNUS LOCAL + st2000) basic_machine=m68k-tandem ;; - stratus) # CYGNUS LOCAL + stratus) basic_machine=i860-stratus os=-sysv4 ;; @@ -671,10 +813,28 @@ sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; symmetry) basic_machine=i386-sequent os=-dynix ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; tower | tower-32) basic_machine=m68k-ncr ;; @@ -686,7 +846,7 @@ basic_machine=a29k-nyu os=-sym1 ;; - v810 | necv810) # CYGNUS LOCAL + v810 | necv810) basic_machine=v810-nec os=-none ;; @@ -698,6 +858,9 @@ basic_machine=vax-dec os=-vms ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -706,13 +869,17 @@ basic_machine=m68k-wrs os=-vxworks ;; - vxworks29k) # CYGNUS LOCAL - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) # CYGNUS LOCAL - basic_machine=w65-wdc - os=-none + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf ;; xmp) basic_machine=xmp-cray @@ -721,7 +888,7 @@ xps | xps100) basic_machine=xps100-honeywell ;; - z8k-*-coff) # CYGNUS LOCAL + z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; @@ -732,17 +899,21 @@ # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. - w89k) # CYGNUS LOCAL + w89k) basic_machine=hppa1.1-winbond ;; - op50n) # CYGNUS LOCAL + op50n) basic_machine=hppa1.1-oki ;; - op60c) # CYGNUS LOCAL + op60c) basic_machine=hppa1.1-oki ;; mips) - basic_machine=mips-mips + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi ;; romp) basic_machine=romp-ibm @@ -753,13 +924,20 @@ vax) basic_machine=vax-dec ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; - sparc) + sh3 | sh4) + basic_machine=sh-unknown + ;; + sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) @@ -771,12 +949,19 @@ orion105) basic_machine=clipper-highlevel ;; - mac | mpw | mac-mpw) # CYGNUS LOCAL + mac | mpw | mac-mpw) basic_machine=m68k-apple ;; - pmac | pmac-mpw) # CYGNUS LOCAL + pmac | pmac-mpw) basic_machine=powerpc-apple ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -800,6 +985,8 @@ if [ x"$os" != x"" ] then case $os in + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` @@ -807,42 +994,71 @@ -solaris) os=-solaris2 ;; - -unixware* | svr4*) + -svr4*) os=-sysv4 ;; + -unixware*) + os=-sysv4.2uw + ;; -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux|'` + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. - # Each alternative must end in a *, to match a version number. + # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -lites* | -minix* | -genix* | -ultrix* | -irix* \ - | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[3456]* \ + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigados* | -msdos* | -moss* | -newsos* | -unicos* | -aos* \ - | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ - | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -freebsd* | -openbsd* \ - | -riscix* | -lites* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta | -udi \ - | -eabi* | -ieee*) - ;; - # CYGNUS LOCAL - -go32 | -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -proelf | -os9* \ - | -macos* | -mpw* | -magic* | -pe* | -win32) + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx ;; - -mac*) # CYGNUS LOCAL + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; -osfrose*) os=-osfrose ;; @@ -858,12 +1074,18 @@ -acis*) os=-aos ;; - -386bsd) # CYGNUS LOCAL + -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` @@ -889,15 +1111,18 @@ # This must come after -sysvr4. -sysv*) ;; - -ose*) # CYGNUS LOCAL + -ose*) os=-ose ;; - -es1800*) # CYGNUS LOCAL + -es1800*) os=-ose ;; -xenix) os=-xenix ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; -none) ;; *) @@ -923,6 +1148,15 @@ *-acorn) os=-riscix1.2 ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp10-*) + os=-tops20 + ;; pdp11-*) os=-none ;; @@ -941,10 +1175,13 @@ # default. # os=-sunos4 ;; - m68*-cisco) # CYGNUS LOCAL + m68*-cisco) os=-aout ;; - mips*-cisco) # CYGNUS LOCAL + mips*-cisco) + os=-elf + ;; + mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. @@ -953,16 +1190,19 @@ sparc-* | *-sun) os=-sunos4.1.1 ;; + *-be) + os=-beos + ;; *-ibm) os=-aix ;; - *-wec) # CYGNUS LOCAL + *-wec) os=-proelf ;; - *-winbond) # CYGNUS LOCAL + *-winbond) os=-proelf ;; - *-oki) # CYGNUS LOCAL + *-oki) os=-proelf ;; *-hp) @@ -975,7 +1215,7 @@ os=-sysv ;; *-cbm) - os=-amigados + os=-amigaos ;; *-dg) os=-dgux @@ -989,6 +1229,9 @@ m88k-omron*) os=-luna ;; + *-next ) + os=-nextstep + ;; *-sequent) os=-ptx ;; @@ -1022,15 +1265,21 @@ *-masscomp) os=-rtu ;; - *-rom68k) # CYGNUS LOCAL + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) os=-coff ;; - *-*bug) # CYGNUS LOCAL + *-*bug) os=-coff ;; - *-apple) # CYGNUS LOCAL + *-apple) os=-macos ;; + *-atari*) + os=-mint + ;; *) os=-none ;; @@ -1049,18 +1298,18 @@ -sunos*) vendor=sun ;; - -bosx*) # CYGNUS LOCAL - vendor=bull - ;; - -lynxos*) - vendor=lynx - ;; -aix*) vendor=ibm ;; + -beos*) + vendor=be + ;; -hpux*) vendor=hp ;; + -mpeix*) + vendor=hp + ;; -hiux*) vendor=hitachi ;; @@ -1076,24 +1325,38 @@ -genix*) vendor=ns ;; - -mvs*) + -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; - -vxworks*) + -vxsim* | -vxworks*) vendor=wrs ;; - -hms*) # CYGNUS LOCAL + -aux*) + vendor=apple + ;; + -hms*) vendor=hitachi ;; - -mpw* | -macos*) # CYGNUS LOCAL + -mpw* | -macos*) vendor=apple ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff -ruN ../vqadmin-2.3.7-original/domain.c vqadmin-2.3.7/domain.c --- ../vqadmin-2.3.7-original/domain.c 2005-01-11 21:48:03.000000000 +0100 +++ vqadmin-2.3.7/domain.c 2023-02-18 17:12:21.688617261 +0100 @@ -31,6 +31,7 @@ #include "vpopmail.h" #include "vpopmail_config.h" #include "vauth.h" +#include "vlimits.h" #define TOKENS " :\t\n\r" @@ -47,12 +48,13 @@ { char *domain = NULL; char *passwd = NULL; + char *lusers = NULL; char *lfor = NULL; char *lalias = NULL; char *lresponder = NULL; char *llists = NULL; - char *quota = NULL; + char *upop = NULL; char *uimap = NULL; char *udialup = NULL; @@ -60,47 +62,33 @@ char *uweb = NULL; char *urelay = NULL; char *uspam = NULL; + char *usmtp = NULL; + char *udeletespam = NULL; + char *umaildrop = NULL; + + char *quota = NULL; + char *maxmsgcount = NULL; + char *defaultquota = NULL; + char *defaultmaxmsgcount = NULL; + storage_t tmpdefaultquota; + int ret; - char dir[156]; - uid_t uid; - gid_t gid; - FILE *fs; + int limitsmodified = 0; + struct vlimits defaultlimits; + struct vlimits limits; if (!(acl_features & ACL_DOMAIN_CREATE)) { global_warning("Create Domain: Permission denied"); t_open(T_MAIN, 1); } - domain = cgi_is_var("dname"); - passwd = cgi_is_var("pp"); - - lusers = cgi_is_var("lusers"); - lfor = cgi_is_var("lfor"); - lalias = cgi_is_var("lalias"); - lresponder = cgi_is_var("lresponder"); - llists = cgi_is_var("llists"); - - quota = cgi_is_var("quota"); - upop = cgi_is_var("upop"); - uimap = cgi_is_var("uimap"); - udialup = cgi_is_var("udialup"); - upassc = cgi_is_var("upassc"); - uweb = cgi_is_var("uweb"); - urelay = cgi_is_var("urelay"); - uspam = cgi_is_var("uspam"); - /* get the domain name */ + domain = cgi_is_var("dname"); if (domain==NULL || strlen(domain)==0) { global_warning("Create Domain: Failed: Must supply domain name"); t_open("html/add_domain.html", 1); } - /* get the password */ - if (passwd==NULL || strlen(passwd)==0 ) { - global_warning("Create Domain: Failed: Must supply password"); - t_open("html/add_domain.html", 1); - } - /* add the domain with defaults */ ret = vadddomain(domain, VPOPMAILDIR, VPOPMAILUID, VPOPMAILGID ); if (ret != VA_SUCCESS) { @@ -110,43 +98,14 @@ global_warning("Created Domain"); } - /* setup the .qmailadmin-limits file */ - vget_assign(domain,dir,156,&uid,&gid); - strncat(dir,"/.qmailadmin-limits", 156); - if ( (fs = fopen(dir,"w+")) == NULL ) { - global_warning("Create Domain: open .qmailadmin-limits failed"); - t_open(T_MAIN, 1); + /* get the password for postmaster */ + passwd = cgi_is_var("ppass"); + if (passwd==NULL || strlen(passwd)==0 ) { + global_warning("Create Domain: Failed: Must supply password"); + t_open("html/add_domain.html", 1); } - if (lusers!=NULL&&strlen(lusers)>0) - fprintf(fs, "maxpopaccounts: %s\n", lusers); - - if (lalias!=NULL&&strlen(lalias)>0) - fprintf(fs, "maxaliases: %s\n", lalias); - - if (lfor!=NULL&&strlen(lfor)>0) - fprintf(fs, "maxforwards: %s\n", lfor); - - if (lresponder!=NULL&&strlen(lresponder)>0) - fprintf(fs, "maxautoresponders: %s\n", lresponder); - - if (llists!=NULL&&strlen(llists)>0) - fprintf(fs, "maxmailinglists: %s\n", llists); - - if (quota!=NULL && strlen(quota)>0) - fprintf(fs,"default_quota: %s\n",quota); - - if (upop!=NULL) fprintf(fs, "disable_pop\n"); - if (uimap!=NULL) fprintf(fs, "disable_imap\n"); - if (udialup!=NULL) fprintf(fs, "disable_dialup\n"); - if (upassc!=NULL) fprintf(fs, "disable_password_changing\n"); - if (uweb!=NULL) fprintf(fs, "disable_webmail\n"); - if (urelay!=NULL) fprintf(fs, "disable_external_relay\n"); - if (uspam!=NULL) fprintf(fs, "disable_spamassasin\n"); - fclose(fs); - chown(dir,uid, gid); - chmod(dir, S_IRUSR | S_IWUSR); - + /* add the postmaster user */ ret = vadduser("postmaster", domain, passwd, "Postmaster", USE_POP ); if (ret != VA_SUCCESS) { global_warning(verror(ret)); @@ -155,6 +114,125 @@ global_warning("Domain postmaster added"); } +//-------------- FORM VALUES -------------- + + //-------------- DOMAIN LIMITS -------------- + lusers = cgi_is_var("lusers"); + lfor = cgi_is_var("lfor"); + lalias = cgi_is_var("lalias"); + lresponder = cgi_is_var("lresponder"); + llists = cgi_is_var("llists"); + quota = cgi_is_var("quota"); + maxmsgcount = cgi_is_var("maxmsgcount"); + defaultquota = cgi_is_var("defaultquota"); + defaultmaxmsgcount = cgi_is_var("defaultmaxmsgcount"); + + //-------------- DOMAIN PERMISSIONS -------------- + upop = cgi_is_var("upop"); + uimap = cgi_is_var("uimap"); + udialup = cgi_is_var("udialup"); + upassc = cgi_is_var("upassc"); + uweb = cgi_is_var("uweb"); + urelay = cgi_is_var("urelay"); + uspam = cgi_is_var("uspam"); + usmtp = cgi_is_var("usmtp"); + udeletespam = cgi_is_var("udeletespam"); + umaildrop = cgi_is_var("umaildrop"); + + // INITIALIZE DEFAULT STRUCTS + vdefault_limits (&defaultlimits); + + // FETCH DEFAULT DOMAIN LIMITS FROM "VLIMITS_DEFAULT_FILE" + if (vlimits_read_limits_file (VLIMITS_DEFAULT_FILE, &defaultlimits) != 0) { + snprintf(WarningBuff, MAX_WARNING_BUFF,"Failed to get limits from vlimits_default_file for domain %s", domain); + global_warning(WarningBuff); + global_par("DN", domain); + t_open("html/view_domain.html", 1); + } + + // CLONE DEFAULT LIMITS TO DETECT IF THE USER CHANGED THE DEFAULTS + memcpy(&limits, &defaultlimits, sizeof(limits)); + + // PROCESS NEW LIMITS + if (lusers!=NULL && strlen(lusers)>0) { + limits.maxpopaccounts = atoi(lusers); + } + if (lfor!=NULL && strlen(lfor)>0) { + limits.maxforwards = atoi(lfor); + } + if (lalias!=NULL && strlen(lalias)>0) { + limits.maxaliases = atoi(lalias); + } + if (lresponder!=NULL && strlen(lresponder)>0) { + limits.maxautoresponders = atoi(lresponder); + } + if (llists!=NULL && strlen(llists)>0) { + limits.maxmailinglists = atoi(llists); + } + if (quota!=NULL && strlen(quota)>0) { + limits.diskquota = strtoll(quota, NULL, 10); + } + if (maxmsgcount!=NULL && strlen(maxmsgcount)>0) { + limits.maxmsgcount = strtoll(maxmsgcount, NULL, 10); + } + if (defaultquota!=NULL && strlen(defaultquota)>0) { + // CONVERT bytes->Mbytes + if ((tmpdefaultquota = strtoll(defaultquota, NULL, 10))) { + tmpdefaultquota *= 1048576; + limits.defaultquota = tmpdefaultquota; + } + } + if (defaultmaxmsgcount!=NULL && strlen(defaultmaxmsgcount)>0) { + limits.defaultmaxmsgcount = strtoll(defaultmaxmsgcount, NULL, 10); + } + + // PROCESS NEW PERMISSIONS + if (upop!=NULL) {limits.disable_pop = 1;} + if (uimap!=NULL) {limits.disable_imap = 1;} + if (udialup!=NULL) {limits.disable_dialup = 1;} + if (upassc!=NULL) {limits.disable_passwordchanging = 1;} + if (uweb!=NULL) {limits.disable_webmail = 1;} + if (urelay!=NULL) {limits.disable_relay = 1;} + if (uspam!=NULL) {limits.disable_spamassassin = 1;} + if (usmtp!=NULL) {limits.disable_smtp = 1;} + if (udeletespam!=NULL) {limits.delete_spam = 1;} + if (umaildrop!=NULL) {limits.disable_maildrop = 1;} + + // DETECT DEVIATIONS FROM DEFAULT LIMITS, IF ANY + if (limits.maxpopaccounts != defaultlimits.maxpopaccounts) {limitsmodified = 1;} + if (limits.maxaliases != defaultlimits.maxaliases) {limitsmodified = 1;} + if (limits.maxforwards != defaultlimits.maxforwards) {limitsmodified = 1;} + if (limits.maxautoresponders != defaultlimits.maxautoresponders) {limitsmodified = 1;} + if (limits.maxmailinglists != defaultlimits.maxmailinglists) {limitsmodified = 1;} + if (limits.diskquota != defaultlimits.diskquota) {limitsmodified = 1;} + if (limits.maxmsgcount != defaultlimits.maxmsgcount) {limitsmodified = 1;} + if (limits.defaultquota != defaultlimits.defaultquota) {limitsmodified = 1;} + if (limits.defaultmaxmsgcount != defaultlimits.defaultmaxmsgcount) {limitsmodified = 1;} + + // DETECT DEVIATIONS FROM DEFAULT PERMISSIONS, IF ANY + if (limits.disable_pop != defaultlimits.disable_pop) {limitsmodified = 1;} + if (limits.disable_imap != defaultlimits.disable_imap) {limitsmodified = 1;} + if (limits.disable_dialup != defaultlimits.disable_dialup) {limitsmodified = 1;} + if (limits.disable_passwordchanging != defaultlimits.disable_passwordchanging) {limitsmodified = 1;} + if (limits.disable_webmail != defaultlimits.disable_webmail) {limitsmodified = 1;} + if (limits.disable_relay != defaultlimits.disable_relay) {limitsmodified = 1;} + if (limits.disable_smtp != defaultlimits.disable_smtp) {limitsmodified = 1;} + if (limits.disable_spamassassin != defaultlimits.disable_spamassassin) {limitsmodified = 1;} + if (limits.delete_spam != defaultlimits.delete_spam) {limitsmodified = 1;} + if (limits.disable_maildrop != defaultlimits.disable_maildrop) {limitsmodified = 1;} + + // APPLY NEW LIMITS, IF ANY CHANGE DETECTED + if (limitsmodified) { + if (vset_limits(domain,&limits) != 0) { + snprintf(WarningBuff, MAX_WARNING_BUFF,"Failed to set limits for domain %s", domain); + global_warning(WarningBuff); + global_par("DN", domain); + t_open("html/view_domain.html", 1); + } + } + +//-------------- DOMAIN LIMITS FINISHED -------------- + #ifdef ENABLE_ISOQLOG add_isoqlog(domain); /* add the domain to isoqlog's domains file */ #endif @@ -178,15 +256,15 @@ global_warning("Delete Domain: Failed: Must supply domain name"); t_open("html/del_domain.html", 1); } - + ret = vdeldomain(domain); if (ret != VA_SUCCESS) global_warning("Delete Domain: Failed"); else global_warning("Deleted Domain"); - + #ifdef ENABLE_ISOQLOG del_isoqlog(domain); /* remove the domain from the isoqlog domains file */ #endif - + t_open(T_MAIN, 1); } @@ -216,97 +294,200 @@ void mod_domain() { char *domain = NULL; - char *ppass = NULL; + char *passwd = NULL; + char *lusers = NULL; char *lfor = NULL; char *lalias = NULL; char *lresponder = NULL; char *llists = NULL; char *quota = NULL; + char *upop = NULL; char *uimap = NULL; char *udialup = NULL; char *upassc = NULL; char *uweb = NULL; char *urelay = NULL; - int ret; - char dir[156]; - uid_t uid; - gid_t gid; - FILE *fs; + char *uspam = NULL; + char *usmtp = NULL; + char *udeletespam = NULL; + char *umaildrop = NULL; + char *maxmsgcount = NULL; + char *defaultquota = NULL; + char *defaultmaxmsgcount = NULL; + storage_t tmpdefaultquota; + + int ret; + int limitsmodified = 0; + struct vlimits defaultlimits; + struct vlimits limits; if (!(acl_features & ACL_DOMAIN_MOD)) { global_warning("Mod Domain: Permission denied"); t_open(T_MAIN, 1); } - domain = cgi_is_var("dname"); - /* get the domain name */ + domain = cgi_is_var("dname"); if (domain==NULL || strlen(domain)==0) { - global_warning("Mod Domain: Failed: Must supply domain name"); + global_warning("Mod Domain: Failed: Missing domain name"); t_open("html/mod_domain.html", 1); } + /* Change the postmaster password (if requested) */ + passwd = cgi_is_var("ppass"); + if (passwd!=NULL && strlen(passwd)>0) { + ret = vpasswd("postmaster", domain, passwd, USE_POP); + if ( ret != VA_SUCCESS ) { + snprintf(WarningBuff, MAX_WARNING_BUFF, + "Postmaster Password error %s", verror(ret)); + global_warning(WarningBuff); + } else { + global_warning("Postmaster password set"); + } + } + +//-------------- FORM VALUES -------------- + + //-------------- DOMAIN LIMITS -------------- lusers = cgi_is_var("lusers"); lfor = cgi_is_var("lfor"); lalias = cgi_is_var("lalias"); lresponder = cgi_is_var("lresponder"); llists = cgi_is_var("llists"); + quota = cgi_is_var("quota"); + maxmsgcount = cgi_is_var("maxmsgcount"); + defaultquota = cgi_is_var("defaultquota"); + defaultmaxmsgcount = cgi_is_var("defaultmaxmsgcount"); + + //-------------- DOMAIN PERMISSIONS -------------- upop = cgi_is_var("upop"); uimap = cgi_is_var("uimap"); udialup = cgi_is_var("udialup"); upassc = cgi_is_var("upassc"); uweb = cgi_is_var("uweb"); urelay = cgi_is_var("urelay"); + uspam = cgi_is_var("uspam"); + usmtp = cgi_is_var("usmtp"); + udeletespam = cgi_is_var("udeletespam"); + umaildrop = cgi_is_var("umaildrop"); - vget_assign(domain,dir,156,&uid,&gid); - strncat(dir,"/.qmailadmin-limits", 156); - if ( (fs = fopen(dir,"w+")) == NULL ) { - global_warning("Create Domain: open .qmailadmin-limits failed"); - t_open(T_MAIN, 1); + + // INITIALIZE DEFAULT STRUCT + vdefault_limits (&defaultlimits); + + // FETCH DEFAULT DOMAIN LIMITS FROM "VLIMITS_DEFAULT_FILE" + if (vlimits_read_limits_file (VLIMITS_DEFAULT_FILE, &defaultlimits) != 0) { + snprintf(WarningBuff, MAX_WARNING_BUFF,"Failed to get limits from vlimits_default_file for domain %s", domain); + global_warning(WarningBuff); + global_par("DN", domain); + t_open("html/view_domain.html", 1); } - if ( lusers!=NULL && strlen(lusers) > 0 ) - fprintf(fs, "maxpopaccounts: %s\n", lusers); - if ( lalias!=NULL && strlen(lalias) > 0 ) - fprintf(fs, "maxaliases: %s\n", lalias); - if ( lfor!=NULL && strlen(lfor) > 0 ) - fprintf(fs, "maxforwards: %s\n", lfor); - if ( lresponder!=NULL && strlen(lresponder) > 0 ) - fprintf(fs, "maxautoresponders: %s\n", lresponder); - if ( llists!=NULL && strlen(llists) > 0 ) - fprintf(fs, "maxmailinglists: %s\n", llists); - if (quota!=NULL && strlen(quota)>0) - fprintf(fs,"default_quota: %s\n",quota); - - if (upop!=NULL) fprintf(fs, "disable_pop\n"); - if (uimap!=NULL) fprintf(fs, "disable_imap\n"); - if (udialup!=NULL) fprintf(fs, "disable_dialup\n"); - if (upassc!=NULL) fprintf(fs, "disable_password_changing\n"); - if (uweb!=NULL) fprintf(fs, "disable_webmail\n"); - if (urelay!=NULL) fprintf(fs, "disable_external_relay\n"); - fclose(fs); - chown(dir,uid, gid); - chmod(dir, S_IRUSR | S_IWUSR); +#ifdef ENABLE_MYSQL_LIMITS + // DUMMY CALL TO "vget_limits", OTHERWISE "vdel_limits" WILL CORE DUMP AT THE END + if (vget_limits(domain, &limits) != 0) { + snprintf(WarningBuff, MAX_WARNING_BUFF,"Failed to vget_limits for domain %s", domain); + global_warning(WarningBuff); + global_par("DN", domain); + t_open("html/view_domain.html", 1); + } +#endif - ppass = cgi_is_var("ppass"); - if (ppass!=NULL && strlen(ppass)>0) { - ret = vpasswd("postmaster", domain, ppass, USE_POP); - if ( ret != VA_SUCCESS ) { - snprintf(WarningBuff, MAX_WARNING_BUFF, - "Postmaster Password error %s", verror(ret)); + // CLONE LIMITS TO CHECK IF THE USER CHANGED THE DEFAULTS + memcpy(&limits, &defaultlimits, sizeof(limits)); + + // PROCESS NEW LIMITS + if (lusers!=NULL && strlen(lusers)>0) { + limits.maxpopaccounts = atoi(lusers); + } + if (lfor!=NULL && strlen(lfor)>0) { + limits.maxforwards = atoi(lfor); + } + if (lalias!=NULL && strlen(lalias)>0) { + limits.maxaliases = atoi(lalias); + } + if (lresponder!=NULL && strlen(lresponder)>0) { + limits.maxautoresponders = atoi(lresponder); + } + if (llists!=NULL && strlen(llists)>0) { + limits.maxmailinglists = atoi(llists); + } + if (quota!=NULL && strlen(quota)>0) { + limits.diskquota = strtoll(quota, NULL, 10); + } + if (maxmsgcount!=NULL && strlen(maxmsgcount)>0) { + limits.maxmsgcount = strtoll(maxmsgcount, NULL, 10); + } + if (defaultquota!=NULL && strlen(defaultquota)>0) { + // CONVERT bytes->Mbytes + if ((tmpdefaultquota = strtoll(defaultquota, NULL, 10))) { + tmpdefaultquota *= 1048576; + limits.defaultquota = tmpdefaultquota; + } + } + if (defaultmaxmsgcount!=NULL && strlen(defaultmaxmsgcount)>0) { + limits.defaultmaxmsgcount = strtoll(defaultmaxmsgcount, NULL, 10); + } + + // PROCESS NEW PERMISSIONS + if (upop!=NULL) {limits.disable_pop = 1;} + if (uimap!=NULL) {limits.disable_imap = 1;} + if (udialup!=NULL) {limits.disable_dialup = 1;} + if (upassc!=NULL) {limits.disable_passwordchanging = 1;} + if (uweb!=NULL) {limits.disable_webmail = 1;} + if (urelay!=NULL) {limits.disable_relay = 1;} + if (uspam!=NULL) {limits.disable_spamassassin = 1;} + if (usmtp!=NULL) {limits.disable_smtp = 1;} + if (udeletespam!=NULL) {limits.delete_spam = 1;} + if (umaildrop!=NULL) {limits.disable_maildrop = 1;} + + // DETECT DEVIATIONS FROM DEFAULT, IF ANY + if (limits.maxpopaccounts != defaultlimits.maxpopaccounts) {limitsmodified = 1;} + if (limits.maxaliases != defaultlimits.maxaliases) {limitsmodified = 1;} + if (limits.maxforwards != defaultlimits.maxforwards) {limitsmodified = 1;} + if (limits.maxautoresponders != defaultlimits.maxautoresponders) {limitsmodified = 1;} + if (limits.maxmailinglists != defaultlimits.maxmailinglists) {limitsmodified = 1;} + if (limits.diskquota != defaultlimits.diskquota) {limitsmodified = 1;} + if (limits.maxmsgcount != defaultlimits.maxmsgcount) {limitsmodified = 1;} + if (limits.defaultquota != defaultlimits.defaultquota) {limitsmodified = 1;} + if (limits.defaultmaxmsgcount != defaultlimits.defaultmaxmsgcount) {limitsmodified = 1;} + + // DETECT DEVIATIONS FROM DEFAULT PERMISSIONS, IF ANY + if (limits.disable_pop != defaultlimits.disable_pop) {limitsmodified = 1;} + if (limits.disable_imap != defaultlimits.disable_imap) {limitsmodified = 1;} + if (limits.disable_dialup != defaultlimits.disable_dialup) {limitsmodified = 1;} + if (limits.disable_passwordchanging != defaultlimits.disable_passwordchanging) {limitsmodified = 1;} + if (limits.disable_webmail != defaultlimits.disable_webmail) {limitsmodified = 1;} + if (limits.disable_relay != defaultlimits.disable_relay) {limitsmodified = 1;} + if (limits.disable_smtp != defaultlimits.disable_smtp) {limitsmodified = 1;} + if (limits.disable_spamassassin != defaultlimits.disable_spamassassin) {limitsmodified = 1;} + if (limits.delete_spam != defaultlimits.delete_spam) {limitsmodified = 1;} + if (limits.disable_maildrop != defaultlimits.disable_maildrop) {limitsmodified = 1;} + + // PURGE EXISTING DOMAIN LIMITS + if (vdel_limits(domain)!=0) { + snprintf(WarningBuff, MAX_WARNING_BUFF,"Failed to reset limits for domain %s", domain); + global_warning(WarningBuff); + global_par("DN", domain); + t_open("html/view_domain.html", 1); + } + + // APPLY NEW LIMITS, IF ANY CHANGE DETECTED + if (limitsmodified) { + if (vset_limits(domain,&limits) != 0) { + snprintf(WarningBuff, MAX_WARNING_BUFF,"Failed to set limits for domain %s", domain); global_warning(WarningBuff); - } else { - global_warning("Postmaster password set"); + global_par("DN", domain); + t_open("html/view_domain.html", 1); } - } + } +//-------------- DOMAIN LIMITS FINISHED -------------- post_domain_info(domain); - t_open("html/mod_domain.html", 1); - } void post_domain_info(char *domain) @@ -315,12 +496,12 @@ char cuid[10]; char cgid[10]; char cusers[10]; - char *tmpstr1; - char *tmpstr2; + char qconvert[11]; uid_t uid; gid_t gid; - FILE *fs; + struct vlimits limits; struct vqpasswd *vpw; + storage_t tmpdefaultquota; if ( vget_assign(domain,Dir,156,&uid,&gid) == NULL ) { snprintf(WarningBuff, MAX_WARNING_BUFF, @@ -348,67 +529,73 @@ if ( vpw != NULL ) global_par("DP", vpw->pw_clear_passwd); else global_par("DP", "Domain has no postmaster!!"); - strncat(Dir,"/.qmailadmin-limits", 156); - fs = fopen(Dir,"r"); - if ( fs != NULL ) { - global_par("QL", "CHECKED"); - while(fgets(Dir,156,fs)!=NULL) { - if ( (tmpstr1 = strtok(Dir,TOKENS))==NULL) continue; - - if ( strcmp(tmpstr1, "maxpopaccounts") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("MU", tmpstr2); - - } else if ( strcmp(tmpstr1, "maxaliases") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("MA", tmpstr2); - - } else if ( strcmp(tmpstr1, "maxforwards") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("MF", tmpstr2); +// FETCH DOMAIN LIMITS - } else if ( strcmp(tmpstr1, "maxautoresponders") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("MR", tmpstr2); - - } else if ( strcmp(tmpstr1, "maxmailinglists") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("ML", tmpstr2); + if (vget_limits(domain, &limits) != 0) { + snprintf(WarningBuff, MAX_WARNING_BUFF, + "Failed to vget_limits for domain %s", domain); + global_warning(WarningBuff); + global_par("DN", domain); + t_open("html/view_domain.html", 1); + } else { + char buffer[20]; - } else if ( strcmp(tmpstr1, "quota") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("MQ", tmpstr2); + if(limits.maxpopaccounts != -1) { + snprintf(buffer, sizeof(buffer), "%d", limits.maxpopaccounts); + global_par("MU", buffer); + } - } else if ( strcmp(tmpstr1, "default_quota") == 0 ) { - if ( (tmpstr2 = strtok(NULL,TOKENS))==NULL) continue; - global_par("MQ", tmpstr2); + if(limits.maxaliases != -1) { + snprintf(buffer, sizeof(buffer), "%d", limits.maxaliases); + global_par("MA", buffer); + } - } else if ( strcmp(tmpstr1, "disable_pop") == 0 ) { - global_par("MP", "checked"); + if(limits.maxforwards != -1) { + snprintf(buffer, sizeof(buffer), "%d", limits.maxforwards); + global_par("MF", buffer); + } - } else if ( strcmp(tmpstr1, "disable_imap") == 0 ) { - global_par("MI", "checked"); + if(limits.maxautoresponders != -1) { + snprintf(buffer, sizeof(buffer), "%d", limits.maxautoresponders); + global_par("MR", buffer); + } - } else if ( strcmp(tmpstr1, "disable_dialup") == 0 ) { - global_par("MD", "checked"); + if(limits.maxmailinglists != -1) { + snprintf(buffer, sizeof(buffer), "%d", limits.maxmailinglists); + global_par("ML", buffer); + } - } else if ( strcmp(tmpstr1, "disable_password_changing") == 0 ) { - global_par("MC", "checked"); + if(limits.diskquota != 0) { + snprintf(buffer, sizeof(buffer), "%lu", limits.diskquota); + global_par("MQ", buffer); + } - } else if ( strcmp(tmpstr1, "disable_external_relay") == 0 ) { - global_par("MS", "checked"); - - } else if ( strcmp(tmpstr1, "disable_spamassassin") == 0 ) { - global_par("MZ", "checked"); + if(limits.maxmsgcount != 0) { + snprintf(buffer, sizeof(buffer), "%lu", limits.maxmsgcount); + global_par("ME", buffer); + } - } else if ( strcmp(tmpstr1, "disable_webmail") == 0 ) { - global_par("MW", "checked"); + if(limits.defaultquota != 0) { + tmpdefaultquota = limits.defaultquota/1048576.0; + sprintf(qconvert, "%.2lf", (double)tmpdefaultquota); + global_par("MB", qconvert); + } - } + if(limits.defaultmaxmsgcount != 0) { + snprintf(buffer, sizeof(buffer), "%lu", limits.defaultmaxmsgcount); + global_par("MG", buffer); } - fclose(fs); - } else { - global_par("QU", "CHECKED"); + + if (limits.disable_pop) global_par("MP", "checked"); + if (limits.disable_imap) global_par("MI", "checked"); + if (limits.disable_dialup) global_par("MD", "checked"); + if (limits.disable_passwordchanging) global_par("MC", "checked"); + if (limits.disable_webmail) global_par("MW", "checked"); + if (limits.disable_relay) global_par("MS", "checked"); + if (limits.disable_smtp) global_par("MH", "checked"); + if (limits.disable_spamassassin) global_par("MZ", "checked"); + if (limits.delete_spam) global_par("ML", "checked"); + if (limits.disable_maildrop) global_par("MN", "checked"); } } @@ -446,9 +633,8 @@ strncpy( face, get_lang_code("057"), 30); strncpy( size, get_lang_code("058"), 30); - printf("List Domains\n"); - printf("\n", - bgcolor, fgcolor, fgcolor, fgcolor); + printf("List Domains\n"); + printf("\n"); printf("\n", face, size, fgcolor); @@ -476,18 +662,17 @@ printf("%s
\n", assign_alias_domain, assign_alias_domain); } else { - printf( -"%s Aliased to %s
\n", + printf("%s Aliased to %s
\n", assign_alias_domain, assign_domain, assign_alias_domain); } } fclose(fs); - + printf("
\n"); printf("Main VqAdmin Menu

\n"); - printf("%s %s
\n", + printf("%s %s
\n", VQA_PACKAGE, VQA_VERSION); - printf("%s %s
\n", + printf("%s %s
\n", PACKAGE, VERSION); free(tmpbuf); @@ -546,7 +731,7 @@ char *dom; /* pointer to temp buffer */ char tmpbuf[100]; char status[100]; - + snprintf(tmpbuf, 100, "%s.tmp", ISOQLOGPATH); infile = fopen(ISOQLOGPATH, "a+"); /* open the existing domains file */ if (infile == NULL) { @@ -555,7 +740,7 @@ global_warning(status); return; } /* reports error opening input file */ - + tmpfile = fopen(tmpbuf,"w+"); /* open the temporary file */ if (tmpfile == NULL) { snprintf(status, 100, "Error: Unable to open temporary file %s You \ @@ -563,15 +748,15 @@ global_warning(status); return; } /* reports error opening temp file */ - - + + /* * this loop is pretty pointless. it simply copies one file into the other * and then we add to it right after the loop completes. However, it * does attempt to clean up a messy file, which is good, who likes * messy files? :) */ - + /* while there's something to be read */ while( fgets (buffer, 100, infile) != NULL ) { /* munge */ @@ -596,9 +781,9 @@ char *dom; /* pointer to temp buffer */ char tmpbuf[100]; char status[100]; - + snprintf(tmpbuf, 100, "%s.tmp", ISOQLOGPATH); - + infile = fopen(ISOQLOGPATH, "r+"); /* open the existing domains file */ if (infile == NULL) { snprintf(status, 100, "Error: Unable to open input file %s you may \ @@ -606,23 +791,23 @@ global_warning(status); return; } /* reports error opening input file */ - + tmpfile = fopen(tmpbuf,"w+"); /* open the temporary file */ if (tmpfile == NULL) { snprintf(status, 100, "Error: Unable to open temporary file %s you may have to remove the domain from isoqlog manually", tmpbuf); global_warning(status); return; } /* reports error opening temp file */ - + while( fgets (buffer, 100, infile) != NULL ) { /* while there's something to be read */ dom = strtok( buffer, " \n\t\r"); /* munge */ if (dom == NULL) continue; /* blank line */ if (strcmp(dom, domain) == 0) continue; /* hey! we found our domain! */ fprintf(tmpfile, "%s\n", dom); /* nope, wasn't him, spit it out */ - } - + } + fclose(infile); fclose(tmpfile); /* close files */ - + rename ( tmpbuf, ISOQLOGPATH ); /* move the modified file into place */ } diff -ruN ../vqadmin-2.3.7-original/global.c vqadmin-2.3.7/global.c --- ../vqadmin-2.3.7-original/global.c 2003-01-27 18:51:52.000000000 +0100 +++ vqadmin-2.3.7/global.c 2023-02-18 17:12:21.689617259 +0100 @@ -193,3 +193,45 @@ vclose(); exit(exit_code); } + +/* quota_to_bytes: used to convert user entered quota (given in MB) + back to bytes for vpasswd file + return value: 0 for success, 1 for failure +*/ +int quota_to_bytes(char returnval[], char *quota) { + storage_t tmp; + + if (quota == NULL) { return 1; } + if ((tmp = strtoll(quota, NULL, 10))) { + tmp *= 1048576; + sprintf(returnval, "%.0lf", (double)tmp); + return 0; + } else { + strcpy (returnval, ""); + return 1; + } +} + +/* quota_to_megabytes: used to convert vpasswd representation of quota + to number of megabytes. + return value: 0 for success, 1 for failure +*/ +int quota_to_megabytes(char *returnval, char *quota) { + storage_t tmp; + int i; + + if (quota == NULL) { return 1; } + i = strlen(quota); + if ((quota[i-1] == 'M') || (quota[i-1] == 'm')) { + tmp = strtoll(quota, NULL, 10); /* already in megabytes */ + } else if ((quota[i-1] == 'K') || (quota[i-1] == 'k')) { + tmp = strtoll(quota, NULL, 10) * 1024; /* convert kilobytes to megabytes */ + } else if ((tmp = strtoll(quota, NULL, 10))) { + tmp /= 1048576.0; + } else { + strcpy (returnval, ""); + return 1; + } + sprintf(returnval, "%.2lf", (double)tmp); + return 0; +} diff -ruN ../vqadmin-2.3.7-original/global.h vqadmin-2.3.7/global.h --- ../vqadmin-2.3.7-original/global.h 2003-01-27 19:24:03.000000000 +0100 +++ vqadmin-2.3.7/global.h 2023-02-18 17:21:17.483070293 +0100 @@ -23,6 +23,7 @@ #include #include #include +#include #define MAX_WARNING_BUFF 500 @@ -146,3 +147,7 @@ void modify_file(); void show_controls(); void delete_file(); + +typedef uint64_t storage_t; +int quota_to_bytes(char[], char*); //jhopper prototype +int quota_to_megabytes(char[], char*); //jhopper prototype diff -ruN ../vqadmin-2.3.7-original/html/add_domain.html vqadmin-2.3.7/html/add_domain.html --- ../vqadmin-2.3.7-original/html/add_domain.html 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/add_domain.html 2023-02-18 17:12:21.689617259 +0100 @@ -3,67 +3,111 @@ -
%-W
#-003 %-U (%-G)
-#-003
-
-
- - - - - -
#-010
#-011
- -
-#-012
- - - - - - - - - - - - - - - - - - -
#-015#-050
#-016#-050
#-017#-050
#-018#-050
#-019#-050
#-039
- - - - - - - - - - - + +

-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#-003

#-010
#-011
#-035
 
#-012

#-015#-050
#-016#-050
#-017#-050
#-018#-050
#-019#-050
#-074#-077
#-075#-077
 
#-078

+ + + + + + +
+ + + + + + +
+
  + + + + + + +
+
+
 
-
- - + +
-#-000

+#-000

%-V diff -ruN ../vqadmin-2.3.7-original/html/add_user.html vqadmin-2.3.7/html/add_user.html --- ../vqadmin-2.3.7-original/html/add_user.html 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/add_user.html 2023-02-18 17:12:21.690617256 +0100 @@ -1,49 +1,74 @@ -#-038 %-U (%-G) - + + + #-008 %-U (%-G) + - -
%-W
#-008 %-U (%-G)
-#-008 -
+
- - - - - - - - - -
#-020
#-021
#-039
#-022
#-040
- - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-
-
-
-
-
-
-

- -
 
#-008

#-020
#-021
#-039
#-022
#-051
#-052
#-035
 
#-040

+ + + + + + +
+ + + + + + + +
+
  + + + + + + + +
+
+
 
- +

-#-000

+#-000

%-V diff -ruN ../vqadmin-2.3.7-original/html/en vqadmin-2.3.7/html/en --- ../vqadmin-2.3.7-original/html/en 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/en 2023-02-18 17:12:21.690617256 +0100 @@ -1,8 +1,8 @@ 000 VqAdmin Main Menu -001 Domains +001 Domains 002 View Domain 003 Add Domain -004 Delete Domain +004 Delete Domain 005 Email Accounts 006 View Email Account 007 Show Users @@ -10,7 +10,7 @@ 009 Delete Email Account 010 Domain Name 011 Postmaster Password -012 Options +012 Domain Limits 013 Limit 014 Unlimited 015 Accounts @@ -32,23 +32,23 @@ 031 Error 032 error occured while initiating the interface. 033 Modify Domain -034 Users -035 Directory +034 Accounts +035 Mail Directory 036 User ID 037 Group ID 038 Modify Email Account -039 Quota in bytes +039 Quota in Mbytes 040 Permissions 041 List Domains -042 Disable pop access -043 Disable web access -044 Disable imap access +042 Disable POP access +043 Disable webmail access +044 Disable IMAP access 045 Disable change password -046 Bounce email -047 Disable email relay +046 Bounce email +047 Disable email relay 048 Domain Administrator 049 Disable dialup access -050 0 disables this feature +050 0 = disabled 051 Last authentication time 052 Last authentication ip 053 List Domains @@ -62,7 +62,15 @@ 061 Qmail Control Files 062 Modify Control File 063 Modify File -067 user: +067 user: 068 permission: -069 Disable SpamAssassin - +069 Disable spamassassin +070 Disable SMTP access +071 Delete spam mails +072 Disable maildrop +073 Max Mail Count/Domain +074 Quota/User (Mbytes) +075 Mails/User +076 Update +077 Leave blank for defaults +078 Domain Permissions diff -ruN ../vqadmin-2.3.7-original/html/en-us vqadmin-2.3.7/html/en-us --- ../vqadmin-2.3.7-original/html/en-us 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/en-us 2023-02-18 17:12:21.690617256 +0100 @@ -1,8 +1,8 @@ -000 Main VqAdmin Menu -001 Domains +000 VqAdmin Main Menu +001 Domains 002 View Domain 003 Add Domain -004 Delete Domain +004 Delete Domain 005 Email Accounts 006 View Email Account 007 Show Users @@ -10,7 +10,7 @@ 009 Delete Email Account 010 Domain Name 011 Postmaster Password -012 Options +012 Domain Limits 013 Limit 014 Unlimited 015 Accounts @@ -32,23 +32,23 @@ 031 Error 032 error occured while initiating the interface. 033 Modify Domain -034 Users -035 Directory +034 Accounts +035 Mail Directory 036 User ID 037 Group ID 038 Modify Email Account -039 Quota in bytes +039 Quota in Mbytes 040 Permissions 041 List Domains -042 Disable pop access -043 Disable web access -044 Disable imap access +042 Disable POP access +043 Disable webmail access +044 Disable IMAP access 045 Disable change password -046 Bounce email -047 Disable email relay +046 Bounce email +047 Disable email relay 048 Domain Administrator 049 Disable dialup access -050 0 disables this feature +050 0 = disabled 051 Last authentication time 052 Last authentication ip 053 List Domains @@ -62,3 +62,15 @@ 061 Qmail Control Files 062 Modify Control File 063 Modify File +067 user: +068 permission: +069 Disable spamassassin +070 Disable SMTP access +071 Delete spam mails +072 Disable maildrop +073 Max Mail Count/Domain +074 Quota/User (Mbytes) +075 Mails/User +076 Update +077 Leave blank for defaults +078 Domain Permissions diff -ruN ../vqadmin-2.3.7-original/html/it vqadmin-2.3.7/html/it --- ../vqadmin-2.3.7-original/html/it 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/it 2023-07-18 19:38:08.588639345 +0200 @@ -10,7 +10,7 @@ 009 Cancella Email Dominio 010 Nome Dominio 011 Password di Postmaster -012 Opzioni +012 Limiti per i domini 013 Limite 014 Illimitato 015 Utente @@ -22,29 +22,29 @@ 021 Password 022 Nome Completo 023 Autenticazione Fallita -024 vQadmin non poteva determinare il vostro username, questo -025 significa che il vostro webserver č configurato impropriamente per funzionare +024 vQadmin non ha potuto determinare il vostro username. Questo +025 significa che il vostro webserver è configurato impropriamente per funzionare 026 con questo cgi. Per i motivi di sicurezza, questo script -027 non funzionerą senza il file htaccess di Apache. -028 Errore non ricoverabile -029 Errore non ricoverabile durante l'elaborazione della vostra richiesta. -030 Contattare l'amministratore se questo continua. +027 non funzionerà senza il file .htaccess di Apache. +028 Errore critico +029 Errore critico durante l'elaborazione della richiesta. +030 Contattare l'amministratore se il problema non si risolve. 031 Errore 032 Errore durante l'inizializzazione dell'interfaccia. 033 Modifica Dominio -034 Utenti -035 Directory +034 Accounts +035 Mail Directory 036 ID Utente 037 ID Gruppo 038 Modifica Email Utente -039 Spazio in byte +039 Spazio in Mbyte 040 Permessi 041 Mostra Domini -042 Disabilita accesso pop +042 Disabilita accesso POP 043 Disabilita accesso web -044 Disabilita accesso imap +044 Disabilita accesso IMAP 045 Disabilita cambio password -046 Rimbalza email +046 Respingi email 047 Disabilita email relay 048 Amministratore dominio 049 Disabilita accesso dialup @@ -52,7 +52,7 @@ 051 Orario ultima autenticazione 052 Ultimo ip autenticato 053 Mostra Domini -054 Il nome dominio contiene:
Lasciare vuoto per tutti i domini. +054 Il nome dominio contiene:
Lasciare vuoto per tutti i domini. 055 #000066 056 #FFFFFF 057 Verdana @@ -62,3 +62,15 @@ 061 Qmail Control Files 062 Modify Control File 063 Modify File +067 utente: +068 permessi: +069 Disabilita SpamAssassin +070 Disabilita accesso SMTP +071 Cancella email spam +072 Disabilita maildrop +073 Massimo numero di email per dominio +074 Quota/Utente (Mbyte) +075 Mail/Utente +076 Aggiorna +077 Lascia in bianco per defaults +078 Permessi per il dominio diff -ruN ../vqadmin-2.3.7-original/html/mod_domain.html vqadmin-2.3.7/html/mod_domain.html --- ../vqadmin-2.3.7-original/html/mod_domain.html 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/mod_domain.html 2023-02-18 17:12:21.691617253 +0100 @@ -1,75 +1,114 @@ #-033 %-U (%-G) - - +
%-W
#-033 %-U (%-G)
-#-033 -
+
+ + - - + + - - + + - - + + + + + - - + + + -
#-033 / #-007

#-010#-010
#-034$-DS#-011 + #-076
#-011#-035
 
#-012 (#-034: $-DS)

#-035$-DD#-015#-050
- - - + + + - - - - - - - - - - + - - + + + + - - + + + + - - - -
#-036$-DU#-016#-050
#-037$-DG
#-015#-050
#-016#-050
#-017#-017 #-050
#-018#-050
#-018 #-050
#-019#-050
#-019 #-050
#-039
- - - - - - - - - - + + + + + + + + + + + + + + + + + + + +

- -
#-050
#-074#-077
#-075#-077
 
#-078

+ + + + + + +
+ + + + + + +
+
  + + + + + + +
+
+
 
-
-Show Users + + +

#-000

%-V diff -ruN ../vqadmin-2.3.7-original/html/mod_user.html vqadmin-2.3.7/html/mod_user.html --- ../vqadmin-2.3.7-original/html/mod_user.html 2020-06-24 18:23:11.000000000 +0200 +++ vqadmin-2.3.7/html/mod_user.html 2023-02-18 17:12:21.691617253 +0100 @@ -1,58 +1,75 @@ -#-038 %-U (%-G) - + + + #-038 %-U (%-G) + - -
%-W
#-038 %-U (%-G)
-#-038 -
+
- - - - - - - - - -
#-020
#-021
#-039
#-022
- - - - - - -
#-035$-UD
#-051$-UT
#-052$-UZ
-
#-040 - - - - - - - - - + + + + + + - -
 
#-038

#-020
-
-
- -
-
- - - + + + + + + + + + + + + + + + + + + + + + + +
- - $-UA
#-021 + #-076
#-039
#-022
#-051
#-052
#-035
 
#-040

+ + + + + + +
+ + + + + + + +
+
  + + + + + + + +
+
+
 
- -
+ + +
#-000

%-V diff -ruN ../vqadmin-2.3.7-original/lang.c vqadmin-2.3.7/lang.c --- ../vqadmin-2.3.7-original/lang.c 2002-08-09 01:27:07.000000000 +0200 +++ vqadmin-2.3.7/lang.c 2023-02-18 16:59:10.271902281 +0100 @@ -25,6 +25,9 @@ #include #include #include + +#include + #include "global.h" #include "vauth.h" @@ -70,9 +73,13 @@ char tmpfile[MAX_TMPBUF]; struct stat mystat; + /* Lowercase the language name to fix a bug where chrome users can't access + * the page. */ + lowerit(lang); + /* only open files in the local directory */ if ( strstr(lang, ".") != NULL || strstr(lang, "/") != NULL ) { - global_error("invalid language file",1,0); + strcpy(lang, "en"); } if ( lang_fs == NULL ) { diff -ruN ../vqadmin-2.3.7-original/user.c vqadmin-2.3.7/user.c --- ../vqadmin-2.3.7-original/user.c 2005-01-11 22:10:35.000000000 +0100 +++ vqadmin-2.3.7/user.c 2023-02-18 17:12:21.691617253 +0100 @@ -116,15 +116,23 @@ static char domain[156]; char *gecos; char *passwd; - char *shell; - char *udisable; - char *uweb; + char *uquota; + + char *upop; char *uimap; + char *udialup; char *upassc; + char *uweb; char *ubounce; char *urelay; char *uspam; + char *usmtp; + char *umaildrop; + char *udeletespam; char *uqadmin; + + char *formattedquota = NULL; + char qconvert[11]; int ret; int i; int GidFlag = 0; @@ -138,24 +146,30 @@ eaddr = cgi_is_var("eaddr"); gecos = cgi_is_var("fname"); passwd = cgi_is_var("cpass"); - shell = cgi_is_var("quota"); - udisable = cgi_is_var("udisable"); - uweb = cgi_is_var("uweb"); + uquota = cgi_is_var("quota"); + + upop = cgi_is_var("upop"); uimap = cgi_is_var("uimap"); + udialup = cgi_is_var("udialup"); upassc = cgi_is_var("upassc"); + uweb = cgi_is_var("uweb"); ubounce = cgi_is_var("ubounce"); + urelay = cgi_is_var("urelay"); uspam = cgi_is_var("uspam"); + usmtp = cgi_is_var("usmtp"); + umaildrop = cgi_is_var("umaildrop"); + udeletespam = cgi_is_var("udeletespam"); uqadmin = cgi_is_var("uqadmin"); if ( eaddr==NULL || strlen(eaddr)==0 ) { global_warning("Modify Email Account: Failed: no email address given"); t_open("html/mod_user.html", 1); } - + parse_email( eaddr, user, domain, 156); - vpw = vauth_getpw(user,domain); + vpw = vauth_getpw(user, domain); if (vpw == NULL) { global_warning("Modify User: account does not exist"); t_open("html/mod_user.html", 1); @@ -179,32 +193,45 @@ vpw->pw_gecos = gecos; } - if ( shell!=NULL && strlen(shell)>0 ){ - vpw->pw_shell = shell; + // UPDATE USER QUOTA ("maildirsize" file will be created at the end, only if the update is successfull. + formattedquota="NOQUOTA"; // START WITH DEAFULT "NOQUOTA" + if (uquota!=NULL) { // QUOTA FIELD IS SET + if (strlen(uquota)==0 || strcmp(uquota, "NOQUOTA")==0 || strcmp(uquota, "BADQUOTA")==0) { // RESET QUOTA + formattedquota = "NOQUOTA"; + } else { // QUOTA IS REQUESTED, CONVERT bytes->Mbytes + if (quota_to_bytes(qconvert, uquota)) { + global_warning("Invalid quota string."); + t_open("html/mod_user.html", 1); + } else { + formattedquota = format_maildirquota(qconvert); + } + } } + vpw->pw_shell = formattedquota; - if (udisable!=NULL) GidFlag |= NO_POP; - if (uweb!=NULL) GidFlag |= NO_WEBMAIL; + // UPDATE PERMISSIONS + if (upop!=NULL) GidFlag |= NO_POP; if (uimap!=NULL) GidFlag |= NO_IMAP; - if (ubounce!=NULL) GidFlag |= BOUNCE_MAIL; + if (udialup!=NULL) GidFlag |= NO_DIALUP; if (upassc!=NULL) GidFlag |= NO_PASSWD_CHNG; + if (uweb!=NULL) GidFlag |= NO_WEBMAIL; + if (ubounce!=NULL) GidFlag |= BOUNCE_MAIL; if (urelay!=NULL) GidFlag |= NO_RELAY; -#ifdef SPAMASSASSIN + if (usmtp!=NULL) GidFlag |= NO_SMTP; if (uspam!=NULL) GidFlag |= NO_SPAMASSASSIN; -#endif + if (udeletespam!=NULL) GidFlag |= DELETE_SPAM; + if (umaildrop!=NULL) GidFlag |= NO_MAILDROP; if (uqadmin!=NULL) GidFlag |= QA_ADMIN; vpw->pw_gid = GidFlag; ret = vauth_setpw(vpw, domain); if ( ret != VA_SUCCESS ) { - snprintf(WarningBuff, MAX_WARNING_BUFF, + snprintf(WarningBuff, MAX_WARNING_BUFF, "Modify Account %s error %s", eaddr, verror(ret)); global_warning(WarningBuff); } else { - snprintf(WarningBuff, MAX_WARNING_BUFF, - "Modify Account %s success", eaddr); - global_warning(WarningBuff); + update_maildirsize(domain, vpw->pw_dir, formattedquota); // CREATE "maildirsize" file in user's Maildir. } post_email_info( eaddr, vpw, domain); @@ -214,6 +241,7 @@ void post_email_info( char *eaddr, struct vqpasswd *vpw, char *domain) { + char qconvert[11]; #ifdef ENABLE_AUTH_LOGGING time_t mytime; char *authip; @@ -221,30 +249,36 @@ global_par("UA", eaddr); global_par("UN", vpw->pw_gecos); - global_par("UQ", vpw->pw_shell); + +// SHOW USER QUOTA IN MB + if (strncmp(vpw->pw_shell, "NOQUOTA", 2) != 0) { + if(quota_to_megabytes(qconvert, vpw->pw_shell)) { + global_par("UQ", "BADQUOTA"); + } + else { + global_par("UQ", qconvert); + } + } + global_par("UD", vpw->pw_dir); #ifdef CLEAR_PASS global_par("UO", vpw->pw_clear_passwd); #endif - if (vpw->pw_gid & NO_PASSWD_CHNG) global_par("UC", "CHECKED"); - - if (vpw->pw_gid & NO_POP) global_par("UP", "CHECKED"); - - if (vpw->pw_gid & NO_WEBMAIL) global_par("UW", "CHECKED"); - - if (vpw->pw_gid & NO_IMAP) global_par("UI", "CHECKED"); - - if (vpw->pw_gid & BOUNCE_MAIL) global_par("UB", "CHECKED"); - - if (vpw->pw_gid & NO_RELAY) global_par("US", "CHECKED"); - -#ifdef SPAMASSASSIN - if (vpw->pw_gid & NO_SPAMASSASSIN) global_par("UF", "CHECKED"); -#endif - - if (vpw->pw_gid & QA_ADMIN) global_par("UK", "CHECKED"); + if (vpw->pw_gid & NO_POP) global_par("MP", "CHECKED"); + if (vpw->pw_gid & NO_IMAP) global_par("MI", "CHECKED"); + if (vpw->pw_gid & NO_DIALUP) global_par("MD", "CHECKED"); + if (vpw->pw_gid & NO_PASSWD_CHNG) global_par("MC", "CHECKED"); + if (vpw->pw_gid & NO_WEBMAIL) global_par("MW", "CHECKED"); + if (vpw->pw_gid & BOUNCE_MAIL) global_par("MB", "CHECKED"); + + if (vpw->pw_gid & NO_RELAY) global_par("MS", "CHECKED"); + if (vpw->pw_gid & NO_SMTP) global_par("MH", "CHECKED"); + if (vpw->pw_gid & NO_SPAMASSASSIN) global_par("MZ", "CHECKED"); + if (vpw->pw_gid & DELETE_SPAM) global_par("ML", "CHECKED"); + if (vpw->pw_gid & NO_MAILDROP) global_par("MN", "CHECKED"); + if (vpw->pw_gid & QA_ADMIN) global_par("MK", "CHECKED"); #ifdef ENABLE_AUTH_LOGGING mytime = vget_lastauth(vpw, domain); @@ -315,9 +349,8 @@ strncpy( face, get_lang_code("057"), 29); strncpy( size, get_lang_code("058"), 29); - printf("Show Users\n"); - printf("\n", - bgcolor, fgcolor, fgcolor, fgcolor); + printf("Show Users\n"); + printf("\n"); printf("\n", face, size, fgcolor); @@ -330,10 +363,12 @@ } else { printf("User\n", face, fgcolor); +/* #ifdef CLEAR_PASS printf("Password\n", face, fgcolor); #endif +*/ printf("Forward\n", face, fgcolor); printf("Vacation\n", @@ -343,7 +378,7 @@ printf("Domain Administrator\n", face, fgcolor); printf("Last Logon
\n", - face, fgcolor); + face, fgcolor); } count = 0; while(vpw != NULL && count < 128000 ){ @@ -353,12 +388,12 @@ printf("", vpw->pw_name, domain); printf("%s
\n", vpw->pw_name); - +/* #ifdef CLEAR_PASS printf("%s\n", face, fgcolor, vpw->pw_clear_passwd); #endif - +*/ printf("", face, fgcolor ); snprintf(workdir, 156, "%s/.qmail", vpw->pw_dir); fs=fopen(workdir,"r"); @@ -471,7 +506,6 @@ *tmpstr = 0; while (*tmpstr!='/') --tmpstr; ++tmpstr; - printf("alias: %s
\n", face, fgcolor, tmpstr); } @@ -529,14 +563,23 @@ static char domain[156]; char *gecos; char *passwd; - char *shell; - char *udisable; - char *uweb; + char *uquota; + + char *upop; char *uimap; + char *udialup; char *upassc; + char *uweb; char *ubounce; char *urelay; + char *uspam; + char *usmtp; + char *umaildrop; + char *udeletespam; char *uqadmin; + + char *formattedquota = NULL; + char qconvert[11]; int ret; int GidFlag = 0; struct vqpasswd *vpw; @@ -549,15 +592,23 @@ eaddr = cgi_is_var("eaddr"); gecos = cgi_is_var("fname"); passwd = cgi_is_var("cpass"); - shell = cgi_is_var("quota"); - udisable = cgi_is_var("udisable"); - uweb = cgi_is_var("uweb"); + uquota = cgi_is_var("quota"); + + upop = cgi_is_var("upop"); uimap = cgi_is_var("uimap"); + udialup = cgi_is_var("udialup"); upassc = cgi_is_var("upassc"); + uweb = cgi_is_var("uweb"); ubounce = cgi_is_var("ubounce"); + urelay = cgi_is_var("urelay"); + uspam = cgi_is_var("uspam"); + usmtp = cgi_is_var("usmtp"); + umaildrop = cgi_is_var("umaildrop"); + udeletespam = cgi_is_var("udeletespam"); uqadmin = cgi_is_var("uqadmin"); + if ( eaddr==NULL || strlen(eaddr)==0 ) { global_warning("Add Email Account: Failed: no email address given"); t_open("html/add_user.html", 1); @@ -591,24 +642,48 @@ vpw = vauth_getpw(user, domain); - if (udisable!=NULL) GidFlag |= NO_POP; - if (uweb!=NULL) GidFlag |= NO_WEBMAIL; + // UPDATE USER QUOTA ("maildirsize" file will be created at the end, only if the update is successfull. + formattedquota="NOQUOTA"; // START WITH DEAFULT "NOQUOTA" + if (uquota!=NULL) { // QUOTA FIELD IS SET + if (strlen(uquota)==0 || strcmp(uquota, "NOQUOTA")==0 || strcmp(uquota, "BADQUOTA")==0) { // RESET QUOTA + formattedquota = "NOQUOTA"; + } else { // QUOTA IS REQUESTED, CONVERT bytes->Mbytes + if (quota_to_bytes(qconvert, uquota)) { + global_warning("Invalid quota string."); + t_open("html/mod_user.html", 1); + } else { + formattedquota = format_maildirquota(qconvert); + } + } + } + vpw->pw_shell = formattedquota; + + // USER PERMISSIONS + if (upop!=NULL) GidFlag |= NO_POP; if (uimap!=NULL) GidFlag |= NO_IMAP; - if (ubounce!=NULL) GidFlag |= BOUNCE_MAIL; + if (udialup!=NULL) GidFlag |= NO_DIALUP; if (upassc!=NULL) GidFlag |= NO_PASSWD_CHNG; + if (uweb!=NULL) GidFlag |= NO_WEBMAIL; + if (ubounce!=NULL) GidFlag |= BOUNCE_MAIL; if (urelay!=NULL) GidFlag |= NO_RELAY; + if (usmtp!=NULL) GidFlag |= NO_SMTP; + if (uspam!=NULL) GidFlag |= NO_SPAMASSASSIN; + if (udeletespam!=NULL) GidFlag |= DELETE_SPAM; + if (umaildrop!=NULL) GidFlag |= NO_MAILDROP; if (uqadmin!=NULL) GidFlag |= QA_ADMIN; vpw->pw_gid = GidFlag; - if ( shell != NULL && strlen(shell) > 0 ) vpw->pw_shell = shell; ret = vauth_setpw(vpw, domain); if ( ret != VA_SUCCESS ) { snprintf(WarningBuff, MAX_WARNING_BUFF, "Add Account: Failure: %s set options", eaddr); global_warning(WarningBuff); + } else { + update_maildirsize(domain, vpw->pw_dir, formattedquota); // CREATE "maildirsize" file in user's Maildir. } - post_email_info( eaddr, vpw, domain); + + post_email_info(eaddr, vpw, domain); t_open(T_MAIN, 1);