ttt

getttyent

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

2011-09-06 23:37:13 | デジタル・インターネット

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に戻しました。

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