X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_token.c;h=7f3d3c2737081af81d7fa290aad85ad6d41d1223;hb=6ce212c9c7eeabe92a4a96922b97eb89737d5a64;hp=c3319451fbc6d19a676026636bef74d66cadea4d;hpb=2e206b746716b821cebe55a5faf3a0de8fd4967b;p=mech_eap.git diff --git a/util_token.c b/util_token.c index c331945..7f3d3c2 100644 --- a/util_token.c +++ b/util_token.c @@ -196,8 +196,9 @@ makeTokenHeader( * *body_size are left unmodified on error. */ -int -verifyTokenHeader(gss_OID mech, +OM_uint32 +verifyTokenHeader(OM_uint32 *minor, + gss_OID mech, size_t *body_size, unsigned char **buf_in, size_t toksize_in, @@ -208,32 +209,34 @@ verifyTokenHeader(gss_OID mech, gss_OID_desc toid; ssize_t toksize = (ssize_t)toksize_in; + *minor = 0; + if ((toksize -= 1) < 0) - return ERANGE; + return GSS_S_DEFECTIVE_TOKEN; if (*buf++ != 0x60) - return EINVAL; + return GSS_S_DEFECTIVE_TOKEN; seqsize = der_read_length(&buf, &toksize); if (seqsize < 0) - return ERANGE; + return GSS_S_DEFECTIVE_TOKEN; if (seqsize != toksize) - return ERANGE; + return GSS_S_DEFECTIVE_TOKEN; if ((toksize -= 1) < 0) - return ERANGE; + return GSS_S_DEFECTIVE_TOKEN; if (*buf++ != 0x06) - return EINVAL; + return GSS_S_DEFECTIVE_TOKEN; if ((toksize -= 1) < 0) - return ERANGE; + return GSS_S_DEFECTIVE_TOKEN; toid.length = *buf++; if ((toksize -= toid.length) < 0) - return ERANGE; + return GSS_S_DEFECTIVE_TOKEN; toid.elements = buf; buf += toid.length; @@ -241,21 +244,21 @@ verifyTokenHeader(gss_OID mech, if (mech->elements == NULL) { *mech = toid; if (toid.length == 0) - return EINVAL; + return GSS_S_BAD_MECH; } else if (!oidEqual(&toid, mech)) { - return EINVAL; + return GSS_S_BAD_MECH; } if (tok_type != TOK_TYPE_NONE) { if ((toksize -= 2) < 0) - return EINVAL; + return GSS_S_DEFECTIVE_TOKEN; if ((*buf++ != ((tok_type >> 8) & 0xff)) || (*buf++ != (tok_type & 0xff))) - return EINVAL; + return GSS_S_DEFECTIVE_TOKEN; } *buf_in = buf; *body_size = toksize; - return 0; + return GSS_S_COMPLETE; }