Home » FreeBSD » Tips – PHP 4.4.9 + OpenSSL 1.0.1j (Tag: )

PHP 4.4.9 + OpenSSL 0.9.8 系の環境を OpenSSL 1.0.1j にアップデートした際に躓いた点を整理します。

configure は通りますが make で以下の様にストップします。

/usr/appli/php-4.4.9/ext/openssl/openssl.c: In function 'zif_openssl_pkey_new':
/usr/appli/php-4.4.9/ext/openssl/openssl.c:1911: error: 'struct php_x509_request' has no member named 'priv_key'
/usr/appli/php-4.4.9/ext/openssl/openssl.c:1913: error: 'struct php_x509_request' has no member named 'priv_key'
/usr/appli/php-4.4.9/ext/openssl/openssl.c: In function 'zif_openssl_pkey_export_to_file':
/usr/appli/php-4.4.9/ext/openssl/openssl.c:1955: error: 'struct php_x509_request' has no member named 'priv_key_encrypt'
/usr/appli/php-4.4.9/ext/openssl/openssl.c: In function 'zif_openssl_pkey_export':
/usr/appli/php-4.4.9/ext/openssl/openssl.c:2006: error: 'struct php_x509_request' has no member named 'priv_key_encrypt'
*** Error code 1

Stop in /usr/appli/php-4.4.9

Apache 1.3 系も OpenSSL 1.0 以降は OPTIM=-DSTACK=_STACK を付加してコンパイルしないと処理出来ませんが、同様の処理が公開されていました。

ext/openssl/openssl.c を差し替える方法でしたが、以下の内容を patch コマンドで PHP 4.4.9 のソースファイルを展開したディレクトリ直下で実行することで修正が反映し、make も正常に終了します。

--- ext/openssl/openssl.c.orig    2007-12-31 16:22:50.000000000 +0900
+++ ext/openssl/openssl.c         2013-01-10 19:10:47.000000000 +0900
@@ -47,6 +47,13 @@

 #define DEBUG_SMIME        0

+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+#define OPENSSL_D2I_X509_CAST   d2i_of_void *
+#else
+#define OPENSSL_D2I_X509_CAST   char *(*)()
+#define LHASH_OF(x)             LHASH
+#endif
+
 static unsigned char arg2_force_ref[] =
                        { 2, BYREF_NONE, BYREF_FORCE };
 static unsigned char arg2and3_force_ref[] =
