nmh-workers
[Top] [All Lists]

Shared lib support for NetBSD/FreeBSD; conditionally work with DB

1995-03-20 12:11:48
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      |
<Prev in Thread] Current Thread [Next in Thread>
  • Shared lib support for NetBSD/FreeBSD; conditionally work with DB, Thorsten Lockert <=