[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: S/Key bug?



Here is the patch.

--- skeyinit.c.orig	Wed May  7 22:39:29 2003
+++ skeyinit.c	Tue Apr 13 09:49:47 2004
@@ -40,7 +40,7 @@
 
 void	usage(void);
 void	secure_mode(int *, char *, char *, size_t, char *, size_t);
-void	normal_mode(char *, int, char *, char *);
+void	normal_mode(char *, int, char *, char *, char *);
 void	timedout(int);
 void	convert_db(void);
 void	enable_db(int);
@@ -52,7 +52,7 @@
 	char	hostname[MAXHOSTNAMELEN];
 	char	seed[SKEY_MAX_SEED_LEN + 1];
 	char    buf[256], key[SKEY_BINKEY_SIZE], filename[PATH_MAX], *ht;
-	char    lastc, me[UT_NAMESIZE + 1], *p, *auth_type;
+	char    lastc, me[UT_NAMESIZE + 1],key2[SKEY_BINKEY_SIZE], *p, *auth_type;
 	u_int32_t noise;
 	struct skey skey;
 	struct passwd *pp;
@@ -300,7 +300,7 @@
 	if (!defaultsetup)
 		secure_mode(&n, key, seed, sizeof seed, buf, sizeof(buf));
 	else
-		normal_mode(pp->pw_name, n, key, seed);
+		normal_mode(pp->pw_name, n, key, seed, key2);
 	alarm(0);
 
 	/* XXX - why use malloc here? */
@@ -313,10 +313,14 @@
 	    pp->pw_name, skey_get_algorithm(), n, seed, skey.val);
 	(void)fclose(skey.keyfile);
 
-	(void)printf("\nID %s skey is otp-%s %d %s\n", pp->pw_name,
-	    skey_get_algorithm(), n, seed);
+	(void)printf("\nNext ID %s skey is otp-%s %d %s\n", pp->pw_name,
+	    skey_get_algorithm(), n - 1, seed);
+	
+        for(i=0;i<n-1;i++)
+		f(key2);	
+
 	(void)printf("Next login password: %s\n\n",
-	    hexmode ? put8(buf, key) : btoe(buf, key));
+	    hexmode ? put8(buf, key2) : btoe(buf, key2));
 	exit(0);
 }
 
@@ -402,10 +406,10 @@
 }
 
 void
-normal_mode(char *username, int n, char *key, char *seed)
+normal_mode(char *username, int n, char *key, char *seed, char *key2)
 {
 	int i, nn;
-	char passwd[SKEY_MAX_PW_LEN+2], key2[SKEY_BINKEY_SIZE];
+	char passwd[SKEY_MAX_PW_LEN+2];
 
 	/* Get user's secret passphrase */
 	for (i = 0; ; i++) {