@@ -179,8 +186,8 @@
 static char default_ssl_conf_filename[MAXPATHLEN];

 struct php_x509_request {
-        LHASH * global_config;        /* Global SSL config */
-        LHASH * req_config;           /* SSL config for this request */
+        LHASH_OF(CONF_VALUE) * global_config; /* Global SSL config */
+        LHASH_OF(CONF_VALUE) * req_config;    /* SSL config for this request */
         const EVP_MD * md_alg;
         const EVP_MD * digest;
         char        * section_name,
@@ -340,7 +347,7 @@
                 const char * section_label,
                 const char * config_filename,
                 const char * section,
-                LHASH * config TSRMLS_DC)
+                LHASH_OF(CONF_VALUE) * config TSRMLS_DC)
 {
         X509V3_CTX ctx;

@@ -720,7 +727,7 @@
                 if (in == NULL)
                         return NULL;

-                cert = (X509 *) PEM_ASN1_read_bio((char *(*)())d2i_X509,
+                cert = (X509 *) PEM_ASN1_read_bio((OPENSSL_D2I_X509_CAST)d2i_X509,
                                 PEM_STRING_X509, in,
                                 NULL, NULL, NULL);
                 BIO_free(in);
@@ -1859,7 +1866,7 @@
                 case EVP_PKEY_RSA2:
                         assert(pkey->pkey.rsa != NULL);

-                        if (NULL == pkey->pkey.rsa->p || NULL == pkey->pkey.rsa->q)
+                        if (NULL == pkey->pkey.rsa || NULL == pkey->pkey.rsa->p || NULL == pkey->pkey.rsa->q)
                                 return 0;
                         break;
 #endif
@@ -1871,7 +1878,7 @@
                 case EVP_PKEY_DSA4:
                         assert(pkey->pkey.dsa != NULL);

-                        if (NULL == pkey->pkey.dsa->p || NULL == pkey->pkey.dsa->q || NULL == pkey->pkey.dsa->priv_key)
+                        if (NULL == pkey->pkey.dsa || NULL == pkey->pkey.dsa->p || NULL == pkey->pkey.dsa->q || NULL == pkey->pkey.dsa->priv_key)
                                 return 0;
                         break;
 #endif
@@ -1879,7 +1886,7 @@
                 case EVP_PKEY_DH:
                         assert(pkey->pkey.dh != NULL);

-                        if (NULL == pkey->pkey.dh->p || NULL == pkey->pkey.dh->priv_key)
+                        if (NULL == pkey->pkey.dh || NULL == pkey->pkey.dh->p || NULL == pkey->pkey.dh->priv_key)
                                 return 0;
                         break;
 #endif

Random Select

豆カレー (ルー大盛り, 辛さ 70 倍)
前回の投稿 カリーライス専門店 エチオピア 本店 (No. 12 – 豆カレー 辛さ 50 倍) よりほぼ 1 年ぶりとなりました。その後 3 回程訪れた後は半年以上ブランクが開き、久しぶ
ESXi 5.1 Install (5)
VMware ESXi 5.1 Install (Boot image is corrupted) では予期しないエラーに出くわし、インストールがどの程度時間を要するか把握出来なかったので、別環境にイ
サーモン西京焼 (1)
いさば (サバ) から時間を空けずに訪れました。今日こそは、気にはなりつつも試していなかったサーモン西京焼 + 納豆 + のりで豪華ランチ (?) と決め込んで訪れました。地下の入口に下る途中に、おそ
丸焼きチキン (2)
久高島 (No. 6 – ふたたび) の続きです。以前から 沖縄県産やんばる若鶏の丸焼き専門店ブエノチキン浦添 を試してみたいと思いつつも機会がなく、去年予約まで入れたものの 沖縄本島 (
揚げずにからあげ (鮭) + 釜揚しらす
揚げずにからあげ (鮭 Part 1) の続きです。今回の調理に用意したかの様にちょうど良いサイズのフライパンがありました。小さじ 2 杯程のサラダ油を引いて熱した後、いよいよ焼き始めます。並べる前に
チキンカレー
欧風カレー ボンディ と出会って、御茶ノ水・神田神保町界隈では有名なエチオピアも通い出しました。欧風カレー ボンディ (ビーフカレー)欧風カレー ボンディ ("豪快" スペアリブ
カツ丼 (1)
いよいよ出張最終日、久しぶりに 波布食堂 を訪れました。沖縄支店が西洲の時はここも度々訪れました。支店のスタッフは行くとなれば渋るか、覚悟を決めるかしないといけない場所の様です。何せ巨盛が普通盛りの見
温かいおそば (かきあげ)
ここ最近、沖縄ご飯か持参するおにぎり + おかず買い足しのパターンが続いたせいか、無性にかき揚げそばが食べたくなりました。場所柄、駅または周辺には大抵立ち食いそばがありますが、移動の前後にたまにふいっ
ごぼう天うどん
靖国通りを小川町方面によく行き来しますが、スターバックス (神田小川町 2 丁目店) のそばに見掛ける立て看板が気になっていました。豊前うどん 武膳 といううどん店の様ですが、何度か見掛けて気になって
hamburger with fries
ここ数年頻繁に感じますが、私が在籍していた 20 年程前と比べると明らかにサービス品質が落ちてきたと感じます。あくまでも私の所感ですし、すべての店舗に当てはまるとは思えません (思いたくありません)
Valid HTML5 Valid CSS3 Another HTML Lint