From 733eb7729491810c346bbbecd31051ecc118fd82 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 10 Feb 2017 10:41:51 +0100 Subject: [PATCH] libopkg: make MD5 support optional Disable md5 support code by default and introduce a new configure flag "--enable-md5" which allows reenabling the code. This shrinks the opkg executable by a few KB. Signed-off-by: Jo-Philipp Wich --- configure.ac | 9 +++++++++ libopkg/Makefile.am | 5 ++++- libopkg/conffile.c | 23 +++++++++++++++-------- libopkg/file_util.c | 4 ++++ libopkg/opkg_install.c | 22 ++++++++++++++++------ libopkg/pkg_parse.c | 4 ++-- 6 files changed, 50 insertions(+), 17 deletions(-) diff --git a/configure.ac b/configure.ac index 967a4d5..f65d704 100644 --- a/configure.ac +++ b/configure.ac @@ -68,10 +68,19 @@ AC_ARG_ENABLE(sha256, (sha256.{c,h} are GPLv3 licensed) [[default=no]] ]), [want_sha256="$enableval"], [want_sha256="no"]) +AC_ARG_ENABLE(md5, + AC_HELP_STRING([--enable-md5], [Enable md5sum check + (md5.{c,h} are GPLv3 licensed) [[default=no]] ]), + [want_md5="$enableval"], [want_md5="yes"]) + if test "x$want_sha256" = "xyes"; then AC_DEFINE(HAVE_SHA256, 1, [Define if you want sha256 support]) fi +if test "x$want_md5" = "xyes"; then + AC_DEFINE(HAVE_MD5, 1, [Define if you want md5 support]) +fi AM_CONDITIONAL(HAVE_SHA256, test "x$want_sha256" = "xyes") +AM_CONDITIONAL(HAVE_MD5, test "x$want_md5" = "xyes") # check for openssl AC_ARG_ENABLE(openssl, diff --git a/libopkg/Makefile.am b/libopkg/Makefile.am index 851cc8e..2953ec4 100644 --- a/libopkg/Makefile.am +++ b/libopkg/Makefile.am @@ -25,13 +25,16 @@ opkg_list_sources = conffile.c conffile.h conffile_list.c conffile_list.h \ pkg_src.c pkg_src.h pkg_src_list.c pkg_src_list.h \ str_list.c str_list.h void_list.c void_list.h \ active_list.c active_list.h list.h -opkg_util_sources = file_util.c file_util.h opkg_message.h opkg_message.c md5.c md5.h \ +opkg_util_sources = file_util.c file_util.h opkg_message.h opkg_message.c \ parse_util.c parse_util.h \ sprintf_alloc.c sprintf_alloc.h \ xregex.c xregex.h xsystem.c xsystem.h if HAVE_PATHFINDER opkg_util_sources += opkg_pathfinder.c opkg_pathfinder.h endif +if HAVE_MD5 +opkg_util_sources += md5.c md5.h +endif if HAVE_SHA256 opkg_util_sources += sha256.c sha256.h endif diff --git a/libopkg/conffile.c b/libopkg/conffile.c index bf8b2a5..c45a6b9 100644 --- a/libopkg/conffile.c +++ b/libopkg/conffile.c @@ -36,7 +36,7 @@ void conffile_deinit(conffile_t *conffile) int conffile_has_been_modified(conffile_t *conffile) { - char *md5sum; + char *chksum; char *filename = conffile->name; char *root_filename; int ret = 1; @@ -48,16 +48,23 @@ int conffile_has_been_modified(conffile_t *conffile) root_filename = root_filename_alloc(filename); - md5sum = file_md5sum_alloc(root_filename); - - if (md5sum && (ret = strcmp(md5sum, conffile->value))) { - opkg_msg(INFO, "Conffile %s:\n\told md5=%s\n\tnew md5=%s\n", - conffile->name, md5sum, conffile->value); +#ifdef HAVE_MD5 + if(conffile->value && strlen(conffile->value) > 33) { + chksum = file_sha256sum_alloc(root_filename); + } else { + chksum = file_md5sum_alloc(root_filename); + } +#else + chksum = file_sha256sum_alloc(root_filename); +#endif + if (chksum && (ret = strcmp(chksum, conffile->value))) { + opkg_msg(INFO, "Conffile %s:\n\told chk=%s\n\tnew chk=%s\n", + conffile->name, chksum, conffile->value); } free(root_filename); - if (md5sum) - free(md5sum); + if (chksum) + free(chksum); return ret; } diff --git a/libopkg/file_util.c b/libopkg/file_util.c index 897546e..c54903c 100644 --- a/libopkg/file_util.c +++ b/libopkg/file_util.c @@ -26,7 +26,9 @@ #include "sprintf_alloc.h" #include "file_util.h" +#ifdef HAVE_MD5 #include "md5.h" +#endif #include "libbb/libbb.h" #if defined HAVE_SHA256 @@ -135,6 +137,7 @@ file_mkdir_hier(const char *path, long mode) return make_directory(path, mode, FILEUTILS_RECUR); } +#ifdef HAVE_MD5 char *file_md5sum_alloc(const char *file_name) { static const int md5sum_bin_len = 16; @@ -180,6 +183,7 @@ char *file_md5sum_alloc(const char *file_name) return md5sum_hex; } +#endif #ifdef HAVE_SHA256 char *file_sha256sum_alloc(const char *file_name) diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c index f833bc6..0db0acd 100644 --- a/libopkg/opkg_install.c +++ b/libopkg/opkg_install.c @@ -1082,7 +1082,7 @@ resolve_conffiles(pkg_t *pkg) conffile_list_elt_t *iter; conffile_t *cf; char *cf_backup; - char *md5sum; + char *chksum; if (conf->noaction) return 0; @@ -1093,7 +1093,7 @@ resolve_conffiles(pkg_t *pkg) /* Might need to initialize the md5sum for each conffile */ if (cf->value == NULL) { - cf->value = file_md5sum_alloc(root_filename); + cf->value = file_sha256sum_alloc(root_filename); } if (!file_exists(root_filename)) { @@ -1105,8 +1105,16 @@ resolve_conffiles(pkg_t *pkg) if (file_exists(cf_backup)) { /* Let's compute md5 to test if files are changed */ - md5sum = file_md5sum_alloc(cf_backup); - if (md5sum && cf->value && strcmp(cf->value,md5sum) != 0 ) { +#ifdef HAVE_MD5 + if(cf->value && strlen(cf->value) > 33) { + chksum = file_sha256sum_alloc(cf_backup); + } else { + chksum = file_md5sum_alloc(cf_backup); + } +#else + chksum = file_sha256sum_alloc(cf_backup); +#endif + if (chksum && cf->value && strcmp(cf->value,chksum) != 0 ) { if (conf->force_maintainer) { opkg_msg(NOTICE, "Conffile %s using maintainer's setting.\n", cf_backup); @@ -1123,8 +1131,8 @@ resolve_conffiles(pkg_t *pkg) } } unlink(cf_backup); - if (md5sum) - free(md5sum); + if (chksum) + free(chksum); } free(cf_backup); @@ -1323,6 +1331,7 @@ opkg_install_pkg(pkg_t *pkg, int from_upgrade) } #endif +#ifdef HAVE_MD5 /* Check for md5 values */ if (pkg->md5sum) { @@ -1346,6 +1355,7 @@ opkg_install_pkg(pkg_t *pkg, int from_upgrade) if (file_md5) free(file_md5); } +#endif #ifdef HAVE_SHA256 /* Check for sha256 value */ diff --git a/libopkg/pkg_parse.c b/libopkg/pkg_parse.c index 5337f34..edf6312 100644 --- a/libopkg/pkg_parse.c +++ b/libopkg/pkg_parse.c @@ -49,9 +49,9 @@ parse_status(pkg_t *pkg, const char *sstr) static void parse_conffiles(pkg_t *pkg, const char *cstr) { - char file_name[1024], md5sum[35]; + char file_name[1024], md5sum[85]; - if (sscanf(cstr, "%1023s %34s", file_name, md5sum) != 2) { + if (sscanf(cstr, "%1023s %84s", file_name, md5sum) != 2) { opkg_msg(ERROR, "Failed to parse Conffiles line for %s\n", pkg->name); return; -- 2.25.1