http: add support for different sslcert and sslkey types.

Basically git work with default curl ssl type - PEM. But for support eTokens like SafeNet tokens via pksc11 need setup 'ENG' as sslcert type and as sslkey type. So there added additional options for http to make that possible. Signed-off-by: Stanislav Malishevskiy <stanislav.malishevskiy@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stanislav Malishevskiy committed Mar 20, 2023 at 15:48 UTC 0a01d41ee4ca7f8afb75219f46f4f1c573465075
1 file changed +12
http.c
+12
@@ -39,6 +39,7 @@ static int curl_ssl_verify = -1;
39 static int curl_ssl_try;
40 static const char *curl_http_version = NULL;
41 static const char *ssl_cert;
42 +static const char *ssl_cert_type;
43 static const char *ssl_cipherlist;
44 static const char *ssl_version;
45 static struct {
@@ -58,6 +59,7 @@ static struct {
59 #endif
60 };
61 static const char *ssl_key;
62 +static const char *ssl_key_type;
63 static const char *ssl_capath;
64 static const char *curl_no_proxy;
65 #ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
@@ -264,8 +266,12 @@ static int http_options(const char *var, const char *value, void *cb)
266 return git_config_string(&ssl_version, var, value);
267 if (!strcmp("http.sslcert", var))
268 return git_config_pathname(&ssl_cert, var, value);
269 + if (!strcmp("http.sslcerttype", var))
270 + return git_config_string(&ssl_cert_type, var, value);
271 if (!strcmp("http.sslkey", var))
272 return git_config_pathname(&ssl_key, var, value);
273 + if (!strcmp("http.sslkeytype", var))
274 + return git_config_string(&ssl_key_type, var, value);
275 if (!strcmp("http.sslcapath", var))
276 return git_config_pathname(&ssl_capath, var, value);
277 if (!strcmp("http.sslcainfo", var))
@@ -904,10 +910,14 @@ static CURL *get_curl_handle(void)
910
911 if (ssl_cert)
912 curl_easy_setopt(result, CURLOPT_SSLCERT, ssl_cert);
913 + if (ssl_cert_type)
914 + curl_easy_setopt(result, CURLOPT_SSLCERTTYPE, ssl_cert_type);
915 if (has_cert_password())
916 curl_easy_setopt(result, CURLOPT_KEYPASSWD, cert_auth.password);
917 if (ssl_key)
918 curl_easy_setopt(result, CURLOPT_SSLKEY, ssl_key);
919 + if (ssl_key_type)
920 + curl_easy_setopt(result, CURLOPT_SSLKEYTYPE, ssl_key_type);
921 if (ssl_capath)
922 curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
923 #ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
@@ -1142,7 +1152,9 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
1152 curl_ssl_verify = 0;
1153
1154 set_from_env(&ssl_cert, "GIT_SSL_CERT");
1155 + set_from_env(&ssl_cert_type, "GIT_SSL_CERT_TYPE");
1156 set_from_env(&ssl_key, "GIT_SSL_KEY");
1157 + set_from_env(&ssl_key_type, "GIT_SSL_KEY_TYPE");
1158 set_from_env(&ssl_capath, "GIT_SSL_CAPATH");
1159 set_from_env(&ssl_cainfo, "GIT_SSL_CAINFO");
1160