Add dictionary file with UKERNA attributes
[mech_eap.orig] / util_token.c
index b985215..5231ae2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, JANET(UK)
+ * Copyright (c) 2011, JANET(UK)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+/*
+ * Utility routines for GSS tokens.
+ */
+
 #include "gssapiP_eap.h"
 
 /*
@@ -181,10 +185,9 @@ makeTokenHeader(
     *(*buf)++ = (unsigned char)mech->length;
     memcpy(*buf, mech->elements, mech->length);
     *buf += mech->length;
-    if (tok_type != TOK_TYPE_NONE) {
-        *(*buf)++ = (unsigned char)((tok_type>>8) & 0xff);
-        *(*buf)++ = (unsigned char)(tok_type & 0xff);
-    }
+    assert(tok_type != TOK_TYPE_NONE);
+    *(*buf)++ = (unsigned char)((tok_type>>8) & 0xff);
+    *(*buf)++ = (unsigned char)(tok_type & 0xff);
 }
 
 /*
@@ -202,7 +205,6 @@ verifyTokenHeader(OM_uint32 *minor,
                   size_t *body_size,
                   unsigned char **buf_in,
                   size_t toksize_in,
-                  enum gss_eap_token_type tok_type,
                   enum gss_eap_token_type *ret_tok_type)
 {
     unsigned char *buf = *buf_in;
@@ -210,7 +212,10 @@ verifyTokenHeader(OM_uint32 *minor,
     gss_OID_desc toid;
     ssize_t toksize = (ssize_t)toksize_in;
 
-    *minor = 0;
+    *minor = GSSEAP_BAD_TOK_HEADER;
+
+    if (ret_tok_type != NULL)
+        *ret_tok_type = TOK_TYPE_NONE;
 
     if ((toksize -= 1) < 0)
         return GSS_S_DEFECTIVE_TOKEN;
@@ -247,20 +252,21 @@ verifyTokenHeader(OM_uint32 *minor,
         if (toid.length == 0)
             return GSS_S_BAD_MECH;
     } else if (!oidEqual(&toid, mech)) {
+        *minor = GSSEAP_WRONG_MECH;
         return GSS_S_BAD_MECH;
     }
 
-    if (tok_type != TOK_TYPE_NONE) {
+    if (ret_tok_type != NULL) {
         if ((toksize -= 2) < 0)
             return GSS_S_DEFECTIVE_TOKEN;
 
         *ret_tok_type = load_uint16_be(buf);
-        if (tok_type != *ret_tok_type)
-            return GSS_S_DEFECTIVE_TOKEN;
         buf += 2;
     }
+
     *buf_in = buf;
     *body_size = toksize;
 
+    *minor = 0;
     return GSS_S_COMPLETE;
 }