5.3-RELEASE ではまっているネタ

RADIUS サーバのディスクがイカレそうなので、どうせなら 5.3-RELEASE で... と思ったのが運の尽き。覚え書き代わりに書いておきます。そのうち解消しナイト。

  1. BIND8 -> BIND9 に。その為かどうか、jail を使った named の起動が上手くできなくなった。仕方ないので chroot でガマンする...
  2. network 関連の API が変わったのか、openldap のライブラリを使ったプログラムの挙動がおかしくなった。5.2.x 系のマシンだと真っ当に動くので、どう考えても base system のライブラリで何か変更が加わっているとしか思えない --;)

特に 2. は死亡... 14台の RADIUS サーバ + 3台の LDAP サーバの冗長構成にした認証システムがあるのだが、C で書いてあるプログラムの挙動が変。3台の LDAP サーバに順に接続し、認証処理が実施できれば OK、接続不可など処理そのものがアウトだった際には次のサーバに接続を試みるために LDAP 接続のタイムアウトを以下のようなコードで書いてある。

    /* LDAP サーバへの接続タイムアウト = CONNECTTIMEOUT 秒に設定 */
    if(ldap_set_option(NULL, LDAP_OPT_NETWORK_TIMEOUT, &CONNECTTIMEOUT) != LDAP_
OPT_SUCCESS) {
        perror("ldap_set_option"); free(dn);
        return AUTH_FAILURE;
    }

ところがこれを 5.3-RELEASE マシンでコンパイルすると、どういうわけかあっという間に接続失敗し、3台全てで認証処理そのものが失敗してしまう。コメントアウトすれば問題ないのだが、そうすると 1台でも接続できないマシンがあると、デフォルトのタイムアウト(5.3-RELESE だと 90秒?)待たされてしまう。これでは洒落にならん orz。

とりあえず 5.2.1-RELEASE-pX なマシンでコンパイルしたバイナリを使えば大丈夫だけど、何とかならないかなぁ? FreeBSD 側の問題なのか OpenLDAP 側の問題なのかすら分からんです --;)...