diff options
author | Brian Feldman <green@FreeBSD.org> | 2000-01-20 01:49:41 +0000 |
---|---|---|
committer | Brian Feldman <green@FreeBSD.org> | 2000-01-20 01:49:41 +0000 |
commit | 5a5e442acd62772685c4347df269aa81bfd9d1e8 (patch) | |
tree | 9f9a7a7b78312a8ed2bd2699ff07200a61c190df /usr.sbin/inetd/builtins.c | |
parent | 290fb50e67ab6436d9b02313859fe206a58425d5 (diff) | |
download | src-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.c | 22 |
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; |