[comp.sys.sun] Why the resolver libraries are unsupported

flanagan@lisbon.stat.washington.edu (Jim Flanagan) (10/08/90)

I found out why the libc_resolv.so.sun{3,4} libraries available from uunet
are unsupported. It looks like Sun is basically ignoring them in releasing
new versions of SunOS. I made the mistake of installing
libc_resolv.so.sun4 on a SLC running 4.1. Most commands after that gave a
"symbol some_symbol not found at 0xNNN" error. Unfortunately, both rm and
ldconfig were among these commands. I thought I had trashed the system.

Fortunately, ln was not among the disabled commands, and I linked the old
library to a new name with a higher index (libc.so.1.5.2) and did a L1-A
and rebooted. I got the machine back. Great fun.

Does anyone know when resolver libraries will be available for 4.1?  They
are so useful...

  Jim Flanagan
  flanagan@stat.washington.edu

GEHRI@cc.usu.edu (Gehri Grimaud) (11/02/90)

In article <1990Oct7.233618.6463@rice.edu>, flanagan@lisbon.stat.washington.edu (Jim Flanagan) writes:
> Does anyone know when resolver libraries will be available for 4.1?  They
> are so useful...

I don't know if this will help of not.  I got these instructions from
someone at Sun Tech Support.  Please don't flame me or Sun if they don't
work...


o MAKING A LIBC.SO for DNS without NIS

This is a procedure you can use to add name resolver routines into your
shared libc library in SunOS_4.1.

You must have fist loaded "SHLIB CUSTOM" either from suninstall or from
add_services.

Be sure to first have the file /etc/resolv.conf configured properly. You
can test this first with /usr/etc/nslookup.

-------------------------------------------------------------------------

1. Become super user
        % su  (if necessary)

2. Make a temporary directory
        % cd /usr/lib/shlib.etc
        % mkdir tmp

3. Change to the "tmp" directory just made, extract the pic .o from
   libc_pic.a and rm the file __.SYMDEF. The reason you need to do
   the 2 "mv" commands is because "ar" truncated filenames over
   16 characters.
        % cd tmp
        % ar x ../libc_pic.a
        % rm __.SYMDEF
        % mv rpc_dtablesize. rpc_dtablesize.o
        % mv rpc_commondata. rpc_commondata.o
        % ar x /usr/lib/libresolv.a

    The libresolv.a (apparently) contains object modules that are position
    independant, so they can be added to the libc_pic modules without fear.

4. Remove the old routine to do the hostname/addr resolution:
        % rm gethostent.o

5. Remove the libresolv module that contains `strncasecmp' (which is now
    in the main C library, so it is redundant):
        % rm strcasecmp.o

6.      % cd ..

7.  Copy lorder-sparc to lorder-sparc.orig
    Edit the file lorder-sparc and remove the reference to `gethostent.o'
    and add the references to the resolver library routines by applying this
    patch:
        remove  :       gethostent.o

           add  :       gethostnamadr.o
                        sethostent.o
                        res_query.o
                        res_mkquery.o
                        res_send.o
                        res_debug.o
                        res_comp.o
                        res_init.o


        % diff -rc2 lorder-sparc.orig lorder-sparc
        *** lorder-sparc.orig   Thu Feb  8 05:27:46 1990
        --- lorder-sparc        Mon Apr  9 12:58:59 1990
        ***************
        *** 150,154 ****
          getwd.o
          getnetgrent.o
        ! gethostent.o
          ypxdr.o
          ttyname.o
        --- 150,161 ----
          getwd.o
          getnetgrent.o
        ! gethostnamadr.o
        ! sethostent.o
        ! res_query.o
        ! res_mkquery.o
        ! res_send.o
        ! res_debug.o
        ! res_comp.o
        ! res_init.o
          ypxdr.o
          ttyname.o


8.      % make libc.so

9. Now you should have some libc.so.x.y.z built in the current directory.
   It is recommended that you tested out this library at this point
   before installing it. You can do so by setting the environment
   LD_LIBRARY_PATH  to the current directory for example:
        % setenv LD_LIBRARY_PATH `pwd`
        % your_favorite_test_cmd  (ie. ping, ftp, telnet)
   Once you are satisfied that the new library worked, you can proceed
   to install it with the following commands:
        % cp libc.so.x.y.z /usr/lib
        % ldconfig
        % unsetenv LD_LIBRARY_PATH

10. You are now running with the new library. You can verify this by
   doing a trace command of let's say "date".
        % trace date
 The output should informed you that the new library is being used.

Gehri Grimaud                           gehri@cc.usu.edu
Utah State University                   gehri@usu.bitnet
Office of Computer Services             tel. (801) 750-2392
UMC 3700
Logan, Utah  84322

dnb@meshugge.media.mit.edu (David N. Blank) (11/21/90)

What you have posted works quite well, but I would offer some additions
provided by the efforts of Greg Earle.  He has updated the version you
posted a bit.  The biggest change is the recommendation to get a different
version of the res_send routine of the resolver (to replace the Sun
supplied 4.8 version which has a bug in it).  I have received his kind
permission to redistribute it, so feel free to mail me for a copy.