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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gss_generic_token.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
字號:
/* *  linux/net/sunrpc/gss_generic_token.c * *  Adapted from MIT Kerberos 5-1.2.1 lib/gssapi/generic/util_token.c * *  Copyright (c) 2000 The Regents of the University of Michigan. *  All rights reserved. * *  Andy Adamson   <andros@umich.edu> *//* * Copyright 1993 by OpenVision Technologies, Inc. *  * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appears in all copies and * that both that copyright notice and this permission notice appear in * supporting documentation, and that the name of OpenVision not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. OpenVision makes no * representations about the suitability of this software for any * purpose.  It is provided "as is" without express or implied warranty. *  * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */#include <linux/types.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/sunrpc/sched.h>#include <linux/sunrpc/gss_asn1.h>#ifdef RPC_DEBUG# define RPCDBG_FACILITY        RPCDBG_AUTH#endif/* TWRITE_STR from gssapiP_generic.h */#define TWRITE_STR(ptr, str, len) \	memcpy((ptr), (char *) (str), (len)); \	(ptr) += (len);/* XXXX this code currently makes the assumption that a mech oid will   never be longer than 127 bytes.  This assumption is not inherent in   the interfaces, so the code can be fixed if the OSI namespace   balloons unexpectedly. *//* Each token looks like this:0x60				tag for APPLICATION 0, SEQUENCE					(constructed, definite-length)	<length>		possible multiple bytes, need to parse/generate	0x06			tag for OBJECT IDENTIFIER		<moid_length>	compile-time constant string (assume 1 byte)		<moid_bytes>	compile-time constant string	<inner_bytes>		the ANY containing the application token					bytes 0,1 are the token type					bytes 2,n are the token dataFor the purposes of this abstraction, the token "header" consists ofthe sequence tag and length octets, the mech OID DER encoding, and thefirst two inner bytes, which indicate the token type.  The token"body" consists of everything else.*/static intder_length_size( int length){	if (length < (1<<7))		return(1);	else if (length < (1<<8))		return(2);#if (SIZEOF_INT == 2)	else		return(3);#else	else if (length < (1<<16))		return(3);	else if (length < (1<<24))		return(4);	else		return(5);#endif}static voidder_write_length(unsigned char **buf, int length){	if (length < (1<<7)) {		*(*buf)++ = (unsigned char) length;	} else {		*(*buf)++ = (unsigned char) (der_length_size(length)+127);#if (SIZEOF_INT > 2)		if (length >= (1<<24))			*(*buf)++ = (unsigned char) (length>>24);		if (length >= (1<<16))			*(*buf)++ = (unsigned char) ((length>>16)&0xff);#endif		if (length >= (1<<8))			*(*buf)++ = (unsigned char) ((length>>8)&0xff);		*(*buf)++ = (unsigned char) (length&0xff);	}}/* returns decoded length, or < 0 on failure.  Advances buf and   decrements bufsize */static intder_read_length(unsigned char **buf, int *bufsize){	unsigned char sf;	int ret;	if (*bufsize < 1)		return(-1);	sf = *(*buf)++;	(*bufsize)--;	if (sf & 0x80) {		if ((sf &= 0x7f) > ((*bufsize)-1))			return(-1);		if (sf > SIZEOF_INT)			return (-1);		ret = 0;		for (; sf; sf--) {			ret = (ret<<8) + (*(*buf)++);			(*bufsize)--;		}	} else {		ret = sf;	}	return(ret);}/* returns the length of a token, given the mech oid and the body size */intg_token_size(struct xdr_netobj *mech, unsigned int body_size){	/* set body_size to sequence contents size */	body_size += 4 + (int) mech->len;         /* NEED overflow check */	return(1 + der_length_size(body_size) + body_size);}EXPORT_SYMBOL(g_token_size);/* fills in a buffer with the token header.  The buffer is assumed to   be the right size.  buf is advanced past the token header */voidg_make_token_header(struct xdr_netobj *mech, int body_size, unsigned char **buf){	*(*buf)++ = 0x60;	der_write_length(buf, 4 + mech->len + body_size);	*(*buf)++ = 0x06;	*(*buf)++ = (unsigned char) mech->len;	TWRITE_STR(*buf, mech->data, ((int) mech->len));}EXPORT_SYMBOL(g_make_token_header);/* * Given a buffer containing a token, reads and verifies the token, * leaving buf advanced past the token header, and setting body_size * to the number of remaining bytes.  Returns 0 on success, * G_BAD_TOK_HEADER for a variety of errors, and G_WRONG_MECH if the * mechanism in the token does not match the mech argument.  buf and * *body_size are left unmodified on error. */u32g_verify_token_header(struct xdr_netobj *mech, int *body_size,		      unsigned char **buf_in, int tok_type, int toksize){	unsigned char *buf = *buf_in;	int seqsize;	struct xdr_netobj toid;	int ret = 0;	if ((toksize-=1) < 0)		return(G_BAD_TOK_HEADER);	if (*buf++ != 0x60)		return(G_BAD_TOK_HEADER);	if ((seqsize = der_read_length(&buf, &toksize)) < 0)		return(G_BAD_TOK_HEADER);	if (seqsize != toksize)		return(G_BAD_TOK_HEADER);	if ((toksize-=1) < 0)		return(G_BAD_TOK_HEADER);	if (*buf++ != 0x06)		return(G_BAD_TOK_HEADER); 	if ((toksize-=1) < 0)		return(G_BAD_TOK_HEADER);	toid.len = *buf++;	if ((toksize-=toid.len) < 0)		return(G_BAD_TOK_HEADER);	toid.data = buf;	buf+=toid.len;	if (! g_OID_equal(&toid, mech)) 		ret = G_WRONG_MECH;    /* G_WRONG_MECH is not returned immediately because it's more important      to return G_BAD_TOK_HEADER if the token header is in fact bad */	if ((toksize-=2) < 0)		return(G_BAD_TOK_HEADER);	if (ret)		return(ret);	if (!ret) {		*buf_in = buf;		*body_size = toksize;	}	return(ret);}EXPORT_SYMBOL(g_verify_token_header);/* Given a buffer containing a token, returns a copy of the mech oid in * the parameter mech. */u32g_get_mech_oid(struct xdr_netobj *mech, struct xdr_netobj * in_buf){	unsigned char *buf = in_buf->data;	int len = in_buf->len;	int ret=0;	int seqsize;	if ((len-=1) < 0)		return(G_BAD_TOK_HEADER);	if (*buf++ != 0x60)		return(G_BAD_TOK_HEADER);	if ((seqsize = der_read_length(&buf, &len)) < 0)		return(G_BAD_TOK_HEADER);	if ((len-=1) < 0)		return(G_BAD_TOK_HEADER);	if (*buf++ != 0x06)		return(G_BAD_TOK_HEADER);	if ((len-=1) < 0)		return(G_BAD_TOK_HEADER);	mech->len = *buf++;	if ((len-=mech->len) < 0)		return(G_BAD_TOK_HEADER);	if (!(mech->data = kmalloc(mech->len, GFP_KERNEL))) 		return(G_BUFFER_ALLOC);	memcpy(mech->data, buf, mech->len);	return ret;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美图区在线视频| 国产午夜精品久久久久久久 | 国产精品久久久久久亚洲伦| 日韩久久一区二区| 日本在线不卡视频一二三区| 国产一区二区久久| 欧美性感一类影片在线播放| 久久久久久久久久久久久夜| 亚洲大片在线观看| 色婷婷久久久综合中文字幕| 日本一区二区三区久久久久久久久不| 亚洲一线二线三线视频| 大陆成人av片| 日韩欧美在线网站| 亚洲午夜av在线| a美女胸又www黄视频久久| 欧美成人福利视频| 性欧美大战久久久久久久久| 色综合天天狠狠| 国产精品国产三级国产普通话蜜臀 | 亚洲综合丁香婷婷六月香| 国产a视频精品免费观看| 日韩免费视频一区| 天天综合色天天综合| 一本到三区不卡视频| 国产精品久久久久久亚洲毛片| 久久精品国产色蜜蜜麻豆| 欧美日韩大陆一区二区| 亚洲激情综合网| 一本一道波多野结衣一区二区| 国产午夜精品一区二区三区嫩草 | 日韩美女视频在线| 人人爽香蕉精品| 91精品国产一区二区三区香蕉| 亚洲在线成人精品| 欧美色手机在线观看| 亚洲图片欧美色图| 欧美精品777| 奇米色一区二区| 日韩精品中文字幕一区二区三区| 免费人成精品欧美精品 | 国产综合久久久久影院| 精品国产乱码久久久久久闺蜜 | 成人午夜激情在线| 国产调教视频一区| av在线播放不卡| 亚洲欧洲精品成人久久奇米网| 99精品久久久久久| 亚洲国产综合在线| 欧美精三区欧美精三区| 老色鬼精品视频在线观看播放| 日韩视频永久免费| 国产a精品视频| 亚洲天堂a在线| 91高清视频免费看| 日本少妇一区二区| 国产偷国产偷亚洲高清人白洁| 国产suv精品一区二区883| 国产精品电影一区二区三区| 色av一区二区| 久久av资源网| 亚洲精品国久久99热| 欧美一区二区精品在线| 国产成人免费在线| 亚洲日本丝袜连裤袜办公室| 欧美色精品在线视频| 九九精品一区二区| 亚洲欧美另类久久久精品| 欧美人妖巨大在线| 国产成人在线观看免费网站| 自拍偷拍亚洲综合| 日韩视频在线一区二区| 99在线精品视频| 免费观看日韩电影| 国产精品精品国产色婷婷| 日韩一区二区视频在线观看| 99免费精品视频| 韩国一区二区视频| 一区二区三区四区乱视频| 日韩欧美123| 色网站国产精品| 欧美中文字幕一区二区三区| 老司机精品视频线观看86| 亚洲色图制服诱惑| 久久亚洲影视婷婷| 欧美美女一区二区| 国产福利精品导航| 蜜臀精品久久久久久蜜臀| 亚洲美女免费视频| 国产欧美日韩综合| 日韩一区二区三区电影 | 国产成人午夜99999| 亚洲一区二区在线播放相泽| 久久久激情视频| 日韩美一区二区三区| 欧洲中文字幕精品| 成人av影院在线| 免费成人在线网站| 亚洲国产婷婷综合在线精品| 成人欧美一区二区三区小说| 久久久蜜桃精品| 精品国产伦一区二区三区观看方式| 欧美在线免费播放| 色综合久久中文字幕综合网| 成人激情免费电影网址| 国产成人av在线影院| 韩国精品在线观看| 久草中文综合在线| 久久精品国产在热久久| 美腿丝袜亚洲综合| 青草国产精品久久久久久| 一二三四社区欧美黄| 亚洲乱码中文字幕综合| 亚洲天堂成人在线观看| 亚洲人成网站影音先锋播放| 中文字幕一区二区三区在线不卡 | 亚洲成人av免费| 亚洲va中文字幕| 亚洲伊人伊色伊影伊综合网| 亚洲综合激情网| 视频一区中文字幕国产| 三级影片在线观看欧美日韩一区二区 | 91免费观看视频| 99v久久综合狠狠综合久久| 99这里只有久久精品视频| 99久久精品国产导航| 91麻豆精品秘密| 欧美三级一区二区| 欧美一区二区福利视频| 日韩免费观看2025年上映的电影| 日韩精品一区二区三区四区视频 | 亚洲情趣在线观看| 亚洲图片欧美综合| 久久er99精品| eeuss影院一区二区三区| 99国产精品国产精品毛片| 色婷婷久久综合| 日韩视频在线你懂得| 久久久噜噜噜久久中文字幕色伊伊| 国产亚洲人成网站| 尤物视频一区二区| 日韩中文字幕麻豆| 精品亚洲成av人在线观看| 成人午夜免费电影| 欧美日韩在线播放三区| 精品国产一区二区在线观看| 中文欧美字幕免费| 亚洲已满18点击进入久久| 久色婷婷小香蕉久久| 99视频精品全部免费在线| 欧美吻胸吃奶大尺度电影| 精品国产一区a| 亚洲精品美国一| 久久精品国产77777蜜臀| 91在线精品一区二区| 777奇米成人网| 亚洲欧美怡红院| 麻豆成人av在线| 色哟哟欧美精品| 久久奇米777| 香蕉久久一区二区不卡无毒影院 | 欧美在线小视频| 久久久亚洲精品石原莉奈| 亚洲欧美色图小说| 国产精品99久久久久| 欧美亚洲另类激情小说| 国产日韩精品久久久| 日韩黄色免费电影| 一本久久综合亚洲鲁鲁五月天 | 亚洲精品一卡二卡| 精品一区二区三区在线视频| 在线观看中文字幕不卡| 欧美韩日一区二区三区| 蜜臀av国产精品久久久久| 91成人在线观看喷潮| 国产亚洲1区2区3区| 麻豆视频一区二区| 欧美视频一区二区| 亚洲视频在线观看一区| 国产成人免费在线观看| 日韩久久久精品| 婷婷成人激情在线网| 91色在线porny| 国产精品久久久久影院色老大 | 国产精品女上位| 精品在线播放午夜| 日韩无一区二区| 日韩高清不卡一区二区| 欧美午夜视频网站| 亚洲最大成人综合| 色婷婷精品久久二区二区蜜臂av| 国产蜜臀av在线一区二区三区| 麻豆高清免费国产一区| 欧美成人精品3d动漫h| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美另类一区二区三区| 偷窥少妇高潮呻吟av久久免费| 91麻豆精东视频| 一区二区三区在线视频观看58| 91在线看国产|