/* parsechallenge.c: The __opieparsechallenge() library function. %%% copyright-cmetz-96 This software is Copyright 1996-1998 by Craig Metz, All Rights Reserved. The Inner Net License Version 2 applies to this software. You should have received a copy of the license with this software. If you didn't get a copy, you may request one from . History: Modified by cmetz for OPIE 2.32. Check for extended response sets. Change prefix to double underscore. Created by cmetz for OPIE 2.3 using generator.c as a guide. */ #include "opie_cfg.h" #if HAVE_STRING_H #include #endif /* HAVE_STRING_H */ #include "opie.h" struct algorithm { char *name; int num; }; static struct algorithm algorithms[] = { { "md5", 5 }, { "md4", 4 }, { "sha1", 3 }, { NULL, 0 }, }; int __opieparsechallenge FUNCTION((buffer, algorithm, sequence, seed, exts), char *buffer AND int *algorithm AND int *sequence AND char **seed AND int *exts) { char *c; if (!(c = strchr(buffer, ' '))) return 1; { struct algorithm *a; for (a = algorithms; a->name && strncmp(buffer, a->name, (int)(c - buffer)); a++); if (!a->name) return -1; *algorithm = a->num; } if ((*sequence = strtoul(++c, &c, 10)) > 9999) return -1; while(*c && isspace(*c)) c++; if (!*c) return -1; buffer = c; while(*c && !isspace(*c)) c++; { int i = (int)(c - buffer); if ((i > OPIE_SEED_MAX) || (i < OPIE_SEED_MIN)) return -1; } *seed = buffer; *(c++) = 0; while(*c && !isspace(*c)) c++; if (*c && !strncmp(c, "ext", 3)) *exts = 1; else *exts = 0; return 0; }