rpki-client is currently not able to to load relative tal files via -t
option. The problem is that the chdir to the cache directory happens
before the tal files are loaded. Move the fchdir down so relative path
work when queue_add_tal() is called. Also make sure that the rsync and
parser process chdir to the cachdir.
--
:wq Claudio
Index: main.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v
retrieving revision 1.120
diff -u -p -r1.120 main.c
--- main.c 18 Mar 2021 14:05:44 -0000 1.120
+++ main.c 19 Mar 2021 08:53:47 -0000
@@ -962,10 +962,6 @@ main(int argc, char *argv[])
if (talsz == 0)
err(1, "no TAL files found in %s", "/etc/rpki");
- /* change working directory to the cache directory */
- if (fchdir(cachefd) == -1)
- err(1, "fchdir");
-
/*
* Create the file reader as a jailed child process.
* It will be responsible for reading all of the files (ROAs,
@@ -980,6 +976,10 @@ main(int argc, char *argv[])
if (procpid == 0) {
close(fd[1]);
+ /* change working directory to the cache directory */
+ if (fchdir(cachefd) == -1)
+ err(1, "fchdir");
+
/* Only allow access to the cache directory. */
if (unveil(".", "r") == -1)
err(1, "%s: unveil", cachedir);
@@ -1009,6 +1009,10 @@ main(int argc, char *argv[])
close(proc);
close(fd[1]);
+ /* change working directory to the cache directory */
+ if (fchdir(cachefd) == -1)
+ err(1, "fchdir");
+
if (pledge("stdio rpath proc exec unveil", NULL) == -1)
err(1, "pledge");
@@ -1086,6 +1090,10 @@ main(int argc, char *argv[])
for (i = 0; i < talsz; i++)
queue_add_tal(tals[i]);
+
+ /* change working directory to the cache directory */
+ if (fchdir(cachefd) == -1)
+ err(1, "fchdir");
while (entity_queue > 0 && !killme) {
pfd[0].events = POLLIN;