Home | History | Annotate | Download | only in mech
      1 /*
      2  * lib/gssapi/krb5/rel_oid.c
      3  *
      4  * Copyright 1995 by the Massachusetts Institute of Technology.
      5  * All Rights Reserved.
      6  *
      7  * Export of this software from the United States of America may
      8  *   require a specific license from the United States Government.
      9  *   It is the responsibility of any person or organization contemplating
     10  *   export to obtain such a license before exporting.
     11  *
     12  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
     13  * distribute this software and its documentation for any purpose and
     14  * without fee is hereby granted, provided that the above copyright
     15  * notice appear in all copies and that both that copyright notice and
     16  * this permission notice appear in supporting documentation, and that
     17  * the name of M.I.T. not be used in advertising or publicity pertaining
     18  * to distribution of the software without specific, written prior
     19  * permission.  Furthermore if you modify this software you must label
     20  * your software as modified software and not distribute it in such a
     21  * fashion that it might be confused with the original M.I.T. software.
     22  * M.I.T. makes no representations about the suitability of
     23  * this software for any purpose.  It is provided "as is" without express
     24  * or implied warranty.
     25  *
     26  */
     27 
     28 /*
     29  * rel_oid.c - Release an OID.
     30  */
     31 #include "gssapiP_krb5.h"
     32 
     33 /* Solaris Kerberos - resync 163 */
     34 OM_uint32 generic_gss_release_oid (OM_uint32 *, gss_OID *);
     35 
     36 
     37 OM_uint32 krb5_gss_internal_release_oid (OM_uint32 *, /* minor_status */
     38 					 gss_OID * /* oid */
     39     );
     40 
     41 OM_uint32
     42 krb5_gss_release_oid(minor_status, oid)
     43     OM_uint32	*minor_status;
     44     gss_OID	*oid;
     45 {
     46     /*
     47      * The V2 API says the following!
     48      *
     49      * gss_release_oid[()] will recognize any of the GSSAPI's own OID values,
     50      * and will silently ignore attempts to free these OIDs; for other OIDs
     51      * it will call the C free() routine for both the OID data and the
     52      * descriptor.  This allows applications to freely mix their own heap-
     53      * allocated OID values with OIDs returned by GSS-API.
     54      */
     55     if (krb5_gss_internal_release_oid(minor_status, oid) != GSS_S_COMPLETE) {
     56 	/* Pawn it off on the generic routine */
     57 	return(generic_gss_release_oid(minor_status, oid));
     58     }
     59     else {
     60 	*oid = GSS_C_NO_OID;
     61 	*minor_status = 0;
     62 	return(GSS_S_COMPLETE);
     63     }
     64 }
     65 
     66 OM_uint32
     67 krb5_gss_internal_release_oid(minor_status, oid)
     68     OM_uint32	*minor_status;
     69     gss_OID	*oid;
     70 {
     71     /*
     72      * This function only knows how to release internal OIDs. It will
     73      * return GSS_S_CONTINUE_NEEDED for any OIDs it does not recognize.
     74      */
     75 
     76     if ((*oid != gss_mech_krb5) &&
     77 	(*oid != gss_mech_krb5_old) &&
     78 	(*oid != gss_mech_krb5_wrong) &&
     79 	(*oid != gss_nt_krb5_name) &&
     80 	(*oid != gss_nt_krb5_principal)) {
     81 	/* We don't know about this OID */
     82 	return(GSS_S_CONTINUE_NEEDED);
     83     }
     84     else {
     85 	*oid = GSS_C_NO_OID;
     86 	*minor_status = 0;
     87 	return(GSS_S_COMPLETE);
     88     }
     89 }
     90 
     91