[comp.mail.misc] UCB sendmail coexisting with Sun YP

dpz@soliloquy.rutgers.edu (David P. Zimmerman) (07/10/87)

I have been trying to get sendmail to coexist peacefully with Sun's YP
service, and ran across something that I thought exceedingly weird.  I
am hoping someone can explain the meaning of it.

Some background: We use UCB sendmail in place of the Sun sendmail, and
have symbolic links from /usr/lib/aliases.{dir,pag} to their
counterparts down in /usr/etc/yp/domainname.  For the clients, slave
servers, and clients of the slave servers, we have MX records pointing
to the master server.

After modifying /usr/lib/aliases and doing a "make aliases" in
/etc/yp, the ypxfr would die with a "no local order number" message.
Likewise, the ypxfr_2perday mail.aliases call on the slave servers
would die, complaining that it couldn't find out who the master server
of the map was.  I understand why, but don't like any of it.

Following this is a diff of my changes to sendmail that seems to work
for both sendmail and YP, but I am not confident about it, seeing how
this scheme of mallocing an extra byte is used in many other places in
sendmail.  My problem is that /etc/yp/makedbm "corrects" the key
length (I call "makedbm -u | makedbm -" in /etc/yp/Makefile to get the
YP info in there).  Could someone explain that extra byte?  If it is
necessary, I think I can hack around it.  Thanks...

						dpz

***
alias.c.BEFOREDPZ   Wed Mar 25 21:54:24 1987
--- alias.c     Tue Jul  7 20:44:09 1987
***************
*** 137,143

        /* create a key for fetch */
        lhs.dptr = name;
!       lhs.dsize = strlen(name) + 1;
        rhs = fetch(lhs);
        return (rhs.dptr);
  # else DBM

--- 137,143 -----

        /* create a key for fetch */
        lhs.dptr = name;
!       lhs.dsize = strlen(name);
        rhs = fetch(lhs);
        return (rhs.dptr);
  # else DBM
***************
*** 488,495
                **  Insert alias into symbol table or DBM file
                */

!               lhssize = strlen(al.q_user) + 1;
!               rhssize = strlen(rhs) + 1;

  # ifdef DBM
                if (init)

--- 488,495 -----
                **  Insert alias into symbol table or DBM file
                */

!               lhssize = strlen(al.q_user);
!               rhssize = strlen(rhs);

  # ifdef DBM
                if (init)
-- 
David P. Zimmerman           rutgers!dpz           dpz@rutgers.edu