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