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?
-- 
: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");
 }
 
 /*

Reply via email to