On Fri, Mar 19, 2021 at 10:02:26AM +0100, Claudio Jeker wrote:
> 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.
ok tb
>
> --
> :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;
>