summaryrefslogtreecommitdiff
path: root/src/settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings.c')
-rw-r--r--src/settings.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/settings.c b/src/settings.c
index 1a21ea024..971b50935 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -5,10 +5,15 @@
* a Linking Exception. For full terms see the included COPYING file.
*/
+#ifdef GIT_SSL
+# include <openssl/err.h>
+#endif
+
#include <git2.h>
#include "common.h"
#include "sysdir.h"
#include "cache.h"
+#include "global.h"
void git_libgit2_version(int *major, int *minor, int *rev)
{
@@ -131,6 +136,23 @@ int git_libgit2_opts(int key, ...)
case GIT_OPT_SET_TEMPLATE_PATH:
error = git_sysdir_set(GIT_SYSDIR_TEMPLATE, va_arg(ap, const char *));
break;
+
+ case GIT_OPT_SET_SSL_CERT_LOCATIONS:
+#ifdef GIT_SSL
+ {
+ const char *file = va_arg(ap, const char *);
+ const char *path = va_arg(ap, const char *);
+ if (!SSL_CTX_load_verify_locations(git__ssl_ctx, file, path)) {
+ giterr_set(GITERR_NET, "SSL error: %s",
+ ERR_error_string(ERR_get_error(), NULL));
+ error = -1;
+ }
+ }
+#else
+ giterr_set(GITERR_NET, "Cannot set certificate locations: OpenSSL is not enabled");
+ error = -1;
+#endif
+ break;
}
va_end(ap);