summaryrefslogtreecommitdiff
path: root/src/usr.bin/openssl/openssl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr.bin/openssl/openssl.c')
-rw-r--r--src/usr.bin/openssl/openssl.c157
1 files changed, 51 insertions, 106 deletions
diff --git a/src/usr.bin/openssl/openssl.c b/src/usr.bin/openssl/openssl.c
index 42b9b91b7a..e931b7a33e 100644
--- a/src/usr.bin/openssl/openssl.c
+++ b/src/usr.bin/openssl/openssl.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: openssl.c,v 1.30 2019/11/04 15:25:54 jsing Exp $ */ 1/* $OpenBSD: openssl.c,v 1.31 2022/11/11 17:07:39 joshua Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -137,8 +137,6 @@
137#define FUNC_TYPE_MD_ALG 5 137#define FUNC_TYPE_MD_ALG 5
138#define FUNC_TYPE_CIPHER_ALG 6 138#define FUNC_TYPE_CIPHER_ALG 6
139 139
140int single_execution = 0;
141
142typedef struct { 140typedef struct {
143 int type; 141 int type;
144 const char *name; 142 const char *name;
@@ -349,6 +347,7 @@ static void openssl_shutdown(void);
349 347
350static LHASH_OF(FUNCTION) *prog_init(void); 348static LHASH_OF(FUNCTION) *prog_init(void);
351static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]); 349static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]);
350static void print_help(void);
352static void list_pkey(BIO * out); 351static void list_pkey(BIO * out);
353static void list_cipher(BIO * out); 352static void list_cipher(BIO * out);
354static void list_md(BIO * out); 353static void list_md(BIO * out);
@@ -385,13 +384,8 @@ int
385main(int argc, char **argv) 384main(int argc, char **argv)
386{ 385{
387 ARGS arg; 386 ARGS arg;
388#define PROG_NAME_SIZE 39
389 char pname[PROG_NAME_SIZE + 1];
390 FUNCTION f, *fp;
391 const char *prompt;
392 char buf[1024];
393 char *to_free = NULL; 387 char *to_free = NULL;
394 int n, i, ret = 0; 388 int i, ret = 0;
395 char *p; 389 char *p;
396 LHASH_OF(FUNCTION) * prog = NULL; 390 LHASH_OF(FUNCTION) * prog = NULL;
397 long errline; 391 long errline;
@@ -453,74 +447,21 @@ main(int argc, char **argv)
453 447
454 prog = prog_init(); 448 prog = prog_init();
455 449
456 /* first check the program name */
457 program_name(argv[0], pname, sizeof pname);
458
459 f.name = pname;
460 fp = lh_FUNCTION_retrieve(prog, &f);
461 if (fp != NULL) {
462 argv[0] = pname;
463
464 single_execution = 1;
465 ret = fp->func(argc, argv);
466 goto end;
467 }
468 /* 450 /*
469 * ok, now check that there are not arguments, if there are, run with 451 * ok, now check that there are not arguments, if there are, run with
470 * them, shifting the ssleay off the front 452 * them, shifting the executable name off the front
471 */ 453 */
472 if (argc != 1) { 454 argc--;
473 argc--; 455 argv++;
474 argv++; 456
475 457 if (argc < 1) {
476 single_execution = 1; 458 print_help();
477 ret = do_cmd(prog, argc, argv);
478 if (ret < 0)
479 ret = 0;
480 goto end; 459 goto end;
481 } 460 }
482 /* ok, lets enter the old 'OpenSSL>' mode */
483 461
484 for (;;) { 462 ret = do_cmd(prog, argc, argv);
463 if (ret < 0)
485 ret = 0; 464 ret = 0;
486 p = buf;
487 n = sizeof buf;
488 i = 0;
489 for (;;) {
490 p[0] = '\0';
491 if (i++)
492 prompt = ">";
493 else
494 prompt = "OpenSSL> ";
495 fputs(prompt, stdout);
496 fflush(stdout);
497 if (!fgets(p, n, stdin))
498 goto end;
499 if (p[0] == '\0')
500 goto end;
501 i = strlen(p);
502 if (i <= 1)
503 break;
504 if (p[i - 2] != '\\')
505 break;
506 i -= 2;
507 p += i;
508 n -= i;
509 }
510 if (!chopup_args(&arg, buf, &argc, &argv))
511 break;
512
513 ret = do_cmd(prog, argc, argv);
514 if (ret < 0) {
515 ret = 0;
516 goto end;
517 }
518 if (ret != 0)
519 BIO_printf(bio_err, "error in %s\n", argv[0]);
520 (void) BIO_flush(bio_err);
521 }
522 BIO_printf(bio_err, "bad exit\n");
523 ret = 1;
524 465
525 end: 466 end:
526 free(to_free); 467 free(to_free);
@@ -554,7 +495,7 @@ static int
554do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[]) 495do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[])
555{ 496{
556 FUNCTION f, *fp; 497 FUNCTION f, *fp;
557 int i, ret = 1, tp, nl; 498 int ret = 1;
558 499
559 if ((argc <= 0) || (argv[0] == NULL)) { 500 if ((argc <= 0) || (argv[0] == NULL)) {
560 ret = 0; 501 ret = 0;
@@ -585,12 +526,6 @@ do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[])
585 BIO_printf(bio_stdout, "%s\n", argv[0] + 3); 526 BIO_printf(bio_stdout, "%s\n", argv[0] + 3);
586 BIO_free_all(bio_stdout); 527 BIO_free_all(bio_stdout);
587 goto end; 528 goto end;
588 } else if ((strcmp(argv[0], "quit") == 0) ||
589 (strcmp(argv[0], "q") == 0) ||
590 (strcmp(argv[0], "exit") == 0) ||
591 (strcmp(argv[0], "bye") == 0)) {
592 ret = -1;
593 goto end;
594 } else if ((strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) || 529 } else if ((strcmp(argv[0], LIST_STANDARD_COMMANDS) == 0) ||
595 (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) || 530 (strcmp(argv[0], LIST_MESSAGE_DIGEST_COMMANDS) == 0) ||
596 (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) || 531 (strcmp(argv[0], LIST_MESSAGE_DIGEST_ALGORITHMS) == 0) ||
@@ -633,44 +568,54 @@ do_cmd(LHASH_OF(FUNCTION) * prog, int argc, char *argv[])
633 BIO_printf(bio_err, 568 BIO_printf(bio_err,
634 "openssl:Error: '%s' is an invalid command.\n", 569 "openssl:Error: '%s' is an invalid command.\n",
635 argv[0]); 570 argv[0]);
636 BIO_printf(bio_err, "\nStandard commands"); 571 print_help();
637 i = 0; 572 ret = 0;
638 tp = 0; 573 }
639 for (fp = functions; fp->name != NULL; fp++) { 574 end:
640 nl = 0; 575 return (ret);
576}
577
578static void
579print_help(void)
580{
581 FUNCTION *fp;
582 int i = 0;
583 int tp = 0;
584 int nl;
585
586 BIO_printf(bio_err, "\nStandard commands");
587 for (fp = functions; fp->name != NULL; fp++) {
588 nl = 0;
641#ifdef OPENSSL_NO_CAMELLIA 589#ifdef OPENSSL_NO_CAMELLIA
642 if (((i++) % 5) == 0) 590 if (((i++) % 5) == 0)
643#else 591#else
644 if (((i++) % 4) == 0) 592 if (((i++) % 4) == 0)
645#endif 593#endif
646 { 594 {
595 BIO_printf(bio_err, "\n");
596 nl = 1;
597 }
598 if (fp->type != tp) {
599 tp = fp->type;
600 if (!nl)
647 BIO_printf(bio_err, "\n"); 601 BIO_printf(bio_err, "\n");
648 nl = 1; 602 if (tp == FUNC_TYPE_MD) {
649 } 603 i = 1;
650 if (fp->type != tp) { 604 BIO_printf(bio_err,
651 tp = fp->type; 605 "\nMessage Digest commands (see the `dgst' command for more details)\n");
652 if (!nl) 606 } else if (tp == FUNC_TYPE_CIPHER) {
653 BIO_printf(bio_err, "\n"); 607 i = 1;
654 if (tp == FUNC_TYPE_MD) { 608 BIO_printf(bio_err, "\nCipher commands (see the `enc' command for more details)\n");
655 i = 1;
656 BIO_printf(bio_err,
657 "\nMessage Digest commands (see the `dgst' command for more details)\n");
658 } else if (tp == FUNC_TYPE_CIPHER) {
659 i = 1;
660 BIO_printf(bio_err, "\nCipher commands (see the `enc' command for more details)\n");
661 }
662 } 609 }
610 }
663#ifdef OPENSSL_NO_CAMELLIA 611#ifdef OPENSSL_NO_CAMELLIA
664 BIO_printf(bio_err, "%-15s", fp->name); 612 BIO_printf(bio_err, "%-15s", fp->name);
665#else 613#else
666 BIO_printf(bio_err, "%-18s", fp->name); 614 BIO_printf(bio_err, "%-18s", fp->name);
667#endif 615#endif
668 }
669 BIO_printf(bio_err, "\n\n");
670 ret = 0;
671 } 616 }
672 end: 617
673 return (ret); 618 BIO_printf(bio_err, "\n\n");
674} 619}
675 620
676static int 621static int