Hatena::ブログ(Diary)

C#とか。 - Grim Saga Project 別館:れびんの勉強部屋 このページをアンテナに追加 RSSフィード

2008/04/02  

apachectl 3分ハッキング

 

あまりにも最近更新出来ていないので、仕事ネタで更新しておこうと思いついた。

過去のBlogから記事を引っ張りだしてきた。

 

apachectl 3分ハッキング

 http://myhome.cururu.jp/aquacity/blog/article/91001486526

 

以下の内容は上記記事の転載である。

自分の記事なので著作権を気にしなくていい♪

ああ、せっかくだから少し見直して多少文章を直しておくかな。

 

------------------------------------------------------------

 

諸事情で apachectl をハックすることになった。

 

OSLinux系の apache では、apachectl を使って httpd(http deamon) の起動・停止を行うのが一般的だろう。

今回、ハックする要件は「httpd 起動の際は必ずSSLを有効にしたい」である。

 

apachectl start

 通常の起動

apachectl startssl(/sslstart/start-SSL)

 SSL有効起動

 

なのは、apacheを使っている方には基本であろう。

この apachectl start をどうにかしたい。

SSL有効起動をするはずが、うっかり通常起動してしまうことを防ぐためだ。

 

まず、apachectl の中身は実は shell script である。

オレはずっとバイナリかと思っていたので、今まで知らなかった(笑

 

中を見てみると意外と簡潔でわかりやすい。

 

### 中略
    case $ARG in
    start)
    if [ $RUNNING -eq 1 ]; then
        echo "$0 $ARG: httpd (pid $PID) already running"
        continue
    fi
    if $HTTPD ; then
        echo "$0 $ARG: httpd started"
    else
        echo "$0 $ARG: httpd could not be started"
        ERROR=3
    fi
    ;;
    startssl|sslstart|start-SSL)
    if [ $RUNNING -eq 1 ]; then
        echo "$0 $ARG: httpd (pid $PID) already running"
        continue
    fi
    if $HTTPD -DSSL; then
        echo "$0 $ARG: httpd started"
    else
        echo "$0 $ARG: httpd could not be started"
        ERROR=3
    fi
    ;;
    stop)
### 以下略

 

これなら3分ハッキングが余裕で可能である。

shell がわからない方のために、2つほど修正方法を紹介しておく。

 

ちなみに上記は引数("./apachectl start"などとした場合の'start'に当たる部分)ごとの処理を行っている部分の一部抜粋。

「start」と「startssl/sslstart/start-SSL」でほぼ同一処理をしているのがわかる。

違うのは一点、$HTTPD に対して -DSSL オプションを与えているかどうかのみ。

HTTPD変数はここで紹介していないが、/apache/bin/httpd などを指定している

 

改修その1:

「'start'オプションが指定されても、SSL有効起動とする」

 

修正前:

    if $HTTPD ; then

修正後:

    if $HTTPD -DSSL ; then

 

これは start 引数指定時処理をhttpdのSSL有効起動としてしまう方法。

 

または、start) 〜 ;; を全て削除し、

修正前:

    startssl|sslstart|start-SSL)

修正後:

    start|startssl|sslstart|start-SSL)

 

こちらは、元々のSSL有効起動処理の引数判定の中に'start'も含めてしまう方法。

 

いずれにせよ、これらのパターンだと 'start' オプションでもSSL有効起動を行う。

悪い癖がつく、というデメリットも存在するわけだ。

なので、オレは次の方法を使った。

 

改修その2:

「'start'オプションが指定されたら、エラーメッセージを出力する」

 

修正前:

    start)
    if [ $RUNNING -eq 1 ]; then
        echo "$0 $ARG: httpd (pid $PID) already running"
        continue
    fi
    if $HTTPD ; then
        echo "$0 $ARG: httpd started"
    else
        echo "$0 $ARG: httpd could not be started"
        ERROR=3
    fi
    ;;

修正後:

    start)
    echo "Please Use Command 'startssl/sslstart/start-SSL'
    ;;

 

至ってシンプル。

また、見ての通り、apachectl は httpd を起動したりする、ただの shell スクリプトである。

ハック対象 apachectl の apache(httpd) が起動していても、リプレイス可能である。

偏屈偏屈 2008/04/02 23:43 まったく知識のない私でも理解できる記事でした。
(もちろん少しは調べましたが・・・)
最近、XNAを学ぶためにC#を勉強しております・・・。
なんとかXNA記事も理解できるとこまでいけるようにがんばりますよ〜。

levin_gsplevin_gsp 2008/04/03 06:53 XNA のために C# ってのは私と同じですねー♪
でも仕事の合間を縫ってやるには時間が足りなさ過ぎて、いまだにC#初心者レベルから脱することが出来ていない状態です。。。
偏屈先生、C#教えてください(笑
 
理解できる記事と言っていただけて嬉しいです♪
ホントはC#とかXNA記事で埋め尽くしたいんですが、実情に沿わないものでこんなのも行ってみました。

トラックバック - http://d.hatena.ne.jp/levin_gsp/20080402/1207137270