svn commit: r269806 - in head/contrib/opie: . libopie

Andrey A. Chernov ache at FreeBSD.org
Mon Aug 11 12:26:49 UTC 2014


Author: ache
Date: Mon Aug 11 12:26:48 2014
New Revision: 269806
URL: http://svnweb.freebsd.org/changeset/base/269806

Log:
  Fix too long (seed length >12 chars) challenge handling.
  1) " ext" length should be included into OPIE_CHALLENGE_MAX (as all places
  of opie code expects that).
  2) Overflow check in challenge.c is off by 1 even with corrected
  OPIE_CHALLENGE_MAX
  3) When fallback to randomchallenge() happens and rval is 0 (i.e.
  challenge is too long), its value should be set to error state too.
  
  To demonstrate the bug, run opiepasswd with valid seed:
  opiepasswd -s 1234567890123456
  and notice that it falls back to randomchallenge() (i.e. no
  1234567890123456 in the prompt).
  
  PR:             191511
  Submitted by:   mitsururike at gmail.com (partially)
  MFC after:      1 week

Modified:
  head/contrib/opie/libopie/challenge.c
  head/contrib/opie/opie.h

Modified: head/contrib/opie/libopie/challenge.c
==============================================================================
--- head/contrib/opie/libopie/challenge.c	Mon Aug 11 08:58:35 2014	(r269805)
+++ head/contrib/opie/libopie/challenge.c	Mon Aug 11 12:26:48 2014	(r269806)
@@ -68,7 +68,9 @@ int opiechallenge FUNCTION((mp, name, ss
   }
 
   if (rval ||
-    (snprintf(ss, OPIE_CHALLENGE_MAX, "otp-%s %d %s ext", algids[MDX], mp->opie_n - 1, mp->opie_seed) >= OPIE_CHALLENGE_MAX)) {
+    (snprintf(ss, OPIE_CHALLENGE_MAX+1, "otp-%s %d %s ext", algids[MDX], mp->opie_n - 1, mp->opie_seed) >= OPIE_CHALLENGE_MAX+1)) {
+    if (!rval)
+      rval = 1;
     opierandomchallenge(ss);
     memset(mp, 0, sizeof(*mp));
   }

Modified: head/contrib/opie/opie.h
==============================================================================
--- head/contrib/opie/opie.h	Mon Aug 11 08:58:35 2014	(r269805)
+++ head/contrib/opie/opie.h	Mon Aug 11 12:26:48 2014	(r269806)
@@ -72,8 +72,8 @@ struct opie {
 /* Max length of hash algorithm name (md4/md5) */
 #define OPIE_HASHNAME_MAX 3
 
-/* Maximum length of a challenge (otp-md? 9999 seed) */
-#define OPIE_CHALLENGE_MAX (4+OPIE_HASHNAME_MAX+1+4+1+OPIE_SEED_MAX)
+/* Maximum length of a challenge (otp-md? 9999 seed ext) */
+#define OPIE_CHALLENGE_MAX (4+OPIE_HASHNAME_MAX+1+4+1+OPIE_SEED_MAX+1+3)
 
 /* Maximum length of a response that we allow */
 #define OPIE_RESPONSE_MAX (9+1+19+1+9+OPIE_SEED_MAX+1+19+1+19+1+19)


More information about the svn-src-head mailing list