[net.unix-wizards] Dumb question about uucp

gww@aphasia.UUCP (George Williams) (08/27/85)

    We have here a callan box (modified by someone else if that matters) running
system 5 unix (no source of course, we have 4.2bsd source on a vax if that can
be modified).  The box is of the opinion that its uuname is `clm' we would like
to convince it otherwise; there does not seem to be a hostname command, or any
equivalent.  One system V that we have has a magic little file that lives in
/usr/lib/uucp that contains this name, does callan?

    It seems to me that I read somewhere that the host name was compiled into
the kernel under sysV, that seems dumb, and unbelievable (we don't have source).
What am I missing?


			George Williams
			decvax!frog!aphasia!gww

There must be a better way.

guy@sun.uucp (Guy Harris) (08/31/85)

> The box is of the opinion that its uuname is `clm' we would like to
> convince it otherwise; there does not seem to be a hostname command, or any
> equivalent.  One system V that we have has a magic little file that lives in
> /usr/lib/uucp that contains this name, does callan?
> 
>     It seems to me that I read somewhere that the host name was compiled
> into the kernel under sysV, that seems dumb, and unbelievable (we don't
> have source).

It may or may not be dumb and unbelievable, but it is true.  Given the
environment that the USG/USDL UNIX releases were, until recently, targeted
at (namely, AT&T sites who had source, and who ran big machines with a wide
variety of possible hardware configurations, so you'd build a kernel
specifically for that machine), it's not that dumb.  The intent is that the
distribution would come with a "generic" kernel, whose sole purpose was to
run on just about any configuration long enough to build a kernel tailored
for your configuration.  At that time you'd assign a name to the system and
build a kernel with that name built in.  A company offering S5 on their
machine could, if AT&T's binary licensing terms permit it (I don't know
whether they do or not - they *should*, but that's no guarantee), offer the
contents of "/usr/src/uts/<machine>/cf" as part of their distribution, along
with pre-compiled object libraries for the kernel.  That's sufficient to
build a tailored kernel and to set the system name.

This solution fails to some degree in the case of 4.xBSD, where you may
build a kernel which isn't completely generic but which will run on several
machines (using the autoconfiguration code), and fails miserably in the case
of the small UNIX boxes where there are a limited number of possible
hardware configurations and where you may not trust the end user to be able
to configure a kernel.  Some micro vendors have a command that'll either
patch your /unix (or whatever it's called) or your running kernel or both to
give the system a particular name.  If any such micro vendors didn't do
this, but instead kludged up all the user-mode programs which want the
system name to get it out of a file, they didn't do a very good job.  CCI
originally did that until I got fed up and hacked the "uname" command to
patch the kernel if you have it a name as an argument.

If you want, you can patch it yourself using "adb" (or, if you're feeling
ambitious, write a program to do it).  The structure returned by a "uname"
system call is called "utsname".  Unless the vendor has monkeyed with it, it
consists of 5 (or 4, for System III) 9-character strings; the strings are
embedded in the structure, not pointed to by pointers in the structure.
Starting at the location "utsname" (or "_utsname", as is likely on most
systems), there will be 9 bytes which will probably be the system name.  The
next 9 bytes after it (starting at "utsname + 9") will definitely be the
system name unless something is badly screwed up.  Just patch those to the
name you want - remember to include the terminating '\0' (if the first
string isn't the current system name, don't patch it).  Remember to make a
copy of the kernel before doing this, and remember to reboot afterwards if
you only patched it and not /dev/kmem.

It may not be optimal, but it's a lot better than, say, V7, where you needed
all the source to do a sysgen (many V7 vendors changed this, but out of the
box you needed source) *and* the name of the system was not affected by a
sysgen - it came out of an include file and was compiled directly into
user-mode programs (many V7 vendors fixed this, also).

	Guy Harris

tim@cithep.UucP (Tim Smith ) (09/01/85)

Sounds like a job for adbman!  Look at location utsname in /unix.  There
you will find a string with the name of the machine ( actually, you will
find TWO strings with the name of the machine.  I forget which one you
need to change.  Better do them both ).  Change these strings with adb.
I think they are eight character strings, null terminated iff less than
eight chars long.
-- 
unlk	a6
rts
					Tim Smith
				ihnp4!{wlbr!callan,cithep}!tim

jww@sdcsvax.UUCP (Joel West) (09/01/85)

> Sounds like a job for adbman!  Look at location utsname in /unix.  There
> you will find a string with the name of the machine ( actually, you will
> find TWO strings with the name of the machine.  I forget which one you
> need to change.  Better do them both ).  Change these strings with adb.

Actually, the 2nd is the uucp name.  But not knowing who wrote what
sloppy code, I wouldn't be brave enough to run a system with the
1st <> 2nd.

	Joel West	CACI, Inc. - Federal (c/o UC San Diego)
	{ucbvax,decvax,ihnp4}!sdcsvax!jww
	jww@SDCSVAX.ARPA