
---

---

 linux-2.6.18-rc5-andros/include/linux/sunrpc/gss_api.h        |    1 


---


diff -puN include/linux/sunrpc/gss_api.h~gss-triple-to-pseudoflavor include/linux/sunrpc/gss_api.h
--- linux-2.6.18-rc5/include/linux/sunrpc/gss_api.h~gss-triple-to-pseudoflavor	2006-10-17 16:16:02.000000000 -0400
+++ linux-2.6.18-rc5-andros/include/linux/sunrpc/gss_api.h	2006-10-17 16:16:02.000000000 -0400
@@ -61,6 +61,7 @@ u32 gss_delete_sec_context(
 int gss_service_to_pseudoflavor_index(struct gss_api_mech *, u32 service);
 int gss_flavor_to_index(u32 pflavor);
 u32 gss_pseudoflavor_to_service(struct gss_api_mech *, u32 pseudoflavor);
+u32 gss_triple_to_pseudoflavor(u32 oid_len, char *oid_data, u32 service);
 char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service);
 u32 gss_name_to_pseudoflavor(char *name, int len);
 
diff -puN net/sunrpc/auth_gss/gss_mech_switch.c~gss-triple-to-pseudoflavor net/sunrpc/auth_gss/gss_mech_switch.c
--- linux-2.6.18-rc5/net/sunrpc/auth_gss/gss_mech_switch.c~gss-triple-to-pseudoflavor	2006-10-17 16:16:02.000000000 -0400
+++ linux-2.6.18-rc5-andros/net/sunrpc/auth_gss/gss_mech_switch.c	2006-10-17 16:16:02.000000000 -0400
@@ -286,6 +286,38 @@ gss_service_to_pseudoflavor_index(struct
 
 EXPORT_SYMBOL(gss_service_to_pseudoflavor_index);
 
+/*
+ * Returns the security triple pseudoflavor or RPC_AUTH_MAXFLAVOR.
+ * NOTE: no qop value consideration.
+ */
+u32
+gss_triple_to_pseudoflavor(u32 oid_len, char *oid_data, u32 service)
+{
+	struct gss_api_mech *pos;
+	u32 pseudoflavor = RPC_AUTH_MAXFLAVOR;
+	struct xdr_netobj oid;
+	int i;
+
+	oid.len = oid_len;
+	oid.data = oid_data;
+
+	spin_lock(&registered_mechs_lock);
+	list_for_each_entry(pos, &registered_mechs, gm_list) {
+		if (!pos || (pos->gm_oid.len == 0) || !pos->gm_oid.data ||
+					!g_OID_equal(&oid, &pos->gm_oid))
+			continue;
+
+	for (i=0; i<pos->gm_pf_num; i++)
+		if (service == pos->gm_pfs[i].service) {
+			pseudoflavor = pos->gm_pfs[i].pseudoflavor;
+			goto out;
+		}
+	}
+out:
+	spin_unlock(&registered_mechs_lock);
+	return pseudoflavor;
+}
+
 u32
 gss_pseudoflavor_to_service(struct gss_api_mech *gm, u32 pseudoflavor)
 {
_
