What is the Maximum Length for Host Name in Solaris
The command '/bin/hostname' is used to print or set the hostname. However, /bin/hostname is actually a shell script that wrap around the 'uname' command.
With Solaris being open-sourced, we can just browse the source code of 'uname' from OpenSolaris to find out if there is a limit imposed. Below shows the code snippet:
219 if (Sflg) {
220 int len = strlen(nodename);
221
222 if (len > SYS_NMLN - 1) {
223 (void) fprintf(stderr, gettext(
224 "uname: name must be <= %d letters\n"),
225 SYS_NMLN-1);
226 exit(1);
227 }
228 if (sysinfo(SI_SET_HOSTNAME, nodename, len) < 0) {
229 int err = errno;
230 (void) fprintf(stderr, gettext(
231 "uname: error in setting name: %s\n"),
232 strerror(err));
233 exit(1);
234 }
235 return (0);
236 }
There you go, the limit is SYS_NMLN. SYS_NMLN is defined in <sys/utsname.h> which is set as 257 (256 + string terminate character 'null'). BTW, the 'man uname' documented this too.
Another way to find out is to do a brute-force approach. Below script will try to set the hostname starting with 1 character at a time until it throws exception. A trap is setup to reset the hostname and print out the maximum length of the hostname before it exit gracefully.
#! /bin/sh
orig=`hostname`
name=""
count=0
trap 'hostname $orig; echo Maximum Length for host name is $count; exit' 0 1 2 9 15
while :
do
name="a$name"
hostname $name > /dev/null 2>&1
if [ $? -ne 0 ]; then
exit
fi
count=`expr $count + 1`
done
Labels: shell script, Solaris


0 Comments:
Post a Comment
<< Home