summaryrefslogtreecommitdiffstats
path: root/contrib/opie
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2014-08-18 02:13:45 +0000
committerache <ache@FreeBSD.org>2014-08-18 02:13:45 +0000
commit3b103d7c516693130e6a556292b5c7bc523ab967 (patch)
tree71d93a50ac0f9597ef1ac3bb6c1a8228361b68e6 /contrib/opie
parentcdfc4fb07a7bd7ba35eec600db8bef2521de33b2 (diff)
downloadFreeBSD-src-3b103d7c516693130e6a556292b5c7bc523ab967.zip
FreeBSD-src-3b103d7c516693130e6a556292b5c7bc523ab967.tar.gz
MFC: r269806,r269809,r269811,r269810
r269806: 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). r269809: When sha1 support was added, they forget to increase OPIE_HASHNAME_MAX r269811: Last '/' for program name, not first one. r269810: Link otp-sha1 to match real challenge prompt, not otp-sha. PR: 191511 Submitted by: mitsururike@gmail.com (partially, PR 269806)
Diffstat (limited to 'contrib/opie')
-rw-r--r--contrib/opie/libopie/challenge.c4
-rw-r--r--contrib/opie/opie.h8
-rw-r--r--contrib/opie/opiekey.c2
3 files changed, 8 insertions, 6 deletions
diff --git a/contrib/opie/libopie/challenge.c b/contrib/opie/libopie/challenge.c
index fc836aa..6c42018 100644
--- a/contrib/opie/libopie/challenge.c
+++ b/contrib/opie/libopie/challenge.c
@@ -68,7 +68,9 @@ int opiechallenge FUNCTION((mp, name, ss), struct opie *mp AND char *name AND ch
}
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));
}
diff --git a/contrib/opie/opie.h b/contrib/opie/opie.h
index be508c7..69ba005 100644
--- a/contrib/opie/opie.h
+++ b/contrib/opie/opie.h
@@ -69,11 +69,11 @@ struct opie {
/* Maximum length of a seed */
#define OPIE_SEED_MAX 16
-/* Max length of hash algorithm name (md4/md5) */
-#define OPIE_HASHNAME_MAX 3
+/* Max length of hash algorithm name (md4/md5/sha1) */
+#define OPIE_HASHNAME_MAX 4
-/* 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)
diff --git a/contrib/opie/opiekey.c b/contrib/opie/opiekey.c
index 6988349..17a0f46 100644
--- a/contrib/opie/opiekey.c
+++ b/contrib/opie/opiekey.c
@@ -144,7 +144,7 @@ int main FUNCTION((argc, argv), int argc AND char *argv[])
int type = RESPONSE_STANDARD;
int force = 0;
- if (slash = strchr(argv[0], '/'))
+ if (slash = strrchr(argv[0], '/'))
slash++;
else
slash = argv[0];
OpenPOWER on IntegriCloud