2020年02月18日

MIT Kerberos5 1.18 で LibreSSL 3.0.2 を使うためのパッチ

Kerberos5 1.18 がリリースされましたが、やはりそのままでは LibreSSL を使えず。基本的には MIT Kerberos5 1.17 で LibreSSL 2.9.1 を使うためのパッチで OK なのだけれど、一部足りない部分があったので再作成。

Download: krb5-1.18.diff
diff -ruN ../krb5-1.18.ORG/src/include/k5-platform.h ./src/include/k5-platform.h
--- ../krb5-1.18.ORG/src/include/k5-platform.h 2020-02-13 02:21:58.000000000 +0900
+++ ./src/include/k5-platform.h 2020-02-13 02:21:58.000000000 +0900
@@ -1025,6 +1025,7 @@
memset_s(ptr, len, 0, len);
}
#elif defined(HAVE_EXPLICIT_BZERO)
+extern void explicit_bzero(void *ptr, size_t len);
# define zap(ptr, len) explicit_bzero(ptr, len)
#elif defined(HAVE_EXPLICIT_MEMSET)
# define zap(ptr, len) explicit_memset(ptr, 0, len)
diff -ruN ../krb5-1.18.ORG/src/plugins/preauth/pkinit/asn1t_add.h ./src/plugins/preauth/pkinit/asn1t_add.h
--- ../krb5-1.18.ORG/src/plugins/preauth/pkinit/asn1t_add.h 1970-01-01 09:00:00.000000000 +0900
+++ ./src/plugins/preauth/pkinit/asn1t_add.h 2020-02-16 19:27:17.482763180 +0900
@@ -0,0 +1,23 @@
+#ifndef HEADER_ASN1T_ADD_H
+#define HEADER_ASN1T_ADD_H
+#include <openssl/asn1t.h>
+
+# define static_ASN1_ITEM_start(itname) \
+ static const ASN1_ITEM itname##_it = {
+
+# define ASN1_ITEM_end(itname) \
+ };
+
+# define static_ASN1_SEQUENCE_END_name(stname, tname) \
+ ;\
+ static_ASN1_ITEM_start(tname) \
+ ASN1_ITYPE_SEQUENCE,\
+ V_ASN1_SEQUENCE,\
+ tname##_seq_tt,\
+ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
+ NULL,\
+ sizeof(stname),\
+ #stname \
+ ASN1_ITEM_end(tname)
+
+#endif /* HEADER_ASN1T_ADD_H */
diff -ruN ../krb5-1.18.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
--- ../krb5-1.18.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2020-02-13 02:21:58.000000000 +0900
+++ ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.c 2020-02-16 19:27:17.542763189 +0900
@@ -185,7 +185,7 @@
(*_x509_pp) = PKCS7_cert_from_signer_info(_p7,_si)
#endif

-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)

/* 1.1 standardizes constructor and destructor names, renaming
* EVP_MD_CTX_{create,destroy} and deprecating ASN1_STRING_data. */
@@ -2924,7 +2924,7 @@
return retval;
}

-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x20900000L)

/*
* We need to decode DomainParameters from RFC 3279 section 2.3.3. We would
diff -ruN ../krb5-1.18.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.h ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.h
--- ../krb5-1.18.ORG/src/plugins/preauth/pkinit/pkinit_crypto_openssl.h 2020-02-13 02:21:58.000000000 +0900
+++ ./src/plugins/preauth/pkinit/pkinit_crypto_openssl.h 2020-02-16 19:27:17.592763200 +0900
@@ -46,8 +46,11 @@
#include <openssl/asn1.h>
#include <openssl/pem.h>

-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if ((OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x20900000L)
#include
+# ifdef LIBRESSL_VERSION_NUMBER
+# include "asn1t_add.h"
+# endif
#else
#include <openssl/asn1_mac.h>
#endif
diff -ruN ../krb5-1.18.ORG/src/tests/softpkcs11/main.c ./src/tests/softpkcs11/main.c
--- ../krb5-1.18.ORG/src/tests/softpkcs11/main.c 2020-02-13 02:21:58.000000000 +0900
+++ ./src/tests/softpkcs11/main.c 2020-02-17 10:46:59.259976272 +0900
@@ -45,7 +45,7 @@

#include <pkcs11.h>

-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
#define EVP_PKEY_get0_RSA(key) ((key)->pkey.rsa)
#define RSA_PKCS1_OpenSSL RSA_PKCS1_SSLeay
#define RSA_get0_key compat_rsa_get0_key

posted by yamaga at 09:09| Comment(4) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
このパッチは本家にコミットされますでしょうか?
Posted by ヒロチン at 2020年02月23日 16:05
私からするつもりはないです(面倒なので)。大した内容ではないのでコミットしていただいて構いませんけど。
Posted by 山賀正人 at 2020年02月23日 16:30
了解しました。パッチを参照しつつ、本家にbug reportしてみます。
Posted by ヒロチン at 2020年02月24日 10:58
お手数をおかけしますが宜しくお願いします。
Posted by 山賀正人 at 2020年02月24日 11:09
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。