/*
- * 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"
/* 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 */
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. */
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 */
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) */
(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;
}
OM_uint32
*vqueue = NULL;
+ *minor = 0;
return GSS_S_COMPLETE;
}
* These support functions are for the serialization routines
*/
size_t
-sequenceSize(void *vqueue)
+sequenceSize(void *vqueue GSSEAP_UNUSED)
{
return sizeof(queue);
}
size_t *lenremain)
{
if (*lenremain < sizeof(queue)) {
- *minor = ERANGE;
+ *minor = GSSEAP_WRONG_SIZE;
return GSS_S_FAILURE;
}
memcpy(*buf, vqueue, sizeof(queue));
void *q;
if (*lenremain < sizeof(queue)) {
- *minor = ERANGE;
+ *minor = GSSEAP_TOK_TRUNC;
return GSS_S_DEFECTIVE_TOKEN;
}