top / index / prev / next / target / source

2008-01-11 diary: Apache HTTP Server 2.2.6 (Windows) + ApacheDS 1.5.1 の動作

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

Apache HTTP Server 2.2.6 (Windows) + ApacheDS 1.5.1 の動作

Apache HTTP Server 2.2.6 + ApacheDS 1.5.1 の組み合わせで、Apacheのバグがらみもあり、かなり苦しめられました。

Apache HTTP Server 2.2.6 (Windows) + ApacheDS 1.5.1 の動作

Apache HTTP Server 2.2.6 + ApacheDS 1.5.1 の組み合わせで、Apacheのバグがらみもあり、かなり苦しめられました。

インストールしたもの

Apache HTTP Server 側の設定

こちらは、ApacheDSのデフォルト値と接続するための とてもノーマルな設定。 httpd.conf (前半)

LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

httpd.conf (中盤)

    Order allow,deny
    Allow from all

    AuthType          Basic
    AuthName          "LDAP Server"
    AuthBasicProvider ldap
    AuthLDAPURL       ldap://localhost:10389/ou=Users,dc=example,dc=com?uid

    AuthLDAPBindDN    uid=admin,ou=system
    AuthLDAPBindPassword secret
    require           valid-user

ApacheDSの変更※Apache HTTP Serverのバグを ApacheDS側で吸収

Apache HTTP Server の mod_ldap.so, mod_authnz_ldap.so いずれかのモジュールに不具合があります。これは有名な既知バグである模様です。

今 C言語に取り組んでいる気力と時間が無いので、ApacheDSにパッチを適用して無理矢理動作させました。

パッチ適用後のロードモジュールは以下のようになります。※jarファイルにソースコードも含めてあります

変更箇所は下記のようになります。

対象: org.apache.directory.shared.ldap.codec.LdapMessageGrammar LdapMessageGrammar.java

package org.apache.directory.shared.ldap.codec;
         …中略…
                    // The current TLV should be a integer
                    // We get it and store it in sizeLimit
                    Value value = tlv.getValue();
                    int sizeLimit = 0;

                    try
                    {
                        sizeLimit = IntegerDecoder.parse( value, 0, Integer.MAX_VALUE );
                    }
                    catch ( IntegerDecoderException ide )
                    {                        sizeLimit = 100;
                        log.error( "The sizeLimit is not a valid Integer: {}", value.toString() );
                        //throw new DecoderException( "The sizeLimit is not a valid Integer: " + value.toString() );
                    }

※sizeLimitが不正な値であっても、無視して 100ということにして強行突破させる変更です。 これを気合いでコンパイル (Maven環境を構築する暇が無かったので、直接手でコンパイル!) コマンドライン

Path=C:\Program Files\Java\jdk1.6.0_03\bin;%Path%

javac -classpath shared-asn1-codec-0.9.7.jar;slf4j-api-1.4.3.jar;shared-ldap-constants-0.9.7.jar;shared-ldap-0.9.7.jar;shared-asn1-0.9.7.jar org\apache\directory\shared\ldap\codec\*.java

shared-ldap-0.9.7.jar の該当パッケージをコンパイル後の classファイルで上書き。

Javaって とっても簡単ですね。

Apache + LDAP (ApacheDS) 接続確認に利用したユーザ

関係あると考えているリソース

ツッコミ

関連する日記

Apache HTTP Server 2.2.6 (Windows) のログが…

Apache HTTP Server 2.2.6 (Windows)のログですが、日本語が含まれる際に文字化けしているように見えます。気のせいかどうか、時間がないので調べていません。 DecodeMojibake.java

public class DecodeMojibake {
    public static void main(String[] args) {
        {
            final byte[] wrk = new byte[] { (byte) 0x8c, (byte) 0xa0,
                    (byte) 0x8c, (byte) 0xc0, (byte) 0x82, (byte) 0xaa,
                    (byte) 0x95, 's', (byte) 0x8f, '\\', (byte) 0x95,
                    (byte) 0xaa, (byte) 0x82, (byte) 0xc5, (byte) 0x82,
                    (byte) 0xb7 };
            System.out.println(new String(wrk));
        }

        {
            final byte[] wrk = new byte[] { (byte) 0x82, (byte) 0xbb,
                    (byte) 0x82, (byte) 0xcc, (byte) 0x82, (byte) 0xe6,
                    (byte) 0x82, (byte) 0xa4, (byte) 0x82, (byte) 0xc8,
                    (byte) 0x83, 'I', (byte) 0x83, 'u', (byte) 0x83, 'W',
                    (byte) 0x83, 'F', (byte) 0x83, 'N', (byte) 0x83, 'g',
                    (byte) 0x82, (byte) 0xcd, (byte) 0x82, (byte) 0xa0,
                    (byte) 0x82, (byte) 0xe8, (byte) 0x82, (byte) 0xdc,
                    (byte) 0x82, (byte) 0xb9, (byte) 0x82, (byte) 0xf1 };
            System.out.println(new String(wrk));
        }
    }
}

実行結果 権限が不十分です そのようなオブジェクトはありません ※それっぽい日本語に復元されたのを見て、びっくりして、また少し嬉しかったです。


この日記について