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

Reply via email to