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