modsecurity2のコンパイルでエラー
configureをかけてmakeするとこんなエラーが。
gcc -DHAVE_CONFIG_H -I. -I../apache2 -DLINUX -D_REENTRANT -D_GNU_SOURCE -I../apache2 -I/usr/local/apache2/include/apr-1 -DWITH_CURL -g -O2 -I/usr/local/apache2//include/apr-1 -MT mlogc-mlogc.o -MD -MP -MF .deps/mlogc-mlogc.Tpo -c -o mlogc-mlogc.o `test -f 'mlogc.c' || echo './'`mlogc.c In file included from /usr/include/curl/curl.h:2220:0, from mlogc.c:32: mlogc.c: 関数 ‘logc_init’ 内: mlogc.c:1281:53: エラー: ‘CURL_SSLVERSION_TLSv1_0’ が宣言されていません (この関数内での最初の使用) curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); ^ mlogc.c:1281:53: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます mlogc.c:1284:53: エラー: ‘CURL_SSLVERSION_TLSv1_1’ が宣言されていません (この関数内での最初の使用) curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
数台あるウェブサーバのうち、一台のみで現象が発生。
調べてみると、「ない」と言っている定義は本来なら /usr/include/curl/curl.h に有る模様。
エラーがでない、すなわちちゃんと定義があるファイルの当該部分はこんなの。
enum { CURL_SSLVERSION_DEFAULT, CURL_SSLVERSION_TLSv1, /* TLS 1.x */ CURL_SSLVERSION_SSLv2, CURL_SSLVERSION_SSLv3, CURL_SSLVERSION_TLSv1_0, CURL_SSLVERSION_TLSv1_1, CURL_SSLVERSION_TLSv1_2, CURL_SSLVERSION_LAST /* never use, keep last */ };
で、エラーがでるファイルにはそれがない。うーんなんでだ。だいたい日付もサイズも違う。
yumのリポジトリをチェックすると、エラーがでているほうのcurl,libcurlはhop5のリポジトリを参照している様子。本来はrhel-x86_64-server-6が正解。
うーむと暫く悩んで、、curl.hへ以下三行追加することに決定。
CURL_SSLVERSION_TLSv1_0, CURL_SSLVERSION_TLSv1_1, CURL_SSLVERSION_TLSv1_2,
マジか(笑)。まぁenumの後ろに追加されたメンバだから問題ないだろう。