diff options
Diffstat (limited to 'keyserver/gpgkeys_ldap.c')
-rw-r--r-- | keyserver/gpgkeys_ldap.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/keyserver/gpgkeys_ldap.c b/keyserver/gpgkeys_ldap.c index d6b280a62..94c6fb626 100644 --- a/keyserver/gpgkeys_ldap.c +++ b/keyserver/gpgkeys_ldap.c @@ -1549,6 +1549,7 @@ main(int argc,char *argv[]) int version,failed=0,use_ssl=0,use_tls=0,bound=0,check_cert=1; struct keylist *keylist=NULL,*keyptr=NULL; unsigned int timeout=DEFAULT_KEYSERVER_TIMEOUT; + char *ca_cert_file=NULL; console=stderr; @@ -1776,6 +1777,26 @@ main(int argc,char *argv[]) else if(start[7]=='\0') timeout=DEFAULT_KEYSERVER_TIMEOUT; } + else if(strncasecmp(start,"ca-cert-file",12)==0) + { + if(no) + { + free(ca_cert_file); + ca_cert_file=NULL; + } + else if(start[12]=='=') + { + free(ca_cert_file); + ca_cert_file=strdup(&start[13]); + if(!ca_cert_file) + { + fprintf(console,"gpgkeys: out of memory while creating " + "ca_cert_file\n"); + ret=KEYSERVER_NO_MEMORY; + goto fail; + } + } + } continue; } @@ -1787,6 +1808,20 @@ main(int argc,char *argv[]) return KEYSERVER_INTERNAL_ERROR; } +#if defined(HAVE_LDAP_SET_OPTION) && defined(LDAP_OPT_X_TLS_CACERTFILE) + if(ca_cert_file) + { + err=ldap_set_option(NULL,LDAP_OPT_X_TLS_CACERTFILE,ca_cert_file); + if(err!=LDAP_SUCCESS) + { + fprintf(console,"gpgkeys: unable to set ca-cert-file: %s\n", + ldap_err2string(err)); + ret=KEYSERVER_INTERNAL_ERROR; + goto fail; + } + } +#endif /* HAVE_LDAP_SET_OPTION && LDAP_OPT_X_TLS_CACERTFILE */ + /* SSL trumps TLS */ if(use_ssl) use_tls=0; |