Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 91141 - Sed filter in init.d/xmail fails to copy ld-linux.so.2 causing XMail to segfault
Summary: Sed filter in init.d/xmail fails to copy ld-linux.so.2 causing XMail to segfault
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: High major (vote)
Assignee: Net-Mail Packages
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 39817
  Show dependency tree
 
Reported: 2005-05-02 02:53 UTC by Ceesjan Luiten
Modified: 2005-06-06 06:24 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ceesjan Luiten 2005-05-02 02:53:52 UTC
Hi, there is a problem with the /etc/init.d/xmail file, it fails to copy lib files if they are listed in a specific way. I found this out after upgrading my glibc version and xmail segfaulting. I traced it down to an outdated ld-linux.so.2 in my /chroot/xmail/lib . This is caused by the sed filter from the init file that fails to copy the file. The output of ldd /var/MailRoot/bin/XMail:

        linux-gate.so.1 =>  (0xffffe000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7fd0000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7f7d000)
        libstdc++.so.5 => /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libstdc++.so.5 (0xb7eb1000)
        libm.so.6 => /lib/libm.so.6 (0xb7e8c000)
        libgcc_s.so.1 => /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libgcc_s.so.1 (0xb7e83000)
        libc.so.6 => /lib/libc.so.6 (0xb7d57000)
        /lib/ld-linux.so.2 (0xb7fea000)

After applying the sed filter -n 's/[[:blank:]]*[^=]*=>\([^(]*\).*/\1/p', these files be copied to the chrooted lib directory:

 /lib/libdl.so.2
 /lib/libpthread.so.0
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libstdc++.so.5
 /lib/libm.so.6
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libgcc_s.so.1
 /lib/libc.so.6

Clearly the ld-linux.so.2 library is missing. This is caused by the requirement that a line should contain a =>. This problem is solvable by using a slightly modified sed filter. Using  sed -n 's/[[:blank:]]*\([^=]*\=>\)\? \([^(]*\)
.*/\2/p;' the output will be:

/lib/libdl.so.2
/lib/libpthread.so.0
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libstdc++.so.5
/lib/libm.so.6
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libgcc_s.so.1
/lib/libc.so.6
/lib/ld-linux.so.2

which is correct for my system. This script might break things if the ldd output lines without a => can contain weird stuff, I can't say because I'm no ldd expert.

Reproducible: Always
Steps to Reproduce:
1. Upgrading glibc
2. starting the chrooted version of xmail using /etc/init.d/xmail start

Actual Results:  
XMail will not start because of a segmentation fault

Expected Results:  
XMail should have started

Fix supplied, needs verification concerning the ldd output
Comment 1 Ceesjan Luiten 2005-05-02 02:59:35 UTC
The fixed sed filter shouldn't contain a newline in it. 

Patchfile (-Naur) for the fixed init.d/xmail file:

--- /usr/portage/mail-mta/xmail/files/xmail.initd       2004-07-15 01:05:55.000000000 +0200
+++ /etc/init.d/xmail   2005-05-02 11:58:11.000000000 +0200
@@ -70,7 +70,7 @@
        chown -R xmail:xmail ${CHROOT}
 
        cp `ldd ${CHROOT}${MAIL_ROOT}/bin/XMail |\
-       sed -n 's/[[:blank:]]*[^=]*=>\([^(]*\).*/\1/p'` ${CHROOT}/lib/
+       sed -n 's/[[:blank:]]*\([^=]*\=>\)\? \([^(]*\).*/\2/p;'` ${CHROOT}/lib/
        start-stop-daemon --start -c xmail -r ${CHROOT} \
                --startas ${MAIL_EXEC} --pidfile=${MAIL_PID} -- \
                ${MAIL_CMD_LINE} 
Comment 2 Andrej Kacian (RETIRED) gentoo-dev 2005-06-06 06:24:03 UTC
Fixed, thanks. Sorry it took a while, it's just no one here is using xmail. :/