On Fri, Jan 21, 2022 at 03:22:51PM +0100, Claudio Jeker wrote:
> I would like to change -f into a real mode and with that support to
> show more then one file at a time.
>
> This is doing most of that. The output may need some extra fixing but the
> logic itself works.
>
> Yay or nay?
Yay. I like this. The manpage will need a little adjusting.
ok
> --
> :wq Claudio
>
> Index: main.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v
> retrieving revision 1.179
> diff -u -p -r1.179 main.c
> --- main.c 19 Jan 2022 17:15:08 -0000 1.179
> +++ main.c 21 Jan 2022 14:08:26 -0000
> @@ -730,7 +730,6 @@ main(int argc, char *argv[])
> char *bind_addr = NULL;
> const char *cachedir = NULL, *outputdir = NULL;
> const char *errs, *name;
> - const char *file = NULL;
> struct vrp_tree vrps = RB_INITIALIZER(&vrps);
> struct brk_tree brks = RB_INITIALIZER(&brks);
> struct rusage ru;
> @@ -758,7 +757,7 @@ main(int argc, char *argv[])
> "proc exec unveil", NULL) == -1)
> err(1, "pledge");
>
> - while ((c = getopt(argc, argv, "b:Bcd:e:f:jnorRs:t:T:vV")) != -1)
> + while ((c = getopt(argc, argv, "b:Bcd:e:fjnorRs:t:T:vV")) != -1)
> switch (c) {
> case 'b':
> bind_addr = optarg;
> @@ -776,7 +775,6 @@ main(int argc, char *argv[])
> rsync_prog = optarg;
> break;
> case 'f':
> - file = optarg;
> filemode = 1;
> noop = 1;
> break;
> @@ -827,34 +825,29 @@ main(int argc, char *argv[])
>
> argv += optind;
> argc -= optind;
> - if (argc == 1)
> - outputdir = argv[0];
> - else if (argc > 1)
> - goto usage;
>
> - signal(SIGPIPE, SIG_IGN);
> + if (!filemode) {
> + if (argc == 1)
> + outputdir = argv[0];
> + else if (argc > 1)
> + goto usage;
> +
> + if (outputdir == NULL) {
> + warnx("output directory required");
> + goto usage;
> + }
> + } else {
> + if (argc == 0)
> + goto usage;
> + outputdir = NULL;
> + }
>
> if (cachedir == NULL) {
> warnx("cache directory required");
> goto usage;
> }
> - if (file != NULL) {
> - size_t sz;
>
> - sz = strlen(file);
> - if (strcasecmp(file + sz - 4, ".tal") != 0 &&
> - strcasecmp(file + sz - 4, ".cer") != 0 &&
> - strcasecmp(file + sz - 4, ".crl") != 0 &&
> - strcasecmp(file + sz - 4, ".mft") != 0 &&
> - strcasecmp(file + sz - 4, ".roa") != 0 &&
> - strcasecmp(file + sz - 4, ".gbr") != 0)
> - errx(1, "unsupported or invalid file: %s", file);
> -
> - outputdir = NULL;
> - } else if (outputdir == NULL) {
> - warnx("output directory required");
> - goto usage;
> - }
> + signal(SIGPIPE, SIG_IGN);
>
> if ((cachefd = open(cachedir, O_RDONLY | O_DIRECTORY)) == -1)
> err(1, "cache directory %s", cachedir);
> @@ -1071,8 +1064,10 @@ main(int argc, char *argv[])
> for (i = 0; i < talsz; i++)
> queue_add_file(tals[i], RTYPE_TAL, i);
>
> - if (file != NULL)
> - queue_add_file(file, RTYPE_FILE, 0);
> + if (filemode) {
> + while (*argv != NULL)
> + queue_add_file(*argv++, RTYPE_FILE, 0);
> + }
>
> /* change working directory to the cache directory */
> if (fchdir(cachefd) == -1)
> @@ -1291,7 +1286,8 @@ usage:
> fprintf(stderr,
> "usage: rpki-client [-BcjnoRrVv] [-b sourceaddr] [-d cachedir]"
> " [-e rsync_prog]\n"
> - " [-f file] [-s timeout] [-T table] [-t tal]"
> - " [outputdir]\n");
> + " [-s timeout] [-T table] [-t tal]"
> + " [outputdir]\n"
> + " rpki-client -f [-Vv] [-d cachedir] [-t tal] file ...\n");
> return 1;
> }
> Index: parser.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/parser.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 parser.c
> --- parser.c 20 Jan 2022 09:24:08 -0000 1.46
> +++ parser.c 21 Jan 2022 14:15:45 -0000
> @@ -952,6 +952,8 @@ proc_parser_file(char *file, unsigned ch
> size_t sz;
> unsigned long verify_flags = X509_V_FLAG_CRL_CHECK;
>
> + printf("File: %s\n", file);
> +
> sz = strlen(file);
> if (strcasecmp(file + sz - 4, ".tal") == 0)
> type = RTYPE_TAL;
> @@ -966,7 +968,7 @@ proc_parser_file(char *file, unsigned ch
> else if (strcasecmp(file + sz - 4, ".gbr") == 0)
> type = RTYPE_GBR;
> else
> - errx(1, "%s: unsupported file type", file);
> + type = RTYPE_EOF;
>
> switch (type) {
> case RTYPE_CER:
> @@ -1017,6 +1019,7 @@ proc_parser_file(char *file, unsigned ch
> break;
> case RTYPE_CRL: /* XXX no printer yet */
> default:
> + printf("%s: unsupported file type\n", file);
> break;
> }
>
> @@ -1044,6 +1047,8 @@ proc_parser_file(char *file, unsigned ch
> roa_free(roa);
> gbr_free(gbr);
> tal_free(tal);
> +
> + printf("--\n");
> }
>
> /*
>