=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/skey/skey.c,v retrieving revision 1.29 retrieving revision 1.30 diff -c -r1.29 -r1.30 *** src/usr.bin/skey/skey.c 2015/10/09 20:14:35 1.29 --- src/usr.bin/skey/skey.c 2015/10/09 20:24:37 1.30 *************** *** 1,4 **** ! /* $OpenBSD: skey.c,v 1.29 2015/10/09 20:14:35 tim Exp $ */ /* * OpenBSD S/Key (skey.c) * --- 1,4 ---- ! /* $OpenBSD: skey.c,v 1.30 2015/10/09 20:24:37 tim Exp $ */ /* * OpenBSD S/Key (skey.c) * *************** *** 31,55 **** #include #include ! void usage(char *); int main(int argc, char *argv[]) { int n, i, cnt = 1, pass = 0, hexmode = 0; char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; ! char buf[33], *seed, *slash; const char *errstr; /* If we were called as otp-METHOD, set algorithm based on that */ ! if ((slash = strrchr(argv[0], '/'))) ! slash++; ! else ! slash = argv[0]; ! if (strncmp(slash, "otp-", 4) == 0) { ! slash += 4; ! if (skey_set_algorithm(slash) == NULL) ! errx(1, "Unknown hash algorithm %s", slash); } for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { --- 31,53 ---- #include #include ! void usage(); + extern char *__progname; + int main(int argc, char *argv[]) { int n, i, cnt = 1, pass = 0, hexmode = 0; char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; ! char buf[33], *seed, *slash, *algo; const char *errstr; /* If we were called as otp-METHOD, set algorithm based on that */ ! if (strncmp(__progname, "otp-", 4) == 0) { ! algo = __progname + 4; ! if (skey_set_algorithm(algo) == NULL) ! errx(1, "Unknown hash algorithm %s", algo); } for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { *************** *** 58,71 **** switch (argv[i][1]) { case 'n': if (++i == argc) ! usage(argv[0]); cnt = strtonum(argv[i], 1, SKEY_MAX_SEQ -1, &errstr); if (errstr) ! usage(argv[0]); break; case 'p': if (++i == argc) ! usage(argv[0]); if (strlcpy(passwd, argv[i], sizeof(passwd)) >= sizeof(passwd)) errx(1, "Password too long"); --- 56,69 ---- switch (argv[i][1]) { case 'n': if (++i == argc) ! usage(); cnt = strtonum(argv[i], 1, SKEY_MAX_SEQ -1, &errstr); if (errstr) ! usage(); break; case 'p': if (++i == argc) ! usage(); if (strlcpy(passwd, argv[i], sizeof(passwd)) >= sizeof(passwd)) errx(1, "Password too long"); *************** *** 75,116 **** hexmode = 1; break; default: ! usage(argv[0]); } } else { /* Multi character switches are hash types */ if (skey_set_algorithm(&argv[i][1]) == NULL) { warnx("Unknown hash algorithm %s", &argv[i][1]); ! usage(argv[0]); } } i++; } if (argc > i + 2) ! usage(argv[0]); /* Could be in the form / */ if (argc <= i + 1) { /* look for / in it */ if (argc <= i) ! usage(argv[0]); slash = strchr(argv[i], '/'); if (slash == NULL) ! usage(argv[0]); *slash++ = '\0'; seed = slash; n = strtonum(argv[i], 0, SKEY_MAX_SEQ, &errstr); if (errstr) { warnx("%s: %s", argv[i], errstr); ! usage(argv[0]); } } else { n = strtonum(argv[i], 0, SKEY_MAX_SEQ, &errstr); if (errstr) { warnx("%s: %s", argv[i], errstr); ! usage(argv[0]); } seed = argv[++i]; } --- 73,114 ---- hexmode = 1; break; default: ! usage(); } } else { /* Multi character switches are hash types */ if (skey_set_algorithm(&argv[i][1]) == NULL) { warnx("Unknown hash algorithm %s", &argv[i][1]); ! usage(); } } i++; } if (argc > i + 2) ! usage(); /* Could be in the form / */ if (argc <= i + 1) { /* look for / in it */ if (argc <= i) ! usage(); slash = strchr(argv[i], '/'); if (slash == NULL) ! usage(); *slash++ = '\0'; seed = slash; n = strtonum(argv[i], 0, SKEY_MAX_SEQ, &errstr); if (errstr) { warnx("%s: %s", argv[i], errstr); ! usage(); } } else { n = strtonum(argv[i], 0, SKEY_MAX_SEQ, &errstr); if (errstr) { warnx("%s: %s", argv[i], errstr); ! usage(); } seed = argv[++i]; } *************** *** 147,156 **** } void ! usage(char *s) { fprintf(stderr, "usage: %s [-x] [-md5 | -rmd160 | -sha1] [-n count]\n\t" ! "[-p passphrase] [/] key\n", s); exit(1); } --- 145,154 ---- } void ! usage(void) { fprintf(stderr, "usage: %s [-x] [-md5 | -rmd160 | -sha1] [-n count]\n\t" ! "[-p passphrase] [/] key\n", __progname); exit(1); }