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