Merge branch 'master' of ssh://moonshot.suchdamage.org:822/srv/git/moonshot
[mech_eap.git] / util_oid.c
index 9586689..40f5f6e 100644 (file)
  *
  */
 
+/*
+ * OID utility routines.
+ */
+
 #include "gssapiP_eap.h"
 
 OM_uint32
@@ -63,7 +67,6 @@ duplicateOid(OM_uint32 *minor,
 {
     gss_OID p;
 
-    *minor = 0;
     *newOid = GSS_C_NO_OID;
 
     p = (gss_OID)GSSEAP_MALLOC(sizeof(*p));
@@ -75,12 +78,14 @@ duplicateOid(OM_uint32 *minor,
     p->elements = GSSEAP_MALLOC(p->length);
     if (p->elements == NULL) {
         GSSEAP_FREE(p);
+        *minor = ENOMEM;
         return GSS_S_FAILURE;
     }
 
     memcpy(p->elements, oid->elements, p->length);
     *newOid = p;
 
+    *minor = 0;
     return GSS_S_COMPLETE;
 }
 
@@ -98,10 +103,11 @@ composeOid(OM_uint32 *minor,
 
     if (oid == GSS_C_NO_OID) {
         *minor = EINVAL;
-        return GSS_S_FAILURE;
+        return GSS_S_CALL_INACCESSIBLE_READ | GSS_S_FAILURE;
     }
+
     if (oid->length < prefix_len) {
-        *minor = ERANGE;
+        *minor = GSSEAP_WRONG_SIZE;
         return GSS_S_FAILURE;
     }
 
@@ -116,7 +122,7 @@ composeOid(OM_uint32 *minor,
     suffix = osuffix;
 
     if (oid->length < prefix_len + nbytes) {
-        *minor = ERANGE;
+        *minor = GSSEAP_WRONG_SIZE;
         return GSS_S_FAILURE;
     }
 
@@ -160,7 +166,7 @@ decomposeOid(OM_uint32 *minor,
     for (i = 0; i < slen; i++) {
         *suffix = (*suffix << 7) | (op[i] & 0x7f);
         if (i + 1 != slen && (op[i] & 0x80) == 0) {
-            *minor = EINVAL;
+            *minor = GSSEAP_WRONG_SIZE;
             return GSS_S_FAILURE;
         }
     }