poldek: poldek/configure.in, poldek/pm/rpm/rpm_pkg_ld.c, poldek/pm...

mis mis at pld-linux.org
Wed Jun 20 01:31:51 CEST 2007


Author: mis                          Date: Tue Jun 19 23:31:51 2007 GMT
Module: poldek                        Tag: HEAD
---- Log message:
- detect and omit pubkeys (#5809)

---- Files affected:
poldek/poldek:
   configure.in (1.136 -> 1.137) 
poldek/poldek/pm/rpm:
   rpm_pkg_ld.c (1.12 -> 1.13) , rpmhdr.c (1.8 -> 1.9) 

---- Diffs:

================================================================
Index: poldek/poldek/configure.in
diff -u poldek/poldek/configure.in:1.136 poldek/poldek/configure.in:1.137
--- poldek/poldek/configure.in:1.136	Wed Jun 20 00:37:02 2007
+++ poldek/poldek/configure.in	Wed Jun 20 01:31:46 2007
@@ -185,7 +185,9 @@
       #endif
      ], is_rpm4=yes, is_rpm4=no)
 
-if test "${is_rpm4}." = "yes." ; then
+if test "${is_rpm4}." = "no." ; then
+	AC_MSG_RESULT(no)
+else
 	AC_MSG_RESULT(yes)
 	AC_DEFINE([HAVE_RPM_4_0],1,[defined if rpm 4.x is installed])
 	AC_EGREP_CPP(RPMSENSE_SCRIPT_PRE,
@@ -207,8 +209,14 @@
 	else 
 	        AC_MSG_RESULT(no)
 	fi
-else
-	AC_MSG_RESULT(no)
+
+	AC_EGREP_CPP(RPMTAG_PUBKEYS,
+		[ #include <rpm/rpmlib.h>
+		], have_tag_pubkeys=yes, have_tag_pubkeys=no)
+
+	if test "${have_tag_pubkeys}." = "yes." ; then
+		AC_DEFINE([HAVE_RPMTAG_PUBKEYS],1,["RPMTAG_PUBKEYS exists"])
+	fi
 fi
 
 dnl Checks for libraries.
@@ -293,6 +301,10 @@
                [ AC_CHECK_FUNCS(rpmGetRpmlibProvides,,
           	 [AC_MSG_WARN(["poldek will not work fine with rpmlib\(...\) capabilities"])],
           	 [$CONF_IN_LDFLAGS])], [$CONF_IN_LDFLAGS])
+
+dnl FIXME: it is inline function, how to detect it without AC_EGREP_CPP?
+AC_CHECK_FUNCS(headerFreeData)
+
 dnl rpm 4.4.6
 AC_CHECK_FUNCS(rpmdsUname)
 AC_CHECK_FUNCS(rpmdsSysinfo)

================================================================
Index: poldek/poldek/pm/rpm/rpm_pkg_ld.c
diff -u poldek/poldek/pm/rpm/rpm_pkg_ld.c:1.12 poldek/poldek/pm/rpm/rpm_pkg_ld.c:1.13
--- poldek/poldek/pm/rpm/rpm_pkg_ld.c:1.12	Tue Jun 19 16:01:43 2007
+++ poldek/poldek/pm/rpm/rpm_pkg_ld.c	Wed Jun 20 01:31:46 2007
@@ -441,6 +441,21 @@
     return nerr ? -1 : 1;
 }
 
+static int is_pubkey(Header h) 
+{
+#if HAVE_RPMTAG_PUBKEYS
+    void *pubkeys;
+    int type;
+
+    if (headerGetEntry(h, RPMTAG_PUBKEYS, &type, &pubkeys, NULL)) {
+        pm_rpmhdr_free_entry(pubkeys, type);
+        return 1;
+    }
+#endif
+    return 0;
+}
+
+
 struct pkg *pm_rpm_ldhdr(tn_alloc *na, Header h, const char *fname, unsigned fsize,
                          unsigned ldflags)
 {
@@ -463,14 +478,14 @@
         
     } else {
         if (!headerGetEntry(h, RPMTAG_ARCH, &type, (void *)&arch, NULL)) {
-            logn(LOGERR, _("%s: read architecture tag failed"), fname);
+            if (!is_pubkey(h))
+                logn(LOGERR, _("%s: read architecture tag failed"), fname);
             return NULL;
         }
 
         if (type != RPM_STRING_TYPE)
             arch = NULL;
     }
-    
     
     if (!headerGetEntry(h, RPMTAG_OS, &type, (void *)&os, NULL)) {
         if (poldek_VERBOSE > 1)

================================================================
Index: poldek/poldek/pm/rpm/rpmhdr.c
diff -u poldek/poldek/pm/rpm/rpmhdr.c:1.8 poldek/poldek/pm/rpm/rpmhdr.c:1.9
--- poldek/poldek/pm/rpm/rpmhdr.c:1.8	Thu Oct 27 00:49:40 2005
+++ poldek/poldek/pm/rpm/rpmhdr.c	Wed Jun 20 01:31:46 2007
@@ -146,8 +146,13 @@
 
 void pm_rpmhdr_free_entry(void *e, int type) 
 {
+#if HAVE_HEADERFREEDATA
+    if (e)
+        headerFreeData(e, type);
+#else
     if (e && (type == RPM_STRING_ARRAY_TYPE || type == RPM_I18NSTRING_TYPE))
         free(e);
+#endif
 }
 
 
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/poldek/poldek/configure.in?r1=1.136&r2=1.137&f=u
    http://cvs.pld-linux.org/poldek/poldek/pm/rpm/rpm_pkg_ld.c?r1=1.12&r2=1.13&f=u
    http://cvs.pld-linux.org/poldek/poldek/pm/rpm/rpmhdr.c?r1=1.8&r2=1.9&f=u



More information about the pld-cvs-commit mailing list