diff options
author | ache <ache@FreeBSD.org> | 2014-08-18 02:13:45 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2014-08-18 02:13:45 +0000 |
commit | 3b103d7c516693130e6a556292b5c7bc523ab967 (patch) | |
tree | 71d93a50ac0f9597ef1ac3bb6c1a8228361b68e6 /contrib/opie/libopie | |
parent | cdfc4fb07a7bd7ba35eec600db8bef2521de33b2 (diff) | |
download | FreeBSD-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/libopie')
-rw-r--r-- | contrib/opie/libopie/challenge.c | 4 |
1 files changed, 3 insertions, 1 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)); } |