From: ckd@eff.org (Christopher Davis)
Subject: Re: HELP: /etc/resolv.conf for a SUN IPC
Organization: Electronic Frontier Foundation Tech Central
Date: Thu, 23 Jul 1992 20:49:09 GMT

Eddie> == Eddie Roberts (The National Weather Service) <nws@stout.atd.ucar.edu>

 Eddie> I am trying to get my system (SUN IPC 4.1.2) to use nameservers
 Eddie> recently installed. I added the following lines into the
 Eddie> /etc/resolv.conf file.

Can I kill Sun now?  Can I?

The problem is that Sun assumes we all love and use NIS, and DNS is only
"supported" through setting magic cookies in the NIS hosts map, etc.

Here's a repost of Greg Earle's explanation as to how to fix this (IMHO,
extremely annoying) situation.

Newsgroups: comp.sys.sun.admin
From: earle@poseur.JPL.NASA.GOV (Greg Earle - Sun JPL on-site Software Support)
Subject: Re: Domain Name Server
Organization: Sun Microsystems - JPL on-site Software Support

In article <1992Jun19.193017.2952@asihub.sd.cadence.com> Eric D. Williams <ericw@sd.cadence.com> writes:
>In article <1992Jun3.123530.20956@hp9000.csc.cuhk.hk> ST Wong writes:
>>I'm configuring our Sparc2, running SunOS 4.1.  My problem is that I
>>uses HP 845S as our domain name server while the Sparc2 is a client
>>only.  I follow the instructions in the Network Admin. manual of SunOS
>>to set up those files needed but, it doesn't work.  When I uses inet
>>services (e.g. telnet, ftp, etc), it only searches the /etc/hosts file.
>>However, when I uses nslookup, it points to the domain name server !
>>
>>I don't know what's wrong with that.
>>
>>Would anyone please help ?  Any help will be much appreciated.
>
>  Well sure I can help you, but you won't like the answer.  Sun makes
>  it look like it supports DNS, but they really don't.  SunOS will only
>  use either local files or NIS to resolve names.  It doesn't matter if
>  /etc/resolve.conf is set up correctly or not.  That's because all the
>  name resolver libraries won't look to the nameserver, only to NIS.
>  To get DNS to work on a Sun, you need to: 
>  
>       1. Run NIS.
>       2. Make *all* you NIS servers be Suns. 
>       3. When you start ypserv (on your Sun server), you specify
>	  a special switch on the command line to do DNS lookups. 
>	  Of cource only SunOS supports this switch.
>	  
>  Only the ypserv process will use the correct DNS resolver routines to
>  access the nameserver.  So Sun is really doing their DNS lookups
>  through NIS.  But what if you don't run NIS??  Tough.  Even a lowly
>  Macintosh or PC has the right stuff to access a name server, but a
>  Sun?  Forget it.

It is my greatest fear that someone on the Net will read this posting and
actually consider it to be something authoritative as opposed to the
unmitigated rubbish it, in fact, is.

For your future edification, I present the following 12 Step program for your
rehabilitation:

1. Ensure that the "Shlib Custom" optional software category has been loaded
   from your SunOS 4.1.x O/S media.

2. cd to "/usr/lib/shlib.etc", and shove the prepared README file to README-

3. Replace said README file with the version to follow at the end of this

4. Follow the instructions contained within said README, paying close attention
   once you've reached step #4

5. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

6. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

7. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

8. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

9. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

10. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

11. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

12. Repeat after me, "Hmmn, this crow sure is mighty tasty!"

Enjoy your meal.

------------------------------ >8  Cut here  8< ------------------------------

	This is a procedure you can use to substitute or add 
a module in your shared libc library. 

Note! if you are interested in a System V libc, please substitute
	libcs5_pic.a for libc_pic.a in step 3, 
	libcs5.so.x.y.z for libc.so.x.y.z in step 14.

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

1. Become super user
	% su

2. Make a temporary directory
	% 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
	% mv xccs_multibyte. xccs_multibyte.o

   Note: this last mv command is not present in the original version of the
   README file that comes in /usr/lib/shlib.etc/README.  If this step is
   omitted, you will produce a shared libc.so that does not contain the
   xccs_multibyte.o module.  This module contains versions of the library
   functions "mbtowc", "wctomb", "mbstowcs" and "wcstombs" (see mblen(3) for
   more info on these multi-byte character functions), which operate on the
   Xerox XCCS codeset standard.  Specifically, the missing functions will be

	_mbtowc_xccs(pwc, s, n)
	_wctomb_xccs(s, pwc)
	_mbstowcs_xccs(pwc, s, n)
	_wcstombs_xccs(s, pwc, n)

   These are called by the corresponding "mbtowc", "wctomb", "mbstowcs" and
   "wcstombs" functions if the codeset is XCCS (other codesets include EUC,
   ISO 2022, and a default).  In short, if you use any Internationalization
   features and need to handle multi-byte character sets, do not forget this
   step.

