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

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

?? auth.cc

?? RIP 協議實現
?? CC
?? 第 1 頁 / 共 2 頁
字號:
    //    // XXX: if no valid keys, then don't use any authentication    //    if (_valid_key_chain.empty()) {	return (_null_handler.effective_name());    }    return auth_type_name();}const char*MD5AuthHandler::auth_type_name(){    return "md5";}voidMD5AuthHandler::reset(){    //    // XXX: if no valid keys, then don't use any authentication    //    if (_valid_key_chain.empty()) {	_null_handler.reset();	return;    }    reset_keys();}uint32_tMD5AuthHandler::head_entries() const{    //    // XXX: if no valid keys, then don't use any authentication    //    if (_valid_key_chain.empty()) {	return (_null_handler.head_entries());    }    return 1;}uint32_tMD5AuthHandler::max_routing_entries() const{    //    // XXX: if no valid keys, then don't use any authentication    //    if (_valid_key_chain.empty()) {	return (_null_handler.max_routing_entries());    }    return RIPv2_ROUTES_PER_PACKET - 1;}boolMD5AuthHandler::authenticate_inbound(const uint8_t*		packet,				     size_t			packet_bytes,				     const uint8_t*&		entries_ptr,				     uint32_t&			n_entries,				     const IPv4&		src_addr,				     bool			new_peer){    static_assert(MD5PacketTrailer::SIZE == 20);    //    // XXX: if no valid keys, then don't use any authentication    //    if (_valid_key_chain.empty()) {	if (_null_handler.authenticate_inbound(packet, packet_bytes,					       entries_ptr, n_entries,					       src_addr, new_peer)	    != true) {	    set_error(_null_handler.error());	    return (false);	}	reset_error();	return (true);    }    entries_ptr = NULL;    n_entries = 0;    if (packet_bytes > RIPv2_MAX_PACKET_BYTES + MD5PacketTrailer::size()) {	set_error(c_format("packet too large (%u bytes)",			   XORP_UINT_CAST(packet_bytes)));	return false;    }    if (packet_bytes < RIPv2_MIN_AUTH_PACKET_BYTES) {	set_error(c_format("packet too small (%u bytes)",			   XORP_UINT_CAST(packet_bytes)));	return false;    }    const MD5PacketRouteEntry4 mpr(packet + RipPacketHeader::size());    if (mpr.addr_family() != MD5PacketRouteEntry4::ADDR_FAMILY) {	set_error("not an authenticated packet");	return false;    }    if (mpr.auth_type() != MD5PacketRouteEntry4::AUTH_TYPE) {	set_error("not an MD5 authenticated packet");	return false;    }    if (mpr.auth_bytes() != MD5PacketTrailer::size()) {	set_error(c_format("wrong number of auth bytes (%d != %u)",			   mpr.auth_bytes(),			   XORP_UINT_CAST(MD5PacketTrailer::size())));	return false;    }    if (uint32_t(mpr.auth_off() + mpr.auth_bytes()) != packet_bytes) {	set_error(c_format("Size of packet does not correspond with "			   "authentication data offset and size "			   "(%d + %d != %u).", mpr.auth_off(),			   mpr.auth_bytes(),			   XORP_UINT_CAST(packet_bytes)));	return false;    }    KeyChain::iterator k = find_if(_valid_key_chain.begin(),				   _valid_key_chain.end(),				   bind2nd(mem_fun_ref(&MD5Key::id_matches),					   mpr.key_id()));    if (k == _valid_key_chain.end()) {	set_error(c_format("packet with key ID %d for which no key is "			   "configured", mpr.key_id()));	return false;    }    MD5Key* key = &(*k);    if (new_peer)	key->reset(src_addr);    uint32_t last_seqno_recv = key->last_seqno_recv(src_addr);    if (key->packets_received(src_addr) && !(new_peer && mpr.seqno() == 0) &&	(mpr.seqno() - last_seqno_recv >= 0x7fffffff)) {	set_error(c_format("bad sequence number 0x%08x < 0x%08x",			   XORP_UINT_CAST(mpr.seqno()),			   XORP_UINT_CAST(last_seqno_recv)));	return false;    }    const MD5PacketTrailer mpt(packet + mpr.auth_off());    if (mpt.valid() == false) {	set_error("invalid authentication trailer");	return false;    }    MD5_CTX ctx;    uint8_t digest[16];    MD5_Init(&ctx);    MD5_Update(&ctx, packet, mpr.auth_off() + mpt.auth_data_offset());    MD5_Update(&ctx, key->key_data(), key->key_data_bytes());    MD5_Final(digest, &ctx);    if (memcmp(digest, mpt.auth_data(), mpt.auth_data_bytes()) != 0) {	set_error(c_format("authentication digest doesn't match local key "			   "(key ID = %d)", key->id()));// #define	DUMP_BAD_MD5#ifdef	DUMP_BAD_MD5	const char badmd5[] = "/tmp/rip_badmd5";	// If the file already exists don't dump anything. The file	// should contain and only one packet.	if (-1 == access(badmd5, R_OK)) {	    XLOG_INFO("Dumping bad MD5 to %s", badmd5);	    FILE *fp = fopen(badmd5, "w");	    fwrite(packet, packet_bytes, 1 , fp);	    fclose(fp);	}#endif	return false;    }    // Update sequence number only after packet has passed digest check    key->set_last_seqno_recv(src_addr, mpr.seqno());    reset_error();    n_entries = (mpr.auth_off() - RipPacketHeader::size()) /	PacketRouteEntry<IPv4>::size() - 1;    if (n_entries > 0) {	entries_ptr = (packet + RipPacketHeader::size()		       + MD5PacketRouteEntry4::size());    }    return true;}boolMD5AuthHandler::authenticate_outbound(RipPacket<IPv4>&	packet,				      list<RipPacket<IPv4> *>& auth_packets,				      size_t&		n_routes){    RipPacket<IPv4> first_packet(packet);    vector<uint8_t> first_trailer;    KeyChain::iterator iter;    static_assert(MD5PacketTrailer::SIZE == 20);    //    // XXX: if no valid keys, then don't use any authentication    //    if (_valid_key_chain.empty()) {	if (_null_handler.authenticate_outbound(packet, auth_packets,						n_routes)	    != true) {	    set_error(_null_handler.error());	    return (false);	}	reset_error();	return (true);    }    //    // Create an authenticated copy of the packet for each valid key    //    for (iter = _valid_key_chain.begin();	 iter != _valid_key_chain.end();	 ++iter) {	MD5Key& key = *iter;	RipPacket<IPv4>* copy_packet = new RipPacket<IPv4>(packet);	auth_packets.push_back(copy_packet);	uint8_t* first_entry_ptr = NULL;	if (head_entries() > 0)	    first_entry_ptr = copy_packet->route_entry_ptr(0);	MD5PacketRouteEntry4Writer mpr(first_entry_ptr);	mpr.initialize(copy_packet->data_bytes(), key.id(),		       MD5PacketTrailer::size(),		       key.next_seqno_out());	vector<uint8_t> trailer;	trailer.resize(MD5PacketTrailer::size());	MD5PacketTrailerWriter mpt(&trailer[0]);	mpt.initialize();	MD5_CTX ctx;	MD5_Init(&ctx);	MD5_Update(&ctx, copy_packet->data_ptr(), mpr.auth_off());	MD5_Update(&ctx, &trailer[0], mpt.auth_data_offset());	MD5_Update(&ctx, key.key_data(), key.key_data_bytes());	MD5_Final(mpt.auth_data(), &ctx);	//	// XXX: create a copy of the first packet without the trailer	// and of the trailer itself.	//	if (iter == _valid_key_chain.begin()) {	    first_packet = *copy_packet;	    first_trailer = trailer;	}	copy_packet->append_data(trailer);    }    packet = first_packet;    n_routes = packet.data_bytes() / MD5PacketRouteEntry4::size() - 1;    packet.append_data(first_trailer);    reset_error();    return (true);}boolMD5AuthHandler::add_key(uint8_t		key_id,			const string&	key,			const TimeVal&	start_timeval,			const TimeVal&	end_timeval,			string&		error_msg){    TimeVal now;    XorpTimer start_timer, end_timer;    string dummy_error_msg;    _eventloop.current_time(now);    if (start_timeval > end_timeval) {	error_msg = c_format("Start time is later than the end time");	return false;    }    if (end_timeval < now) {	error_msg = c_format("End time is in the past");	return false;    }    if (start_timeval > now) {	start_timer = _eventloop.new_oneoff_at(	    start_timeval,	    callback(this, &MD5AuthHandler::key_start_cb, key_id));    }    if (end_timeval != TimeVal::MAXIMUM()) {	end_timer = _eventloop.new_oneoff_at(	    end_timeval,	    callback(this, &MD5AuthHandler::key_stop_cb, key_id));    }    //    // XXX: If we are using the last authentication key that has expired,    // move it to the list of invalid keys.    //    if (_valid_key_chain.size() == 1) {	MD5Key& key = _valid_key_chain.front();	if (key.is_persistent()) {	    key.set_persistent(false);	    _invalid_key_chain.push_back(key);	    _valid_key_chain.pop_front();	}    }    // XXX: for simplicity just try to remove the key even if it doesn't exist    remove_key(key_id, dummy_error_msg);    // Add the new key to the appropriate chain    MD5Key new_key = MD5Key(key_id, key, start_timeval, end_timeval,			    start_timer, end_timer);    if (start_timer.scheduled())	_invalid_key_chain.push_back(new_key);    else	_valid_key_chain.push_back(new_key);    return true;}boolMD5AuthHandler::remove_key(uint8_t key_id, string& error_msg){    KeyChain::iterator i;    // Check among all valid keys    i = find_if(_valid_key_chain.begin(), _valid_key_chain.end(),		bind2nd(mem_fun_ref(&MD5Key::id_matches), key_id));    if (i != _valid_key_chain.end()) {	_valid_key_chain.erase(i);	return true;    }    // Check among all invalid keys    i = find_if(_invalid_key_chain.begin(), _invalid_key_chain.end(),		bind2nd(mem_fun_ref(&MD5Key::id_matches), key_id));    if (i != _invalid_key_chain.end()) {	_invalid_key_chain.erase(i);	return true;    }    error_msg = c_format("No such key");    return false;}voidMD5AuthHandler::key_start_cb(uint8_t key_id){    KeyChain::iterator i;    // Find the key among all invalid keys and move it to the valid keys    i = find_if(_invalid_key_chain.begin(), _invalid_key_chain.end(),		bind2nd(mem_fun_ref(&MD5Key::id_matches), key_id));    if (i != _invalid_key_chain.end()) {	MD5Key& key = *i;	_valid_key_chain.push_back(key);	_invalid_key_chain.erase(i);    }}voidMD5AuthHandler::key_stop_cb(uint8_t key_id){    KeyChain::iterator i;    // Find the key among all valid keys and move it to the invalid keys    i = find_if(_valid_key_chain.begin(), _valid_key_chain.end(),		bind2nd(mem_fun_ref(&MD5Key::id_matches), key_id));    if (i != _valid_key_chain.end()) {	MD5Key& key = *i;	//	// XXX: If the last key expires then keep using it as per	// RFC 2082 Section 4.3 until the lifetime is extended, the key	// is deleted by network management, or a new key is configured.	//	if (_valid_key_chain.size() == 1) {	    XLOG_WARNING("Last authentication key (key ID = %u) has expired. "			 "Will keep using it until its lifetime is extended, "			 "the key is deleted, or a new key is configured.",			 key_id);	    key.set_persistent(true);	    return;	}	_invalid_key_chain.push_back(key);	_valid_key_chain.erase(i);    }}voidMD5AuthHandler::reset_keys(){    KeyChain::iterator iter;    for (iter = _valid_key_chain.begin();	 iter != _valid_key_chain.end();	 ++iter) {	iter->reset();    }}boolMD5AuthHandler::empty() const{    return (_valid_key_chain.empty() && _invalid_key_chain.empty());}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区在线不卡| 91精品国产91久久久久久一区二区 | 欧美一区二区福利在线| 亚洲成人先锋电影| 91精品国产高清一区二区三区 | 在线免费观看日本欧美| 亚洲超丰满肉感bbw| 91麻豆精品国产| 精品一区二区三区香蕉蜜桃| 欧美精品一区男女天堂| 丰满亚洲少妇av| 亚洲激情欧美激情| 7777精品伊人久久久大香线蕉超级流畅| 日本不卡一二三| 久久久久久久久久久电影| 成人国产一区二区三区精品| 亚洲精品伦理在线| 欧美一区二区黄| 成人激情午夜影院| 亚洲电影一区二区| www久久久久| 99久久久精品免费观看国产蜜| 亚洲精品ww久久久久久p站| 56国语精品自产拍在线观看| 国产一区二区伦理| 一区二区三区欧美日韩| 欧美一区日韩一区| 亚洲精品在线三区| 在线亚洲+欧美+日本专区| 玉足女爽爽91| 欧美精品粉嫩高潮一区二区| 国产精品一区一区| 亚洲午夜一区二区| 国产丝袜在线精品| 欧美视频在线一区二区三区| 国产精品1区二区.| 午夜天堂影视香蕉久久| 国产三级精品在线| 欧美高清性hdvideosex| 成人久久视频在线观看| 男人的天堂久久精品| 亚洲男人的天堂网| 国产视频在线观看一区二区三区| 欧美挠脚心视频网站| 99国产精品久久| 国产美女久久久久| 水蜜桃久久夜色精品一区的特点| 国产精品日韩精品欧美在线| 日韩欧美电影在线| 欧美色偷偷大香| 白白色 亚洲乱淫| 久久99精品久久只有精品| 亚洲国产一区视频| 国产精品第13页| 国产欧美一区二区精品婷婷| 欧美一区二区三区四区高清| 欧美日韩中文一区| 色哦色哦哦色天天综合| 成人免费电影视频| 久久精品国产网站| 日韩高清电影一区| 天天色天天爱天天射综合| 亚洲精品视频观看| 亚洲免费高清视频在线| 国产精品初高中害羞小美女文| 久久久久久久久久电影| 精品成人一区二区三区| 日韩免费福利电影在线观看| 久久久精品tv| 日韩欧美激情四射| 精品少妇一区二区三区日产乱码 | 国产精品伦理在线| 久久久精品免费网站| 久久夜色精品国产噜噜av| 日韩精品一区二区在线观看| 欧美成人女星排行榜| 精品国产91乱码一区二区三区| 91精品国产品国语在线不卡| 欧美一区二区在线免费播放| 91精品国产综合久久福利软件| 欧美精品一卡二卡| 777a∨成人精品桃花网| 日韩精品最新网址| 久久久精品tv| 中文字幕字幕中文在线中不卡视频| 国产精品第四页| 亚洲一区二区综合| 日韩和欧美一区二区三区| 美女国产一区二区| 国产真实乱偷精品视频免| 国产99久久久国产精品潘金| 99re热这里只有精品免费视频| 色一区在线观看| 538在线一区二区精品国产| 精品美女在线观看| 国产农村妇女毛片精品久久麻豆| 国产精品丝袜91| 亚洲一区二区三区自拍| 免费不卡在线视频| 国产精品主播直播| 欧美系列在线观看| 精品国产一区久久| 综合精品久久久| 日本伊人午夜精品| 国产成人免费在线观看| 在线亚洲+欧美+日本专区| 精品国产欧美一区二区| 亚洲图片另类小说| 免费美女久久99| 成人不卡免费av| 51午夜精品国产| 国产精品久久久久久久久免费相片 | 亚洲一区日韩精品中文字幕| 全国精品久久少妇| 99综合影院在线| 91麻豆精品国产自产在线| 国产日韩欧美精品在线| 亚洲国产日日夜夜| 国产在线视频一区二区| 在线看国产一区二区| 久久久蜜桃精品| 日韩精品亚洲一区二区三区免费| 国产精品一区二区黑丝| 欧美日韩综合色| 国产精品久久久久一区二区三区| 午夜精品久久久久影视| 丰满白嫩尤物一区二区| 在线91免费看| 伊人性伊人情综合网| 精品一区二区精品| 欧美日韩一区久久| 国产精品热久久久久夜色精品三区| 日韩成人精品在线| 91福利小视频| 中文文精品字幕一区二区| 蜜桃av噜噜一区| 欧美中文一区二区三区| 成人欧美一区二区三区白人| 精品一区二区三区免费观看| 欧美精品黑人性xxxx| 亚洲免费观看高清| 成人av电影在线| 久久久天堂av| 韩国精品主播一区二区在线观看 | 欧美一区二区在线看| 亚洲激情自拍视频| 99久久久精品| 国产精品你懂的在线| 国产成人亚洲综合a∨婷婷| 欧美一区二区三级| 天天综合色天天综合| 欧美三区在线视频| 一级做a爱片久久| 色哟哟国产精品免费观看| 1024成人网| 97国产一区二区| 亚洲欧美日韩国产一区二区三区| 国产91富婆露脸刺激对白| 2021久久国产精品不只是精品| 免费美女久久99| 精品免费视频.| 极品少妇xxxx精品少妇偷拍| 精品久久久久一区| 国产一区二区三区黄视频| 久久免费电影网| 国产精品1024久久| 国产欧美精品一区aⅴ影院| 成人免费视频一区| 国产精品美女久久久久久久| 粉嫩嫩av羞羞动漫久久久| 中文字幕亚洲区| av不卡免费在线观看| 一级女性全黄久久生活片免费| 色偷偷一区二区三区| 香港成人在线视频| 91精品欧美一区二区三区综合在 | 7777精品伊人久久久大香线蕉完整版| 亚洲一区二区三区三| 欧美男生操女生| 久久精品国产色蜜蜜麻豆| 精品久久久影院| 成人免费毛片app| 亚洲综合在线电影| 91精品啪在线观看国产60岁| 国内精品视频一区二区三区八戒| 亚洲国产精品99久久久久久久久| 99re亚洲国产精品| 午夜电影一区二区三区| 精品1区2区在线观看| 成人综合在线网站| 亚洲一区二区三区小说| 日韩免费电影一区| 成人av资源在线| 亚洲3atv精品一区二区三区| 精品欧美一区二区久久| 9色porny自拍视频一区二区| 亚洲成人精品影院| 久久久久久久久久久久久夜| 色婷婷综合激情| 另类综合日韩欧美亚洲|