This patch brings sufficient intervening fixes forward to apply Todd's diff on an -rOPENBSD_5_8 checkout (offset of 17 lines).
The resulting skeyinit works on 5.8-stable. -s works, and -n works with -s. Richard ------- --- usr.bin/skeyinit/skeyinit.c.orig Sat Nov 28 21:32:40 2015 +++ usr.bin/skeyinit/skeyinit.c Sat Nov 28 22:10:35 2015 @@ -324,6 +324,7 @@ char *buf, size_t bufsiz) { char *p, newseed[SKEY_MAX_SEED_LEN + 2]; + const char *errstr; int i, n; (void)puts("You need the 6 words generated from the \"skey\" command."); @@ -335,11 +336,11 @@ SKEY_MAX_SEQ); (void)fgets(buf, bufsiz, stdin); clearerr(stdin); - n = atoi(buf); - if (n > 0 && n < SKEY_MAX_SEQ) + n = strtonum(buf, 1, SKEY_MAX_SEQ-1, &errstr); + if (!errstr) break; /* Valid range */ - (void)fprintf(stderr, "ERROR: Count must be between 1 and %d\n", - SKEY_MAX_SEQ); + fprintf(stderr, "ERROR: Count must be between 1 and %d\n", + SKEY_MAX_SEQ - 1); } for (i = 0; ; i++) {