[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
-----------------------------------------------------------------------------