[PATCH][saslauthd] cyrus-sasl-2.1.10/saslauthd credential caching
Jeremy Rumpf
jrumpf at heavyload.net
Tue Jan 14 18:17:25 EST 2003
All,
I've been working on combining some of the ideas for a credential caching
layer into saslauthd. This is the first release for review/comments/testing.
Changes:
Three files have been added to the saslauthd package:
cache.c
cache.h
README.cache
saslcache.c
Four files have been modified
Makefile.am
Makefile.in
saslauthd-doors.c
saslauthd-unix.c
The saslauthd executable now accepts three new command line switches.
-c Enables the credential cache
-s Sets the size of the credential cache in kilobytes
-t Sets the timeout of items in the credential cache in seconds
A show_usage() function has been added that dumps all possible options out
when an invalid command line switch is found:
./saslauthd: invalid option -- -
usage: saslauthd [options]
option information:
-a <authmech> Selects the authentication mechanism to use.
-c Enable credential caching.
-d Enables debugging, run in the foreground.
-O <option> Optional argument to pass to the authentication
mechanism.
-m <path> Alternate path for the mux socket, must be absolute.
-n <threads> Number of worker threads to create
-s <kilobytes> Size of the credential cache (in kilobytes)
-t <seconds> Timeout for items in the credential cache (in seconds)
-T Honor time-of-day login restrictions.
-v Display version information and available
authentication mechanisms and exit.
The caching layer caches the username, realm, service, and an md5 hash of the
passwords for all authentication mechanisms (LDAP, rimap, PAM, etc). It's
been tested it on RedHat 7.2 Alpha and RedHat 7.3 Intel. I've also only been
able to compile the modifications using the unix IPC option
(saslauthd-unix.c). The same modifications have been made to the doors IPC
option (saslauthd-doors.c), but have not been compiled or tested. More
detailed information about the cache is in the README.cache file.
In addition to testsaslauthd, a second utility is included, saslcache. The
saslcache utility can be used to attach to the shared memory segment and
perform various tasks. The saslcache utility can be built by:
cd saslauthd
make saslcache
Usage examples:
./saslcache -s dumps out some information about the cache
----------------------------------------
Saslauthd Cache Detail:
timeout (seconds) : 28800
total slots allocated : 3643
slots in use : 3
total buckets : 21858
buckets per slot : 6
buckets in use : 3
hash table size (bytes) : 2098536
bucket size (bytes) : 96
minimum slot allocation : 0
maximum slot allocation : 1
slots at maximum allocation : 3
slots at minimum allocation : 3640
overall hash table load : 0.00
hits* : 19
misses* : 3
total lookup attempts* : 22
hit ratio* : 86.36
----------------------------------------
* May not be completely accurate
----------------------------------------
./saslcache -d dumps the contents of the cache in a csv format
"user","realm","service","created","created_localtime"
"m3","","imap","1042513583","Mon Jan 13 22:06:23 2003"
"m2","","imap","1042513256","Mon Jan 13 22:00:56 2003"
"m1","","imap","1042513355","Mon Jan 13 22:02:35 2003"
./saslcache -f purges/deletes all entries in the cache
21858 entries purged
Todo:
Test the doors IPC stuff.
Test on alternate OSs (only linux so far)
Have someone help with the autoconf stuff. I'm not very familiar with autoconf
and modeled the modifications after those for testsaslauthd. I'm not sure if
they're entirely correct.
For testing one should probably run saslauthd with the -d switch. The cache
will log information to syslog (LOG_INFO|LOG_AUTH). Optionally, one could use
the saslcache utility.
Log Example:
saslauthd[27772]: cache_lookup: user=m2 realm= service=imap: not found, entry
created
saslauthd[27772]: OK: user=m2 service=imap realm=
saslauthd[27772]: cache_lookup: user=m2 realm= service=imap: found with valid
passwd
saslauthd[27772]: OK: user=m2 service=imap realm=
saslauthd[20673]: cache_lookup: user=m2 realm= service=imap: found with
invalid passwd, passwd synced
saslauthd[20673]: cache_purge : prior lookup purged
saslauthd[20673]: AUTHFAIL: user=m2 service=imap realm=
Anyhow, if anyone wants to give it a whirl. Here's a first patch attempt
against cyrus-sasl-2.1.10:
ftp://ftp.net.ohio-state.edu/pub/users/jrumpf/cyrus-sasl/cyrus-sasl-2.1.10-cache-1.patch
Or, a fully patched tar of cyrus-sasl-2.1.10 at:
ftp://ftp.net.ohio-state.edu/pub/users/jrumpf/cyrus-sasl/cyrus-sasl-2.1.10-cache-1.tar.gz
Feedback welcome...
Cheers,
Jeremy
More information about the Info-cyrus
mailing list