Commit | Line | Data |
---|---|---|
33a01fd2 | 1 | ?RCS: $Id$ |
d8875586 MBT |
2 | ?RCS: |
3 | ?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi | |
4 | ?RCS: | |
33a01fd2 | 5 | ?RCS: You may redistribute only under the terms of the Artistic License, |
d8875586 MBT |
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 | |
33a01fd2 | 8 | ?RCS: that same Artistic License; a copy of which may be found at the root |
d8875586 MBT |
9 | ?RCS: of the source tree for dist 4.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 | |
33a01fd2 | 16 | ?RCS: patch36: call ./xenix explicitely instead of relying on PATH |
d8875586 MBT |
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 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. | |
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 file | |
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 | case "$myhostname" in | |
119 | '') myhostname=noname ;; | |
120 | esac | |
121 | : you do not want to know about this | |
122 | set $myhostname | |
123 | myhostname=$1 | |
124 | ||
125 | : verify guess | |
126 | if $test "$myhostname" ; then | |
127 | dflt=y | |
128 | rp='Your host name appears to be "'$myhostname'".'" Right?" | |
129 | . ./myread | |
130 | case "$ans" in | |
131 | y*) ;; | |
132 | *) myhostname='';; | |
133 | esac | |
134 | fi | |
135 | ||
136 | : bad guess or no guess | |
137 | while $test "X$myhostname" = X ; do | |
138 | dflt='' | |
139 | rp="Please type the (one word) name of your host:" | |
140 | . ./myread | |
141 | myhostname="$ans" | |
142 | done | |
143 | ||
144 | : translate upper to lower if necessary | |
145 | case "$myhostname" in | |
146 | *[A-Z]*) | |
147 | echo "(Normalizing case in your host name)" | |
148 | myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'` | |
149 | ;; | |
150 | esac | |
151 | ||
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 | |
156 | *.*) | |
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)" | |
160 | ;; | |
161 | *) case "$mydomain" in | |
162 | '') | |
163 | ?X: | |
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. | |
168 | ?X: | |
169 | { | |
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 && \ | |
174 | $test -s hosts | |
175 | } || { | |
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 | |
180 | } | |
181 | tmp_re="[ . ]" | |
182 | $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ } | |
183 | END { print sum }" hosts` = x1 || tmp_re="[ ]" | |
184 | dflt=.`$awk \ | |
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)" | |
190 | dflt=. | |
191 | ;; | |
192 | ?X: There is no /etc/hosts on os390 | |
193 | X.) | |
194 | if $test -f /etc/hosts; then | |
195 | echo "(You do not have fully-qualified names in /etc/hosts)" | |
196 | else | |
197 | echo "(I cannot locate a hosts database anywhere)" | |
198 | fi | |
199 | ;; | |
200 | esac | |
201 | case "$dflt" in | |
202 | .) | |
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` | |
210 | case "$dflt" in | |
211 | .) dflt=.`$sed -n -e 's/ / /g' \ | |
212 | -e 's/^domain *\([^ ]*\).*/\1/p' $tans \ | |
213 | | ./tr '[A-Z]' '[a-z]' 2>/dev/null` | |
214 | ;; | |
215 | esac | |
216 | fi | |
217 | ;; | |
218 | esac | |
219 | case "$dflt" in | |
220 | .) echo "(No help from resolv.conf either -- attempting clever guess)" | |
221 | dflt=.`sh -c domainname 2>/dev/null` | |
222 | case "$dflt" in | |
223 | '') dflt='.';; | |
224 | .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;; | |
225 | esac | |
226 | ;; | |
227 | esac | |
228 | case "$dflt$osname" in | |
229 | .os390) | |
230 | file="//'SYS1.TCPPARMS(TCPDATA)'" | |
231 | echo "(Attempting domain name extraction from $file)" | |
232 | dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "$file" 2>/dev/null` | |
233 | ;; | |
234 | esac | |
235 | case "$dflt" in | |
236 | .) echo "(Lost all hope -- silly guess then)" | |
237 | dflt='.nonet' | |
238 | ;; | |
239 | esac | |
240 | $rm -f hosts | |
241 | ;; | |
242 | *) dflt="$mydomain";; | |
243 | esac;; | |
244 | esac | |
245 | echo " " | |
246 | rp="What is your domain name?" | |
247 | . ./myread | |
248 | tans="$ans" | |
249 | case "$ans" in | |
250 | '') ;; | |
251 | .*) ;; | |
252 | *) tans=".$tans";; | |
253 | esac | |
254 | mydomain="$tans" | |
255 | ||
256 | : translate upper to lower if necessary | |
257 | case "$mydomain" in | |
258 | *[A-Z]*) | |
259 | echo "(Normalizing case in your domain name)" | |
260 | mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'` | |
261 | ;; | |
262 | esac | |
263 | ||
264 | @end | |
265 | : a little sanity check here | |
266 | case "$phostname" in | |
267 | '') ;; | |
268 | *) | |
269 | case `$phostname | ./tr '[A-Z]' '[a-z]'` in | |
270 | $myhostname$mydomain|$myhostname) ;; | |
271 | *) | |
272 | case "$phostname" in | |
273 | sed*) | |
274 | echo "(That doesn't agree with your whoami.h file, by the way.)" | |
275 | ;; | |
276 | *) | |
277 | echo "(That doesn't agree with your $phostname command, by the way.)" | |
278 | ;; | |
279 | esac | |
280 | ;; | |
281 | esac | |
282 | ;; | |
283 | esac | |
284 |