rpc_authflavor_t nfs_find_best_sec(struct nfs4_secinfo_flavors *flavors) { struct gss_api_mech *mech; struct xdr_netobj oid; int i; rpc_authflavor_t pseudoflavor = RPC_AUTH_UNIX; for (i = 0; i < flavors->num_flavors; i++) { struct nfs4_secinfo_flavor *flavor; flavor = &flavors->flavors[i]; if (flavor->flavor == RPC_AUTH_NULL || flavor->flavor == RPC_AUTH_UNIX) { pseudoflavor = flavor->flavor; break; } else if (flavor->flavor == RPC_AUTH_GSS) { oid.len = flavor->gss.sec_oid4.len; oid.data = flavor->gss.sec_oid4.data; mech = gss_mech_get_by_OID(&oid); if (!mech) continue; pseudoflavor = gss_svc_to_pseudoflavor(mech, flavor->gss.service); gss_mech_put(mech); break; } } return pseudoflavor; }
static int supported_enctypes_show(struct seq_file *m, void *v) { struct gss_api_mech *k5mech; k5mech = gss_mech_get_by_name("krb5"); if (k5mech == NULL) goto out; if (k5mech->gm_upcall_enctypes != NULL) seq_printf(m, k5mech->gm_upcall_enctypes); gss_mech_put(k5mech); out: return 0; }