パスワードを忘れた? アカウント作成
451840 journal

enhydraの日記: 邪道のような王道のような

日記 by enhydra

仕事でとあるApacheモジュールのハンドラを機能拡張したいのだが、その既存の関数が無駄に大きく機能分解されていないのでフツーに再利用できない。。。ヽ(`Д´)ノ

認証後、指定したURL+認証情報にredirectするハンドラだったので、このハンドラをラップして

int rc;
        char *org_url, *new_url;

        /* 元になるハンドラを実行して、認証が完了して無いならそのままreturn */
        rc = old_handler(r, url);
        org_url = ap_table_get(r->headers_out, "Location");
        if (strncmp(url, org_url, strlen(url)) != 0) {
                return rc;
        }

        /* 新しい付加情報を追加してredirect */
        new_url = ap_pstrcat(r->pool, org_url, "&", new_args, NULL);
        ap_table_set(h->headers_out, "Location", new_url);
        return REDIRECT;

これで元のハンドラをまったく弄らずに機能を追加できるし、元のハンドラが変更されても基本的に無関係。デコレータパターンですとか言えば聞こえはいいが、この場合は裏技的な気もしなくは無い。。。う~~~~~ん。

あぁ、新参者(ひらしゃいん)は辛し。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...