Use /etc/tlsdate/ca-roots/tlsdate-ca-roots.conf for certs by default; allow setting file or dir
diff --git a/Makefile.am b/Makefile.am
index 39b9b57..05173f7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -104,6 +104,7 @@
@rm -f $@-t $@
@{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
echo '#define TLSDATE_CONFIG "$(sysconfdir)/ca-roots/"'; \
+ echo '#define TLSDATE_CERTFILE "$(sysconfdir)/tlsdate/ca-roots/tlsdate-ca-roots.conf"'; \
echo '#define TLSDATE_HELPER "$(bindir)/tlsdate-helper"'; \
echo '#define TLSDATE "$(bindir)/tlsdate"'; \
echo '#define TLSDATED "$(bindir)/tlsdated"'; \
diff --git a/src/tlsdate-helper.c b/src/tlsdate-helper.c
index 98256ff..807375a 100644
--- a/src/tlsdate-helper.c
+++ b/src/tlsdate-helper.c
@@ -683,6 +683,7 @@
BIO *s_bio;
SSL_CTX *ctx;
SSL *ssl;
+ struct stat statbuf;
SSL_load_error_strings();
SSL_library_init();
@@ -708,8 +709,25 @@
if (ca_racket)
{
- if (1 != SSL_CTX_load_verify_locations(ctx, NULL, certdir))
- fprintf(stderr, "SSL_CTX_load_verify_locations failed\n");
+ if (-1 == stat(ca_cert_container, &statbuf))
+ {
+ die("Unable to stat CA certficate container\n");
+ } else
+ {
+ switch (statbuf.st_mode & S_IFMT)
+ {
+ case S_IFREG:
+ if (1 != SSL_CTX_load_verify_locations(ctx, ca_cert_container, NULL))
+ fprintf(stderr, "SSL_CTX_load_verify_locations failed\n");
+ break;
+ case S_IFDIR:
+ if (1 != SSL_CTX_load_verify_locations(ctx, NULL, ca_cert_container))
+ fprintf(stderr, "SSL_CTX_load_verify_locations failed\n");
+ break;
+ default:
+ die("Unable to load CA certficate container\n");
+ }
+ }
}
if (NULL == (s_bio = make_ssl_bio(ctx)))
@@ -822,7 +840,7 @@
hostname_to_verify = argv[1];
port = argv[2];
protocol = argv[3];
- certdir = argv[6];
+ ca_cert_container = argv[6];
ca_racket = (0 != strcmp ("unchecked", argv[4]));
verbose = (0 != strcmp ("quiet", argv[5]));
setclock = (0 == strcmp ("setclock", argv[7]));
diff --git a/src/tlsdate-helper.h b/src/tlsdate-helper.h
index 8c692d6..d897080 100644
--- a/src/tlsdate-helper.h
+++ b/src/tlsdate-helper.h
@@ -15,6 +15,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
@@ -94,7 +95,7 @@
static char *proxy;
-static const char *certdir;
+static const char *ca_cert_container;
void openssl_time_callback (const SSL* ssl, int where, int ret);
uint32_t get_certificate_keybits (EVP_PKEY *public_key);
uint32_t check_cn (SSL *ssl, const char *hostname);
diff --git a/src/tlsdate.c b/src/tlsdate.c
index 8b2fb1a..c8bc09c 100644
--- a/src/tlsdate.c
+++ b/src/tlsdate.c
@@ -89,7 +89,7 @@
" [-H|--host] [hostname|ip]\n"
" [-p|--port] [port number]\n"
" [-P|--protocol] [sslv23|sslv3|tlsv1]\n"
- " [-C|--certdir] [dirname]\n"
+ " [-C|--certcontainer] [dirname|filename]\n"
" [-v|--verbose]\n"
" [-V|--showtime]\n"
" [-t|--timewarp]\n"
@@ -108,7 +108,7 @@
const char *host;
const char *port;
const char *protocol;
- const char *certdir;
+ const char *ca_cert_container;
int timewarp;
int leap;
const char *proxy;
@@ -116,7 +116,7 @@
host = DEFAULT_HOST;
port = DEFAULT_PORT;
protocol = DEFAULT_PROTOCOL;
- certdir = DEFAULT_CERTDIR;
+ ca_cert_container = DEFAULT_CERTFILE;
verbose = 0;
ca_racket = 1;
showtime = 0;
@@ -139,7 +139,7 @@
{"port", 0, 0, 'p'},
{"protocol", 0, 0, 'P'},
{"dont-set-clock", 0, 0, 'n'},
- {"certdir", 0, 0, 'C'},
+ {"certcontainer", 0, 0, 'C'},
{"timewarp", 0, 0, 't'},
{"leap", 0, 0, 'l'},
{"proxy", 0, 0, 'x'},
@@ -160,7 +160,7 @@
case 'p': port = optarg; break;
case 'P': protocol = optarg; break;
case 'n': setclock = 0; break;
- case 'C': certdir = optarg; break;
+ case 'C': ca_cert_container = optarg; break;
case 't': timewarp = 1; break;
case 'l': leap = 1; break;
case 'x': proxy = optarg; break;
@@ -188,7 +188,7 @@
protocol,
(ca_racket ? "racket" : "unchecked"),
(verbose ? "verbose" : "quiet"),
- certdir,
+ ca_cert_container,
(setclock ? "setclock" : "dont-set-clock"),
(showtime ? "showtime" : "no-showtime"),
(timewarp ? "timewarp" : "no-fun"),
diff --git a/src/tlsdate.h b/src/tlsdate.h
index 4c918cd..f01d970 100644
--- a/src/tlsdate.h
+++ b/src/tlsdate.h
@@ -22,6 +22,7 @@
#define DEFAULT_PORT "443"
#define DEFAULT_PROTOCOL "tlsv1"
#define DEFAULT_CERTDIR "/etc/ssl/certs"
+#define DEFAULT_CERTFILE TLSDATE_CERTFILE
#define DEFAULT_DAEMON_CACHEDIR "/var/cache/tlsdated"
#define DEFAULT_DAEMON_TMPSUFFIX ".new"
#define DEFAULT_TLSDATE TLSDATE