summaryrefslogtreecommitdiff
path: root/usr.bin/skeyinit
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1996-11-03 18:57:47 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1996-11-03 18:57:47 +0000
commitf6a900184d91171c3b37f98b8a32303633977547 (patch)
tree3595dd14edc17cb174d6fbbfc5c8dcf7e292187f /usr.bin/skeyinit
parentdfdd57ceb8dce8a7e6ad46ae05bbe44341b03832 (diff)
Use new length/size macros.
Diffstat (limited to 'usr.bin/skeyinit')
-rw-r--r--usr.bin/skeyinit/skeyinit.19
-rw-r--r--usr.bin/skeyinit/skeyinit.c70
2 files changed, 44 insertions, 35 deletions
diff --git a/usr.bin/skeyinit/skeyinit.1 b/usr.bin/skeyinit/skeyinit.1
index 6a5eb6cf8d8..d0a86965762 100644
--- a/usr.bin/skeyinit/skeyinit.1
+++ b/usr.bin/skeyinit/skeyinit.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: skeyinit.1,v 1.8 1996/10/08 01:20:57 michaels Exp $
+.\" $OpenBSD: skeyinit.1,v 1.9 1996/11/03 18:57:45 millert Exp $
.\" $NetBSD: skeyinit.1,v 1.4 1995/07/07 22:24:09 jtc Exp $
.\" @(#)skeyinit.1 1.1 10/28/93
.\"
@@ -12,6 +12,7 @@
.Nm skeyinit
.Op Fl s
.Op Fl z
+.Op Fl n Ar count
.Op Ar user
.Sh DESCRIPTION
.Nm skeyinit
@@ -65,6 +66,12 @@ count and seed. You can then "cut-and-paste" or type the words into the
window.
.It Fl z
Allows the user to zero their S/Key entry.
+.It Fl n Ar count
+Start the
+.Nm skey
+sequence at
+.Ar count
+(default is 100).
.It Fl md4
Selects MD4 as the hash algorithm.
.It Fl md5
diff --git a/usr.bin/skeyinit/skeyinit.c b/usr.bin/skeyinit/skeyinit.c
index 9196d732c33..1ca8bae9310 100644
--- a/usr.bin/skeyinit/skeyinit.c
+++ b/usr.bin/skeyinit/skeyinit.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: skeyinit.c,v 1.16 1996/10/23 18:09:27 millert Exp $ */
+/* $OpenBSD: skeyinit.c,v 1.17 1996/11/03 18:57:46 millert Exp $ */
/* $NetBSD: skeyinit.c,v 1.6 1995/06/05 19:50:48 pk Exp $ */
/* S/KEY v1.1b (skeyinit.c)
@@ -27,14 +27,8 @@
#include <ctype.h>
#include <skey.h>
-#ifndef SKEY_MAXSEQ
-#define SKEY_MAXSEQ 10000
-#endif
#ifndef SKEY_NAMELEN
-#define SKEY_NAMELEN 4
-#endif
-#ifndef SKEY_MIN_PW_LEN
-#define SKEY_MIN_PW_LEN 10
+#define SKEY_NAMELEN 4
#endif
void usage __P((char *));
@@ -44,11 +38,12 @@ main(argc, argv)
int argc;
char *argv[];
{
- int rval, n, nn, i, l, defaultsetup=1, zerokey=0, hexmode=0;
+ int rval, nn, i, l, n=0, defaultsetup=1, zerokey=0, hexmode=0;
time_t now;
char hostname[MAXHOSTNAMELEN];
- char seed[18], tmp[80], key[8], defaultseed[17];
- char passwd[256], passwd2[256], tbuf[27], buf[60];
+ char passwd[SKEY_MAX_PW_LEN+2], passwd2[SKEY_MAX_PW_LEN+2];
+ char seed[SKEY_MAX_SEED_LEN+2], defaultseed[SKEY_MAX_SEED_LEN+1];
+ char tbuf[27], buf[80], key[SKEY_BINKEY_SIZE];
char lastc, me[UT_NAMESIZE+1], *salt, *p, *pw, *ht=NULL;
struct skey skey;
struct passwd *pp;
@@ -57,13 +52,12 @@ main(argc, argv)
if (geteuid() != 0)
errx(1, "must be setuid root.");
- (void)time(&now);
- (void)sprintf(tbuf, "%05ld", (long) (now % 100000));
-
if (gethostname(hostname, sizeof(hostname)) < 0)
err(1, "gethostname");
(void)strncpy(defaultseed, hostname, sizeof(defaultseed) - 1);
defaultseed[SKEY_NAMELEN] = '\0';
+ (void)time(&now);
+ (void)sprintf(tbuf, "%05ld", (long) (now % 100000));
(void)strncat(defaultseed, tbuf, sizeof(defaultseed) - 5);
if ((pp = getpwuid(getuid())) == NULL)
@@ -87,6 +81,13 @@ main(argc, argv)
case 'z':
zerokey = 1;
break;
+ case 'n':
+ if (argv[++i][0] == '\0')
+ usage(argv[0]);
+ if ((n = atoi(argv[i])) < 1 || n >= SKEY_MAX_SEQ)
+ errx(1, "count must be > 0 and < %d",
+ SKEY_MAX_SEQ);
+ break;
default:
usage(argv[0]);
}
@@ -152,7 +153,7 @@ main(argc, argv)
skey.seed);
/*
- * Lets be nice if they have a skey.seed that
+ * Let's be nice if they have an skey.seed that
* ends in 0-8 just add one
*/
l = strlen(skey.seed);
@@ -176,7 +177,8 @@ main(argc, argv)
(void)printf("[Adding %s]\n", pp->pw_name);
break;
}
- n = 99;
+ if (n == 0)
+ n = 99;
/* Set hash type if asked to */
if (ht) {
@@ -187,18 +189,18 @@ main(argc, argv)
if (!defaultsetup) {
(void)printf("You need the 6 english words generated from the \"skey\" command.\n");
- for (i = 0;; i++) {
+ for (i = 0; ; i++) {
if (i >= 2)
exit(1);
(void)printf("Enter sequence count from 1 to %d: ",
- SKEY_MAXSEQ);
- (void)fgets(tmp, sizeof(tmp), stdin);
- n = atoi(tmp);
- if (n > 0 && n < SKEY_MAXSEQ)
+ SKEY_MAX_SEQ);
+ (void)fgets(buf, sizeof(buf), stdin);
+ n = atoi(buf);
+ if (n > 0 && n < SKEY_MAX_SEQ)
break; /* Valid range */
(void)printf("Error: Count must be > 0 and < %d\n",
- SKEY_MAXSEQ);
+ SKEY_MAX_SEQ);
}
for (i = 0;; i++) {
@@ -221,11 +223,11 @@ main(argc, argv)
if (*p == '\0')
break; /* Valid seed */
}
- if (strlen(seed) > 16) {
- (void)puts("Notice: Seed truncated to 16 characters.");
- seed[16] = '\0';
- }
- if (seed[0] == '\0')
+ if (strlen(seed) > SKEY_MAX_SEED_LEN) {
+ (void)printf("Notice: Seed truncated to %d characters.\n",
+ SKEY_MAX_SEED_LEN);
+ seed[SKEY_MAX_SEED_LEN] = '\0';
+ } else if (seed[0] == '\0')
(void)strcpy(seed, defaultseed);
for (i = 0;; i++) {
@@ -234,16 +236,16 @@ main(argc, argv)
(void)printf("otp-%s %d %s\nS/Key access password: ",
skey_get_algorithm(), n, seed);
- (void)fgets(tmp, sizeof(tmp), stdin);
- rip(tmp);
- backspace(tmp);
+ (void)fgets(buf, sizeof(buf), stdin);
+ rip(buf);
+ backspace(buf);
- if (tmp[0] == '?') {
+ if (buf[0] == '?') {
(void)puts("Enter 6 English words from secure S/Key calculation.");
continue;
- } else if (tmp[0] == '\0')
+ } else if (buf[0] == '\0')
exit(1);
- if (etob(key, tmp) == 1 || atob8(key, tmp) == 0)
+ if (etob(key, buf) == 1 || atob8(key, buf) == 0)
break; /* Valid format */
(void)puts("Invalid format - try again with 6 English words.");
}
@@ -324,6 +326,6 @@ usage(s)
char *s;
{
(void)fprintf(stderr,
- "Usage: %s [-s] [-x] [-z] [-md4|-md5|-sha1] [user]\n", s);
+ "Usage: %s [-s] [-x] [-z] [-n count] [-md4|-md5|-sha1] [user]\n", s);
exit(1);
}