3 ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
5 ?RCS: You may redistribute only under the terms of the Artistic License,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic License; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 4.0.
11 ?RCS: $Log: myhostname.U,v $
12 ?RCS: Revision 3.0.1.3 1997/02/28 16:15:55 ram
13 ?RCS: patch61: improved hostname lookup by using ypmatch when NIS is used
15 ?RCS: Revision 3.0.1.2 1994/10/29 16:25:43 ram
16 ?RCS: patch36: call ./xenix explicitely instead of relying on PATH
17 ?RCS: patch36: now uses new Tr unit to convert to/from lowercase
19 ?RCS: Revision 3.0.1.1 1994/06/20 07:06:20 ram
20 ?RCS: patch30: now a little more clever for domain name guessing
22 ?RCS: Revision 3.0 1993/08/18 12:09:18 ram
23 ?RCS: Baseline for dist 3.0 netwide release.
25 ?MAKE:myhostname phostname mydomain: contains sed test Myread Oldconfig \
26 Guess Loc awk echo sort uniq +usrinc rm hostcat Tr osname
27 ?MAKE: -pick add $@ %<
28 ?S:myhostname (hostname):
29 ?S: This variable contains the eventual value of the MYHOSTNAME symbol,
30 ?S: which is the name of the host the program is going to run on.
31 ?S: The domain is not kept with hostname, but must be gotten from mydomain.
32 ?S: The dot comes with mydomain, and need not be supplied by the program.
35 ?S: This variable contains the eventual value of the MYDOMAIN symbol,
36 ?S: which is the domain of the host the program is going to run on.
37 ?S: The domain must be appended to myhostname to form a complete host name.
38 ?S: The dot comes with mydomain, and need not be supplied by the program.
41 ?S: This variable contains the eventual value of the PHOSTNAME symbol,
42 ?S: which is a command that can be fed to popen() to get the host name.
43 ?S: The program should probably not presume that the domain is or isn't
46 ?C:MYHOSTNAME (HOSTNAME):
47 ?C: This symbol contains name of the host the program is going to run on.
48 ?C: The domain is not kept with hostname, but must be gotten from MYDOMAIN.
49 ?C: The dot comes with MYDOMAIN, and need not be supplied by the program.
50 ?C: If gethostname() or uname() exist, MYHOSTNAME may be ignored. If MYDOMAIN
51 ?C: is not used, MYHOSTNAME will hold the name derived from PHOSTNAME.
54 ?C: This symbol contains the domain of the host the program is going to
55 ?C: run on. The domain must be appended to HOSTNAME to form a complete
56 ?C: host name. The dot comes with MYDOMAIN, and need not be supplied by
57 ?C: the program. If the host name is derived from PHOSTNAME, the domain
58 ?C: may or may not already be there, and the program should check.
60 ?H:#define MYHOSTNAME "$myhostname" /**/
61 ?H:#define MYDOMAIN "$mydomain" /**/
63 ?T:cont i tans tmp_re file
64 : now get the host name
66 echo "Figuring out host name..." >&4
69 echo 'Maybe "hostname" will work...'
70 if tans=`sh -c hostname 2>&1` ; then
78 if $test "$cont"; then
80 echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
81 if tans=`cat /etc/systemid 2>&1` ; then
83 phostname='cat /etc/systemid'
84 echo "Whadyaknow. Xenix always was a bit strange..."
87 elif $test -r /etc/systemid; then
88 echo "(What is a non-Xenix system doing with /etc/systemid?)"
91 if $test "$cont"; then
92 echo 'No, maybe "uuname -l" will work...'
93 if tans=`sh -c 'uuname -l' 2>&1` ; then
97 echo 'Strange. Maybe "uname -n" will work...'
98 if tans=`sh -c 'uname -n' 2>&1` ; then
102 echo 'Oh well, maybe I can mine it out of whoami.h...'
103 if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
104 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
105 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
107 case "$myhostname" in
108 '') echo "Does this machine have an identity crisis or something?"
111 echo "Well, you said $myhostname before..."
112 phostname='echo $myhostname';;
118 case "$myhostname" in
119 '') myhostname=noname ;;
121 : you do not want to know about this
126 if $test "$myhostname" ; then
128 rp='Your host name appears to be "'$myhostname'".'" Right?"
136 : bad guess or no guess
137 while $test "X$myhostname" = X ; do
139 rp="Please type the (one word) name of your host:"
144 : translate upper to lower if necessary
145 case "$myhostname" in
147 echo "(Normalizing case in your host name)"
148 myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
152 ?X: Do not ask for domain name if this is not used later on. In that
153 ?X: case, the hostname may keep its domain name, but it doesn't matter.
154 @if MYDOMAIN || mydomain
155 case "$myhostname" in
157 dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
158 myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
159 echo "(Trimming domain name from host name--host name is now $myhostname)"
161 *) case "$mydomain" in
164 ?X: There is currently no way to say we do not want hostcat if mydomain is not
165 ?X: used. One way to achieve that would be to put that code in a mydomain.U
166 ?X: unit. However, we want to stick the sanity checks right after the domain
167 ?X: name computation, or if none is done, right after the hostname computation.
170 ?X: If we use NIS, try ypmatch.
171 test "X$hostcat" = "Xypcat hosts" &&
172 ypmatch "$myhostname" hosts 2>/dev/null |\
173 $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
176 ?X: Extract only the relevant hosts, reducing file size,
177 ?X: remove comments, insert trailing space for later use.
178 $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
179 /[ ]$myhostname[ . ]/p" > hosts
182 $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
183 END { print sum }" hosts` = x1 || tmp_re="[ ]"
185 "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
186 hosts | $sort | $uniq | \
187 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
188 case `$echo X$dflt` in
189 X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
192 ?X: There is no /etc/hosts on os390
194 if $test -f /etc/hosts; then
195 echo "(You do not have fully-qualified names in /etc/hosts)"
197 echo "(I cannot locate a hosts database anywhere)"
203 tans=`./loc resolv.conf X /etc /usr/etc`
204 if $test -f "$tans"; then
205 echo "(Attempting domain name extraction from $tans)"
206 ?X: Look for either a search or a domain directive.
207 dflt=.`$sed -n -e 's/ / /g' \
208 -e 's/^search *\([^ ]*\).*/\1/p' $tans \
209 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
211 .) dflt=.`$sed -n -e 's/ / /g' \
212 -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
213 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
220 .) echo "(No help from resolv.conf either -- attempting clever guess)"
221 dflt=.`sh -c domainname 2>/dev/null`
224 .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
228 case "$dflt$osname" in
230 file="//'SYS1.TCPPARMS(TCPDATA)'"
231 echo "(Attempting domain name extraction from $file)"
232 dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "$file" 2>/dev/null`
236 .) echo "(Lost all hope -- silly guess then)"
242 *) dflt="$mydomain";;
246 rp="What is your domain name?"
256 : translate upper to lower if necessary
259 echo "(Normalizing case in your domain name)"
260 mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
265 : a little sanity check here
269 case `$phostname | ./tr '[A-Z]' '[a-z]'` in
270 $myhostname$mydomain|$myhostname) ;;
274 echo "(That doesn't agree with your whoami.h file, by the way.)"
277 echo "(That doesn't agree with your $phostname command, by the way.)"