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

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

?? cl_netstring.c

?? linux集群服務器軟件代碼包
?? C
字號:
/* * netstring implementation * * Copyright (c) 2003 Guochun Shi <gshi@ncsa.uiuc.edu> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * */#include <portability.h>#include <heartbeat.h>#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <time.h>#include <unistd.h>#include <ha_msg.h>#include <unistd.h>#include <clplumbing/ipc.h>#include <clplumbing/netstring.h>#include <clplumbing/base64.h>/* * Avoid sprintf.  Use snprintf instead, even if you count your bytes. * It can detect calculation errors (if used properly) * and will not make the security audit tools crazy. */int msg2netstring_buf(const struct ha_msg*, char*, size_t, size_t*);int compose_netstring(char*, const char*, const char*, size_t, size_t*);int is_auth_netstring(const char*, size_t, const char*, size_t);char* msg2netstring(const struct ha_msg*, size_t*);struct ha_msg* netstring2msg(const char *, size_t, int);extern const char *	FT_strings[];static int (*authmethod)(int whichauth,	const void * data,	size_t datalen,	char * authstr,	size_t authlen) = NULL;voidcl_set_authentication_computation_method(int (*method)(int whichauth,	const void * data,	size_t datalen,	char * authstr,	size_t authlen)){	authmethod = method;}intcompose_netstring(char * s, const char * smax, const char* data,		  size_t len, size_t* comlen){	char *	sp = s;	/* 3 == ":" + "," + at least one digit number */	if (s + len + 3 > smax) {		cl_log(LOG_ERR		,	"netstring pointer out of boundary(compose_netstring)");		return(HA_FAIL);	}	sp += sprintf(sp, "%ld:", (long)len);		if(data){		memcpy(sp, data, len);	}	sp += len;	*sp++ = ',';		*comlen = sp - s;	return(HA_OK);}/* Converts a message into a netstring */intmsg2netstring_buf(const struct ha_msg *m, char *s,		  size_t buflen, size_t * slen){	int	i;	char *	sp;	char *	smax;	char *	datap;	int	datalen = 0;	char	authtoken[MAXLINE];	char	authstring[MAXLINE];	int	authnum;	sp = s;	smax = s + buflen;	strcpy(sp, MSG_START_NETSTRING);	sp += strlen(MSG_START_NETSTRING);	datap = sp;	for (i=0; i < m->nfields; i++) {		size_t comlen;		size_t llen;		if (compose_netstring(sp, smax, m->names[i],				      m->nlens[i], &comlen) != HA_OK){			cl_log(LOG_ERR			,	"compose_netstring fails for"			" name(msg2netstring_buf)");			return(HA_FAIL);		}		sp += comlen;		datalen +=comlen;		if (compose_netstring(sp, smax, FT_strings[m->types[i]], 1, 				      &comlen) != HA_OK) {			cl_log(LOG_ERR			, "compose_netstring fails for"			       " type(msg2netstring_buf)");			return(HA_FAIL);		}				sp += comlen;		datalen +=comlen;				llen = (size_t)m->nlens[i];				if(m->types[i] < sizeof(fieldtypefuncs) 		   / sizeof(fieldtypefuncs[0])){								int (*tonetstring)(char*, char*, void*, size_t, size_t*);						tonetstring = fieldtypefuncs[m->types[i]].tonetstring;			if (!tonetstring || tonetstring(sp, smax, m->values[i], m->vlens[i], &comlen) != HA_OK){				cl_log(LOG_ERR, "msg2netstring_buf: "				       "tonetstring() failed, type=%d", m->types[i]);				return HA_FAIL;			}						sp += comlen;			datalen +=comlen;		}	}		/* Add authentication */		if ((authnum=authmethod(-1, datap, datalen, authtoken				,		sizeof(authtoken))) < 0) {		cl_log(LOG_WARNING		       ,	"Cannot compute message authentication!");		return(HA_FAIL);	}	sprintf(authstring, "%d %s", authnum, authtoken);	sp += sprintf(sp, "%ld:%s,", (long)strlen(authstring), authstring);	strcpy(sp, MSG_END_NETSTRING);	sp += sizeof(MSG_END_NETSTRING) -1;	if (sp > smax){		cl_log(LOG_ERR		,	"msg2netstring: exceed memory boundary sp =%p smax=%p"		,	sp, smax);		return(HA_FAIL);	}	*slen = sp - s + 1;	return(HA_OK);}char *msg2netstring(const struct ha_msg *m, size_t * slen){	int	len;	void	*s;		len= get_netstringlen(m) + 1;		if (len >= MAXMSG){		cl_log(LOG_ERR, "msg2netstring: msg is too large"		       "len =%d,MAX msg allowed=%d", len, MAXMSG);		return NULL;	}	s = ha_calloc(1, len);	if (!s){		cl_log(LOG_ERR, "msg2netstring: no memory for netstring");		return(NULL);	}	if (msg2netstring_buf(m, s, len, slen) != HA_OK){		cl_log(LOG_ERR, "msg2netstring: msg2netstring_buf() failed");		ha_free(s);		return(NULL);	}	return(s);}/* * Peel one string off in a netstring */static intpeel_netstring(const char * s, const char * smax, int* len,	       const char ** data, int* parselen ){	const char *	sp = s;	if (sp >= smax){		return(HA_FAIL);	}	if (sscanf(sp,"%d", len) != 1){		return(HA_FAIL);	}	if (*len < 0){		return(HA_FAIL);	}	while (*sp != ':' && sp < smax) {		sp ++;	}	if (sp >= smax ){		return(HA_FAIL);	}	sp ++;		*data = sp;		sp += (*len);	if (*sp != ','){		return(HA_FAIL);	}	sp++;	*parselen = sp - s;	return(HA_OK);}/* Converts a netstring into a message*/struct ha_msg *netstring2msg(const char *s, size_t length, int need_auth){	struct ha_msg*	ret = NULL;	const char *	sp = s;	const char *	smax = s + length;	int		startlen;	int		endlen;	const char *	datap;	int		datalen = 0;	int (*netstringtofield)(const void*, size_t, void**, size_t*);				void (*memfree)(void*);		if ((ret = ha_msg_new(0)) == NULL){		return(NULL);	}	startlen = sizeof(MSG_START_NETSTRING)-1;	if (strncmp(sp, MSG_START_NETSTRING, startlen) != 0) {		/* This can happen if the sender gets killed */		/* at just the wrong time... */		if (!cl_msg_quiet_fmterr) {			cl_log(LOG_WARNING, "netstring2msg: no MSG_START");			ha_msg_del(ret);		}		return(NULL);	}else{		sp += startlen;	}	endlen = sizeof(MSG_END_NETSTRING) - 1;	datap = sp;	while (sp < smax && strncmp(sp, MSG_END_NETSTRING, endlen) !=0  ){		int		nlen;		int		vlen;		const char *	name;		const char *	value;		int		parselen;		int		tmp;		int		tlen;		const char *	type;		int		fieldtype;		void*		ret_value;		size_t		ret_vlen;		tmp = datalen;		if (peel_netstring(sp , smax, &nlen, &name,&parselen) != HA_OK){			cl_log(LOG_ERR			,	"peel_netstring fails for name(netstring2msg)");			ha_msg_del(ret);			return(NULL);		}		sp +=  parselen;		datalen += parselen;		if (strncmp(sp, MSG_END_NETSTRING, endlen) == 0) {			if (!is_auth_netstring(datap, tmp, name,nlen) ){				if (!cl_msg_quiet_fmterr) {					cl_log(LOG_ERR					,	"netstring authentication"					" failed, s=%s, autotoken=%s, sp=%s"					,	s, name, sp);					cl_log_message(LOG_ERR, ret);				}				ha_msg_del(ret);				return(NULL);			}			goto happyexit;		}		if (peel_netstring(sp , smax, &tlen, &type, &parselen) !=HA_OK){			cl_log(LOG_ERR			,	"peel_netstring() error in netstring2msg"			" for type");			ha_msg_del(ret);			return(NULL);		}		sp +=  parselen;		datalen += parselen;						if (peel_netstring(sp, smax, &vlen, &value, &parselen) !=HA_OK){			cl_log(LOG_ERR			,  "peel_netstring() error in netstring2msg for value");			ha_msg_del(ret);			return(NULL);		}		sp +=  parselen;		datalen += parselen;				fieldtype = atoi(type);						if (fieldtype < sizeof(fieldtypefuncs) 		    / sizeof(fieldtypefuncs[0])){								netstringtofield = fieldtypefuncs[fieldtype].netstringtofield;			memfree = fieldtypefuncs[fieldtype].memfree;			if (!netstringtofield || netstringtofield(value, vlen,								  &ret_value, &ret_vlen) != HA_OK){				cl_log(LOG_ERR, "netstring2msg: "				       "tonetstring() failed, type=%d", fieldtype);				return NULL;			}		}else {			cl_log(LOG_ERR, "netstring2msg: wrong type(%d)", fieldtype);			return NULL;		}						if (ha_msg_nadd_type(ret, name, nlen, ret_value, ret_vlen, fieldtype)		    != HA_OK) {			cl_log(LOG_ERR, "ha_msg_nadd fails(netstring2msg)");						if (memfree && ret_value){				memfree(ret_value);			} else{				cl_log(LOG_ERR, "netstring2msg:"				       "memfree or ret_value is NULL");			}						ha_msg_del(ret);			return(NULL);		}						if (memfree && ret_value){			memfree(ret_value);		} else{			cl_log(LOG_ERR, "netstring2msg:"			       "memfree or ret_value is NULL");		}	}	/* if program runs here,	   the message is generated but	   no authentication found*/		if (!need_auth){		return(ret);	}else {		if (!cl_msg_quiet_fmterr) {			cl_log(LOG_ERR, "no authentication found in netstring");		}		ha_msg_del(ret);		return(NULL);	}	 happyexit:	return(ret);	}intis_auth_netstring(const char * datap, size_t datalen,		  const char * authstring, size_t authlen){	char	authstr[MAXLINE];	/* A copy of authstring */	int	authwhich;	char	authtoken[MAXLINE];	/*	 * If we don't have any authentication method - everything is authentic...	 */	if (!authmethod) {		return TRUE;	}	strncpy(authstr, authstring, MAXLINE);	authstr[authlen] = 0;	if (sscanf(authstr, "%d %s", &authwhich, authtoken) != 2) {		if (!cl_msg_quiet_fmterr) {			cl_log(LOG_WARNING			,	"Bad/invalid netstring auth string");		}		return(0);	}	if (authmethod(authwhich, datap, datalen, authstr, authlen)	!=	authwhich) {		if (!cl_msg_quiet_fmterr) {			cl_log(LOG_WARNING			,	"Invalid authentication [%d] in message!"			,	authwhich);		}		return(FALSE);	}	if (strcmp(authtoken, authstr) == 0) {		return(TRUE);	}	if (!cl_msg_quiet_fmterr) {		cl_log(LOG_ERR		,	"authtoken does not match, authtoken=%s, authstr=%s"		       ,	authtoken, authstr);	}	return(FALSE);} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久免费桃花| 美女国产一区二区三区| 日本中文字幕一区二区有限公司| 国产精品一区二区三区四区| 欧美唯美清纯偷拍| 中文字幕精品一区二区精品绿巨人| 丝袜亚洲另类欧美| 9i看片成人免费高清| 国产亚洲成aⅴ人片在线观看| 日韩中文字幕麻豆| 欧美日韩在线三级| 国产精品久久久久久久久免费樱桃| 美女免费视频一区| 91精品蜜臀在线一区尤物| 亚洲欧美另类久久久精品2019| 国产成人综合亚洲91猫咪| 91精品福利在线一区二区三区| 亚洲欧美中日韩| 国产91精品精华液一区二区三区| 日韩免费电影网站| 性欧美大战久久久久久久久| 欧美影院一区二区| 亚洲一区二区三区中文字幕在线| 色综合久久精品| 一区二区三区四区高清精品免费观看 | 麻豆久久久久久| 欧美丝袜第三区| 一区二区三区精品| 91老司机福利 在线| 亚洲色图一区二区| www.成人在线| 中文字幕在线不卡一区| 成人激情综合网站| 国产精品乱子久久久久| 成人av在线观| 亚洲免费在线电影| 欧美日韩日日骚| 蜜臀av性久久久久蜜臀aⅴ| 日韩精品中文字幕一区二区三区| 久久99深爱久久99精品| 国产午夜久久久久| 成人av小说网| 亚洲综合成人在线视频| 在线电影院国产精品| 免费在线观看日韩欧美| 久久精品欧美日韩精品| 91在线观看高清| 亚洲国产精品久久人人爱蜜臀| 欧美久久久久久蜜桃| 久久激情五月婷婷| 国产日韩欧美在线一区| 91同城在线观看| 日本女人一区二区三区| 国产拍揄自揄精品视频麻豆| 日本二三区不卡| 另类专区欧美蜜桃臀第一页| 久久久电影一区二区三区| 色国产综合视频| 久久99精品久久久久婷婷| 欧美国产精品久久| 欧美区视频在线观看| 国产伦精一区二区三区| 亚洲精品美国一| 久久久另类综合| 欧美亚洲免费在线一区| 国产精品羞羞答答xxdd| 一区二区三区久久久| 久久一区二区视频| 欧美午夜视频网站| 国产精品一区不卡| 午夜精品影院在线观看| 久久精品人人做人人爽97| 欧美日韩中文字幕一区二区| 国产最新精品免费| 亚洲午夜电影在线观看| 国产精品毛片久久久久久久| 8v天堂国产在线一区二区| 不卡的电视剧免费网站有什么| 日韩国产在线观看| 亚洲一区二区欧美激情| 国产精品亲子伦对白| 日韩欧美国产综合一区| 在线观看精品一区| 成人a区在线观看| 精久久久久久久久久久| 午夜视频在线观看一区二区| 亚洲手机成人高清视频| 国产色爱av资源综合区| 日韩一级大片在线观看| 精品视频在线视频| 91黄色在线观看| 成人深夜视频在线观看| 久久99精品网久久| 日本 国产 欧美色综合| 亚洲国产精品一区二区久久恐怖片 | 亚洲欧美日韩中文字幕一区二区三区| 欧美一级欧美一级在线播放| 在线精品视频免费观看| 色综合中文字幕国产| 国产精品一区二区在线观看不卡 | 精品久久久久久久人人人人传媒 | 亚洲国产成人午夜在线一区| 日韩欧美在线不卡| 欧美日韩国产系列| 精品视频色一区| 欧美亚洲另类激情小说| 欧美自拍偷拍一区| 91福利视频久久久久| 欧美色图天堂网| 欧美日韩激情在线| 制服.丝袜.亚洲.中文.综合| 欧美影片第一页| 欧美日韩视频在线观看一区二区三区| 91首页免费视频| 色婷婷av一区二区| 欧美性一级生活| 欧美男生操女生| 日韩一区二区麻豆国产| 日韩精品最新网址| 国产视频一区二区三区在线观看| 久久久精品2019中文字幕之3| 久久久国产精华| 国产精品进线69影院| 国产精品福利一区| 亚洲国产一区视频| 日本欧洲一区二区| 国产东北露脸精品视频| 91婷婷韩国欧美一区二区| 91福利社在线观看| 91精品国产综合久久国产大片| 日韩写真欧美这视频| 久久精品综合网| 国产精品福利一区二区三区| 亚洲综合久久久久| 免费观看久久久4p| 国产大陆亚洲精品国产| 日本伦理一区二区| 日韩美女天天操| 日韩美女啊v在线免费观看| 一区二区三区欧美| 精品一区二区国语对白| av电影天堂一区二区在线| 欧美亚洲国产一区二区三区va| 日韩视频在线一区二区| 日本一区二区三区国色天香| 亚洲制服欧美中文字幕中文字幕| 免费在线成人网| 91色porny蝌蚪| 日韩免费视频一区| 亚洲美女视频在线| 国内外成人在线视频| 91视频免费播放| 欧美电影免费观看高清完整版在 | 国产精品初高中害羞小美女文| 亚洲综合图片区| 国产91高潮流白浆在线麻豆| 欧美三区在线观看| 国产欧美综合色| 日日夜夜免费精品视频| 不卡一区中文字幕| 日韩欧美二区三区| 亚洲妇女屁股眼交7| av一二三不卡影片| 精品国产三级电影在线观看| 亚洲国产wwwccc36天堂| 国产91对白在线观看九色| 欧美一二三四在线| 夜夜操天天操亚洲| 不卡免费追剧大全电视剧网站| 欧美tickling网站挠脚心| 亚洲综合一区二区| 91亚洲国产成人精品一区二三| 久久久亚洲午夜电影| 日本亚洲天堂网| 欧美三区在线视频| 亚洲曰韩产成在线| 91亚洲永久精品| 国产精品久久久久影院亚瑟| 久久国产精品免费| 91麻豆精品国产91久久久久久久久 | 国产精品一区免费在线观看| 这里只有精品视频在线观看| 亚洲一区在线播放| 欧美综合视频在线观看| 亚洲乱码日产精品bd| 97精品超碰一区二区三区| 久久久久久电影| 国内精品写真在线观看| 日韩欧美一区二区不卡| 亚洲国产三级在线| 欧美日韩一卡二卡| 亚洲网友自拍偷拍| 欧美日韩不卡视频| 亚洲6080在线| 欧美日韩夫妻久久| 偷拍一区二区三区四区| 欧美日本一区二区| 日韩二区在线观看| 欧美大片拔萝卜| 国内成人精品2018免费看|