Enclosed are patches relative to MH 6.8.3 which adds shared library support
for NetBSD (and FreeBSD), as well as makes it work with the Berkeley DB
package as well as with [N]DBM. It also makes it possible to use MPOP without
using BPOP.
Thorsten
Index: mh/conf/mhconfig.c
diff -c mh/conf/mhconfig.c:1.1.1.1 mh/conf/mhconfig.c:1.2
*** mh/conf/mhconfig.c:1.1.1.1 Sun Mar 19 01:05:49 1995
--- mh/conf/mhconfig.c Sun Mar 19 01:30:55 1995
***************
*** 452,457 ****
--- 452,461 ----
fprintf (fp, "/^(_at_)BEGIN: SUN4SHLIB$/d\n/^(_at_)END:
SUN4SHLIB$/d\n");
else
fprintf (fp, "/^(_at_)BEGIN: SUN4SHLIB$/,/^(_at_)END: SUN4SHLIB$/d\n");
+ if (strcmp (sharedlib, "netbsd") == 0)
+ fprintf (fp, "/^(_at_)BEGIN: NETBSDSHLIB$/d\n/^(_at_)END:
NETBSDSHLIB$/d\n");
+ else
+ fprintf (fp, "/^(_at_)BEGIN: NETBSDSHLIB$/,/^(_at_)END:
NETBSDSHLIB$/d\n");
if (strcmp (sharedlib, "sys5") == 0)
fprintf (fp, "/^(_at_)BEGIN: SYS5SHLIB$/d\n/^(_at_)END:
SYS5SHLIB$/d\n");
else
***************
*** 774,780 ****
if (strcmp (sharedlib, "on") && strcmp (sharedlib, "off")
&& strcmp (sharedlib, "sun4") && strcmp (sharedlib, "sys5")
! && strcmp (sharedlib, "secure"))
adios (NULLCP,
"sharedlib should be either \"sun4\", \"sys5\", or \"off\", not %s",
sharedlib);
--- 778,784 ----
if (strcmp (sharedlib, "on") && strcmp (sharedlib, "off")
&& strcmp (sharedlib, "sun4") && strcmp (sharedlib, "sys5")
! && strcmp (sharedlib, "secure") && strcmp (sharedlib, "netbsd"))
adios (NULLCP,
"sharedlib should be either \"sun4\", \"sys5\", or \"off\", not %s",
sharedlib);
Index: mh/conf/examples/netbsd
diff -c /dev/null mh/conf/examples/netbsd:1.1
*** /dev/null Sun Mar 19 01:52:59 1995
--- mh/conf/examples/netbsd Sun Mar 19 01:29:52 1995
***************
*** 0 ****
--- 1,53 ----
+ # a NetBSD i486 system running SendMail
+ cc /usr/bin/cc
+ bin /usr/local/bin
+ etc /usr/local/lib/mh
+ mandir /usr/local/man
+ mail /var/mail
+ chown /usr/sbin/chown
+ manuals bsd44/cat
+ mts sendmail/smtp
+
+ ldoptlibs -lcrypt
+ sharedlib netbsd
+ slflags -fpic
+
+ bboards off
+
+ pop on
+ popdir /usr/local/lib/mh
+
+ sprintf int
+ signal void
+
+ options APOP='"/usr/local/etc/pop.auth"'
+ options BIND
+ options BSD42
+ options BSD43
+ options BSD44
+ options CONTENT_LENGTH
+ options DBMPWD
+ options FCNTL
+ options FLOCK
+ options FOLDPROT='"0700"'
+ options GCOS_HACK
+ options MHE
+ options MHRC
+ options MIME
+ options MORE='"/usr/bin/more"'
+ options MPOP
+ options MSGPROT='"0600"'
+ options NORUSERPASS
+ options NTOHLSWAP
+ options POP
+ options POP2
+ options POPSERVICE='"pop-3"'
+ options POSIX
+ options RENAME
+ options RPOP
+ options SOCKET
+ options SYS5DIR
+ options UNISTD
+ options VSPRINTF
+ options WHATNOW
+ options ZONEINFO
Index: mh/conf/makefiles/sbr
diff -c mh/conf/makefiles/sbr:1.1.1.1 mh/conf/makefiles/sbr:1.2
*** mh/conf/makefiles/sbr:1.1.1.1 Sun Mar 19 01:06:13 1995
--- mh/conf/makefiles/sbr Sun Mar 19 01:31:05 1995
***************
*** 123,128 ****
--- 123,131 ----
@BEGIN: SYS5SHLIB
(cd shared; ld -G -o ../$@ -h $(_at_)(_dot_)$(SLIBVER)
$(OFILES))
@END: SYS5SHLIB
+ @BEGIN: NETBSDSHLIB
+ (cd shared; ld -Bshareable -o ../$@ $(OFILES))
+ @END: NETBSDSHLIB
-(_at_)rm -f $(_at_)(_dot_)$(SLIBVER)
ln $@ $(_at_)(_dot_)$(SLIBVER)
-(_at_)ls -l $(_at_)*
Index: mh/conf/makefiles/uip
diff -c mh/conf/makefiles/uip:1.1.1.1 mh/conf/makefiles/uip:1.2
*** mh/conf/makefiles/uip:1.1.1.1 Sun Mar 19 01:06:13 1995
--- mh/conf/makefiles/uip Sun Mar 19 01:31:09 1995
***************
*** 140,147 ****
--- 140,157 ----
@BEGIN: SHAREDLIB
LIBES = ../config/config.o ../sbr/libmh.so ../mts/libmts.a \
../zotnet/libzot.a
+ @BEGIN: SUN4SHLIB
LDLIBES = ../config/config.o -Bdynamic @(SLDFLAG) -lmh$(SLIBVER) \
../mts/libmts.a ../zotnet/libzot.a
+ @END: SUN4SHLIB
+ @BEGIN: SYS5SHLIB
+ LDLIBES = ../config/config.o -Bdynamic @(SLDFLAG) -lmh$(SLIBVER) \
+ ../mts/libmts.a ../zotnet/libzot.a
+ @END: SYS5SHLIB
+ @BEGIN: NETBSDSHLIB
+ LDLIBES = ../config/config.o @(SLDFLAG) -lmh$(SLIBVER) \
+ ../mts/libmts.a ../zotnet/libzot.a
+ @END: NETBSDSHLIB
LDLIBS = $(LDLIBES) ../config/version.o $(LDOPTLIB)
@END: SHAREDLIB
LINT = lint
Index: mh/conf/makefiles/support/bboards
diff -c mh/conf/makefiles/support/bboards:1.1.1.1
mh/conf/makefiles/support/bboards:1.2
*** mh/conf/makefiles/support/bboards:1.1.1.1 Sun Mar 19 01:06:15 1995
--- mh/conf/makefiles/support/bboards Sun Mar 19 01:31:14 1995
***************
*** 54,61 ****
--- 54,71 ----
../../sbr/libmh.so $(LIBES1)
LDLIBS1 = $(LIBES1) $(LDOPTLIB)
LDLIBS2 = $(LIBES2) $(LDOPTLIB)
+ @BEGIN: SUN4SHLIB
LDLIBS2 = ../../config/config.o ../../config/version.o \
-Bdynamic @(SLDFLAG) -lmh$(SLIBVER) $(LIBES1) $(LDOPTLIB)
+ @END: SUN4SHLIB
+ @BEGIN: SYS5SHLIB
+ LDLIBS2 = ../../config/config.o ../../config/version.o \
+ -Bdynamic @(SLDFLAG) -lmh$(SLIBVER) $(LIBES1) $(LDOPTLIB)
+ @END: SYS5SHLIB
+ @BEGIN: NETBSDSHLIB
+ LDLIBS2 = ../../config/config.o ../../config/version.o \
+ @(SLDFLAG) -lmh$(SLIBVER) $(LIBES1) $(LDOPTLIB)
+ @END: NETBSDSHLIB
@END: SHAREDLIB
LINT = lint
Index: mh/conf/makefiles/support/pop
diff -c mh/conf/makefiles/support/pop:1.1.1.1 mh/conf/makefiles/support/pop:1.2
*** mh/conf/makefiles/support/pop:1.1.1.1 Sun Mar 19 01:06:15 1995
--- mh/conf/makefiles/support/pop Sun Mar 19 01:31:16 1995
***************
*** 59,66 ****
--- 59,76 ----
@BEGIN: SHAREDLIB
LIBES2 = ../../config/config.o ../../sbr/libmh.so $(LIBES1)
LDLIBS1 = $(LIBES1) $(LDOPTLIB)
+ @BEGIN: SUN4SHLIB
LDLIBS2 = ../../config/config.o ../../config/version.o \
-Bdynamic @(SLDFLAG) -lmh$(SLIBVER) $(LIBES1) $(LDOPTLIB)
+ @END: SUN4SHLIB
+ @BEGIN: SYS5SHLIB
+ LDLIBS2 = ../../config/config.o ../../config/version.o \
+ -Bdynamic @(SLDFLAG) -lmh$(SLIBVER) $(LIBES1) $(LDOPTLIB)
+ @END: SYS5SHLIB
+ @BEGIN: NETBSDSHLIB
+ LDLIBS2 = ../../config/config.o ../../config/version.o \
+ @(SLDFLAG) -lmh$(SLIBVER) $(LIBES1) $(LDOPTLIB)
+ @END: NETBSDSHLIB
@END: SHAREDLIB
LINT = lint
Index: mh/support/pop/popauth.c
diff -c mh/support/pop/popauth.c:1.1.1.1 mh/support/pop/popauth.c:1.2
*** mh/support/pop/popauth.c:1.1.1.1 Sun Mar 19 01:08:19 1995
--- mh/support/pop/popauth.c Sun Mar 19 01:46:29 1995
***************
*** 119,137 ****
if ((pw = getpwnam (POPUID)) == NULL)
adios (NULLCP, "POP user-id unknown");
(void) sprintf (buf, "%s.dir", APOP);
if (stat (buf, &st) != NOTOK) {
if (!getanswer ("Really initialize POP authorization DB? "))
done (1);
(void) unlink (buf);
(void) sprintf (buf, "%s.pag", APOP);
(void) unlink (buf);
}
if ((db = dbm_open (APOP, O_RDWR | O_CREAT, 0600)) == NULL)
adios (APOP, "unable to create POP authorization DB");
if (fchown (dbm_dirfno (db), pw -> pw_uid, pw -> pw_gid) == NOTOK
! || fchown (dbm_pagfno (db), pw -> pw_uid, pw -> pw_gid)
! == NOTOK)
advise (" ", "error setting ownership of POP authorization DB");
done (0);
--- 119,145 ----
if ((pw = getpwnam (POPUID)) == NULL)
adios (NULLCP, "POP user-id unknown");
+ #ifdef DBM_SUFFIX
+ (void) sprintf (buf, "%s%s", APOP, DBM_SUFFIX);
+ #else
(void) sprintf (buf, "%s.dir", APOP);
+ #endif
if (stat (buf, &st) != NOTOK) {
if (!getanswer ("Really initialize POP authorization DB? "))
done (1);
(void) unlink (buf);
+ #ifndef DBM_SUFFIX
(void) sprintf (buf, "%s.pag", APOP);
(void) unlink (buf);
+ #endif
}
if ((db = dbm_open (APOP, O_RDWR | O_CREAT, 0600)) == NULL)
adios (APOP, "unable to create POP authorization DB");
if (fchown (dbm_dirfno (db), pw -> pw_uid, pw -> pw_gid) == NOTOK
! #ifndef DBM_SUFFIX
! || fchown (dbm_pagfno (db), pw -> pw_uid, pw -> pw_gid) == NOTOK
! #endif
! )
advise (" ", "error setting ownership of POP authorization DB");
done (0);
***************
*** 140,146 ****
if ((db = dbm_open (APOP, O_RDONLY, 0)) == NULL)
adios (APOP, "unable to open POP authorization DB");
! if (flock (dbm_pagfno (db), LOCK_SH) == NOTOK)
adios (APOP, "unable to lock POP authorization DB");
if (listsw) {
--- 148,154 ----
if ((db = dbm_open (APOP, O_RDONLY, 0)) == NULL)
adios (APOP, "unable to open POP authorization DB");
! if (flock (dbm_dirfno (db), LOCK_SH) == NOTOK)
adios (APOP, "unable to lock POP authorization DB");
if (listsw) {
***************
*** 232,238 ****
if ((db = dbm_open (APOP, O_RDWR, 0)) == NULL)
adios (APOP, "unable to open POP authorization DB");
! if (flock (dbm_pagfno (db), LOCK_EX) == NOTOK)
adios (APOP, "unable to lock POP authorization DB");
key.dsize = strlen (key.dptr = usersw) + 1;
--- 240,246 ----
if ((db = dbm_open (APOP, O_RDWR, 0)) == NULL)
adios (APOP, "unable to open POP authorization DB");
! if (flock (dbm_dirfno (db), LOCK_EX) == NOTOK)
adios (APOP, "unable to lock POP authorization DB");
key.dsize = strlen (key.dptr = usersw) + 1;
Index: mh/support/pop/popser.c
diff -c mh/support/pop/popser.c:1.1.1.1 mh/support/pop/popser.c:1.3
*** mh/support/pop/popser.c:1.1.1.1 Sun Mar 19 01:08:20 1995
--- mh/support/pop/popser.c Sun Mar 19 01:46:31 1995
***************
*** 6,15 ****
#include "../h/mh.h"
#include "../h/dropsbr.h"
#ifdef MPOP
- #ifdef BPOP
#include "../h/formatsbr.h"
#include "../h/scansbr.h"
- #endif
#endif /* MPOP */
#include "../zotnet/bboards.h"
#include <stdio.h>
--- 6,13 ----
***************
*** 204,213 ****
static int nmsgs;
static int dmsgs;
#ifdef MPOP
- #ifdef BPOP
static int _sc_width = 0;
static char *nfs = NULL;
- #endif
#endif /* MPOP */
--- 202,209 ----
***************
*** 705,717 ****
if ((db = dbm_open (APOP, O_RDONLY, 0)) == NULL)
return respond (NOTOK, "POP authorization DB not available (%d)",
errno);
! if (fstat (dbm_pagfno (db), &st) != NOTOK
&& (st.st_mode & 0777) != 0600) {
dbm_close (db);
return respond (NOTOK, "POP authorization DB has wrong mode (0%o)",
st.st_mode & 0777);
}
! if (flock (dbm_pagfno (db), LOCK_SH) == NOTOK) {
dbm_close (db);
return respond (NOTOK, "unable to lock POP authorization DB (%d)",
errno);
--- 701,713 ----
if ((db = dbm_open (APOP, O_RDONLY, 0)) == NULL)
return respond (NOTOK, "POP authorization DB not available (%d)",
errno);
! if (fstat (dbm_dirfno (db), &st) != NOTOK
&& (st.st_mode & 0777) != 0600) {
dbm_close (db);
return respond (NOTOK, "POP authorization DB has wrong mode (0%o)",
st.st_mode & 0777);
}
! if (flock (dbm_dirfno (db), LOCK_SH) == NOTOK) {
dbm_close (db);
return respond (NOTOK, "unable to lock POP authorization DB (%d)",
errno);
***************
*** 1518,1523 ****
--- 1514,1520 ----
padvise (NULLCP, LOG_DEBUG, "updated: \"%s\", 0%o, %d, %s",
bb -> bb_name, bb -> bb_flags, bb -> bb_maxima, bb -> bb_date);
}
+ #endif /* BPOP */
/* */
***************
*** 1538,1544 ****
int sc_width () { return _sc_width; }
#endif /* MPOP */
- #endif /* BPOP */
/* */
--- 1535,1540 ----
Index: mh/uip/slocal.c
diff -c mh/uip/slocal.c:1.1.1.1 mh/uip/slocal.c:1.2
*** mh/uip/slocal.c:1.1.1.1 Sun Mar 19 01:08:45 1995
--- mh/uip/slocal.c Sun Mar 19 01:46:40 1995
***************
*** 378,385 ****
--- 378,392 ----
{
#ifdef MSGID
struct stat st;
+ #ifdef DBM_SUFFIX
+ char filename[FILENAME_MAX];
+ strcpy(filename, ".maildelivery");
+ strcat(filename, DBM_SUFFIX);
+ if (stat (filename, &st) != NOTOK
+ #else
if (stat (".maildelivery.pag", &st) != NOTOK
+ #endif
&& check_msgid (fd, ".maildelivery") == DONE)
return OK;
#endif
***************
*** 1312,1330 ****
fl.l_whence = 0;
fl.l_start = 0;
fl.l_len = 0;
! if (fcntl (dbm_pagfno (db), F_SETLK, &fl) == -1) {
advise (file, "unable to perform flock on");
goto out;
}
}
#else
#ifdef LOCKF
! if (lockf (dbm_pagfno (db), F_LOCK) == NOTOK) {
advise (file, "unable to perform lockf on");
goto out;
}
#else
! if (flock (dbm_pagfno (db), LOCK_EX) == NOTOK) {
advise (file, "unable to perform flock on");
goto out;
}
--- 1319,1337 ----
fl.l_whence = 0;
fl.l_start = 0;
fl.l_len = 0;
! if (fcntl (dbm_dirfno (db), F_SETLK, &fl) == -1) {
advise (file, "unable to perform flock on");
goto out;
}
}
#else
#ifdef LOCKF
! if (lockf (dbm_dirfno (db), F_LOCK) == NOTOK) {
advise (file, "unable to perform lockf on");
goto out;
}
#else
! if (flock (dbm_dirfno (db), LOCK_EX) == NOTOK) {
advise (file, "unable to perform flock on");
goto out;
}
--
Thorsten Lockert | postmaster(_at_)sigmasoft(_dot_)com | Universe, n.:
1262 Golden Gate Avenue | hostmaster(_at_)sigmasoft(_dot_)com | The
problem.
San Francisco, CA 94115 | tholo(_at_)sigmasoft(_dot_)com |