summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-07-30 14:49:49 -0400
committerSimo Sorce <simo@redhat.com>2012-09-13 16:18:12 -0400
commitc674dee2e3edb608f82a1435f8cba8048bcd714d (patch)
tree8ca4a2a78bfd0ab7b0e93fe6edc3478d3ca4cb42 /src/lib
parent546a90acca80e258d31bb61b5cd946265c518056 (diff)
downloadkrb5-c674dee2e3edb608f82a1435f8cba8048bcd714d.tar.gz
krb5-c674dee2e3edb608f82a1435f8cba8048bcd714d.tar.xz
krb5-c674dee2e3edb608f82a1435f8cba8048bcd714d.zip
Add function to return the Public OID
Special care needs to be taken to avoid returning special interposer plugin OIDs to user applications. The public OID is the OID that should be returned to users of the GSSAPI. This is not the same as the internal OID which could be a special interposer plugin OID.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/gssapi/mechglue/g_initialize.c22
-rw-r--r--src/lib/gssapi/mechglue/mglueP.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/gssapi/mechglue/g_initialize.c b/src/lib/gssapi/mechglue/g_initialize.c
index a6ba73867f..c721692014 100644
--- a/src/lib/gssapi/mechglue/g_initialize.c
+++ b/src/lib/gssapi/mechglue/g_initialize.c
@@ -1130,6 +1130,28 @@ done:
return status;
}
+gss_OID gssint_get_public_oid(gss_const_OID internal_oid)
+{
+ gss_mech_info aMech;
+ gss_OID public_oid = GSS_C_NO_OID;
+
+ if (gssint_mechglue_initialize_library() != 0)
+ return GSS_C_NO_OID;
+
+ if (k5_mutex_lock(&g_mechListLock) != 0)
+ return GSS_C_NO_OID;
+
+ if ((aMech = searchMechList(internal_oid)) != NULL) {
+ if (aMech->is_interposer)
+ public_oid = aMech->int_mech_type;
+ else
+ public_oid = aMech->mech_type;
+ }
+
+ (void)k5_mutex_unlock(&g_mechListLock);
+ return public_oid;
+}
+
/*
* Register a mechanism. Called with g_mechListLock held.
*/
diff --git a/src/lib/gssapi/mechglue/mglueP.h b/src/lib/gssapi/mechglue/mglueP.h
index 964db45df2..b501c1b321 100644
--- a/src/lib/gssapi/mechglue/mglueP.h
+++ b/src/lib/gssapi/mechglue/mglueP.h
@@ -683,6 +683,7 @@ void gssint_mechglue_fini(void);
OM_uint32 gssint_select_mech_type(OM_uint32 *minor, gss_const_OID in_oid,
gss_OID *selected_oid);
+gss_OID gssint_get_public_oid(gss_const_OID internal_oid);
gss_mechanism gssint_get_mechanism (gss_const_OID);
OM_uint32 gssint_get_mech_type (gss_OID, gss_buffer_t);
char *gssint_get_kmodName(const gss_OID);