Commit | Line | Data |
---|---|---|
edd6115f JH |
1 | ?RCS: $Id: myhostname.U,v 3.0.1.3 1997/02/28 16:15:55 ram Exp $ |
2 | ?RCS: | |
3 | ?RCS: Copyright (c) 1991-1993, Raphael Manfredi | |
4 | ?RCS: | |
5 | ?RCS: You may redistribute only under the terms of the Artistic Licence, | |
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 Licence; a copy of which may be found at the root | |
9 | ?RCS: of the source tree for dist 3.0. | |
10 | ?RCS: | |
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 | |
14 | ?RCS: | |
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 | |
18 | ?RCS: | |
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 | |
21 | ?RCS: | |
22 | ?RCS: Revision 3.0 1993/08/18 12:09:18 ram | |
23 | ?RCS: Baseline for dist 3.0 netwide release. | |
24 | ?RCS: | |
25 | ?MAKE:myhostname phostname mydomain: contains sed test Myread Oldconfig \ | |
26 | Guess Loc awk echo sort uniq +usrinc rm hostcat Tr | |
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. | |
33 | ?S:. | |
34 | ?S:mydomain: | |
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. | |
39 | ?S:. | |
40 | ?S:phostname: | |
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 | |
44 | ?S: there already. | |
45 | ?S:. | |
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. | |
52 | ?C:. | |
53 | ?C:MYDOMAIN: | |
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. | |
59 | ?C:. | |
60 | ?H:#define MYHOSTNAME "$myhostname" /**/ | |
61 | ?H:#define MYDOMAIN "$mydomain" /**/ | |
62 | ?H:. | |
63 | ?T:cont i tans tmp_re | |
64 | : now get the host name | |
65 | echo " " | |
66 | echo "Figuring out host name..." >&4 | |
67 | case "$myhostname" in | |
68 | '') cont=true | |
69 | echo 'Maybe "hostname" will work...' | |
70 | if tans=`sh -c hostname 2>&1` ; then | |
71 | myhostname=$tans | |
72 | phostname=hostname | |
73 | cont='' | |
74 | fi | |
75 | ;; | |
76 | *) cont='';; | |
77 | esac | |
78 | if $test "$cont"; then | |
79 | if ./xenix; then | |
80 | echo 'Oh, dear. Maybe "/etc/systemid" is the key...' | |
81 | if tans=`cat /etc/systemid 2>&1` ; then | |
82 | myhostname=$tans | |
83 | phostname='cat /etc/systemid' | |
84 | echo "Whadyaknow. Xenix always was a bit strange..." | |
85 | cont='' | |
86 | fi | |
87 | elif $test -r /etc/systemid; then | |
88 | echo "(What is a non-Xenix system doing with /etc/systemid?)" | |
89 | fi | |
90 | fi | |
91 | if $test "$cont"; then | |
92 | echo 'No, maybe "uuname -l" will work...' | |
93 | if tans=`sh -c 'uuname -l' 2>&1` ; then | |
94 | myhostname=$tans | |
95 | phostname='uuname -l' | |
96 | else | |
97 | echo 'Strange. Maybe "uname -n" will work...' | |
98 | if tans=`sh -c 'uname -n' 2>&1` ; then | |
99 | myhostname=$tans | |
100 | phostname='uname -n' | |
101 | else | |
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" | |
106 | else | |
107 | case "$myhostname" in | |
108 | '') echo "Does this machine have an identity crisis or something?" | |
109 | phostname='';; | |
110 | *) | |
111 | echo "Well, you said $myhostname before..." | |
112 | phostname='echo $myhostname';; | |
113 | esac | |
114 | fi | |
115 | fi | |
116 | fi | |
117 | fi | |
118 | : you do not want to know about this | |
119 | set $myhostname | |
120 | myhostname=$1 | |
121 | ||
122 | : verify guess | |
123 | if $test "$myhostname" ; then | |
124 | dflt=y | |
125 | rp='Your host name appears to be "'$myhostname'".'" Right?" | |
126 | . ./myread | |
127 | case "$ans" in | |
128 | y*) ;; | |
129 | *) myhostname='';; | |
130 | esac | |
131 | fi | |
132 | ||
133 | : bad guess or no guess | |
134 | while $test "X$myhostname" = X ; do | |
135 | dflt='' | |
136 | rp="Please type the (one word) name of your host:" | |
137 | . ./myread | |
138 | myhostname="$ans" | |
139 | done | |
140 | ||
141 | : translate upper to lower if necessary | |
142 | case "$myhostname" in | |
143 | *[A-Z]*) | |
144 | echo "(Normalizing case in your host name)" | |
145 | myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'` | |
146 | ;; | |
147 | esac | |
148 | ||
149 | ?X: Do not ask for domain name if this is not used later on. In that | |
150 | ?X: case, the hostname may keep its domain name, but it doesn't matter. | |
151 | @if MYDOMAIN || mydomain | |
152 | case "$myhostname" in | |
153 | *.*) | |
154 | dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"` | |
155 | myhostname=`expr "X$myhostname" : "X\([^.]*\)\."` | |
156 | echo "(Trimming domain name from host name--host name is now $myhostname)" | |
157 | ;; | |
158 | *) case "$mydomain" in | |
159 | '') | |
160 | ?X: | |
161 | ?X: There is currently no way to say we do not want hostcat if mydomain is not | |
162 | ?X: used. One way to achieve that would be to put that code in a mydomain.U | |
163 | ?X: unit. However, we want to stick the sanity checks right after the domain | |
164 | ?X: name computation, or if none is done, right after the hostname computation. | |
165 | ?X: | |
166 | { | |
167 | ?X: If we use NIS, try ypmatch. | |
168 | test "X$hostcat" = "Xypcat hosts" && | |
169 | ypmatch "$myhostname" hosts 2>/dev/null |\ | |
170 | $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \ | |
171 | $test -s hosts | |
172 | } || { | |
173 | ?X: Extract only the relevant hosts, reducing file size, | |
174 | ?X: remove comments, insert trailing space for later use. | |
175 | ?X: Test to be sure we *have* a hostcat command. os390 doesn't. | |
176 | test "X$hostcat" != "X" && | |
177 | $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ / | |
178 | /[ ]$myhostname[ . ]/p" > hosts | |
179 | } | |
180 | tmp_re="[ . ]" | |
181 | $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ } | |
182 | END { print sum }" hosts` = x1 || tmp_re="[ ]" | |
183 | dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \ | |
184 | hosts | $sort | $uniq | \ | |
185 | $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"` | |
186 | case `$echo X$dflt` in | |
187 | X*\ *) echo "(Several hosts in /etc/hosts matched hostname)" | |
188 | dflt=. | |
189 | ;; | |
190 | X.) echo "(You do not have fully-qualified names in /etc/hosts)" | |
191 | ;; | |
192 | esac | |
193 | case "$dflt" in | |
194 | .) | |
195 | tans=`./loc resolv.conf X /etc /usr/etc` | |
196 | if $test -f "$tans"; then | |
197 | echo "(Attempting domain name extraction from $tans)" | |
198 | ?X: Look for either a search or a domain directive. | |
199 | dflt=.`$sed -n -e 's/ / /g' \ | |
200 | -e 's/^search *\([^ ]*\).*/\1/p' $tans \ | |
201 | | ./tr '[A-Z]' '[a-z]' 2>/dev/null` | |
202 | case "$dflt" in | |
203 | .) dflt=.`$sed -n -e 's/ / /g' \ | |
204 | -e 's/^domain *\([^ ]*\).*/\1/p' $tans \ | |
205 | | ./tr '[A-Z]' '[a-z]' 2>/dev/null` | |
206 | ;; | |
207 | esac | |
208 | fi | |
209 | ;; | |
210 | esac | |
211 | case "$dflt" in | |
212 | .) echo "(No help from resolv.conf either -- attempting clever guess)" | |
213 | dflt=.`sh -c domainname 2>/dev/null` | |
214 | case "$dflt" in | |
215 | '') dflt='.';; | |
216 | .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;; | |
217 | esac | |
218 | ;; | |
219 | esac | |
220 | case "$dflt" in | |
221 | .) echo "(Lost all hope -- silly guess then)" | |
222 | dflt='.uucp' | |
223 | ;; | |
224 | esac | |
225 | $rm -f hosts | |
226 | ;; | |
227 | *) dflt="$mydomain";; | |
228 | esac;; | |
229 | esac | |
230 | echo " " | |
231 | rp="What is your domain name?" | |
232 | . ./myread | |
233 | tans="$ans" | |
234 | case "$ans" in | |
235 | '') ;; | |
236 | .*) ;; | |
237 | *) tans=".$tans";; | |
238 | esac | |
239 | mydomain="$tans" | |
240 | ||
241 | : translate upper to lower if necessary | |
242 | case "$mydomain" in | |
243 | *[A-Z]*) | |
244 | echo "(Normalizing case in your domain name)" | |
245 | mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'` | |
246 | ;; | |
247 | esac | |
248 | ||
249 | @end | |
250 | : a little sanity check here | |
251 | case "$phostname" in | |
252 | '') ;; | |
253 | *) | |
254 | case `$phostname | ./tr '[A-Z]' '[a-z]'` in | |
255 | $myhostname$mydomain|$myhostname) ;; | |
256 | *) | |
257 | case "$phostname" in | |
258 | sed*) | |
259 | echo "(That doesn't agree with your whoami.h file, by the way.)" | |
260 | ;; | |
261 | *) | |
262 | echo "(That doesn't agree with your $phostname command, by the way.)" | |
263 | ;; | |
264 | esac | |
265 | ;; | |
266 | esac | |
267 | ;; | |
268 | esac | |
269 |