2 * hostname This file contains an implementation of the command
3 * that maintains the hostname and the domainname. It
4 * is also used to show the FQDN and the IP-Addresses.
6 * Usage: hostname [-d|-f|-s|-a|-i|-y]
8 * hostname {name|-F file}
10 * nisdomainname {name|-F file}
12 * Version: hostname 1.96 (1996-02-18)
14 * Author: Peter Tobias <tobias@et-inf.fho-emden.de>
17 * {1.90} Peter Tobias : Added -a and -i options.
18 * {1.91} Bernd Eckenfels : -v,-V rewritten, long_opts
19 * (major rewrite), usage.
20 *960120 {1.95} Bernd Eckenfels : -y/nisdomainname - support for get/
22 *960218 {1.96} Bernd Eckenfels : netinet/in.h added
24 * This program is free software; you can redistribute it
25 * and/or modify it under the terms of the GNU General
26 * Public License as published by the Free Software
27 * Foundation; either version 2 of the License, or (at
28 * your option) any later version.
36 #include <sys/param.h>
37 #include <netinet/in.h>
38 #include <arpa/inet.h>
41 #include "net-locale.h"
43 char *Release = RELEASE,
44 *Version = "hostname 1.96 (1996-02-18)";
46 static char *program_name;
49 static void sethname(char *);
50 static void setdname(char *);
51 static void showhname(char *, int);
52 static void usage(void);
53 static void version(void);
54 static void setfilename(char *,int);
59 static void sethname(char *hname)
62 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_set, "Setting hostname to `%s'\n"),
64 if(sethostname(hname, strlen(hname))) {
67 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_root,
68 "%s: you must be root to change the host name\n"), program_name);
71 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_toolong,
72 "%s: name too long\n"), program_name);
81 static void setdname(char *dname)
84 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_dset, "Setting domainname to `%s'\n"),
86 if(setdomainname(dname, strlen(dname))) {
89 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_dname_root,
90 "%s: you must be root to change the domain name\n"), program_name);
93 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_dname_toolong,
94 "%s: name too long\n"), program_name);
103 static void showhname(char *hname, int c)
106 register char *p,**alias;
110 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_res, "Resolving `%s' ...\n"),hname);
111 if (!(hp = gethostbyname(hname))) {
112 herror(program_name);
118 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_fnd, "Result: h_name=`%s'\n"),
123 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_ali, "Result: h_aliases=`%s'\n"),
126 ip=(struct in_addr **)hp->h_addr_list;
128 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_ipn, "Result: h_addr_list=`%s'\n"),
132 if (!(p = strchr(hp->h_name, '.')) && (c == 'd')) return;
136 while (hp->h_aliases[0])
137 printf("%s ", *hp->h_aliases++);
141 while (hp->h_addr_list[0])
142 printf("%s ", inet_ntoa(*(struct in_addr *) * hp->h_addr_list++));
149 printf("%s\n", hp->h_name);
152 if (p != NULL) *p = '\0';
153 printf("%s\n", hp->h_name);
159 static void setfilename(char * name,int what)
163 char fline[MAXHOSTNAMELEN];
165 if ((fd = fopen(name, "r")) != NULL) {
166 while (fgets(fline, sizeof(fline), fd) != NULL) {
167 if ((p = index(fline, '\n')) != NULL)
169 if (opt_v) fprintf(stderr, ">> %s\n", fline);
172 if (what == SETHOST) {
180 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_cant_open, "%s: can't open `%s'\n"),
181 program_name, optarg);
187 static void version(void)
189 fprintf(stderr,"%s\n%s\n",Release,Version);
194 static void usage(void)
196 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage1,
197 "Usage: hostname [-v] {hostname|-F file} set hostname (from file)\n"));
198 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage2,
199 " domainname [-v] {nisdomain|-F file} set NIS domainname (from file)\n"));
200 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage3,
201 " hostname [-v] [-d|-f|-s|-a|-i|-y] display formated name\n"));
202 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage4,
203 " hostname [-v] display hostname\n\n"));
204 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage5,
205 " hostname -V|--version|-h|--help print info and exit\n\n"));
206 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage6,
207 " dnsdomainname=hostname -d, {yp,nis,}domainname=hostname -y\n\n"));
208 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage7,
209 " -s, --short short host name\n"));
210 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage8,
211 " -a, --alias alias names\n"));
212 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage9,
213 " -i, --ip-address addresses for the hostname\n"));
214 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage10,
215 " -f, --fqdn, --long long host name (FQDN)\n"));
216 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage11,
217 " -d, --domain DNS domain name\n"));
218 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage12,
219 " -y, --yp, --nis NIS/YP domainname\n"));
220 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage13,
221 " -F, --file read hostname or nis domainname from given File\n\n"));
222 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage14,
223 " This comand can get or set the hostname or the NIS domainname. You can\n"));
224 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage15,
225 " also get the DNS domain or the FQDN (fully qualified domain name).\n"));
226 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage16,
227 " Unless you are using bind or NIS for host lookups you can change the\n"));
228 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage17,
229 " FQDN (Fully Qualified Domain Name) and the DNS domain name (which is\n"));
230 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_usage18,
231 " part of the FQDN) in the /etc/hosts file.\n"));
237 int main(int argc, char **argv)
241 int option_index = 0;
243 char myname[MAXHOSTNAMELEN+1] = { 0 };
246 static const struct option long_options[] =
248 {"domain", no_argument, 0, 'd'},
249 {"file", required_argument, 0, 'F'},
250 {"fqdn", no_argument, 0, 'f'},
251 {"help", no_argument, 0, 'h'},
252 {"long", no_argument, 0, 'f'},
253 {"short", no_argument, 0, 's'},
254 {"version", no_argument, 0, 'V'},
255 {"verbose", no_argument, 0, 'v'},
256 {"alias", no_argument, 0, 'a'},
257 {"ip-address", no_argument, 0, 'i'},
258 {"nis", no_argument, 0, 'y'},
259 {"yp", no_argument, 0, 'y'},
264 setlocale (LC_MESSAGES, "");
265 catfd = catopen ("nettools", MCLoadBySet);
268 program_name = (rindex(argv[0], '/')) ? rindex(argv[0], '/') + 1 : argv[0];
270 if (!strcmp(program_name,"ypdomainname") ||
271 !strcmp(program_name,"domainname") ||
272 !strcmp(program_name,"nisdomainname"))
274 if (!strcmp(program_name,"dnsdomainname"))
277 while((c = getopt_long(argc, argv, "adfF:h?isVvy", long_options, &option_index)) != EOF)
311 if (file || (optind < argc)) {
312 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_nodns1,
313 "%s: You can't change the DNS domain name with this command\n"), program_name);
314 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_nodns2,
315 "\nUnless you are using bind or NIS for host lookups you can change the DNS\n"));
316 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_nodns3,
317 "domain name (which is part of the FQDN) in the /etc/hosts file.\n"));
325 setfilename(file,SETHOST);
329 sethname(argv[optind]);
333 gethostname(myname, sizeof(myname));
335 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_get,
336 "gethostname()=`%s'\n"),myname);
338 printf("%s\n",myname);
340 showhname(myname,type);
344 setfilename(file,SETDOMAIN);
348 setdname(argv[optind]);
351 getdomainname(myname,sizeof(myname));
353 fprintf(stderr,NLS_CATGETS(catfd, hostnameSet, hostname_verb_dget,
354 "getdomainname()=`%s'\n"),myname);
355 printf("%s\n",myname);