Hi All,
First of all, thanks to the development team for a _great_ package. I have been using it on 3 servers for about two years now.
I am building the (CVS) 2.2 branch (like everybody else, I need virtual domain support now.) on SuSE 7.1 Linux for the Alpha processor (glibc patched to 2.2.33). I have SASL 2.1.12 and Berkeley DB 4.1.25, and my configure command is almost identical to that of the 2.1.x builds on this machine (I took out --enable-fulldirhash this time):
export CPPFLAGS='-I/usr/local/BerkeleyDB.4.1/include -I/usr/local/ssl/include' export LDFLAGS='-L/usr/local/lib/mysql -L/usr/local/ssl/lib -L/usr/local/lib/sas l2' export LIBS='-lssl -lmysqlclient' ./configure --with-dbdir=/usr/local/BerkeleyDB.4.1 \ --with-bdb-libdir=/usr/local/BerkeleyDB.4.1/lib \ --with-bdb-incdir=/usr/local/BerkeleyDB.4.1/include \ --with-auth=unix \ --with-openssl=/usr/local/ssl \ --enable-netscapehack \ --with-sasl=/usr/local/lib/sasl2 \ --with-staticsasl=/usr/local \ --with-perl
The configure and build go along fine, but when I start the server, it "hangs" with no output to the logfile. I ran it in gdb, and it is looping in the hash_insert ( ) function after being called from config_read. A backtrace shows me this: (gdb) backtrace #0 0x12001c8dc in hash_insert () #1 0x12000747c in config_read (alt_config=0x120032220 "/var/spool/imap") at ../lib/libconfig.c:336 #2 0x1200078c4 in masterconf_init (ident=0x12000a8b1 "master", alt_config=0x120032220 "/var/spool/imap") at masterconf.c:79 #3 0x120005928 in main (argc=1, argv=0x11ffff698) at master.c:1358 #4 0x200003756ac in __libc_start_main () from /lib/libc.so.6.1
the "loop" is thus: (gdb) stepi 0x12001c8d4 in hash_insert () (gdb) 0x12001c8d8 in hash_insert () (gdb) 0x12001c8dc in hash_insert () (gdb) 0x12001c8d4 in hash_insert () (gdb) 0x12001c8d8 in hash_insert () (gdb) 0x12001c8dc in hash_insert ()
Some possibly useful variables: (gdb) print key $1 = 0 (gdb) print confighash $2 = {size = 30, table = 0x1200317d0, pool = 0x120031780} (gdb) print data $3 = 0
I have tried using Berkeley DB 4.0, but get the same result. I am about to try to compile it with the Compaq C compiler (ccc), but I don't expect any improvement.
Cyrus-IMAPd-2.1.12 builds and runs fine on this machine. The only difference I see is that you have switched from using "hash" to "strhash", and using the built-in if it is available, but I do not think my system has strhash, so this should not make any difference.
Does anyone have any ideas about a solution, or suggestions as to where I might proceed before I wade in deeper into the unknown waters of the Cyrus code?
Thanks for any help.
Mike.
After a couple of stratigically placed fprintf's, I determined that the function hash_insert () was _never_ being called! I saw where it was passing "partition_default" as the key and "/var/spool/imap" as the newval, but the fprintf to verify these values that I put immediately after the variable declarations in hash.c / hash_insert () never printed anything!
It turns out that mysql (3.23.53 here) has a hash_insert function that expects the hash table as the first argument and not the last as in the cyrus implementation. Without recompiling mysql to put a fprintf statement in it's hash_insert () function, I can't verify that cyrus is trying to use that one, but the assumption seems reasonable.
Why do I have "-lmysqlclient" in the $LIBS variable in the first place??? I compiled SASL 2.1.12 with mysql support, and cyrus-imapd fails with undefined symbols (all from the libmysqlclient) if I do not include it.
Suggestions??
Mike.