cvs commit: src/etc/rc.d hostid

Doug Barton dougb at FreeBSD.org
Mon May 21 18:10:15 UTC 2007


Ralf S. Engelschall wrote:
> rse         2007-05-21 11:44:13 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     etc/rc.d             hostid 
>   Log:
>   Adjust UUID lower-case translation from straight-forward tr(1)
>   usage to an equivalent csh(1) usage as tr(1) stays in /usr/bin and
>   /etc/rc.d/hostid has just the root filesystem (and this way mainly the
>   tools in /bin) available.
>   
>   I've chosen csh(1) here as the string manipulation tools available in
>   /bin is extremely limited and the (only) alternative ed(1) usage would
>   have been a lot more complicated or even might require a temporary file.
>   
>   Revision  Changes    Path
>   1.4       +2 -1      src/etc/rc.d/hostid
> 
> http://www.FreeBSD.org/cgi/cvsweb.cgi/src/etc/rc.d/hostid.diff?&r1=1.3&r2=1.4&f=h

I really don't like the idea of having an rc.d script depend on csh. 
We don't have any other examples of that, and I don't really want to 
start down that road. I would appreciate it if you'd do a little more 
research into ways that this could be done with the tools available.

Meanwhile, I've attached a patch that simplifies the hostid_hardware() 
quite a bit, and has the added virtue of only calling csh if it's needed.

hth,

Doug

-- 

     This .signature sanitized for your protection

-------------- next part --------------
Index: hostid
===================================================================
RCS file: /usr/local/ncvs/src/etc/rc.d/hostid,v
retrieving revision 1.5
diff -u -r1.5 hostid
--- hostid	21 May 2007 11:57:01 -0000	1.5
+++ hostid	21 May 2007 18:02:54 -0000
@@ -56,19 +56,26 @@
 
 hostid_hardware()
 {
+	local uuid
+
 	uuid=`kenv smbios.system.uuid 2>/dev/null`
-	uuid=`csh -c 'echo -n ${*:al}' "${uuid}"`
-	x="[0-9a-f]"
-	y=$x$x$x$x
-	z="0000"
-	case "${uuid}" in
-	$z$z-$z-$z-$z-$z$z$z)
+
+	case "$uuid" in
+	00000000-0000-0000-0000-000000000000)
 		# Filter the special "Nil" UUID
+		return
 		;;
-	$y$y-$y-$y-$y-$y$y$y)
-		echo "${uuid}"
+	*[^A-Fa-f0-9-]*)
+		# Contains invalid (non-hex) characters
+		return
+		;;
+	*[A-F]*)
+		# Contains capital letters that need to be changed
+		uuid=`csh -c 'echo -n ${*:al}' "${uuid}"`
 		;;
 	esac
+
+	echo "${uuid}"
 }
 
 hostid_reset()


More information about the cvs-src mailing list