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

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

?? authfd.c

?? C++編寫
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland *                    All rights reserved * Functions for connecting the local authentication agent. * * As far as I am concerned, the code I have written for this software * can be used freely for any purpose.  Any derived versions of this * software must be clearly marked as such, and if the derived work is * incompatible with the protocol description in the RFC file, it must be * called by a name other than "ssh" or "Secure Shell". * * SSH2 implementation, * Copyright (c) 2000 Markus Friedl.  All rights reserved. * * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 "includes.h"RCSID("$OpenBSD: authfd.c,v 1.58 2003/01/23 13:50:27 markus Exp $");#include <openssl/evp.h>#include "ssh.h"#include "rsa.h"#include "buffer.h"#include "bufaux.h"#include "xmalloc.h"#include "getput.h"#include "key.h"#include "authfd.h"#include "cipher.h"#include "kex.h"#include "compat.h"#include "log.h"#include "atomicio.h"static int agent_present = 0;/* helper */int	decode_reply(int type);/* macro to check for "agent failure" message */#define agent_failed(x) \    ((x == SSH_AGENT_FAILURE) || (x == SSH_COM_AGENT2_FAILURE) || \    (x == SSH2_AGENT_FAILURE))intssh_agent_present(void){	int authfd;	if (agent_present)		return 1;	if ((authfd = ssh_get_authentication_socket()) == -1)		return 0;	else {		ssh_close_authentication_socket(authfd);		return 1;	}}/* Returns the number of the authentication fd, or -1 if there is none. */intssh_get_authentication_socket(void){	const char *authsocket;	int sock;	struct sockaddr_un sunaddr;	authsocket = getenv(SSH_AUTHSOCKET_ENV_NAME);	if (!authsocket)		return -1;	sunaddr.sun_family = AF_UNIX;	strlcpy(sunaddr.sun_path, authsocket, sizeof(sunaddr.sun_path));	sock = socket(AF_UNIX, SOCK_STREAM, 0);	if (sock < 0)		return -1;	/* close on exec */	if (fcntl(sock, F_SETFD, 1) == -1) {		close(sock);		return -1;	}	if (connect(sock, (struct sockaddr *) &sunaddr, sizeof sunaddr) < 0) {		close(sock);		return -1;	}	agent_present = 1;	return sock;}static intssh_request_reply(AuthenticationConnection *auth, Buffer *request, Buffer *reply){	int l, len;	char buf[1024];	/* Get the length of the message, and format it in the buffer. */	len = buffer_len(request);	PUT_32BIT(buf, len);	/* Send the length and then the packet to the agent. */	if (atomicio(write, auth->fd, buf, 4) != 4 ||	    atomicio(write, auth->fd, buffer_ptr(request),	    buffer_len(request)) != buffer_len(request)) {		error("Error writing to authentication socket.");		return 0;	}	/*	 * Wait for response from the agent.  First read the length of the	 * response packet.	 */	len = 4;	while (len > 0) {		l = read(auth->fd, buf + 4 - len, len);		if (l == -1 && (errno == EAGAIN || errno == EINTR))			continue;		if (l <= 0) {			error("Error reading response length from authentication socket.");			return 0;		}		len -= l;	}	/* Extract the length, and check it for sanity. */	len = GET_32BIT(buf);	if (len > 256 * 1024)		fatal("Authentication response too long: %d", len);	/* Read the rest of the response in to the buffer. */	buffer_clear(reply);	while (len > 0) {		l = len;		if (l > sizeof(buf))			l = sizeof(buf);		l = read(auth->fd, buf, l);		if (l == -1 && (errno == EAGAIN || errno == EINTR))			continue;		if (l <= 0) {			error("Error reading response from authentication socket.");			return 0;		}		buffer_append(reply, buf, l);		len -= l;	}	return 1;}/* * Closes the agent socket if it should be closed (depends on how it was * obtained).  The argument must have been returned by * ssh_get_authentication_socket(). */voidssh_close_authentication_socket(int sock){	if (getenv(SSH_AUTHSOCKET_ENV_NAME))		close(sock);}/* * Opens and connects a private socket for communication with the * authentication agent.  Returns the file descriptor (which must be * shut down and closed by the caller when no longer needed). * Returns NULL if an error occurred and the connection could not be * opened. */AuthenticationConnection *ssh_get_authentication_connection(void){	AuthenticationConnection *auth;	int sock;	sock = ssh_get_authentication_socket();	/*	 * Fail if we couldn't obtain a connection.  This happens if we	 * exited due to a timeout.	 */	if (sock < 0)		return NULL;	auth = xmalloc(sizeof(*auth));	auth->fd = sock;	buffer_init(&auth->identities);	auth->howmany = 0;	return auth;}/* * Closes the connection to the authentication agent and frees any associated * memory. */voidssh_close_authentication_connection(AuthenticationConnection *auth){	buffer_free(&auth->identities);	close(auth->fd);	xfree(auth);}/* Lock/unlock agent */intssh_lock_agent(AuthenticationConnection *auth, int lock, const char *password){	int type;	Buffer msg;	buffer_init(&msg);	buffer_put_char(&msg, lock ? SSH_AGENTC_LOCK : SSH_AGENTC_UNLOCK);	buffer_put_cstring(&msg, password);	if (ssh_request_reply(auth, &msg, &msg) == 0) {		buffer_free(&msg);		return 0;	}	type = buffer_get_char(&msg);	buffer_free(&msg);	return decode_reply(type);}/* * Returns the first authentication identity held by the agent. */intssh_get_num_identities(AuthenticationConnection *auth, int version){	int type, code1 = 0, code2 = 0;	Buffer request;	switch (version) {	case 1:		code1 = SSH_AGENTC_REQUEST_RSA_IDENTITIES;		code2 = SSH_AGENT_RSA_IDENTITIES_ANSWER;		break;	case 2:		code1 = SSH2_AGENTC_REQUEST_IDENTITIES;		code2 = SSH2_AGENT_IDENTITIES_ANSWER;		break;	default:		return 0;	}	/*	 * Send a message to the agent requesting for a list of the	 * identities it can represent.	 */	buffer_init(&request);	buffer_put_char(&request, code1);	buffer_clear(&auth->identities);	if (ssh_request_reply(auth, &request, &auth->identities) == 0) {		buffer_free(&request);		return 0;	}	buffer_free(&request);	/* Get message type, and verify that we got a proper answer. */	type = buffer_get_char(&auth->identities);	if (agent_failed(type)) {		return 0;	} else if (type != code2) {		fatal("Bad authentication reply message type: %d", type);	}	/* Get the number of entries in the response and check it for sanity. */	auth->howmany = buffer_get_int(&auth->identities);	if (auth->howmany > 1024)		fatal("Too many identities in authentication reply: %d",		    auth->howmany);	return auth->howmany;}Key *ssh_get_first_identity(AuthenticationConnection *auth, char **comment, int version){	/* get number of identities and return the first entry (if any). */	if (ssh_get_num_identities(auth, version) > 0)		return ssh_get_next_identity(auth, comment, version);	return NULL;}Key *ssh_get_next_identity(AuthenticationConnection *auth, char **comment, int version){	u_int bits;	u_char *blob;	u_int blen;	Key *key = NULL;	/* Return failure if no more entries. */	if (auth->howmany <= 0)		return NULL;	/*	 * Get the next entry from the packet.  These will abort with a fatal	 * error if the packet is too short or contains corrupt data.	 */	switch (version) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本亚洲免费观看| 国产盗摄一区二区| 国产精品正在播放| 欧美午夜精品一区| 久久久久久久综合狠狠综合| 亚洲中国最大av网站| 国产精品88av| 欧美一区二区三区男人的天堂| 亚洲国产精品激情在线观看| 日本欧美在线观看| 91亚洲精华国产精华精华液| 精品国产免费视频| 首页欧美精品中文字幕| a美女胸又www黄视频久久| 精品国产三级a在线观看| 亚洲18色成人| 色综合色狠狠综合色| 中文字幕久久午夜不卡| 日韩电影免费在线看| 在线观看国产精品网站| 国产精品国产精品国产专区不蜜 | 337p亚洲精品色噜噜| 亚洲欧洲日韩在线| 国产超碰在线一区| www激情久久| 精品一二三四在线| 日韩欧美卡一卡二| 麻豆精品精品国产自在97香蕉| 色菇凉天天综合网| 亚洲欧美精品午睡沙发| 白白色 亚洲乱淫| 国产精品人妖ts系列视频| 国产麻豆精品视频| 久久综合网色—综合色88| 日韩精品一级二级| 日韩一级精品视频在线观看| 亚洲午夜成aⅴ人片| 日本韩国欧美在线| 亚洲国产精品一区二区www| 在线免费观看成人短视频| 亚洲黄色av一区| 欧美天天综合网| 午夜欧美视频在线观看| 欧美一区二区三区四区五区| 久久精品国产77777蜜臀| 精品国产一区二区三区久久影院| 精品一区二区三区在线观看| 亚洲精品一区二区三区香蕉 | 成人免费观看男女羞羞视频| 国产日韩三级在线| 成人精品国产一区二区4080| 亚洲欧洲精品成人久久奇米网| av毛片久久久久**hd| 一区二区三区毛片| 欧美日韩国产精品成人| 免费高清在线视频一区·| 亚洲精品一区二区三区在线观看| 国产成人在线视频免费播放| 国产精品麻豆网站| 欧美视频三区在线播放| 久久国产精品免费| 中文字幕中文字幕一区二区| 欧美自拍丝袜亚洲| 看片的网站亚洲| 中文字幕巨乱亚洲| 欧美精品久久一区| 国产69精品久久777的优势| 一区二区久久久| 欧美一级电影网站| a亚洲天堂av| 久久激情综合网| 亚洲日本一区二区| 日韩视频一区在线观看| 99久久国产免费看| 蜜臀av国产精品久久久久| 中文字幕电影一区| 欧美一区二区在线免费播放| 成人网男人的天堂| 日韩国产欧美在线视频| 国产精品美女www爽爽爽| 欧美理论片在线| 成人精品免费视频| 日韩电影一二三区| 亚洲综合在线视频| 久久久精品综合| 日韩一级大片在线| 欧美亚洲综合网| 国产成人丝袜美腿| 久久精品国产亚洲一区二区三区 | 五月婷婷综合在线| 国产精品日韩精品欧美在线| 日韩精品一区二区三区视频播放| 91浏览器在线视频| 国产福利视频一区二区三区| 免费在线看一区| 亚洲永久免费av| 亚洲免费成人av| 国产精品污www在线观看| 精品欧美黑人一区二区三区| 欧美精品丝袜久久久中文字幕| 91蝌蚪porny成人天涯| 粉嫩av一区二区三区| 精品一区二区三区在线播放| 日韩激情视频在线观看| 亚洲自拍欧美精品| 亚洲综合一区二区| 亚洲制服丝袜av| 亚洲自拍欧美精品| 一区二区三区免费看视频| 亚洲欧美日韩一区| 亚洲伦理在线精品| 亚洲精品欧美二区三区中文字幕| 国产欧美一区二区三区在线看蜜臀 | 欧美日韩一区二区三区四区 | 国产美女精品一区二区三区| 美女网站一区二区| 久久精品免费看| 黄网站免费久久| 久久99精品国产91久久来源| 久久精品国产亚洲5555| 加勒比av一区二区| 国产一区999| 丁香亚洲综合激情啪啪综合| 国产成人久久精品77777最新版本| 精品在线一区二区三区| 久久精品国产澳门| 国产精品一卡二卡| 成人免费视频网站在线观看| www.久久久久久久久| 色综合 综合色| 欧美顶级少妇做爰| 精品国产伦一区二区三区观看体验 | 久久国产精品第一页| 久久99精品国产91久久来源| 国产精品自拍一区| av资源站一区| 欧美专区在线观看一区| 91精品国产入口在线| 日韩免费一区二区三区在线播放| 欧美成人一区二区三区在线观看| 久久久国产午夜精品| 国产精品久久福利| 亚洲午夜日本在线观看| 日韩高清国产一区在线| 国产精品资源在线| 91久久香蕉国产日韩欧美9色| 欧美日韩高清不卡| 久久精品亚洲精品国产欧美kt∨ | 国产一区中文字幕| 91小宝寻花一区二区三区| 欧美人xxxx| 国产精品私人自拍| 日日骚欧美日韩| 国产凹凸在线观看一区二区| 色老综合老女人久久久| 欧美成人高清电影在线| 中文字幕在线观看不卡| 日韩国产在线一| 成人伦理片在线| 欧美精品久久一区二区三区| 国产精品视频第一区| 免费观看一级特黄欧美大片| 色呦呦日韩精品| 欧美成人性福生活免费看| 亚洲另类一区二区| 国产尤物一区二区在线| 欧美艳星brazzers| 国产精品毛片大码女人| 久久97超碰色| 欧美日韩黄视频| 亚洲欧洲成人自拍| 国产一区二区三区免费观看| 欧美性感一区二区三区| 国产精品护士白丝一区av| 蜜臀久久99精品久久久画质超高清| 91亚洲资源网| 中文字幕二三区不卡| 国产一区欧美日韩| 日韩三级视频中文字幕| 亚洲一区电影777| 色哟哟亚洲精品| 中文字幕亚洲不卡| 国产精品77777| 久久久亚洲午夜电影| 欧美aa在线视频| 91精品国产综合久久久蜜臀粉嫩| 一区二区三区高清在线| 99re成人在线| 中文字幕一区二区三区乱码在线| 国产乱子伦一区二区三区国色天香| 91麻豆精品国产91久久久| 亚洲国产中文字幕在线视频综合| 91蜜桃免费观看视频| 国产欧美一区二区精品仙草咪| 蓝色福利精品导航| 日韩精品一区二区三区视频播放| 日本中文一区二区三区| 欧美伦理视频网站| 日本特黄久久久高潮| 日韩一区二区精品葵司在线|