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

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

?? gclient.c

?? openGFS , a kind of file system.
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * *    Copyright 2000-2001 Sistina Software, Inc. *    Portions Copyright 2001 The OpenGFS Project * *    This is free software released under the GNU General Public License. *    There is no warranty for this software.  See the file COPYING for *    details. * *    See the file AUTHORS for a list of contributors. * *//* * This is a user level interface for setting up and configuring the * gnbd client devices. *//* * AUDIT: <Alan> *	Audited for security flaws *	- Fixed multiple buffer overflows [LOCAL, TRUSTED NETWORK] *	- Fixed network DNS assumption insecurity [NETWORK] *	TODO *	- We need an authentication mechanism. Right now gclient will do *	  arbitarily dumb things and it really needs to. */#define HELPER_PROGRAM#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include <sys/ioctl.h>#include <netdb.h>#include <errno.h>#include <dirent.h>#include <ctype.h>#include "gnbd.h"int message_flag = 1;#define printm(fmt, args...)\{\	if(message_flag != 0) \		fprintf(stderr, "gclient: " fmt, ##args); \}typedef struct devlist_s {	char name[300];	struct devlist_s *next;} devlist_t;int match(char *name, devlist_t * ptr){	while (ptr != NULL) {		if (strcmp(name, ptr->name) == 0)			return 0;		ptr = ptr->next;	}	return -1;}devlist_t *getnext(devlist_t * ptr){	if (ptr == NULL)		return NULL;	return (ptr->next);}devlist_t *add(char *name, devlist_t * head){	devlist_t *ptr;	devlist_t *tmp = (devlist_t *) malloc(sizeof(devlist_t));	snprintf(tmp->name, 300, "%s", name);	tmp->next = NULL;	if (head == NULL)		return tmp;	ptr = head;	while (ptr->next != NULL)		ptr = ptr->next;	ptr->next = tmp;	return head;}devlist_t *clear(devlist_t * ptr){	devlist_t *tmp;	while (ptr != NULL) {		tmp = ptr;		ptr = ptr->next;		free(tmp);	}	return NULL;}int do_device_remove(int comm_fd, int minor_nr){	gnbd_device_t dev;	errno = 0;	dev.name = NULL;	dev.length = 0;	dev.action = GNBD_DEV_REMOVE;	dev.minor_nr = minor_nr;	if (ioctl(comm_fd, GNBD_DEVICE, &dev) < 0)		return -1;	return 0;}int do_disconnect(int comm_fd, char *dev_name){	struct stat st;	gnbd_action_t act;	char path[300];	errno = 0;	memset(&act, 0, sizeof(gnbd_action_t));	snprintf(path, 300, "/dev/gnbd/%s", dev_name);	if (stat(path, &st) < 0)		return -1;	act.device = minor(st.st_rdev);	act.action = GNBD_ACT_Disconnect;	if (ioctl(comm_fd, GNBD_ACTION, &act) < 0)		return -1;	return 0;}int do_connect(int comm_fd, uint16_t minor_nr){	gnbd_action_t act;	errno = 0;	memset(&act, 0, sizeof(gnbd_action_t));	act.device = minor_nr;	act.action = GNBD_ACT_Connect;	if (ioctl(comm_fd, GNBD_ACTION, &act) < 0)		return -1;	return 0;}int do_setipport(int comm_fd, uint16_t minor_nr, uint16_t port,		 struct in_addr ipaddr){	gnbd_action_t act;	errno = 0;	memset(&act, 0, sizeof(gnbd_action_t));	act.device = minor_nr;	act.port = htons(port);	act.ip = (uint32_t) ipaddr.s_addr;	act.action = GNBD_ACT_SetIPPort;	if (ioctl(comm_fd, GNBD_ACTION, &act) < 0) {		perror("ioctl failed");		return -1;	}	return 0;}int get_proc_data(char *buf, int len){	int n;	int bytes = 0;	int proc_fd;	proc_fd = open("/proc/gnbd", O_RDONLY);	if (proc_fd < 0) {		fprintf(stderr, "could not open /proc/gnbd: %s\n",			strerror(errno));		return -1;	}	while ((n = read(proc_fd, buf + bytes, len - bytes)) != 0) {		if (n < 0 && errno != EINTR) {			fprintf(stderr, "list request failed: %s\n",				strerror(errno));			close(proc_fd);			return -1;		}		bytes += n;	}	if (bytes < len)		buf[bytes] = 0;	else		buf[len - 1] = 0;	close(proc_fd);	return bytes;}int proc_match(char *name){	char buf[4096];	char *nameptr, *bufptr;	int bytes;	bytes = get_proc_data(buf, 4096);	if (bytes < 0)		return -1;	bufptr = buf;	while ((nameptr = strchr(bufptr, '/')) != NULL) {		nameptr++;		bufptr = strchr(nameptr, '/');		if (bufptr == NULL) {			perror("/proc/gnbd formatted incorrectly\n");			return -1;		}		*bufptr++ = 0;		if (strcmp(name, nameptr) == 0)			return 1;	}	return 0;}int do_device_create(int comm_fd, char *dev_name){	int err;	gnbd_device_t dev;	errno = 0;	err = proc_match(dev_name);	if (err < 0) {		fprintf(stderr, "errored trying proc_match\n");		return -1;	}	if (err == 1) {		errno = EEXIST;		return -1;	}	dev.name = dev_name;	dev.length = strlen(dev_name) + 1;	dev.action = GNBD_DEV_CREATE;	if (ioctl(comm_fd, GNBD_DEVICE, &dev) < 0) {		fprintf(stderr, "errored in ioctl\n");		return -1;	}	return dev.minor_nr;}int connect_to_server(char *hostname, uint16_t port, struct in_addr *ip_addr){	int sock_fd;	struct sockaddr_in server;	struct hostent *hp;	sock_fd = socket(AF_INET, SOCK_STREAM, 0);	if (sock_fd < 0) {		fprintf(stderr, "error creating socket: %s\n",			strerror(errno));		return -1;	}	server.sin_family = AF_INET;	hp = gethostbyname(hostname);	if (hp == NULL) {		fprintf(stderr, "cannot resolve host ip from name %s: %s",			hostname, strerror(errno));		return -1;	}	if (memcpy(&(server.sin_addr.s_addr), hp->h_addr, hp->h_length) ==	    NULL) {		fprintf(stderr, "cannot copy host address: %s\n",			strerror(errno));		return -1;	}	if (ip_addr != NULL)		ip_addr->s_addr = server.sin_addr.s_addr;	server.sin_port = htons(port);	if (connect(sock_fd, (struct sockaddr *) &server, sizeof(server)) <	    0) {		close(sock_fd);		fprintf(stderr, "error connecting to server: %s\n",			strerror(errno));		return -1;	}	return sock_fd;}int stomith(char *hostname){	uint32_t stomithip;	int bytes;	struct hostent *hp;	int sock_fd;	devlist_t *listptr, *iplist = NULL;	char buf[4096];	char *ipaddr, *bufptr;	hp = gethostbyname(hostname);	if (hp == NULL) {		fprintf(stderr,			"cannot resolve stomith host ip from name %s: %s\n",			hostname, strerror(errno));		return 1;	}	if (memcpy(&stomithip, hp->h_addr, hp->h_length) == NULL) {		fprintf(stderr, "cannot copy host address: %s\n",			strerror(errno));		return 1;	}	bufptr = (char *) &stomithip;	/* fprintf(stderr, "the stomith ip is %d.%d.%d.%d\n", (int)*bufptr,	   (int)*(bufptr+1), (int)*(bufptr+2), (int)*(bufptr+3)); */	bytes = get_proc_data(buf, 4096);	if (bytes < 0)		return 1;	bufptr = buf;	while ((ipaddr = strstr(bufptr, "IP :")) != NULL) {		ipaddr += 5;		if ((bufptr = strchr(ipaddr, '\n')) == NULL) {			fprintf(stderr, "malformed /proc/gnbd entry\n");			goto fail;		}		*bufptr++ = 0;		if (match(ipaddr, iplist) < 0)			iplist = add(ipaddr, iplist);	}	listptr = iplist;	while (listptr != NULL) {		sock_fd =		    connect_to_server(listptr->name, (unsigned int) 14243,				      NULL);		if (sock_fd < 0) {			fprintf(stderr,				"cannot connect to the server: %s\n",				strerror(errno));			goto fail;		}		write(sock_fd, "stom", 5);		write(sock_fd, (char *) &stomithip, 4);		read(sock_fd, buf, 5);		write(sock_fd, "bye", 4);		close(sock_fd);		if (strcmp(buf, "fail") == 0) {			fprintf(stderr,				"server is closing, cannot stomith\n");			goto fail;		}		listptr = getnext(listptr);	}	fprintf(stderr, "%s stomithed\n", hostname);	iplist = clear(iplist);	return 0;      fail:	iplist = clear(iplist);	return 1;}int getserver(char *hostname){	int n;	int total;	int sock_fd;	char buf[300];	char *port;	sock_fd = connect_to_server(hostname, (unsigned int) 14243, NULL);	if (sock_fd < 0)		return -1;	write(sock_fd, "port", 5);	printf("GNBD's on host: %s\n", hostname);	while (1) {		total = 0;		do {			n = read(sock_fd, buf+total, 300-total);			if (n < 0) {				close(sock_fd);				fprintf(stderr,					"error reading from the server: %s\n",					strerror(errno));				return -1;			}			total += n;		} while (buf[total - 1] != 0 && total!=300);			if(total==300)		{			fprintf(stderr, "error reading from server: reply too long.\n");			return -1;		}		if (strncmp(buf, "bye", 3) == 0)			break;		if ((port = strchr(buf, '/')) == NULL) {			fprintf(stderr, "malformed server message: %s\n",				buf);			close(sock_fd);			return -1;		}		*port++ = 0;		printf("Port: %5s  Name: %s\n", port, buf);		if (write(sock_fd, "next", 5) != 5) {			fprintf(stderr,				"error writing to the server: %s\n",				strerror(errno));			close(sock_fd);			return -1;		}	}	write(sock_fd, "quit", 5);	close(sock_fd);	return 0;}int validate_devs(int comm_fd){	DIR *dp;	int major_nr;	uint16_t minor_nr;	char buf[4096];	int bytes;	char *name;	char *minor;	char *bufptr;	char path[300];	devlist_t *save_list = NULL;	devlist_t *del_list = NULL;	devlist_t *list_ptr = NULL;	struct dirent *entry;	bytes = get_proc_data(buf, 4096);	if (bytes < 0)		return -1;	name = strchr(buf, ':');	name = name + 2;	bufptr = strchr(name, '\n');	*bufptr = 0;	major_nr = (int) strtoul(name, &bufptr, 0);	if (major_nr == 0 || bufptr == name) {		perror("couldn't find the major number for gnbd");		return -1;	}	bufptr++;	while ((name = strchr(bufptr, '/')) != NULL) {		name++;		bufptr = strchr(name, '/');		*bufptr++ = 0;		minor = strchr(bufptr, ':');		minor = minor + 2;		minor_nr = (uint16_t) strtoul(minor, &bufptr, 0);		if (minor_nr == 0 || bufptr == minor) {			fprintf(stderr,				"couldn't find the minor number for %s: %s\n",				name, strerror(errno));			return -1;		}		bufptr++;		if (do_connect(comm_fd, minor_nr) < 0) {			if (do_device_remove(comm_fd, (int) minor_nr) < 0) {				fprintf(stderr,					"couldn't remove bad device '%s': %s\n",					name, strerror(errno));				return -1;			}			printm("invalid GNBD '%s' removed\n", name);		} else {			save_list = add(name, save_list);		}	}	dp = opendir("/dev/gnbd/");	if (dp == NULL) {		perror("error opening directory /dev/gnbd");		clear(save_list);		return -1;	}	errno = 0;	while ((entry = readdir(dp)) != NULL) {		if (strcmp(entry->d_name, ".") == 0 ||		    strcmp(entry->d_name, "..") == 0)			continue;		if (match(entry->d_name, save_list) < 0)			del_list = add(entry->d_name, del_list);	}	clear(save_list);	if (closedir(dp) < 0) {		perror("error closeing directory /dev/gnbd");		save_list = clear(save_list);		del_list = clear(del_list);		return -1;	}	list_ptr = del_list;	while (list_ptr != NULL) {		snprintf(path, 300, "/dev/gnbd/%s", list_ptr->name);		if (remove(strcat(path, list_ptr->name)) < 0) {			fprintf(stderr, "error removing %s: %s\n", path,				strerror(errno));			del_list = clear(save_list);			del_list = clear(del_list);			return -1;		}		printm("removed file %s\n", path);		list_ptr = getnext(list_ptr);	}	del_list = clear(del_list);	return major_nr;}int list(void){	int i;	int bytes;	char *bufptr;	char buf[4096];	bytes = get_proc_data(buf, 4096);	if (bytes < 0)		return -1;	for (i = 0; i < bytes; i++)		if (buf[i] == '/')			buf[i] = ' ';	bufptr = strchr(buf, '\n');	if (bufptr == NULL || bufptr >= &buf[bytes]) {		perror("incorrectly formatted /proc/gnbd file?!?\n");		return -1;	}	printf("GNBD's currently registered%s", bufptr);	return 0;}int get_major_nr(void){	char buf[31];	int bytes;	char *major;	char *tail;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天影视色香欲综合网老头| 美女视频一区二区| 国产精品色在线| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美综合在线视频| gogogo免费视频观看亚洲一| 波多野结衣一区二区三区| 国产·精品毛片| 99久久综合色| 91原创在线视频| 91国产福利在线| 欧美日韩一区二区在线观看视频| 色狠狠av一区二区三区| 欧美午夜一区二区三区免费大片| 日本乱人伦aⅴ精品| 欧美三级日韩在线| 欧美狂野另类xxxxoooo| 欧美一级国产精品| 久久色.com| 国产精品久久久久久久久动漫 | 欧美日韩一区小说| 制服.丝袜.亚洲.中文.综合| 日韩一区二区高清| 亚洲精品一区二区三区蜜桃下载| 久久综合久久鬼色| 日韩一区在线看| 亚洲一区二区三区精品在线| 亚洲不卡在线观看| 精品一区二区影视| 不卡大黄网站免费看| 欧美怡红院视频| 日韩女优av电影在线观看| 国产欧美日韩三级| 亚洲黄色免费网站| 伦理电影国产精品| 成人av在线网站| 欧美日韩在线播放三区四区| 日韩女优制服丝袜电影| 国产精品入口麻豆九色| 洋洋av久久久久久久一区| 蜜桃av一区二区| 不卡视频一二三| 欧美一级爆毛片| 中文字幕亚洲不卡| 婷婷中文字幕综合| 成人黄动漫网站免费app| 欧美日韩另类国产亚洲欧美一级| 2欧美一区二区三区在线观看视频| 国产精品麻豆久久久| 亚洲成人综合网站| 岛国av在线一区| 欧美日韩国产精选| 国产亚洲综合在线| 亚洲bt欧美bt精品| 国产成人在线视频免费播放| 欧美在线free| 久久蜜桃av一区二区天堂| 一区二区三区欧美久久| 久久99精品一区二区三区 | 欧美一级在线免费| 国产精品传媒入口麻豆| 麻豆精品国产91久久久久久| 94-欧美-setu| 久久综合九色综合97婷婷女人| 亚洲免费av观看| 国产综合久久久久久久久久久久| 91激情五月电影| 欧美国产日韩一二三区| 日产精品久久久久久久性色 | 久久精品亚洲麻豆av一区二区| 亚洲精品高清在线| 国产不卡在线播放| 欧美日本一道本在线视频| 亚洲色图欧美偷拍| 国产suv精品一区二区883| 91精品欧美一区二区三区综合在| 136国产福利精品导航| 九色综合国产一区二区三区| 欧美性感一类影片在线播放| 欧美激情一区二区三区不卡| 精品一区二区三区香蕉蜜桃| 欧美日韩精品欧美日韩精品一| 中文字幕亚洲欧美在线不卡| 国产精品888| 精品国产亚洲一区二区三区在线观看| 亚洲自拍偷拍综合| 91原创在线视频| 亚洲欧美在线另类| 北条麻妃国产九九精品视频| 久久久国际精品| 九色|91porny| 日韩欧美一卡二卡| 毛片av中文字幕一区二区| 欧美日韩国产首页在线观看| 亚洲自拍都市欧美小说| 在线视频国产一区| 亚洲久本草在线中文字幕| 成人黄页毛片网站| 中文字幕精品一区二区三区精品| 国内精品伊人久久久久av一坑 | 色婷婷国产精品综合在线观看| 欧美激情一区二区三区| 国产成人精品亚洲日本在线桃色| 久久综合狠狠综合久久激情| 久久不见久久见免费视频7| 69堂亚洲精品首页| 日韩av一区二| 日韩一区二区三区在线视频| 免费亚洲电影在线| 日韩女优av电影| 狠狠色2019综合网| 久久九九全国免费| 成人va在线观看| 综合久久久久久久| 色视频一区二区| 一区二区三区日本| 制服丝袜一区二区三区| 免费不卡在线观看| 久久奇米777| 成人午夜视频福利| 亚洲色图欧美偷拍| 欧美日韩精品三区| 久久精品国产色蜜蜜麻豆| 久久久久一区二区三区四区| 成人手机在线视频| 一区二区三区美女| 欧美一区二区三级| 国产成人啪免费观看软件| 国产精品三级在线观看| 日本乱码高清不卡字幕| 日日嗨av一区二区三区四区| 2021久久国产精品不只是精品| 国产91精品在线观看| 1024国产精品| 91精品久久久久久久99蜜桃| 国产毛片精品国产一区二区三区| 亚洲国产激情av| 精品视频在线免费看| 麻豆成人免费电影| 国产精品盗摄一区二区三区| 欧美日韩精品三区| 国产成人av电影在线| 亚洲靠逼com| 日韩欧美一二区| 91视频国产观看| 久久99国产精品免费网站| 中文字幕日韩av资源站| 欧美精品在线视频| 豆国产96在线|亚洲| 午夜久久久影院| 国产亚洲一区二区三区在线观看| 91久久精品午夜一区二区| 九九视频精品免费| 亚洲免费看黄网站| 日韩视频免费观看高清完整版在线观看| 国产1区2区3区精品美女| 午夜精品久久久久久久久久| 2023国产一二三区日本精品2022| 日本久久电影网| 国产一区二区在线观看免费| 亚洲激情成人在线| 国产欧美日韩三级| 欧美一区二区日韩一区二区| 99久久综合国产精品| 美女视频一区二区三区| 亚洲欧美色图小说| 欧美精品一区二区久久久 | 一区二区三区在线观看欧美| 精品剧情v国产在线观看在线| 91免费精品国自产拍在线不卡| 日本不卡一区二区三区| 综合久久给合久久狠狠狠97色| 在线播放中文字幕一区| 99久久国产综合精品麻豆| 久久99九九99精品| 五月天丁香久久| 自拍视频在线观看一区二区| 精品国产精品一区二区夜夜嗨| 欧美日韩一区二区三区高清| 成人黄色大片在线观看| 极品美女销魂一区二区三区| 亚洲成av人综合在线观看| 亚洲天堂福利av| 日本一区二区三区在线观看| 精品国产亚洲在线| 91精品国产入口| 欧美人狂配大交3d怪物一区| 91麻豆自制传媒国产之光| 丰满少妇久久久久久久| 久久国产尿小便嘘嘘| 日日骚欧美日韩| 午夜精品久久久久久| 亚洲天堂网中文字| 国产精品色婷婷| 国产精品三级av| 中文字幕+乱码+中文字幕一区| 久久先锋影音av鲁色资源| 日韩精品一区二区三区swag| 91精品国产91久久久久久最新毛片| 欧美性色黄大片|