- test and log for bug #0003423
[oweals/gnunet.git] / src / gnsrecord / gnsrecord_crypto.c
index a83a1c0cd2f10642fe94ff5b750b5ec6d548d2cf..8cf8e532fb2b019f3f0dca16960da9bc83e5bf01 100644 (file)
@@ -106,9 +106,12 @@ GNUNET_GNSRECORD_block_create (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key,
     rdc[i] = rd[i];
     if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
     {
+      struct GNUNET_TIME_Relative t;
+
       /* encrypted blocks must never have relative expiration times, convert! */
       rdc[i].flags &= ~GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
-      rdc[i].expiration_time += now.abs_value_us;
+      t.rel_value_us = rdc[i].expiration_time;
+      rdc[i].expiration_time = GNUNET_TIME_absolute_add (now, t).abs_value_us;
     }
   }
   /* serialize */
@@ -240,6 +243,8 @@ GNUNET_GNSRECORD_block_decrypt (const struct GNUNET_GNSRECORD_Block *block,
       j = 0;
       for (i=0;i<rd_count;i++)
       {
+        if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PENDING))
+          continue; /* PENDING should never be used */
         if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
         {
           /* encrypted blocks must never have relative expiration times, skip! */
@@ -255,11 +260,12 @@ GNUNET_GNSRECORD_block_decrypt (const struct GNUNET_GNSRECORD_Block *block,
           {
             if (k == i)
               continue;
-            if ((rd[k].record_type == rd[i].record_type) &&
-                (rd[k].expiration_time >= now.abs_value_us) &&
-                (rd[i].expiration_time >= now.abs_value_us) &&
-                (0 == (rd[k].flags & GNUNET_GNSRECORD_RF_SHADOW_RECORD)))
-                include_record = GNUNET_NO; /* We have a non-expired, non-shadow record of the same type */
+            if (rd[i].expiration_time < now.abs_value_us)
+              include_record = GNUNET_NO; /* Shadow record is expired */
+            if ((rd[k].record_type == rd[i].record_type)
+                && (rd[k].expiration_time >= now.abs_value_us)
+                && (0 == (rd[k].flags & GNUNET_GNSRECORD_RF_SHADOW_RECORD)))
+              include_record = GNUNET_NO; /* We have a non-expired, non-shadow record of the same type */
           }
           if (GNUNET_YES == include_record)
           {