libopkg: make MD5 support optional
[oweals/opkg-lede.git] / libopkg / conffile.c
index d74ee60ee45534210071bc6882cd39e386ccd1f3..c45a6b9cc30bc26be63bbdfb849396cef0baf692 100644 (file)
    General Public License for more details.
 */
 
-#include <string.h>
+#include <stdio.h>
 #include <stdlib.h>
 
-#include "includes.h"
 #include "opkg_message.h"
-
 #include "conffile.h"
 #include "file_util.h"
 #include "sprintf_alloc.h"
+#include "opkg_conf.h"
 
 int conffile_init(conffile_t *conffile, const char *file_name, const char *md5sum)
 {
@@ -35,30 +34,37 @@ void conffile_deinit(conffile_t *conffile)
     nv_pair_deinit(conffile);
 }
 
-int conffile_has_been_modified(opkg_conf_t *conf, 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;
 
     if (conffile->value == NULL) {
-        opkg_message(conf, OPKG_NOTICE, "%s: conffile %s has no md5sum\n", __FUNCTION__, conffile->name);
+        opkg_msg(NOTICE, "Conffile %s has no md5sum.\n", conffile->name);
         return 1;
     }
 
-    root_filename = root_filename_alloc(conf, filename);
-
-    md5sum = file_md5sum_alloc(root_filename);
+    root_filename = root_filename_alloc(filename);
 
-    if (md5sum && (ret = strcmp(md5sum, conffile->value))) {
-      opkg_message(conf, OPKG_NOTICE, "%s: conffile %s: \t\nold md5=%s \t\nnew md5=%s\n", __FUNCTION__,
-              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;
 }