[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Patches for DEC OSF1v2.0 and Config Questions
Hello Zmailer experts,
I picked up zmailer-2.97-940926.tar from ftp.funet.fi and --- after some
patches --- got it to compile on DEC OSF1 v 2.0 on the alpha. Below I
include a shell archive with an Config file, the appropriate hostenv and the
a patch file. The latter applies some #ifdefs to fix some includes and
prototypes (which conflict with DEC's include files). Also in some files,
where nameserver querys are made, I had to do a #define u_long u_int.
(It sounds funny, but I think this bug is also in the IDA sendmail (5.65)
supplied with DEC OSF/1 2.0 and results in a failure to resolve names via
bind properly :-)) Finally there was a bug in the smtp program: It
crashed with the option -x due to a missing pointer initialization.
Now my questions:
* I want to replace our existing central mail spool machine (currently with
sendmail) by one of our alphas running zmailer.
Our setup is, that all clients have the mail spool dir mounted via
NFS, but (to keep their sendmail.cf simple) send nearly all mail (except
mail for root, admin, etc which is delivered local in a seperate spool
dir) via smtp to the central mail host.
Now the problem is, that the clients' sendmails do not add the
Full Name, if they forward the mail to the central mail hub.
How can I config zmailer that It adds the fullname to the From: line?
* Is there a way to configure the layout of the Header (like in sendmail)?
* Another Problem is, that most standard client configurations for
sendmail (which I use on the client machines) forward even mail to
/dev/null (from a local alias) to the central mail hub. But then
zmailer complains about missing permissions to deliver the mail to
/dev/null. This is (probably) because the mailbox program checks first
for permission ``nobody'' and rejects delivery and does not check the
permissions of the file to deliver to.
Do I have to hack the mailbox program or is something wrong with my
config files? (These are mostly the default ones, except that I added the
feature to deliver mail to some ``special users'' (root, admin, etc...)
really to the given host (possibly bypassing an mx-record).
Any help and suggestions appreciated
Regards
\franz
PS: Here come the OSF1-Alpha Config and patches. I would appreciate
if they could be included in the next release (Matti Aarnio?).
--snip-----------------------------------------------------------------------
#!/bin/sh
# This is a shell archive (produced by GNU shar 4.0).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `!/bin/sh' line above, then type `sh FILE'.
#
# Made on 1994-10-12 10:50 MET by <fischer@meru>.
# Source directory was `/dist/share/src/net/zmailer/zmailer-patches/zmailer2.97'.
#
# Existing files will *not* be overwritten unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 3168 -rw-r--r-- Config
# 2608 -rw-rw-r-- hostenv/OSF1v2.0-Alpha
# 10842 -rw-r--r-- zmailer2.97.patch
#
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
shar_touch=touch
else
shar_touch=:
echo 'WARNING: not restoring timestamps'
fi
rm -f 1231235999 $$.touch
#
# ============= Config ==============
if test -f 'Config' && test X"$1" != X"-c"; then
echo 'x - skipping Config (File already exists)'
else
echo 'x - extracting Config (text)'
sed 's/^X//' << 'SHAR_EOF' > 'Config' &&
# Edit this file to reflect information specific to your installation.
# See SiteConfig -file for things like directories, NNTP servers, ...
X
# ZCONFIG is the pathname of the configuration file specifying all the other
# host-dependent information needed by ZMailer programs. This file is
# created from the Config file in the distribution (the file you are reading
# right now), and contains variable assignments in an sh-compatible format.
ZCONFIG= /etc/zmailer.conf
X
# HOSTENV selects one of the files in the hostenv directory, perhaps one
# you have just created, that describes the system you are trying to compile
# this software on. The contents of that file will be processed to produce
# include/libsupport.h and some sed commands in Config.sed to munge makefiles
# appropriately. Valid values for HOSTENV is any unqualified filename in
# the hostenv directory (SunOS4.0, BSD4.3, IRIX3.3, Ultrix3.1, SystemVr3.2,...).
HOSTENV= OSF1v2.0-Alpha
X
# DEFS is where you put global preprocessor definitions that aren't handled
# by the HOSTENV based configuration procedure. Hopefully this will be empty,
# but some sample uses are:
#
# -Du_int=uint -Du_char=unchar -Du_long=ulong
#
# for a system that doesn't define u_int u_char u_long etc in <sys/types.h>,
# or -DMAXPATHLEN=1024 for a system that doesn't define this in
# <sys/param.h>.
# Define here -DUSE_ALLOCA, and "-DALLOC_H=<alloc.h>", if they are available
# on some compilers (GCC for example) on the platform, but not on all, and
# thus nonexistent on hostenv/ -file. Remember to add possibly needed
# libraries for including the actual alloca() routine -- "-lPW" on some SVR3s
# into appropriate library lists..
DEFS=-D_BSD
X
# MAILBOXDEFS has defines related to 'mailbox' and 'lock':
# -DBIFF - tell biff about mail
# -DRBIFF - tell remote comsats about mail
# -DRBIFF_ALWAYS - tell even if user has no "~/.rbiff" file
# -DUSE_NFSMBOX - do remote locking of mail spool files mounted via NFS
# see support/{nfslock,rlockd} for more about this
MAILBOXDEFS=
X
# SHELL is usually /bin/sh, but some systems may require a different
# pathname to get a working shell. On Ultrix or other systems with a very
# old default shell, this may have to be set to /bin/sh5 or similar.
SHELL= /bin/sh
X
# INSTALL is the program to do system installation. UCB-install behaviour
# is expected..
INSTALL=/usr/bin/installbsd
X
# CC gives the command (and associated arguments) used to invoke the C
# compiler on your system. Usually this would be the standard C compiler,
# so you won't need to define this -- leave it commented out. However,
# a sample use is:
#CC= gcc #-traditional
CC= cc
X
# COPTS are the pervasive options to be given with all C compilations.
# The -g option is advised unless you have supreme confidence in your compiler.
COPTS=-O -Olimit 1400 -D__STDC__
X
# CPPDEP is a command used by "mkdep" and "mklibdep" for finding out
# the includes -- gcc -MM yields only the NON-SYSTEM includes
CPPDEP=cc -M
X
# RANLIB is included to cater to machines that don't need it at all, because
# their ar(1) program has been smitten by featuritis. Usually ranlib or true.
RANLIB= ranlib
SHAR_EOF
$shar_touch -am 1011111494 'Config' &&
chmod 0644 'Config' ||
echo 'restore of Config failed'
shar_count="`wc -c < 'Config'`"
test 3168 -eq "$shar_count" ||
echo "Config: original size 3168, current size $shar_count"
fi
# ============= hostenv/OSF1v2.0-Alpha ==============
if test ! -d 'hostenv'; then
echo 'x - creating directory hostenv'
mkdir 'hostenv'
fi
if test -f 'hostenv/OSF1v2.0-Alpha' && test X"$1" != X"-c"; then
echo 'x - skipping hostenv/OSF1v2.0-Alpha (File already exists)'
else
echo 'x - extracting hostenv/OSF1v2.0-Alpha (text)'
sed 's/^X//' << 'SHAR_EOF' > 'hostenv/OSF1v2.0-Alpha' &&
# System features file for OSF/1.1.2 - Guy Middleton
X
# Debugging memory allocator
#
MALLOC_LIB=
X
# sys_siglist[] -- text describing each signal
SIGLIST_LIB=
X
# signal handler return type
SIGNAL_TYPE= void
X
# IP IPC
# Library: network and socket routines
# Include: <netinet/*.h>, <net/*.h> etc
INET_LIB=
INET_INCL=
X
# NFS support
# Include: <mntent.h>
NFS_LIB=
NFS_INCL=
X
# BIND nameserver
# Library: BIND resolver routines
# Include: <netdb.h>, <arpa/nameser.h>, <resolv.h>
# Config file: /etc/resolv.conf or /usr/etc/resolv.conf or similar
# NB!! the SunOS 4.0 and 4.1 libresolv.a are not up to date. Get
# and install a recent copy of BIND from ucbarpa.berkeley.edu.
RESOLV_LIB=
RESOLV_INCL=
RESOLV_CONF= "/etc/resolv.conf"
X
# NDBM
# Library: dbm_open(), dbm_close(), dbm_fetch(), dbm_store(), dbm_delete(),
# dbm_firstkey(), dbm_nextkey(), dbm_error(), dbm_clearerr()
# Include: <ndbm.h>
NDBM_LIB=
NDBM_INCL=
X
# DBM
# Library: dbm_init(), fetch(), store(), delete(), firstkey(), nextkey()
# Include: <dbm.h>
DBM_LIB= -ldbm
DBM_INCL=
X
# miscellaneous
# Library: system dependent
# Include:
MISC_LIB= -lbsd
MISC_INCL=
X
# Hosts file routines
# Library: sethostent(), gethostbyname()
# Include: <netdb.h>
# Hosts file: "/etc/hosts"
#HOSTS_LIB=
#HOSTS_INCL= <netdb.h>
#HOSTS_FILE= "/etc/hosts"
X
# Directory reading routines
# Library: opendir(), readdir(), closedir(), rewinddir()
# Header file: <sys/dir.h> on BSD, <dirent.h> on SVID, perhaps <ndir.h>
# Type: either 'direct' or 'dirent' depending on flavour
NDIR_LIB=
NDIR_H= <sys/dir.h>
NDIR_TYPE= direct
X
# Needed for userid truncation
MAILBOX_LIB= -luw
X
# Syslog routines
# Library: openlog(), syslog()
# Include: <syslog.h>
SYSLOG_LIB=
SYSLOG_INCL=
X
# Location of time structure definitions
TIME_H= <sys/time.h>
X
# Set each *_TYPE to the type of the corresponding function (see sysprotos.h)
FREAD_TYPE= int
FWRITE_TYPE= int
GETEUID_TYPE= uid_t
GETUID_TYPE= uid_t
SPRINTF_TYPE= int
STRLEN_TYPE= int
UMASK_TYPE= mode_t
TIMES_TYPE= clock_t
SETPWENT_TYPE= void
OPENLOG_TYPE= int
X
# Set each variable to indicate the corresponding feature exists in libc
LSTAT=
SETREUID=
FCHOWN=
FCHMOD=
STRCHR=
#UNAME=
DUP2=
BSDSETPGRP=
RLIMIT=
#BINMKDIR=
#BINRMDIR=
RENAME=
STATBLKSIZ=
BCOPY=
#NFSMBOX=
V7LOCK=
#LOCKF=
UNIONWAIT=
#YP=
GETPWNAM= # define this if getpwent() iteration is inappropriate
SELECT=
TIMEVAL=
#NOFILE=
BSDNODELAY=
VFPRINTF=
DBMCLOSE=
FTRUNCATE=
#BSDTIMEZONE=
#SYSVTIMEZONE=
SIGLIST=
SETVBUF=
SETSID=
OSFGETMNT=
USE_STATVFS=
BSD=43
X
#file system stuff, how to get block size, on sgi want a #include <sys/fs/s5macros.h>
X
SHAR_EOF
$shar_touch -am 1011104894 'hostenv/OSF1v2.0-Alpha' &&
chmod 0664 'hostenv/OSF1v2.0-Alpha' ||
echo 'restore of hostenv/OSF1v2.0-Alpha failed'
shar_count="`wc -c < 'hostenv/OSF1v2.0-Alpha'`"
test 2608 -eq "$shar_count" ||
echo "hostenv/OSF1v2.0-Alpha: original size 2608, current size $shar_count"
fi
# ============= zmailer2.97.patch ==============
if test -f 'zmailer2.97.patch' && test X"$1" != X"-c"; then
echo 'x - skipping zmailer2.97.patch (File already exists)'
else
echo 'x - extracting zmailer2.97.patch (text)'
sed 's/^X//' << 'SHAR_EOF' > 'zmailer2.97.patch' &&
*** ./lib/allocate.c Thu Aug 18 16:29:54 1994
--- ../zmailer-2.97-alpha/lib/allocate.c Thu Oct 06 15:29:40 1994
***************
*** 23,29 ****
--- 23,33 ----
X
X extern char *nbytes();
X
+ #ifdef __alpha
+ #define NALIGN 8 /* bytesize of largest type needing alignment */
+ #else
X #define NALIGN 4 /* bytesize of largest type needing alignment */
+ #endif __alpha
X #if NALIGN == 2 || NALIGN == 4 || NALIGN == 8 || NALIGN == 16
X /* if NALIGN is a power of 2, the next line will do ok */
X #define ALIGN(X) (char *)(((u_long)((char *)(X) + (NALIGN-1))) & ~(NALIGN-1))
*** ./libc/getdtblsiz.c Sun Sep 18 22:55:53 1994
--- ../zmailer-2.97-alpha/libc/getdtblsiz.c Fri Oct 07 11:00:18 1994
***************
*** 10,20 ****
X {
X struct rlimit res;
X int stat;
! #ifdef _POSIX_SOURCE
X stat = getrlimit(RLIMIT_NFILE, &res);
! #else
X stat = getrlimit(RLIMIT_NOFILE, &res);
! #endif
X if (stat < 0) return(-1);
X return(res.rlim_cur);
X }
--- 10,26 ----
X {
X struct rlimit res;
X int stat;
!
! /* #ifdef _POSIX_SOURCE
X stat = getrlimit(RLIMIT_NFILE, &res);
! #else */
!
X stat = getrlimit(RLIMIT_NOFILE, &res);
!
! /*#endif*/
!
!
!
X if (stat < 0) return(-1);
X return(res.rlim_cur);
X }
*** ./libsh/io.c Sun Jun 26 04:56:40 1994
--- ../zmailer-2.97-alpha/libsh/io.c Thu Oct 06 15:29:41 1994
***************
*** 20,26 ****
--- 20,28 ----
X extern int cvt();
X extern double modf();
X extern char *exponent(), *round();
+ #ifndef __alpha
X extern int printf();
+ #endif __alpha
X
X
X struct siobuf *siofds[MAXNFILE]; /* string buffers */
*** ./router/libdb/bind.c Thu Aug 18 09:18:19 1994
--- ../zmailer-2.97-alpha/router/libdb/bind.c Thu Oct 06 15:29:41 1994
***************
*** 24,29 ****
--- 24,33 ----
X #include <resolv.h>
X #include "search.h"
X
+ #ifdef __alpha
+ #define u_long u_int
+ #endif
+
X /*
X * Query a BIND standard (version 4.7 or later) nameserver.
X */
***************
*** 353,359 ****
X type = _getshort(cp);
X cp += sizeof(u_short); /* type */
X cp += sizeof(u_short); /* class */
! ttl = _getlong(cp);
X cp += sizeof(u_long); /* ttl */
X n = _getshort(cp);
X cp += sizeof(u_short); /* dlen */
--- 357,363 ----
X type = _getshort(cp);
X cp += sizeof(u_short); /* type */
X cp += sizeof(u_short); /* class */
! ttl = (time_t) _getlong(cp);
X cp += sizeof(u_long); /* ttl */
X n = _getshort(cp);
X cp += sizeof(u_short); /* dlen */
***************
*** 581,587 ****
X type = _getshort(cp);
X cp += sizeof(u_short); /* type */
X cp += sizeof(u_short); /* class */
! ttl = _getlong(cp);
X cp += sizeof(u_long); /* ttl */
X n = _getshort(cp);
X cp += sizeof(u_short); /* dlen */
--- 585,591 ----
X type = _getshort(cp);
X cp += sizeof(u_short); /* type */
X cp += sizeof(u_short); /* class */
! ttl = (time_t) _getlong(cp);
X cp += sizeof(u_long); /* ttl */
X n = _getshort(cp);
X cp += sizeof(u_short); /* dlen */
*** ./router/prototypes.h Tue Sep 06 16:27:01 1994
--- ../zmailer-2.97-alpha/router/prototypes.h Thu Oct 06 15:29:41 1994
***************
*** 49,55 ****
--- 49,57 ----
X extern void sb_external();
X extern void v_set();
X extern void v_setl();
+ #ifndef tolower
X extern int tolower __((const int));
+ #endif tolower
X
X /* File: conf.c */
X extern char files_gid;
*** ./router/router.c Sat Aug 20 21:47:11 1994
--- ../zmailer-2.97-alpha/router/router.c Thu Oct 06 15:29:41 1994
***************
*** 147,153 ****
X progname);
X exit(128+errflg);
X }
! now = time((long *)0);
X if ((mailshare = getzenv("MAILSHARE")) == NULL)
X mailshare = MAILSHARE;
X if (config == NULL) {
--- 147,153 ----
X progname);
X exit(128+errflg);
X }
! now = time((time_t *)0);
X if ((mailshare = getzenv("MAILSHARE")) == NULL)
X mailshare = MAILSHARE;
X if (config == NULL) {
*** ./scheduler/msgerror.c Wed Sep 21 20:26:01 1994
--- ../zmailer-2.97-alpha/scheduler/msgerror.c Thu Oct 06 15:29:42 1994
***************
*** 18,24 ****
X
X extern struct ctlfile *slurp();
X extern char *mailshare, *progname;
- extern int lockaddr();
X extern char *strchr();
X extern char *strnsave();
X
--- 18,23 ----
*** ./smtpserver/smtpserver.c Wed Sep 21 19:22:58 1994
--- ../zmailer-2.97-alpha/smtpserver/smtpserver.c Fri Oct 07 11:35:09 1994
***************
*** 40,59 ****
--- 40,66 ----
X #include <varargs.h>
X #include <mail.h>
X #include <sys/time.h>
+
X #ifdef FCNTL_H
X # include FCNTL_H
X #endif
+
X #ifdef USE_STATVFS
X # include <sys/statvfs.h>
X # define FSTATFS fstatvfs
X # define STATFSTYPE struct statvfs
+
X #else /* !USE_STATVFS */
+
X #ifdef SYSV
X # include <sys/statfs.h>
X # define FSTATFS fstatfs
X # define STATFSTYPE struct statfs
+
X #else /* Hmm.. Assuming it appears on all NON-SysV systems.. */
+
X #ifdef ULTRIX
+
X /* From: James S MacKinnon <jmack@Phys.UAlberta.Ca> */
X # include <sys/types.h>
X # include <sys/stat.h>
***************
*** 64,70 ****
--- 71,79 ----
X # include <nfs/vfs.h>
X # define STATFSTYPE struct statfs
X # define FSTATFS statfs
+
X #else /* !ULTRIX */
+
X # include <sys/vfs.h>
X /*# define FSTATFS fstatfs*/
X # define STATFSTYPE struct statfs
***************
*** 260,265 ****
--- 269,275 ----
X extern char *optarg;
X
X extern char *strchr();
+ extern char *strrchr();
X
X #ifdef lint
X #undef putc
*** ./transports/libta/diagnostic.c Mon Sep 05 12:23:16 1994
--- ../zmailer-2.97-alpha/transports/libta/diagnostic.c Thu Oct 06 15:29:43 1994
***************
*** 87,93 ****
--- 87,95 ----
X char mark, message[8192];
X register char *cp, *s, *es, *s2;
X va_list ap;
+ #ifndef __alpha
X extern int lockaddr();
+ #endif __alpha
X
X va_start(ap);
X rp = va_arg(ap, struct rcpt *); /* arg1: rp */
*** ./transports/mailbox/mailbox.c Mon Sep 26 10:45:11 1994
--- ../zmailer-2.97-alpha/transports/mailbox/mailbox.c Fri Oct 07 11:58:12 1994
***************
*** 1666,1672 ****
X putc('>',fp);
X i = fwrite(buf2, 1, tlen, fp);
X if (i != tlen) return -1;
! return tlen;
X }
X /* ------------------------------------------------------------ */
X /* Well, no other processings known.. */
--- 1666,1672 ----
X putc('>',fp);
X i = fwrite(buf2, 1, tlen, fp);
X if (i != tlen) return -1;
! return len; /* Return the incoming length, NOT the true length! */
X }
X /* ------------------------------------------------------------ */
X /* Well, no other processings known.. */
*** ./transports/smtp/smtp.c Wed Sep 21 20:48:18 1994
--- ../zmailer-2.97-alpha/transports/smtp/smtp.c Thu Oct 06 15:29:44 1994
***************
*** 54,60 ****
--- 54,64 ----
X typedef char msgdata;
X #endif /* defined(BIND_VER) && (BIND_VER >= 473) */
X
+ #ifdef __alpha
+ #define u_long u_int
+ #endif __alpha
X
+
X /* Define all those things which exist on newer BINDs, and which may
X get returned to us, when we make a query with T_ANY ... */
X
***************
*** 964,969 ****
--- 968,974 ----
X struct mxdata mxh[MAXFORWARDERS];
X int mxcnt = 0;
X
+ hp = NULL;
X #ifdef BIND
X h_errno = 0;
X #endif /* BIND */
*** ./utils/makendbm/makendbm.c Wed Mar 24 08:03:06 1993
--- ../zmailer-2.97-alpha/utils/makendbm/makendbm.c Thu Oct 06 15:29:44 1994
***************
*** 21,31 ****
X extern void create_dbase();
X
X void
! usage(err,errno)
X char *err;
X int errno;
X {
! fprintf(stderr,"Usage: "PROG" database.name [infilename|-]\n");
X fprintf(stderr," If no infilename is defined, database.name is assumed.\n");
X fprintf(stderr," (ndbm appends .pag, and .dir into actual db file names..)\n");
X fprintf(stderr," Error now: %s",err);
--- 21,32 ----
X extern void create_dbase();
X
X void
! usage(prog, err,errno)
! char *prog;
X char *err;
X int errno;
X {
! fprintf(stderr,"Usage: %s: database.name [infilename|-]\n", prog);
X fprintf(stderr," If no infilename is defined, database.name is assumed.\n");
X fprintf(stderr," (ndbm appends .pag, and .dir into actual db file names..)\n");
X fprintf(stderr," Error now: %s",err);
***************
*** 44,51 ****
X FILE *infile = NULL;
X DBM *dbmfile;
X
! if (argc < 2) usage("too few arguments",0);
! if (argc > 3) usage("too many arguments",0);
X dbasename = argv[1];
X
X if (argc == 3) {
--- 45,52 ----
X FILE *infile = NULL;
X DBM *dbmfile;
X
! if (argc < 2) usage(argv[0], "too few arguments",0);
! if (argc > 3) usage(argv[0], "too many arguments",0);
X dbasename = argv[1];
X
X if (argc == 3) {
***************
*** 56,66 ****
X } else
X infile = (FILE*)fopen(argv[1],"r");
X
! if (infile == NULL) usage("bad infile",errno);
X
X dbmfile = dbm_open(dbasename, O_RDWR|O_CREAT|O_TRUNC, 0644);
X if (dbmfile == NULL)
! usage("Can't open dbase file",errno);
X
X
X create_dbase(infile,dbmfile);
--- 57,67 ----
X } else
X infile = (FILE*)fopen(argv[1],"r");
X
! if (infile == NULL) usage(argv[0], "bad infile",errno);
X
X dbmfile = dbm_open(dbasename, O_RDWR|O_CREAT|O_TRUNC, 0644);
X if (dbmfile == NULL)
! usage(argv[0], "Can't open dbase file",errno);
X
X
X create_dbase(infile,dbmfile);
*** ./utils/makendbm/ndbmlook.c Wed Mar 24 08:03:51 1993
--- ../zmailer-2.97-alpha/utils/makendbm/ndbmlook.c Thu Oct 06 15:29:44 1994
***************
*** 12,18 ****
X #include <fcntl.h>
X #include <ndbm.h>
X
- #define PROG "ndbmlook"
X
X extern int errno;
X extern char *sys_errlist[];
--- 12,17 ----
***************
*** 21,31 ****
X extern void create_dbase();
X
X void
! usage(err,errno)
X char *err;
X int errno;
X {
! fprintf(stderr,"Usage: "PROG" database.name key\n");
X fprintf(stderr," (ndbm appends .pag, and .dir into actual db file names..)\n");
X fprintf(stderr," Error now: %s",err);
X if (errno > 0 && errno < sys_nerr)
--- 20,31 ----
X extern void create_dbase();
X
X void
! usage(prog,err,errno)
! char *prog;
X char *err;
X int errno;
X {
! fprintf(stderr,"Usage: %s database.name key\n", prog);
X fprintf(stderr," (ndbm appends .pag, and .dir into actual db file names..)\n");
X fprintf(stderr," Error now: %s",err);
X if (errno > 0 && errno < sys_nerr)
***************
*** 45,55 ****
X datum key;
X datum result;
X
! if (argc != 3) usage("wrong number of arguments",0);
X dbasename = argv[1];
X dbmfile = dbm_open(dbasename, O_RDONLY, 0644);
X if (dbmfile == NULL)
! usage("Can't open dbase file",errno);
X
X key.dptr = argv[2];
X key.dsize = strlen(argv[2]) +1;
--- 45,55 ----
X datum key;
X datum result;
X
! if (argc != 3) usage(argv[0],"wrong number of arguments",0);
X dbasename = argv[1];
X dbmfile = dbm_open(dbasename, O_RDONLY, 0644);
X if (dbmfile == NULL)
! usage(argv[0],"Can't open dbase file",errno);
X
X key.dptr = argv[2];
X key.dsize = strlen(argv[2]) +1;
SHAR_EOF
$shar_touch -am 1010110294 'zmailer2.97.patch' &&
chmod 0644 'zmailer2.97.patch' ||
echo 'restore of zmailer2.97.patch failed'
shar_count="`wc -c < 'zmailer2.97.patch'`"
test 10842 -eq "$shar_count" ||
echo "zmailer2.97.patch: original size 10842, current size $shar_count"
fi
exit 0
--snip-----------------------------------------------------------------------
--
-----------------------------------------------------------------------------
Franz G. Fischer fischer@lpr.e-technik.tu-muenchen.de
Lehrstuhl fuer Prozessrechner, TU Muenchen Phone: +49-89-2105-3561
Arcisstr. 21, Raum 4947, D-80333 Muenchen, Germany Fax: +49-89-2105-3555
-----------------------------------------------------------------------------