Commit fa2bb6ba by Serge Hallyn

Switch from gnutls to openssl for sha1

The reason for this is because openssl can be statically linked against, gnutls cannot. Signed-off-by: 's avatarSerge Hallyn <shallyn@cisco.com>
parent f00010ff
...@@ -257,6 +257,8 @@ fi ...@@ -257,6 +257,8 @@ fi
AM_CONDITIONAL([ENABLE_API_DOCS], [test "x$HAVE_DOXYGEN" != "x"]) AM_CONDITIONAL([ENABLE_API_DOCS], [test "x$HAVE_DOXYGEN" != "x"])
AC_CONFIG_MACRO_DIRS([config])
# Apparmor # Apparmor
AC_ARG_ENABLE([apparmor], AC_ARG_ENABLE([apparmor],
[AC_HELP_STRING([--enable-apparmor], [enable apparmor support [default=auto]])], [AC_HELP_STRING([--enable-apparmor], [enable apparmor support [default=auto]])],
...@@ -267,20 +269,21 @@ if test "$enable_apparmor" = "auto" ; then ...@@ -267,20 +269,21 @@ if test "$enable_apparmor" = "auto" ; then
fi fi
AM_CONDITIONAL([ENABLE_APPARMOR], [test "x$enable_apparmor" = "xyes"]) AM_CONDITIONAL([ENABLE_APPARMOR], [test "x$enable_apparmor" = "xyes"])
# GnuTLS # OpenSSL
AC_ARG_ENABLE([gnutls], # libssl-dev
[AC_HELP_STRING([--enable-gnutls], [enable GnuTLS support [default=auto]])], AC_ARG_ENABLE([openssl],
[], [enable_gnutls=auto]) [AC_HELP_STRING([--enable-openssl], [enable OpenSSL support [default=auto]])],
[], [enable_openssl=auto])
if test "$enable_openssl" = "auto" ; then
AC_CHECK_LIB([ssl], [OPENSSL_init_ssl], [enable_openssl=yes], [enable_openssl=no])
if test "$enable_gnutls" = "auto" ; then
AC_CHECK_LIB([gnutls], [gnutls_hash_fast], [enable_gnutls=yes], [enable_gnutls=no])
fi fi
AM_CONDITIONAL([ENABLE_GNUTLS], [test "x$enable_gnutls" = "xyes"]) AM_CONDITIONAL([ENABLE_OPENSSL], [test "x$enable_openssl" = "xyes"])
AM_COND_IF([ENABLE_GNUTLS], AM_COND_IF([ENABLE_OPENSSL],
[AC_CHECK_HEADER([gnutls/gnutls.h],[],[AC_MSG_ERROR([You must install the GnuTLS development package in order to compile lxc])]) [AC_CHECK_HEADER([openssl/engine.h],[],[AC_MSG_ERROR([You must install the OpenSSL development package in order to compile lxc])])
AC_CHECK_LIB([gnutls], [gnutls_hash_fast],[true],[AC_MSG_ERROR([You must install the GnuTLS development package in order to compile lxc])]) AC_SUBST([OPENSSL_LIBS], '-lssl -lcrypto')])
AC_SUBST([GNUTLS_LIBS], [-lgnutls])])
# SELinux # SELinux
AC_ARG_ENABLE([selinux], AC_ARG_ENABLE([selinux],
...@@ -1014,7 +1017,7 @@ Environment: ...@@ -1014,7 +1017,7 @@ Environment:
- distribution: $with_distro - distribution: $with_distro
- init script type(s): $init_script - init script type(s): $init_script
- rpath: $enable_rpath - rpath: $enable_rpath
- GnuTLS: $enable_gnutls - OpenSSL: $enable_openssl
- Bash integration: $enable_bash - Bash integration: $enable_bash
Security features: Security features:
......
...@@ -210,8 +210,8 @@ if ENABLE_APPARMOR ...@@ -210,8 +210,8 @@ if ENABLE_APPARMOR
AM_CFLAGS += -DHAVE_APPARMOR AM_CFLAGS += -DHAVE_APPARMOR
endif endif
if ENABLE_GNUTLS if ENABLE_OPENSSL
AM_CFLAGS += -DHAVE_LIBGNUTLS AM_CFLAGS += -DHAVE_OPENSSL
endif endif
if ENABLE_SECCOMP if ENABLE_SECCOMP
...@@ -248,7 +248,7 @@ liblxc_la_LDFLAGS = -pthread \ ...@@ -248,7 +248,7 @@ liblxc_la_LDFLAGS = -pthread \
-version-info @LXC_ABI_MAJOR@ -version-info @LXC_ABI_MAJOR@
liblxc_la_LIBADD = $(CAP_LIBS) \ liblxc_la_LIBADD = $(CAP_LIBS) \
$(GNUTLS_LIBS) \ $(OPENSSL_LIBS) \
$(SELINUX_LIBS) \ $(SELINUX_LIBS) \
$(SECCOMP_LIBS) \ $(SECCOMP_LIBS) \
$(DLOG_LIBS) $(DLOG_LIBS)
...@@ -307,7 +307,7 @@ endif ...@@ -307,7 +307,7 @@ endif
LDADD = liblxc.la \ LDADD = liblxc.la \
@CAP_LIBS@ \ @CAP_LIBS@ \
@GNUTLS_LIBS@ \ @OPENSSL_LIBS@ \
@SECCOMP_LIBS@ \ @SECCOMP_LIBS@ \
@SELINUX_LIBS@ \ @SELINUX_LIBS@ \
@DLOG_LIBS@ @DLOG_LIBS@
......
...@@ -79,6 +79,10 @@ ...@@ -79,6 +79,10 @@
#include "utils.h" #include "utils.h"
#include "version.h" #include "version.h"
#if HAVE_OPENSSL
#include <openssl/evp.h>
#endif
/* major()/minor() */ /* major()/minor() */
#ifdef MAJOR_IN_MKDEV #ifdef MAJOR_IN_MKDEV
#include <sys/mkdev.h> #include <sys/mkdev.h>
...@@ -1654,9 +1658,9 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[]) ...@@ -1654,9 +1658,9 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[])
char *contents; char *contents;
FILE *f; FILE *f;
int ret = -1; int ret = -1;
#if HAVE_LIBGNUTLS #if HAVE_OPENSSL
int i; int i, md_len = 0;
unsigned char md_value[SHA_DIGEST_LENGTH]; unsigned char md_value[EVP_MAX_MD_SIZE];
char *tpath; char *tpath;
#endif #endif
...@@ -1697,14 +1701,14 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[]) ...@@ -1697,14 +1701,14 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[])
if (ret < 0) if (ret < 0)
goto out_free_contents; goto out_free_contents;
#if HAVE_LIBGNUTLS #if HAVE_OPENSSL
tpath = get_template_path(t); tpath = get_template_path(t);
if (!tpath) { if (!tpath) {
ERROR("Invalid template \"%s\" specified", t); ERROR("Invalid template \"%s\" specified", t);
goto out_free_contents; goto out_free_contents;
} }
ret = sha1sum_file(tpath, md_value); ret = sha1sum_file(tpath, md_value, &md_len);
if (ret < 0) { if (ret < 0) {
ERROR("Failed to get sha1sum of %s", tpath); ERROR("Failed to get sha1sum of %s", tpath);
free(tpath); free(tpath);
...@@ -1730,9 +1734,9 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[]) ...@@ -1730,9 +1734,9 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[])
fprintf(f, "\n"); fprintf(f, "\n");
} }
#if HAVE_LIBGNUTLS #if HAVE_OPENSSL
fprintf(f, "# Template script checksum (SHA-1): "); fprintf(f, "# Template script checksum (SHA-1): ");
for (i=0; i<SHA_DIGEST_LENGTH; i++) for (i=0; i<md_len; i++)
fprintf(f, "%02x", md_value[i]); fprintf(f, "%02x", md_value[i]);
fprintf(f, "\n"); fprintf(f, "\n");
#endif #endif
......
...@@ -330,17 +330,30 @@ again: ...@@ -330,17 +330,30 @@ again:
return status; return status;
} }
#if HAVE_LIBGNUTLS #ifdef HAVE_OPENSSL
#include <gnutls/gnutls.h> #include <openssl/evp.h>
#include <gnutls/crypto.h>
__attribute__((constructor)) static int do_sha1_hash(const char *buf, int buflen, unsigned char *md_value, int *md_len)
static void gnutls_lxc_init(void)
{ {
gnutls_global_init(); EVP_MD_CTX *mdctx;
const EVP_MD *md;
md = EVP_get_digestbyname("sha1");
if(!md) {
printf("Unknown message digest: sha1\n");
return -1;
}
mdctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, buf, buflen);
EVP_DigestFinal_ex(mdctx, md_value, md_len);
EVP_MD_CTX_free(mdctx);
return 0;
} }
int sha1sum_file(char *fnam, unsigned char *digest) int sha1sum_file(char *fnam, unsigned char *digest, int *md_len)
{ {
char *buf; char *buf;
int ret; int ret;
...@@ -394,7 +407,7 @@ int sha1sum_file(char *fnam, unsigned char *digest) ...@@ -394,7 +407,7 @@ int sha1sum_file(char *fnam, unsigned char *digest)
} }
buf[flen] = '\0'; buf[flen] = '\0';
ret = gnutls_hash_fast(GNUTLS_DIG_SHA1, buf, flen, (void *)digest); ret = do_sha1_hash(buf, flen, (void *)digest, md_len);
free(buf); free(buf);
return ret; return ret;
} }
......
...@@ -98,9 +98,8 @@ extern int lxc_pclose(struct lxc_popen_FILE *fp); ...@@ -98,9 +98,8 @@ extern int lxc_pclose(struct lxc_popen_FILE *fp);
extern int wait_for_pid(pid_t pid); extern int wait_for_pid(pid_t pid);
extern int lxc_wait_for_pid_status(pid_t pid); extern int lxc_wait_for_pid_status(pid_t pid);
#if HAVE_LIBGNUTLS #if HAVE_OPENSSL
#define SHA_DIGEST_LENGTH 20 extern int sha1sum_file(char *fnam, unsigned char *md_value, int *md_len);
extern int sha1sum_file(char *fnam, unsigned char *md_value);
#endif #endif
/* initialize rand with urandom */ /* initialize rand with urandom */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment