Re: rpki-client: add rsync baseuri-based batching

Job Snijders <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
With the dedup refactor out of the way, perhaps rsync baseuri batching
could be done as follows?

I think this also fixes a fresh bug in ncas_plan_retries(), in the
second RB_FOREACH there is a break statement that should've been cleaned
up when the inner fqdn loop was refactored away. Additionally, only
consider rpkiNotify URIs when RRDP actually is in play.

Index: extern.h
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v
diff -u -p -r1.288 extern.h
--- extern.h	8 Jul 2026 17:49:04 -0000	1.288
+++ extern.h	8 Jul 2026 18:07:38 -0000
@@ -163,6 +163,7 @@ struct nca_hist {
 	char			*ski;
 	char			*location;
 	char			*mfturi;
+	char			*baseuri;
 	char			*notify;
 	time_t			 since;
 	time_t			 last_attempt;
Index: nca.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/nca.c,v
diff -u -p -r1.9 nca.c
--- nca.c	8 Jul 2026 17:49:04 -0000	1.9
+++ nca.c	8 Jul 2026 18:07:38 -0000
@@ -31,6 +31,8 @@
 
 #include "extern.h"
 
+extern int rrdpon;
+
 /*
  * Add a given CA cert into the non-functional CA tree.
  * Return 1 if a synchronization attempt is to be made, 0 otherwise.
@@ -171,6 +173,7 @@ nca_hist_free(struct nca_hist *nca_hist)
 	free(nca_hist->ski);
 	free(nca_hist->location);
 	free(nca_hist->mfturi);
+	free(nca_hist->baseuri);
 	free(nca_hist->notify);
 	free(nca_hist);
 }
@@ -222,8 +225,8 @@ nca_decide_retry(const struct nca_hist *
 
 /*
  * Determine which non-functioncal CAs are eligible for retry.
- * If multiple NCAs point to the same RRDP repo and at least one NCA is eligible
- * for retry, batch all of those together.
+ * If multiple NCAs point to the same rsync base URI or RRDP repo and at least
+ * one NCA is eligible for retry, batch all of those together.
  */
 static void
 ncas_plan_retries(void)
@@ -237,18 +240,24 @@ ncas_plan_retries(void)
 			continue;
 		}
 
-		if (nca_hist->notify != NULL)
+		strlist_insert(&batchlist, nca_hist->baseuri);
+
+		if (nca_hist->notify != NULL && rrdpon)
 			strlist_insert(&batchlist, nca_hist->notify);
 	}
 
 	RB_FOREACH(nca_hist, nca_hist_tree, &ncas_hist) {
-		if (nca_hist->notify == NULL)
+		if (strlist_find(&batchlist, nca_hist->baseuri,
+		    strlen(nca_hist->baseuri))) {
+			nca_hist->defer = 0;
 			continue;
+		}
 
-		if (strlist_find(&batchlist, nca_hist->notify,
-		    strlen(nca_hist->notify))) {
-			nca_hist->defer = 0;
-			break;
+		if (nca_hist->notify != NULL && rrdpon) {
+			if (strlist_find(&batchlist, nca_hist->notify,
+			    strlen(nca_hist->notify))) {
+				nca_hist->defer = 0;
+			}
 		}
 	}
 
@@ -347,6 +356,8 @@ nca_history_load(void)
 		if (strcmp(mfturi + mfturi_len - 4, ".mft") != 0)
 			goto err;
 		if (!valid_uri(mfturi, strlen(mfturi), RSYNC_PROTO))
+			goto err;
+		if (!rsync_base_uri(mfturi, &nca_hist->baseuri))
 			goto err;
 		if ((nca_hist->mfturi = strdup(mfturi)) == NULL)
 			err(1, NULL);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.