getservbyname() and glibc 2.1 (was Re: postfix cannot send mail anymore)
On Tue, Mar 16, 1999 at 02:48:28PM +0200, Edvard Majakari wrote:
> >>>>> "Gergely" == Gergely Madarasz <gorgo@caesar.elte.hu> writes:
>
> Gergely> Try to restart postfix. If you started it before the glibc
> Gergely> upgrade, then it is still looking for /lib/libnss_* from
> Gergely> glibc 2.0, and now it can't find it.
>
> This doesn't help; I actually rebooted the machine after upgrading
> (took new 2.2.3 kernel in use), but that didn't help either.
i tried recompiling postfix with the new glibc 2.1.
fixed one minor problem - had to s/<db.h>/<db_185.h>/g in a couple
of source (global/mkmap_db.c and util/dict_db.c) files to get it to
compile.
(i had to remove man-db and libdb2 and libdb2-dev first. libc6
2.1.1-0pre1.3 Replaces: libdb2 but it doesn't Conflict or Provide it.
man-db depends on libdb2...which means i can only view man pages with
less at the moment on my glibc 2.1 test machine)
I haven't fixed the second problem yet, and it's the one you're seeing.
the "postfix/smtp[20154]: fatal: unknown service: smtp/tcp" is generated
by .../smtp/smtp-connect.c when a getservbyname() call fails.
getservbyname is used in 3 places in postfix:
root@xena /usr/local/src/postfix/postfix-0.0.19990122pl01# find . -name "*.[ch]" | xargs grep -i getservbyname
./util/find_inet.c: if ((sp = getservbyname(service, protocol)) == 0)
./smtp/smtp_connect.c: if ((sp = getservbyname(service, protocol)) == 0)
./local/biff_notify.c: if ((sp = getservbyname("biff", "udp")) == 0) {
looking at the man page for getservbyname(), it seems that the source is
calling it correctly, but it is returning junk.
this sucks. badly. AFAICT, getservbyname hasn't changed for years. the
man page is dated 1996.
has anyone else had problems with getservbyname() and glibc 2.1?
OTHER POSSIBLY RELEVANT INFO
----------------------------
1. ldd shows that smtp is linked to the right libraries:
root@xena /usr/lib/postfix# ldd smtp
libdb.so.3 => /lib/libdb.so.3 (0x40018000)
libnsl.so.1 => /lib/libnsl.so.1 (0x40053000)
libresolv.so.2 => /lib/libresolv.so.2 (0x40069000)
libc.so.6 => /lib/libc.so.6 (0x40078000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
root@xena /usr/lib/postfix# ls -lF /lib/libnsl*
-rw-r--r-- 1 root root 97429 Mar 14 18:21 /lib/libnsl-2.1.1.so
lrwxrwxrwx 1 root root 15 Mar 17 10:01 /lib/libnsl.so.1 -> libnsl-2.1.1.so
2. i have tried this with and without nscd running. doesn't make any
difference.
3. i have also tried editing /etc/nsswitch.conf so that:
--- nsswitch.conf.old Wed Mar 17 11:24:57 1999
+++ nsswitch.conf Wed Mar 17 11:28:50 1999
@@ -11,9 +11,9 @@
hosts: files dns
networks: files
-protocols: db files
-services: db files
-ethers: db files
-rpc: db files
+protocols: files
+services: files
+ethers: files
+rpc: files
netgroup: nis
doesn't make any difference at all. i didn't think it would, but it was
worth trying.
4. i haven't tried rebooting yet. i'll do that next. i'm not expecting
it to make any difference as i've already stopped/started all important
services.
craig
--
craig sanders
Reply to: