2011年9月7日水曜日

(FreeBSD) nsswitch.confでLDAPが有効になっているとthunderbirdが起動しない

Thunderbird 6からそうなったのか、以前からそうだったのか、きちんと調べていませんが、今日、Thunderbird 6にアップデートしたら、Thunderbirdがまったく動かなくなってしまいました。



gdbで調べてみると、こんな感じでsegmentation faultしてました。



#0  0x000000080402d4d7 in free () from /lib/libc.so.7
#1  0x0000000805255d35 in ldap_set_lderrno ()
   from /usr/local/lib/thunderbird/libldap60.so
#2  0x00000008052694ed in ldap_set_option ()
   from /usr/local/lib/thunderbird/libldap60.so
#3  0x0000000808530b27 in ldap_initialize ()
   from /usr/local/lib/libldap-2.4.so.8
#4  0x0000000808406d6d in _nss_ldap_locate_userpassword ()
   from /usr/local/lib/nss_ldap.so.1
#5  0x00000008084099e0 in _nss_ldap_search_s ()
   from /usr/local/lib/nss_ldap.so.1
#6  0x000000080840a0f3 in _nss_ldap_getbyname ()
   from /usr/local/lib/nss_ldap.so.1
#7  0x000000080840a379 in _nss_ldap_getpwuid_r ()
   from /usr/local/lib/nss_ldap.so.1
#8  0x0000000803feedde in __nss_compat_getpwuid_r () from /lib/libc.so.7
#9  0x000000080407ddfd in nsdispatch () from /lib/libc.so.7
#10 0x000000080406ac14 in getpwuid_r () from /lib/libc.so.7
#11 0x00000008036e9a98 in g_get_system_data_dirs ()
   from /usr/local/lib/libglib-2.0.so.0
#12 0x00000008036eb5ef in g_get_home_dir ()
   from /usr/local/lib/libglib-2.0.so.0
#13 0x0000000805ff124c in gtk_rc_add_default_file ()
   from /usr/local/lib/libgtk-x11-2.0.so.0
#14 0x0000000805ff406d in gtk_rc_parse_string ()
   from /usr/local/lib/libgtk-x11-2.0.so.0
#15 0x0000000805fa6c65 in gtk_init_with_args ()
   from /usr/local/lib/libgtk-x11-2.0.so.0
#16 0x00000008036c4fce in g_option_context_parse ()
以下省略



どうやら、/etc/nsswitch.confでLDAPを使うようにしていると、thunderbirdが起動しない、というところまで切り分けできました。



openldapのライブラリからldap_set_optionという名前の関数を呼ぼうとしたら、なぜかthunderbirdのライブラリ(libldap60.so)側にある同名の関数が呼ばれてしまい、それで落ちているようです。



% nm /usr/local/lib/libldap-2.4.so.8 | grep ldap_set_option
0000000000027880 T ldap_set_option



% nm /usr/local/lib/thunderbird/libldap60.so
nm: /usr/local/lib/thunderbird/libldap60.so: no symbols



% strings /usr/local/lib/thunderbird/libldap60.so | grep ldap_set_option
ldap_set_option



じゃあ、libdap60.soをリネームして、見なくしてしまえば・・・



# mv /usr/local/lib/thunderbird/libldap60.so  /usr/local/lib/thunderbird/libldap60.so-



% thunderbird
/libexec/ld-elf.so.1: Shared object "libldap60.so" not found, required by "libxul.so"



まあ、そりゃーとうぜん、そうなりますか。



ひょっとして、libldap60.soの代わりに、openldapのライブラリを使わせてしまえば・・・



# ln -s /usr/local/lib/libldap-2.4.so /usr/local/lib/thunderbird/libldap60.so



% thunderbird
Assertion failed: (LBER_VALID( ber )), function ldap_sasl_bind, file sasl.c, line 103.
Abort



だめですか。そううまい話はない、と。



ネット検索してみると、以下にように、何年も前から、バグ登録されていました。FreeBSDに限らず、Linuxでも同様とのこと。



https://bugzilla.mozilla.org/show_bug.cgi?id=292127
https://bugzilla.mozilla.org/show_bug.cgi?id=532601




■ とりあえずの回避策



vipwして、thunderbirdを実行するユーザーをローカルなpasswdに登録すればOK、でした。





これまで、/usr/ports/deskutils/lightning-thunderbird にあるLightningというプラグインが、Thunderbird3でしか動かず、Thunderbird4にアップデートしないでいました。



ふと気がつけば、/usr/ports/mail/thunderbird は現在、Thunderbird 6になっていて、ここでmake configすると、Lightningも一緒にビルドされることがわかり、じゃあ!ということで、Thunderbird 6にしてみました。そして動作確認しようかと思ったら、いきなり、上記のような不具合にぶち当たりました。



これで万事解決と思ったら、添付ファイルを送ろうとすると、segmentation faultして落ちることがわかりました。送信しなくても、保存するだけで、落ちます。IMAPを使っているのと関係あるかもしれません。



gdbで見たけど、簡単に解決しそうもないので、Thunderbird 3に戻しました。



今日一日の苦労は無駄骨だったのか。



0 件のコメント:

コメントを投稿