From 61c839ddd728112761bc21df1b84c3c27b913bd6 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 1 Mar 2016 09:17:12 +0000 Subject: [PATCH] opkg: Make opkg understand old md5 Opkg now uses sha256 by default and expects them. Making it optionally understand md5s also and detect md5 sum so we can migrate from configuration that used md5. Signed-off-by: Michal Hrusecky SVN-Revision: 48867 --- package/system/opkg/Makefile | 35 +++++++++++- .../opkg/patches/230-drop_md5_support.patch | 55 ++++++++++++------- 2 files changed, 69 insertions(+), 21 deletions(-) diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile index e46c6b3a34a..c09d1683fef 100644 --- a/package/system/opkg/Makefile +++ b/package/system/opkg/Makefile @@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/feeds.mk PKG_NAME:=opkg PKG_REV:=9c97d5ecd795709c8584e972bfdf3aee3a5b846d PKG_VERSION:=$(PKG_REV) -PKG_RELEASE:=10 +PKG_RELEASE:=11 PKG_SOURCE_PROTO:=git PKG_SOURCE_VERSION:=$(PKG_REV) @@ -43,6 +43,7 @@ define Package/opkg/Default TITLE:=opkg package manager DEPENDS:=+uclient-fetch URL:=http://wiki.openmoko.org/wiki/Opkg + MENU:=1 endef define Package/opkg/Default/description @@ -55,6 +56,16 @@ define Package/opkg/Default/description opkg knows how to install both .ipk and .deb packages. endef +define Package/opkg/config +config OPKG_SUPPORT_MD5 + bool + default n + depends on PACKAGE_opkg + prompt "Support reading old md5 hashes." + help + Old opkg used md5s, new uses sha. This options enables understanding both while prefering sha. +endef + define Package/opkg $(call Package/opkg/Default) VARIANT:=unsigned @@ -84,6 +95,16 @@ define Package/opkg-smime/description This package allows the Package index to be verified with S/MIME. endef +define Package/opkg-smime/config +config OPKG_SMIME_SUPPORT_MD5 + bool + default n + depends on PACKAGE_opkg-smime + prompt "Support reading old md5 hashes." + help + Old opkg used md5s, new uses sha. This options enables understanding both while prefering sha. +endef + Package/opkg-smime/conffiles = $(Package/opkg/conffiles) TARGET_CFLAGS += -ffunction-sections -fdata-sections @@ -97,11 +118,21 @@ CONFIGURE_ARGS += \ --with-opkglockfile=/var/lock/opkg.lock ifeq ($(BUILD_VARIANT),smime) - CONFIGURE_ARGS += --enable-openssl --disable-usign + CONFIGURE_ARGS += --enable-openssl --disable-usign + ifeq ($(CONFIG_OPKG_SMIME_SUPPORT_MD5),y) + CONFIGURE_ARGS += --enable-md5 + else + CONFIGURE_ARGS += --disable-md5 + endif else ifndef CONFIG_SIGNED_PACKAGES CONFIGURE_ARGS += --disable-usign endif + ifeq ($(CONFIG_OPKG_SUPPORT_MD5),y) + CONFIGURE_ARGS += --enable-md5 + else + CONFIGURE_ARGS += --disable-md5 + endif endif MAKE_FLAGS = \ diff --git a/package/system/opkg/patches/230-drop_md5_support.patch b/package/system/opkg/patches/230-drop_md5_support.patch index 63671e5abf6..3b281040b03 100644 --- a/package/system/opkg/patches/230-drop_md5_support.patch +++ b/package/system/opkg/patches/230-drop_md5_support.patch @@ -1,6 +1,6 @@ --- a/libopkg/conffile.c +++ b/libopkg/conffile.c -@@ -36,7 +36,7 @@ +@@ -36,7 +36,7 @@ void conffile_deinit(conffile_t *conffil int conffile_has_been_modified(conffile_t *conffile) { @@ -9,7 +9,7 @@ char *filename = conffile->name; char *root_filename; int ret = 1; -@@ -48,16 +48,19 @@ +@@ -48,16 +48,23 @@ int conffile_has_been_modified(conffile_ root_filename = root_filename_alloc(filename); @@ -19,7 +19,11 @@ - opkg_msg(INFO, "Conffile %s:\n\told md5=%s\n\tnew md5=%s\n", - conffile->name, md5sum, conffile->value); +#ifdef HAVE_MD5 -+ chksum = file_md5sum_alloc(root_filename); ++ 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 @@ -48,7 +52,7 @@ #include "libbb/libbb.h" #if defined HAVE_SHA256 -@@ -135,6 +137,7 @@ +@@ -135,6 +137,7 @@ file_mkdir_hier(const char *path, long m return make_directory(path, mode, FILEUTILS_RECUR); } @@ -56,7 +60,7 @@ char *file_md5sum_alloc(const char *file_name) { static const int md5sum_bin_len = 16; -@@ -180,6 +183,7 @@ +@@ -180,6 +183,7 @@ char *file_md5sum_alloc(const char *file return md5sum_hex; } @@ -66,7 +70,7 @@ char *file_sha256sum_alloc(const char *file_name) --- a/libopkg/opkg_install.c +++ b/libopkg/opkg_install.c -@@ -1082,7 +1082,7 @@ +@@ -1082,7 +1082,7 @@ resolve_conffiles(pkg_t *pkg) conffile_list_elt_t *iter; conffile_t *cf; char *cf_backup; @@ -75,26 +79,27 @@ if (conf->noaction) return 0; -@@ -1093,7 +1093,11 @@ +@@ -1093,7 +1093,7 @@ resolve_conffiles(pkg_t *pkg) /* Might need to initialize the md5sum for each conffile */ if (cf->value == NULL) { -+#ifdef HAVE_MD5 - cf->value = file_md5sum_alloc(root_filename); -+#else +- cf->value = file_md5sum_alloc(root_filename); + cf->value = file_sha256sum_alloc(root_filename); -+#endif } if (!file_exists(root_filename)) { -@@ -1105,8 +1109,12 @@ +@@ -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 -+ chksum = file_md5sum_alloc(cf_backup); ++ 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 @@ -102,7 +107,7 @@ if (conf->force_maintainer) { opkg_msg(NOTICE, "Conffile %s using maintainer's setting.\n", cf_backup); -@@ -1123,8 +1131,8 @@ +@@ -1123,8 +1131,8 @@ resolve_conffiles(pkg_t *pkg) } } unlink(cf_backup); @@ -113,7 +118,7 @@ } free(cf_backup); -@@ -1323,6 +1331,7 @@ +@@ -1323,6 +1331,7 @@ opkg_install_pkg(pkg_t *pkg, int from_up } #endif @@ -121,7 +126,7 @@ /* Check for md5 values */ if (pkg->md5sum) { -@@ -1346,6 +1355,7 @@ +@@ -1346,6 +1355,7 @@ opkg_install_pkg(pkg_t *pkg, int from_up if (file_md5) free(file_md5); } @@ -131,7 +136,7 @@ /* Check for sha256 value */ --- a/libopkg/Makefile.am +++ b/libopkg/Makefile.am -@@ -25,13 +25,16 @@ +@@ -25,13 +25,16 @@ opkg_list_sources = conffile.c conffile. 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 @@ -151,11 +156,23 @@ endif --- a/configure.ac +++ b/configure.ac -@@ -72,6 +72,7 @@ +@@ -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_sha256" = "xno") ++AM_CONDITIONAL(HAVE_MD5, test "x$want_md5" = "xyes") # check for openssl AC_ARG_ENABLE(openssl, -- 2.30.2