aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/inetd/builtins.c
diff options
context:
space:
mode:
authorBrian Feldman <green@FreeBSD.org>2000-01-20 01:49:41 +0000
committerBrian Feldman <green@FreeBSD.org>2000-01-20 01:49:41 +0000
commit5a5e442acd62772685c4347df269aa81bfd9d1e8 (patch)
tree9f9a7a7b78312a8ed2bd2699ff07200a61c190df /usr.sbin/inetd/builtins.c
parent290fb50e67ab6436d9b02313859fe206a58425d5 (diff)
downloadsrc-5a5e442acd62772685c4347df269aa81bfd9d1e8.tar.gz
src-5a5e442acd62772685c4347df269aa81bfd9d1e8.zip
I like base-36 better.
Notes
Notes: svn path=/head/; revision=56303
Diffstat (limited to 'usr.sbin/inetd/builtins.c')
-rw-r--r--usr.sbin/inetd/builtins.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/usr.sbin/inetd/builtins.c b/usr.sbin/inetd/builtins.c
index 2107b95cd057..6ba404c2a639 100644
--- a/usr.sbin/inetd/builtins.c
+++ b/usr.sbin/inetd/builtins.c
@@ -378,13 +378,27 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
case 'g':
gflag = 1;
random = 0; /* Shush, compiler. */
+ /*
+ * The number of bits in "random" divided
+ * by the number of bits needed per iteration
+ * gives a more optimal way to reload the
+ * random number only when necessary.
+ *
+ * I'm using base-36, so I need at least 6
+ * bits; round it up to 8 bits to make it
+ * easier.
+ */
for (i = 0; i < sizeof(garbage) - 1; i++) {
- if (i % (sizeof(random) * 8 / 4) == 0)
+ const char *const base36 =
+ "0123456789"
+ "abcdefghijklmnopqrstuvwxyz";
+ if (i % (sizeof(random) * 8 / 8) == 0)
random = arc4random();
- snprintf(garbage + i, 2, "%.1x",
- (int)random & 0xf);
- random >>= 4;
+ garbage[i] =
+ base36[(random & 0xff) % 36];
+ random >>= 8;
}
+ garbage[i] = '\0';
break;
case 'n':
nflag = 1;