1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * University Copyright- Copyright (c) 1982, 1986, 1988 24 * The Regents of the University of California 25 * All Rights Reserved 26 * 27 * University Acknowledgment- Portions of this document are derived from 28 * software developed by the University of California, Berkeley, and its 29 * contributors. 30 */ 31 32 /* 33 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 34 * Use is subject to license terms. 35 */ 36 37 /* Portions Copyright 2007 Jeremy Teo */ 38 /* Portions Copyright 2006 Stephen P. Potter */ 39 #pragma ident "%Z%%M% %I% %E% SMI" 40 41 #include <unistd.h> 42 #include <stdio.h> 43 #include <string.h> 44 #include <locale.h> 45 #include <libgen.h> 46 #include <stdlib.h> 47 #include <errno.h> 48 #include <netdb.h> 49 50 #ifndef TEXT_DOMAIN /* should be defined by cc -D */ 51 #define TEXT_DOMAIN "SYS_TEST" /* use this only if it wasn't */ 52 #endif 53 54 static char *progname; 55 56 static void 57 usage(void) 58 { 59 (void) fprintf(stderr, gettext("usage: %s [system_name]\n"), 60 basename(progname)); 61 exit(1); 62 } 63 64 int 65 main(int argc, char *argv[]) 66 { 67 char *nodename = NULL; 68 char c_hostname[MAXHOSTNAMELEN]; 69 int optlet; 70 char *optstring = "?"; 71 72 (void) setlocale(LC_ALL, ""); 73 (void) textdomain(TEXT_DOMAIN); 74 75 progname = argv[0]; 76 77 opterr = 0; 78 while ((optlet = getopt(argc, argv, optstring)) != -1) { 79 switch (optlet) { 80 case '?': 81 usage(); 82 } 83 } 84 85 /* 86 * if called with no options, just print out the hostname/nodename 87 */ 88 if (argc <= optind) { 89 if (gethostname(c_hostname, sizeof (c_hostname)) < 0) { 90 (void) fprintf(stderr, 91 gettext("%s: unable to obtain hostname\n"), 92 basename(progname)); 93 exit(1); 94 } else { 95 (void) fprintf(stdout, "%s\n", c_hostname); 96 } 97 } else { 98 /* 99 * if called with an argument, 100 * we have to try to set the new hostname/nodename 101 */ 102 if (argc > optind + 1) 103 usage(); /* too many arguments */ 104 105 nodename = argv[optind]; 106 if (sethostname(nodename, strlen(nodename)) < 0) { 107 int err = errno; 108 (void) fprintf(stderr, 109 gettext("%s: error in setting name: %s\n"), 110 basename(progname), strerror(err)); 111 exit(1); 112 } 113 } 114 return (0); 115 } 116