예제 #1
0
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;
}
예제 #2
0
파일: nfsctl.c 프로젝트: daveti/prov-kernel
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;
}