4. If you are doing this to specifically create a libc.so that contains
   the DNS resolver routines for doing hostname/hostaddr lookups via the
   Domain Name Service (and not NIS/YP), do these additional steps.  If not,
   please skip down to step 10.

5. Extract the contents of /usr/lib/libresolv.a into the tmp directory:
	% ar x /usr/lib/libresolv.a
	% rm __.SYMDEF

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

   NOTE: You may wish to install Sun patch 100465-01 *first* before taking
   this step, as it provides a newer patched version of /usr/lib/libresolv.a.
   This fixes a serious bug that causes DNS nameserver lookups to fail if the
   first name server query yields ECONNREFUSED (Connection refused), even if
   the other nameservers specified in /etc/resolv.conf are both up & working:

Patch i.d.	Bug i.d's	SunOS	Description
----------	---------	-----	-----------
100465-01	1076977
			4.1 4.1 4.1.2 DNS res_send() fails if first nameserver
			in /etc/resolv.conf returns ECONNREFUSED

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

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

8. As also mentioned below (in step 11), edit the file `lorder-sparc' in the ..
   directory.  Remove the reference to `gethostent.o' and add the
   references to the resolver library routines by applying this patch:

	% cd ..
	% 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

9. If you are running under SunOS 4.1.2, you will want to add the entry
   "mblib.o" to the very end of the "lorder-sparc" file.  If you aren't running
   SunOS 4.1.2, you may now skip down to step 13.

   Also, you will need to patch the Makefile, as follows:

	*** Makefile.orig	Wed Oct 23 10:13:00 1991
	--- Makefile	Mon Feb 24 18:38:08 1992
	***************
	*** 9,13 ****
	  
	  libc.so:
	! 	ld -assert pure-text `${OBJSORT} lorder-sparc tmp`
	  	/bin/ls /usr/lib/libc.so.* > TMP_FILE
	  	mv a.out libc.so.`cat TMP_FILE | awk -f ${AWKFILE}`
	--- 9,13 ----
	  
	  libc.so:
	! 	ld -assert pure-text `${OBJSORT} lorder-sparc tmp` -ldl
	  	/bin/ls /usr/lib/libc.so.* > TMP_FILE
	  	mv a.out libc.so.`cat TMP_FILE | awk -f ${AWKFILE}`
	***************
	*** 15,19 ****
	  
	  libcs5.so:
	! 	ld -assert pure-text `${OBJSORT} lorder-sparc tmp`
	  	/bin/ls /usr/5lib/libc.so.* > TMP_FILE
	  	mv a.out libc.so.`cat TMP_FILE | awk -f ${AWKFILE}`
	--- 15,19 ----
	  
	  libcs5.so:
	! 	ld -assert pure-text `${OBJSORT} lorder-sparc tmp` -ldl
	  	/bin/ls /usr/5lib/libc.so.* > TMP_FILE
	  	mv a.out libc.so.`cat TMP_FILE | awk -f ${AWKFILE}`

10. Replace or add the .o that you wanted by doing a copy. Please
    note here that you are advised to create your object with
    the following compiler option, i.e "cc -c -pic yourprogram.c" to make
    it shareable.
	% cp your.o .

11. If you add a new module then you need to do this step.
    You need to edit the file "lorder-sparc" and add the name of the file
    you have copied from step 4 at the end of this file. 
	% vi ../lorder-sparc

12. 	% cd ..

13. 	% make libc.so

14. 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
    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

15. 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.
-- 
        							      ______                                                                        ,__,~~, \
	                                                           /      /  \   ______________________________________________________________    ` ~^   \ _|
/ "Who would have ever believed that I could include an ASCII  \  ()^()---|/@)  \  picture of myself in my .signature file!"              ___  /   /_       )'
 \______________________________________________________,'   \_\__ | .    / |                                                                  `-'  \___,  / \  	Greg Earle	earle@poseur.JPL.NASA.GOV                        \`


--
Christopher Davis * ckd@eff.org * System Administrator, EFF * +1 617 864 0665
   ``The First Amendment is often inconvenient.  But that is besides the
  point.  Inconvenience does not absolve the government of its obligation
         to tolerate speech.'' --Justice Anthony Kennedy, in 91-155
Newsgroups: comp.unix.admin