亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gss_mech_switch.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* *  linux/net/sunrpc/gss_mech_switch.c * *  Copyright (c) 2001 The Regents of the University of Michigan. *  All rights reserved. * *  J. Bruce Fields   <bfields@umich.edu> * *  Redistribution and use in source and binary forms, with or without  *  modification, are permitted provided that the following conditions *  are met: * *  1. Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. *  2. Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the  *     documentation and/or other materials provided with the distribution. *  3. Neither the name of the University nor the names of its *     contributors may be used to endorse or promote products derived *     from this software without specific prior written permission. * *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */#include <linux/types.h>#include <linux/slab.h>#include <linux/socket.h>#include <linux/module.h>#include <linux/sunrpc/msg_prot.h>#include <linux/sunrpc/gss_asn1.h>#include <linux/sunrpc/auth_gss.h>#include <linux/sunrpc/svcauth_gss.h>#include <linux/sunrpc/gss_err.h>#include <linux/sunrpc/sched.h>#include <linux/sunrpc/gss_api.h>#include <linux/sunrpc/clnt.h>#ifdef RPC_DEBUG# define RPCDBG_FACILITY        RPCDBG_AUTH#endifstatic LIST_HEAD(registered_mechs);static spinlock_t registered_mechs_lock = SPIN_LOCK_UNLOCKED;static voidgss_mech_free(struct gss_api_mech *gm){	struct pf_desc *pf;	int i;	for (i = 0; i < gm->gm_pf_num; i++) {		pf = &gm->gm_pfs[i];		if (pf->auth_domain_name)			kfree(pf->auth_domain_name);		pf->auth_domain_name = NULL;	}}static inline char *make_auth_domain_name(char *name){	static char	*prefix = "gss/";	char		*new;	new = kmalloc(strlen(name) + strlen(prefix) + 1, GFP_KERNEL);	if (new) {		strcpy(new, prefix);		strcat(new, name);	}	return new;}static intgss_mech_svc_setup(struct gss_api_mech *gm){	struct pf_desc *pf;	int i, status;	for (i = 0; i < gm->gm_pf_num; i++) {		pf = &gm->gm_pfs[i];		pf->auth_domain_name = make_auth_domain_name(pf->name);		status = -ENOMEM;		if (pf->auth_domain_name == NULL)			goto out;		status = svcauth_gss_register_pseudoflavor(pf->pseudoflavor,							pf->auth_domain_name);		if (status)			goto out;	}	return 0;out:	gss_mech_free(gm);	return status;}intgss_mech_register(struct gss_api_mech *gm){	int status;	status = gss_mech_svc_setup(gm);	if (status)		return status;	spin_lock(&registered_mechs_lock);	list_add(&gm->gm_list, &registered_mechs);	spin_unlock(&registered_mechs_lock);	dprintk("RPC:      registered gss mechanism %s\n", gm->gm_name);	return 0;}EXPORT_SYMBOL(gss_mech_register);voidgss_mech_unregister(struct gss_api_mech *gm){	spin_lock(&registered_mechs_lock);	list_del(&gm->gm_list);	spin_unlock(&registered_mechs_lock);	dprintk("RPC:      unregistered gss mechanism %s\n", gm->gm_name);	gss_mech_free(gm);}EXPORT_SYMBOL(gss_mech_unregister);struct gss_api_mech *gss_mech_get(struct gss_api_mech *gm){	__module_get(gm->gm_owner);	return gm;}EXPORT_SYMBOL(gss_mech_get);struct gss_api_mech *gss_mech_get_by_name(char *name){	struct gss_api_mech	*pos, *gm = NULL;	spin_lock(&registered_mechs_lock);	list_for_each_entry(pos, &registered_mechs, gm_list) {		if (0 == strcmp(name, pos->gm_name)) {			if (!try_module_get(pos->gm_owner))				continue;			gm = pos;			break;		}	}	spin_unlock(&registered_mechs_lock);	return gm;}EXPORT_SYMBOL(gss_mech_get_by_name);static inline intmech_supports_pseudoflavor(struct gss_api_mech *gm, u32 pseudoflavor){	int i;	for (i = 0; i < gm->gm_pf_num; i++) {		if (gm->gm_pfs[i].pseudoflavor == pseudoflavor)			return 1;	}	return 0;}struct gss_api_mech *gss_mech_get_by_pseudoflavor(u32 pseudoflavor){	struct gss_api_mech *pos, *gm = NULL;	spin_lock(&registered_mechs_lock);	list_for_each_entry(pos, &registered_mechs, gm_list) {		if (!try_module_get(pos->gm_owner))			continue;		if (!mech_supports_pseudoflavor(pos, pseudoflavor)) {			module_put(pos->gm_owner);			continue;		}		gm = pos;		break;	}	spin_unlock(&registered_mechs_lock);	return gm;}EXPORT_SYMBOL(gss_mech_get_by_pseudoflavor);u32gss_pseudoflavor_to_service(struct gss_api_mech *gm, u32 pseudoflavor){	int i;	for (i = 0; i < gm->gm_pf_num; i++) {		if (gm->gm_pfs[i].pseudoflavor == pseudoflavor)			return gm->gm_pfs[i].service;	}	return 0;}EXPORT_SYMBOL(gss_pseudoflavor_to_service);char *gss_service_to_auth_domain_name(struct gss_api_mech *gm, u32 service){	int i;	for (i = 0; i < gm->gm_pf_num; i++) {		if (gm->gm_pfs[i].service == service)			return gm->gm_pfs[i].auth_domain_name;	}	return NULL;}EXPORT_SYMBOL(gss_service_to_auth_domain_name);voidgss_mech_put(struct gss_api_mech * gm){	module_put(gm->gm_owner);}EXPORT_SYMBOL(gss_mech_put);/* The mech could probably be determined from the token instead, but it's just * as easy for now to pass it in. */u32gss_import_sec_context(struct xdr_netobj	*input_token,		       struct gss_api_mech	*mech,		       struct gss_ctx		**ctx_id){	if (!(*ctx_id = kmalloc(sizeof(**ctx_id), GFP_KERNEL)))		return GSS_S_FAILURE;	memset(*ctx_id, 0, sizeof(**ctx_id));	(*ctx_id)->mech_type = gss_mech_get(mech);	return mech->gm_ops		->gss_import_sec_context(input_token, *ctx_id);}/* gss_get_mic: compute a mic over message and return mic_token. */u32gss_get_mic(struct gss_ctx	*context_handle,	    u32			qop,	    struct xdr_buf	*message,	    struct xdr_netobj	*mic_token){	 return context_handle->mech_type->gm_ops		->gss_get_mic(context_handle,			      qop,			      message,			      mic_token);}/* gss_verify_mic: check whether the provided mic_token verifies message. */u32gss_verify_mic(struct gss_ctx		*context_handle,	       struct xdr_buf		*message,	       struct xdr_netobj	*mic_token,	       u32			*qstate){	return context_handle->mech_type->gm_ops		->gss_verify_mic(context_handle,				 message,				 mic_token,				 qstate);}/* gss_delete_sec_context: free all resources associated with context_handle. * Note this differs from the RFC 2744-specified prototype in that we don't * bother returning an output token, since it would never be used anyway. */u32gss_delete_sec_context(struct gss_ctx	**context_handle){	dprintk("RPC:      gss_delete_sec_context deleting %p\n",			*context_handle);	if (!*context_handle)		return(GSS_S_NO_CONTEXT);	if ((*context_handle)->internal_ctx_id != 0)		(*context_handle)->mech_type->gm_ops			->gss_delete_sec_context((*context_handle)							->internal_ctx_id);	if ((*context_handle)->mech_type)		gss_mech_put((*context_handle)->mech_type);	kfree(*context_handle);	*context_handle=NULL;	return GSS_S_COMPLETE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区免费看| 成人91在线观看| 亚洲欧洲无码一区二区三区| 久久久久久亚洲综合| 欧美一级欧美一级在线播放| 555www色欧美视频| 日韩精品一区在线| 欧美大片免费久久精品三p| 欧美一区二区三区在线观看视频| 欧美日韩一区中文字幕| 欧美视频精品在线观看| 欧美一区二区网站| 精品1区2区在线观看| 久久一日本道色综合| 国产精品国产三级国产普通话蜜臀 | 日韩精品中文字幕一区二区三区| 欧美成人一区二区三区| 国产欧美日韩在线视频| 亚洲女同ⅹxx女同tv| 亚洲国产wwwccc36天堂| 久久97超碰国产精品超碰| 国产一区亚洲一区| 日本乱人伦一区| 这里只有精品视频在线观看| 久久蜜臀中文字幕| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品久久久久秋霞影院 | 成人精品一区二区三区四区| 一本久久a久久免费精品不卡| 欧美高清视频在线高清观看mv色露露十八 | 国产一区二区毛片| 一本大道综合伊人精品热热| 51久久夜色精品国产麻豆| 国产三级精品视频| 亚洲成人自拍网| 国产专区综合网| 欧美午夜精品久久久| 国产日韩精品一区二区浪潮av | 欧美久久一二区| 久久久久久久电影| 亚洲成av人片在线观看| 国产成人午夜精品影院观看视频| 精品视频在线视频| 国产女同性恋一区二区| 免费在线欧美视频| 欧亚洲嫩模精品一区三区| 久久久精品2019中文字幕之3| 亚洲国产你懂的| 成人app软件下载大全免费| 精品日韩一区二区三区免费视频| 亚洲日本在线观看| 国产aⅴ精品一区二区三区色成熟| 欧美日韩大陆一区二区| 亚洲欧美一区二区三区孕妇| 国产.欧美.日韩| 欧美成人午夜电影| 日韩电影免费一区| 欧美日韩情趣电影| 亚洲香肠在线观看| 99精品久久99久久久久| 国产日韩精品一区| 国产在线精品国自产拍免费| 欧美日韩在线不卡| 亚洲电影中文字幕在线观看| 91麻豆高清视频| 亚洲日本免费电影| 91美女福利视频| 自拍偷在线精品自拍偷无码专区| 国产suv一区二区三区88区| 精品成人一区二区三区四区| 日本午夜一本久久久综合| 欧美日韩一区小说| 亚洲一区二区3| 欧美日韩国产高清一区| 亚洲一区二区三区中文字幕| 欧美专区日韩专区| 亚洲图片欧美综合| 欧美日本一道本在线视频| 亚洲福中文字幕伊人影院| 欧美日韩国产影片| 琪琪久久久久日韩精品| 欧美xxx久久| 国产在线看一区| 亚洲国产精华液网站w| hitomi一区二区三区精品| 综合在线观看色| 色噜噜久久综合| 亚洲bdsm女犯bdsm网站| 欧美一级高清大全免费观看| 另类成人小视频在线| 国产亚洲自拍一区| 99精品久久久久久| 午夜视频在线观看一区| 精品国产一区a| 国产iv一区二区三区| 一区二区三区在线播放| 91麻豆精品国产自产在线 | 日本中文字幕一区二区视频| 日韩无一区二区| 成人丝袜视频网| 亚洲黄色小视频| 日韩欧美123| heyzo一本久久综合| 香港成人在线视频| 国产亚洲成av人在线观看导航| 福利一区在线观看| 亚洲福利一二三区| 中文字幕免费观看一区| 欧美老年两性高潮| 成人18精品视频| 日韩精品亚洲专区| 中文字幕一区二区三区不卡| 欧美日韩电影一区| 国产suv精品一区二区6| 性久久久久久久久| 国产精品不卡视频| 日韩欧美美女一区二区三区| 不卡区在线中文字幕| 日韩av在线免费观看不卡| 国产精品免费视频一区| 欧美日韩一区小说| 99久久精品情趣| 国内成人免费视频| 性感美女久久精品| 一区在线观看免费| www久久精品| 欧美一区永久视频免费观看| 91色视频在线| 高清不卡一二三区| 国内外精品视频| 亚洲18女电影在线观看| 亚洲欧美日韩一区| 国产偷国产偷亚洲高清人白洁| 538在线一区二区精品国产| 在线精品视频免费观看| 不卡av在线网| 成人av在线观| 岛国精品在线观看| 国精产品一区一区三区mba桃花 | 欧美高清在线一区| 久久久亚洲精华液精华液精华液| 911国产精品| 欧美私模裸体表演在线观看| 91色婷婷久久久久合中文| 成人动漫在线一区| 成人午夜视频免费看| 国产精品 日产精品 欧美精品| 久久成人免费电影| 狠狠色综合色综合网络| 久久99精品国产| 国产美女在线观看一区| 精品一区二区免费看| 精品综合久久久久久8888| 精品在线免费视频| 国产精品中文有码| 成人福利在线看| 91老师国产黑色丝袜在线| 99久久精品费精品国产一区二区| av高清不卡在线| 欧美伊人久久久久久午夜久久久久| 一本到不卡精品视频在线观看| 日本久久一区二区三区| 欧美视频日韩视频在线观看| 欧美精品九九99久久| 777久久久精品| 久久一区二区三区四区| 国产精品久久精品日日| 亚洲综合色网站| 蜜桃视频一区二区三区| 国产一区二区三区av电影 | 国产河南妇女毛片精品久久久| 国产精品99久久久久久似苏梦涵 | 男人的天堂亚洲一区| 国产尤物一区二区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲在线一区二区三区| 午夜精品一区二区三区三上悠亚| 日精品一区二区三区| 国产综合色视频| 一本大道久久a久久精二百| 91精品综合久久久久久| 国产亚洲短视频| 亚洲成人综合在线| 国产精品一区在线观看你懂的| 91色视频在线| 精品福利在线导航| 亚洲精品视频观看| 韩国三级在线一区| 欧洲在线/亚洲| 久久精品免费在线观看| 亚洲第一会所有码转帖| 国产黑丝在线一区二区三区| 欧美日免费三级在线| 国产精品女主播在线观看| 亚洲成人免费看| 成人午夜大片免费观看| 日韩精品资源二区在线| 亚洲午夜电影网| av一区二区三区在线| 精品久久久久久亚洲综合网|