Unverified Commit 505af6af by Serge Hallyn Committed by Christian Brauner

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 5edfbc68
...@@ -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],
...@@ -992,7 +995,7 @@ Environment: ...@@ -992,7 +995,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:
......
...@@ -207,8 +207,8 @@ if ENABLE_APPARMOR ...@@ -207,8 +207,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
...@@ -240,7 +240,7 @@ liblxc_la_LDFLAGS = -pthread \ ...@@ -240,7 +240,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)
...@@ -298,7 +298,7 @@ endif ...@@ -298,7 +298,7 @@ endif
LDADD = liblxc.la \ LDADD = liblxc.la \
@CAP_LIBS@ \ @CAP_LIBS@ \
@GNUTLS_LIBS@ \ @OPENSSL_LIBS@ \
@SECCOMP_LIBS@ \ @SECCOMP_LIBS@ \
@SELINUX_LIBS@ @SELINUX_LIBS@
......
...@@ -76,6 +76,10 @@ ...@@ -76,6 +76,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>
...@@ -1632,9 +1636,9 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[]) ...@@ -1632,9 +1636,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
...@@ -1675,14 +1679,14 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[]) ...@@ -1675,14 +1679,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);
...@@ -1708,9 +1712,9 @@ static bool prepend_lxc_header(char *path, const char *t, char *const argv[]) ...@@ -1708,9 +1712,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