remove debugging statement
[moonshot.git] / mech_eap / util_ordering.c
index b182a27..71ebfb5 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
  */
 
 /*
- * $Id: util_ordering.c 23457 2009-12-08 00:04:48Z tlyu $
- */
-
-/*
- * functions to check sequence numbers for replay and sequencing
+ * Functions to check sequence numbers for replay and sequencing
  */
 
 #include "gssapiP_eap.h"
@@ -97,7 +93,7 @@ queue_insert(queue *q, int after, uint64_t seqnum)
 
     /* move all the elements (after,last] up one slot */
 
-    for (i=q->start+q->length-1; i>after; i--)
+    for (i = q->start + q->length - 1; i > after; i--)
         QELEM(q,i+1) = QELEM(q,i);
 
     /* fill in slot after+1 */
@@ -117,20 +113,21 @@ queue_insert(queue *q, int after, uint64_t seqnum)
     }
 }
 
-int
-sequenceInit(void **vqueue, uint64_t seqnum,
-             int do_replay, int do_sequence, int wide_nums)
+OM_uint32
+sequenceInit(OM_uint32 *minor,
+             void **vqueue,
+             uint64_t seqnum,
+             int do_replay,
+             int do_sequence,
+             int wide_nums)
 {
     queue *q;
 
-    if ((q = (queue *) malloc(sizeof(queue))) == NULL)
-        return(ENOMEM);
-
-    /* This stops valgrind from complaining about writing uninitialized
-       data if the caller exports the context and writes it to a file.
-       We don't actually use those bytes at all, but valgrind still
-       complains.  */
-    memset(q, 0xfe, sizeof(*q));
+    q = (queue *)GSSEAP_CALLOC(1, sizeof(queue));
+    if (q == NULL) {
+        *minor = ENOMEM;
+        return GSS_S_FAILURE;
+    }
 
     q->do_replay = do_replay;
     q->do_sequence = do_sequence;
@@ -141,21 +138,26 @@ sequenceInit(void **vqueue, uint64_t seqnum,
     q->firstnum = seqnum;
     q->elem[q->start] = ((uint64_t)0 - 1) & q->mask;
 
-    *vqueue = (void *) q;
-    return(0);
+    *vqueue = (void *)q;
+
+    return GSS_S_COMPLETE;
 }
 
-int
-sequenceCheck(void **vqueue, uint64_t seqnum)
+OM_uint32
+sequenceCheck(OM_uint32 *minor,
+              void **vqueue,
+              uint64_t seqnum)
 {
     queue *q;
     int i;
     uint64_t expected;
 
+    *minor = 0;
+
     q = (queue *) (*vqueue);
 
     if (!q->do_replay && !q->do_sequence)
-        return(GSS_S_COMPLETE);
+        return GSS_S_COMPLETE;
 
     /* All checks are done relative to the initial sequence number, to
        avoid (or at least put off) the pain of wrapping.  */
@@ -171,7 +173,7 @@ sequenceCheck(void **vqueue, uint64_t seqnum)
     expected = (QELEM(q,q->start+q->length-1)+1) & q->mask;
     if (seqnum == expected) {
         queue_insert(q, q->start+q->length-1, seqnum);
-        return(GSS_S_COMPLETE);
+        return GSS_S_COMPLETE;
     }
 
     /* rule 2: > expected sequence number */
@@ -179,9 +181,9 @@ sequenceCheck(void **vqueue, uint64_t seqnum)
     if ((seqnum > expected)) {
         queue_insert(q, q->start+q->length-1, seqnum);
         if (q->do_replay && !q->do_sequence)
-            return(GSS_S_COMPLETE);
+            return GSS_S_COMPLETE;
         else
-            return(GSS_S_GAP_TOKEN);
+            return GSS_S_GAP_TOKEN;
     }
 
     /* rule 3: seqnum < seqnum(first) */
@@ -202,61 +204,68 @@ sequenceCheck(void **vqueue, uint64_t seqnum)
         (seqnum & (1 + (q->mask >> 1)))
     ) {
         if (q->do_replay && !q->do_sequence)
-            return(GSS_S_OLD_TOKEN);
+            return GSS_S_OLD_TOKEN;
         else
-            return(GSS_S_UNSEQ_TOKEN);
+            return GSS_S_UNSEQ_TOKEN;
     }
 
     /* rule 4+5: seqnum in [seqnum(first),seqnum(last)]  */
 
     else {
-        if (seqnum == QELEM(q,q->start+q->length-1))
-            return(GSS_S_DUPLICATE_TOKEN);
+        if (seqnum == QELEM(q,q->start+q->length - 1))
+            return GSS_S_DUPLICATE_TOKEN;
 
-        for (i=q->start; i<q->start+q->length-1; i++) {
+        for (i = q->start; i < q->start + q->length - 1; i++) {
             if (seqnum == QELEM(q,i))
-                return(GSS_S_DUPLICATE_TOKEN);
+                return GSS_S_DUPLICATE_TOKEN;
             if ((seqnum > QELEM(q,i)) && (seqnum < QELEM(q,i+1))) {
                 queue_insert(q, i, seqnum);
                 if (q->do_replay && !q->do_sequence)
-                    return(GSS_S_COMPLETE);
+                    return GSS_S_COMPLETE;
                 else
-                    return(GSS_S_UNSEQ_TOKEN);
+                    return GSS_S_UNSEQ_TOKEN;
             }
         }
     }
 
     /* this should never happen */
-    return(GSS_S_FAILURE);
+    return GSS_S_FAILURE;
 }
 
-void
-sequenceFree(void **vqueue)
+OM_uint32
+sequenceFree(OM_uint32 *minor, void **vqueue)
 {
     queue *q;
 
     q = (queue *) (*vqueue);
 
-    free(q);
+    GSSEAP_FREE(q);
 
     *vqueue = NULL;
+
+    *minor = 0;
+    return GSS_S_COMPLETE;
 }
 
 /*
  * These support functions are for the serialization routines
  */
-int
-sequenceSize(void *vqueue, size_t *sizep)
+size_t
+sequenceSize(void *vqueue GSSEAP_UNUSED)
 {
-    *sizep += sizeof(queue);
-    return 0;
+    return sizeof(queue);
 }
 
-int
-sequenceExternalize(void *vqueue, unsigned char **buf, size_t *lenremain)
+OM_uint32
+sequenceExternalize(OM_uint32 *minor,
+                    void *vqueue,
+                    unsigned char **buf,
+                    size_t *lenremain)
 {
-    if (*lenremain < sizeof(queue))
-        return ENOMEM;
+    if (*lenremain < sizeof(queue)) {
+        *minor = GSSEAP_WRONG_SIZE;
+        return GSS_S_FAILURE;
+    }
     memcpy(*buf, vqueue, sizeof(queue));
     *buf += sizeof(queue);
     *lenremain -= sizeof(queue);
@@ -264,18 +273,30 @@ sequenceExternalize(void *vqueue, unsigned char **buf, size_t *lenremain)
     return 0;
 }
 
-int
-sequenceInternalize(void **vqueue, unsigned char **buf, size_t *lenremain)
+OM_uint32
+sequenceInternalize(OM_uint32 *minor,
+                    void **vqueue,
+                    unsigned char **buf,
+                    size_t *lenremain)
 {
     void *q;
 
-    if (*lenremain < sizeof(queue))
-        return EINVAL;
-    if ((q = malloc(sizeof(queue))) == 0)
-        return ENOMEM;
+    if (*lenremain < sizeof(queue)) {
+        *minor = GSSEAP_TOK_TRUNC;
+        return GSS_S_DEFECTIVE_TOKEN;
+    }
+
+    q = GSSEAP_MALLOC(sizeof(queue));
+    if (q == NULL) {
+        *minor = ENOMEM;
+        return GSS_S_FAILURE;
+    }
+
     memcpy(q, *buf, sizeof(queue));
     *buf += sizeof(queue);
     *lenremain -= sizeof(queue);
     *vqueue = q;
-    return 0;
+
+    *minor = 0;
+    return GSS_S_COMPLETE;
 }