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

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

?? nfsmount.c

?? 手機嵌入式Linux下可用的busybox源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* vi: set sw=4 ts=4: *//* * nfsmount.c -- Linux NFS mount * Copyright (C) 1993 Rick Sladkey <jrs@world.std.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program 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 General Public License for more details. * * Wed Feb  8 12:51:48 1995, biro@yggdrasil.com (Ross Biro): allow all port * numbers to be specified on the command line. * * Fri, 8 Mar 1996 18:01:39, Swen Thuemmler <swen@uni-paderborn.de>: * Omit the call to connect() for Linux version 1.3.11 or later. * * Wed Oct  1 23:55:28 1997: Dick Streefland <dick_streefland@tasking.com> * Implemented the "bg", "fg" and "retry" mount options for NFS. * * 1999-02-22 Arkadiusz Mi秌iewicz <misiek@misiek.eu.org> * - added Native Language Support *  * Modified by Olaf Kirch and Trond Myklebust for new NFS code, * plus NFSv3 stuff. *//* * nfsmount.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp */#include <unistd.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <netdb.h>#include <sys/socket.h>#include <time.h>#include <sys/utsname.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include "busybox.h"#undef TRUE#undef FALSE#include <rpc/rpc.h>#include <rpc/pmap_prot.h>#include <rpc/pmap_clnt.h>#include <linux/nfs.h>  /* For the kernels nfs stuff */#include "nfsmount.h"#ifndef NFS_FHSIZEstatic const int NFS_FHSIZE = 32;#endif#ifndef NFS_PORTstatic const int NFS_PORT = 2049;#endif/* Disable the nls stuff */# undef bindtextdomain# define bindtextdomain(Domain, Directory) /* empty */# undef textdomain# define textdomain(Domain) /* empty */# define _(Text) (Text)# define N_(Text) (Text)static const int MS_MGC_VAL = 0xc0ed0000; /* Magic number indicatng "new" flags */static const int MS_RDONLY = 1;      /* Mount read-only */static const int MS_NOSUID = 2;      /* Ignore suid and sgid bits */static const int MS_NODEV = 4;      /* Disallow access to device special files */static const int MS_NOEXEC = 8;      /* Disallow program execution */static const int MS_SYNCHRONOUS = 16;      /* Writes are synced at once */static const int MS_REMOUNT = 32;      /* Alter flags of a mounted FS */static const int MS_MANDLOCK = 64;      /* Allow mandatory locks on an FS */static const int S_QUOTA = 128;     /* Quota initialized for file/directory/symlink */static const int S_APPEND = 256;     /* Append-only file */static const int S_IMMUTABLE = 512;     /* Immutable file */static const int MS_NOATIME = 1024;    /* Do not update access times. */static const int MS_NODIRATIME = 2048;    /* Do not update directory access times *//* * We want to be able to compile mount on old kernels in such a way * that the binary will work well on more recent kernels. * Thus, if necessary we teach nfsmount.c the structure of new fields * that will come later. * * Moreover, the new kernel includes conflict with glibc includes * so it is easiest to ignore the kernel altogether (at compile time). *//* NOTE: Do not make this into a 'static const int' because the pre-processor * needs to test this value in some #if statements. */#define NFS_MOUNT_VERSION 4struct nfs2_fh {        char                    data[32];};struct nfs3_fh {        unsigned short          size;        unsigned char           data[64];};struct nfs_mount_data {	int		version;		/* 1 */	int		fd;			/* 1 */	struct nfs2_fh	old_root;		/* 1 */	int		flags;			/* 1 */	int		rsize;			/* 1 */	int		wsize;			/* 1 */	int		timeo;			/* 1 */	int		retrans;		/* 1 */	int		acregmin;		/* 1 */	int		acregmax;		/* 1 */	int		acdirmin;		/* 1 */	int		acdirmax;		/* 1 */	struct sockaddr_in addr;		/* 1 */	char		hostname[256];		/* 1 */	int		namlen;			/* 2 */	unsigned int	bsize;			/* 3 */	struct nfs3_fh	root;			/* 4 */};/* bits in the flags field */static const int NFS_MOUNT_SOFT = 0x0001;	/* 1 */static const int NFS_MOUNT_INTR = 0x0002;	/* 1 */static const int NFS_MOUNT_SECURE = 0x0004;	/* 1 */static const int NFS_MOUNT_POSIX = 0x0008;	/* 1 */static const int NFS_MOUNT_NOCTO = 0x0010;	/* 1 */static const int NFS_MOUNT_NOAC = 0x0020;	/* 1 */static const int NFS_MOUNT_TCP = 0x0040;	/* 2 */static const int NFS_MOUNT_VER3 = 0x0080;	/* 3 */static const int NFS_MOUNT_KERBEROS = 0x0100;	/* 3 */static const int NFS_MOUNT_NONLM = 0x0200;	/* 3 */#define UTIL_LINUX_VERSION "2.10m"#define util_linux_version "util-linux-2.10m"#define HAVE_inet_aton#define HAVE_scsi_h#define HAVE_blkpg_h#define HAVE_kd_h#define HAVE_termcap#define HAVE_locale_h#define HAVE_libintl_h#define ENABLE_NLS#define HAVE_langinfo_h#define HAVE_progname#define HAVE_openpty#define HAVE_nanosleep#define HAVE_personality#define HAVE_tm_gmtoffstatic char *nfs_strerror(int status);#define MAKE_VERSION(p,q,r)	(65536*(p) + 256*(q) + (r))#define MAX_NFSPROT ((nfs_mount_version >= 4) ? 3 : 2)static const int EX_FAIL = 32;       /* mount failure */static const int EX_BG = 256;       /* retry in background (internal only) *//* * nfs_mount_version according to the sources seen at compile time. */static int nfs_mount_version;/* * Unfortunately, the kernel prints annoying console messages * in case of an unexpected nfs mount version (instead of * just returning some error).  Therefore we'll have to try * and figure out what version the kernel expects. * * Variables: *	KERNEL_NFS_MOUNT_VERSION: kernel sources at compile time *	NFS_MOUNT_VERSION: these nfsmount sources at compile time *	nfs_mount_version: version this source and running kernel can handle */static voidfind_kernel_nfs_mount_version(void){	static int kernel_version = 0;	if (kernel_version)		return;	nfs_mount_version = NFS_MOUNT_VERSION; /* default */	kernel_version = get_kernel_revision();	if (kernel_version) {		if (kernel_version < MAKE_VERSION(2,1,32))			nfs_mount_version = 1;		else if (kernel_version < MAKE_VERSION(2,2,18) ||				(kernel_version >=   MAKE_VERSION(2,3,0) &&				 kernel_version < MAKE_VERSION(2,3,99)))			nfs_mount_version = 3;		else			nfs_mount_version = 4; /* since 2.3.99pre4 */	}	if (nfs_mount_version > NFS_MOUNT_VERSION)		nfs_mount_version = NFS_MOUNT_VERSION;}static struct pmap *get_mountport(struct sockaddr_in *server_addr,      long unsigned prog,      long unsigned version,      long unsigned proto,      long unsigned port){struct pmaplist *pmap;static struct pmap p = {0, 0, 0, 0};server_addr->sin_port = PMAPPORT;pmap = pmap_getmaps(server_addr);if (version > MAX_NFSPROT)	version = MAX_NFSPROT;if (!prog)	prog = MOUNTPROG;p.pm_prog = prog;p.pm_vers = version;p.pm_prot = proto;p.pm_port = port;while (pmap) {	if (pmap->pml_map.pm_prog != prog)		goto next;	if (!version && p.pm_vers > pmap->pml_map.pm_vers)		goto next;	if (version > 2 && pmap->pml_map.pm_vers != version)		goto next;	if (version && version <= 2 && pmap->pml_map.pm_vers > 2)		goto next;	if (pmap->pml_map.pm_vers > MAX_NFSPROT ||	    (proto && p.pm_prot && pmap->pml_map.pm_prot != proto) ||	    (port && pmap->pml_map.pm_port != port))		goto next;	memcpy(&p, &pmap->pml_map, sizeof(p));next:	pmap = pmap->pml_next;}if (!p.pm_vers)	p.pm_vers = MOUNTVERS;if (!p.pm_port)	p.pm_port = MOUNTPORT;if (!p.pm_prot)	p.pm_prot = IPPROTO_TCP;return &p;}int nfsmount(const char *spec, const char *node, int *flags,	     char **extra_opts, char **mount_opts, int running_bg){	static char *prev_bg_host;	char hostdir[1024];	CLIENT *mclient;	char *hostname;	char *pathname;	char *old_opts;	char *mounthost=NULL;	char new_opts[1024];	struct timeval total_timeout;	enum clnt_stat clnt_stat;	static struct nfs_mount_data data;	char *opt, *opteq;	int val;	struct hostent *hp;	struct sockaddr_in server_addr;	struct sockaddr_in mount_server_addr;	struct pmap* pm_mnt;	int msock, fsock;	struct timeval retry_timeout;	union {		struct fhstatus nfsv2;		struct mountres3 nfsv3;	} status;	struct stat statbuf;	char *s;	int port;	int mountport;	int proto;	int bg;	int soft;	int intr;	int posix;	int nocto;	int noac;	int nolock;	int retry;	int tcp;	int mountprog;	int mountvers;	int nfsprog;	int nfsvers;	int retval;	time_t t;	time_t prevt;	time_t timeout;	find_kernel_nfs_mount_version();	retval = EX_FAIL;	msock = fsock = -1;	mclient = NULL;	if (strlen(spec) >= sizeof(hostdir)) {		error_msg("excessively long host:dir argument");		goto fail;	}	strcpy(hostdir, spec);	if ((s = strchr(hostdir, ':'))) {		hostname = hostdir;		pathname = s + 1;		*s = '\0';		/* Ignore all but first hostname in replicated mounts		   until they can be fully supported. (mack@sgi.com) */		if ((s = strchr(hostdir, ','))) {			*s = '\0';			error_msg("warning: multiple hostnames not supported");		}	} else {		error_msg("directory to mount not in host:dir format");		goto fail;	}	server_addr.sin_family = AF_INET;#ifdef HAVE_inet_aton	if (!inet_aton(hostname, &server_addr.sin_addr))#endif	{		if ((hp = gethostbyname(hostname)) == NULL) {			herror_msg("%s", hostname);			goto fail;		} else {			if (hp->h_length > sizeof(struct in_addr)) {				error_msg("got bad hp->h_length");				hp->h_length = sizeof(struct in_addr);			}			memcpy(&server_addr.sin_addr,			       hp->h_addr, hp->h_length);		}	}	memcpy (&mount_server_addr, &server_addr, sizeof (mount_server_addr));	/* add IP address to mtab options for use when unmounting */	s = inet_ntoa(server_addr.sin_addr);	old_opts = *extra_opts;	if (!old_opts)		old_opts = "";	if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) {		error_msg("excessively long option argument");		goto fail;	}	sprintf(new_opts, "%s%saddr=%s",		old_opts, *old_opts ? "," : "", s);	*extra_opts = xstrdup(new_opts);	/* Set default options.	 * rsize/wsize (and bsize, for ver >= 3) are left 0 in order to	 * let the kernel decide.	 * timeo is filled in after we know whether it'll be TCP or UDP. */	memset(&data, 0, sizeof(data));	data.retrans	= 3;	data.acregmin	= 3;	data.acregmax	= 60;	data.acdirmin	= 30;	data.acdirmax	= 60;#if NFS_MOUNT_VERSION >= 2	data.namlen	= NAME_MAX;#endif	bg = 0;	soft = 0;	intr = 0;	posix = 0;	nocto = 0;	nolock = 0;	noac = 0;	retry = 10000;		/* 10000 minutes ~ 1 week */	tcp = 0;	mountprog = MOUNTPROG;	mountvers = 0;	port = 0;	mountport = 0;	nfsprog = NFS_PROGRAM;	nfsvers = 0;	/* parse options */	for (opt = strtok(old_opts, ","); opt; opt = strtok(NULL, ",")) {		if ((opteq = strchr(opt, '='))) {			val = atoi(opteq + 1);				*opteq = '\0';			if (!strcmp(opt, "rsize"))				data.rsize = val;			else if (!strcmp(opt, "wsize"))				data.wsize = val;			else if (!strcmp(opt, "timeo"))				data.timeo = val;			else if (!strcmp(opt, "retrans"))				data.retrans = val;			else if (!strcmp(opt, "acregmin"))				data.acregmin = val;			else if (!strcmp(opt, "acregmax"))				data.acregmax = val;			else if (!strcmp(opt, "acdirmin"))				data.acdirmin = val;			else if (!strcmp(opt, "acdirmax"))				data.acdirmax = val;			else if (!strcmp(opt, "actimeo")) {				data.acregmin = val;				data.acregmax = val;				data.acdirmin = val;				data.acdirmax = val;			}			else if (!strcmp(opt, "retry"))				retry = val;			else if (!strcmp(opt, "port"))				port = val;			else if (!strcmp(opt, "mountport"))			        mountport = val;			else if (!strcmp(opt, "mounthost"))			        mounthost=xstrndup(opteq+1,						  strcspn(opteq+1," \t\n\r,"));			else if (!strcmp(opt, "mountprog"))				mountprog = val;			else if (!strcmp(opt, "mountvers"))				mountvers = val;			else if (!strcmp(opt, "nfsprog"))				nfsprog = val;			else if (!strcmp(opt, "nfsvers") ||				 !strcmp(opt, "vers"))				nfsvers = val;			else if (!strcmp(opt, "proto")) {				if (!strncmp(opteq+1, "tcp", 3))					tcp = 1;				else if (!strncmp(opteq+1, "udp", 3))					tcp = 0;				else					printf(_("Warning: Unrecognized proto= option.\n"));			} else if (!strcmp(opt, "namlen")) {#if NFS_MOUNT_VERSION >= 2				if (nfs_mount_version >= 2)					data.namlen = val;				else#endif				printf(_("Warning: Option namlen is not supported.\n"));			} else if (!strcmp(opt, "addr"))				/* ignore */;			else {				printf(_("unknown nfs mount parameter: "				       "%s=%d\n"), opt, val);				goto fail;			}		}		else {			val = 1;			if (!strncmp(opt, "no", 2)) {				val = 0;				opt += 2;			}			if (!strcmp(opt, "bg")) 				bg = val;			else if (!strcmp(opt, "fg")) 				bg = !val;			else if (!strcmp(opt, "soft"))				soft = val;			else if (!strcmp(opt, "hard"))				soft = !val;			else if (!strcmp(opt, "intr"))				intr = val;			else if (!strcmp(opt, "posix"))				posix = val;			else if (!strcmp(opt, "cto"))				nocto = !val;			else if (!strcmp(opt, "ac"))				noac = !val;			else if (!strcmp(opt, "tcp"))				tcp = val;			else if (!strcmp(opt, "udp"))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品中文字幕一区二区三区 | 亚洲男女一区二区三区| 亚洲一区二区三区影院| 国产在线精品一区二区不卡了 | 粉嫩久久99精品久久久久久夜| 欧美影院一区二区| 国产精品视频九色porn| 久久激五月天综合精品| 91久久精品一区二区三| 亚洲欧美一区二区在线观看| 国产伦精品一区二区三区视频青涩| 在线影院国内精品| 中文字幕一区二区三区蜜月| 国产毛片一区二区| 精品国产污污免费网站入口 | 欧美日韩久久一区二区| 日韩美女视频一区二区| 成人免费看黄yyy456| 精品国产三级电影在线观看| 亚洲成年人网站在线观看| 色一情一乱一乱一91av| 中文字幕一区二区三区视频| 国产成人在线视频播放| 久久蜜桃香蕉精品一区二区三区| 免费人成精品欧美精品| 日韩一区和二区| 男人操女人的视频在线观看欧美| 欧美天堂一区二区三区| 亚洲精品国产a久久久久久 | 国产成人综合在线播放| 久久先锋影音av鲁色资源| 麻豆91在线看| 精品欧美乱码久久久久久| 看电影不卡的网站| 久久男人中文字幕资源站| 国产一区啦啦啦在线观看| 2020国产精品久久精品美国| 国产一区二区三区久久久| 国产日韩精品一区| 国产91精品露脸国语对白| 中文字幕国产一区| 色综合久久中文字幕综合网| 亚洲一区二区在线视频| 在线不卡中文字幕播放| 蜜臀久久久久久久| 久久久精品国产免大香伊| 成人app在线| 亚洲大片精品永久免费| 日韩欧美一级精品久久| 国产米奇在线777精品观看| 国产精品免费丝袜| 色综合久久99| 天天综合网天天综合色| 精品蜜桃在线看| 99久久精品免费观看| 性欧美疯狂xxxxbbbb| 日韩丝袜情趣美女图片| 国产.欧美.日韩| 一区二区三区国产豹纹内裤在线 | 日韩福利电影在线观看| 欧美成人精品1314www| 成人黄色av电影| 亚洲第一会所有码转帖| 国产亚洲精品精华液| 欧美在线观看18| 国产乱对白刺激视频不卡| 一区二区三区日韩精品| 精品国产91久久久久久久妲己| 成人av网站在线观看免费| 无码av免费一区二区三区试看| 精品久久久久久久久久久久包黑料| 丁香亚洲综合激情啪啪综合| 亚洲第一av色| 国产精品久久久久久久久动漫| 欧美日韩精品欧美日韩精品一| 国产经典欧美精品| 日韩精品久久久久久| 中文字幕中文乱码欧美一区二区 | 日本视频中文字幕一区二区三区| 国产日产精品一区| 3d成人动漫网站| 91麻豆精东视频| 国产精品正在播放| 日本va欧美va瓶| 亚洲精品欧美综合四区| 久久久不卡网国产精品二区| 91麻豆精品国产91| 97久久超碰精品国产| 精品制服美女丁香| 丝袜脚交一区二区| 亚洲综合视频在线| 国产精品卡一卡二卡三| 久久久99久久| 日韩视频免费观看高清在线视频| 91久久精品国产91性色tv| 成人国产精品免费网站| 国产精品系列在线播放| 精油按摩中文字幕久久| 美女www一区二区| 天堂成人国产精品一区| 亚洲成人三级小说| 亚洲成人久久影院| 亚洲一区二区三区国产| 一区二区三区中文字幕| 亚洲日本va午夜在线影院| 国产精品乱码人人做人人爱| 国产网站一区二区三区| 精品国产一区二区三区忘忧草| 日韩欧美国产综合一区 | 美女性感视频久久| 免费观看在线综合| 蜜臀av在线播放一区二区三区| 亚洲成人精品影院| 日韩精品国产欧美| 蜜臀精品久久久久久蜜臀 | 亚洲第一成人在线| 亚洲福利一区二区| 视频一区欧美日韩| 久久不见久久见中文字幕免费| 午夜av一区二区| 奇米四色…亚洲| 国产一区二区三区免费看 | 国产在线精品视频| 国产盗摄精品一区二区三区在线| 国产成人综合网站| 91理论电影在线观看| 在线免费不卡视频| 欧美日本国产一区| 欧美成人a在线| 亚洲国产电影在线观看| 亚洲精品乱码久久久久久黑人| 亚洲女人的天堂| 五月婷婷久久丁香| 国内精品伊人久久久久av一坑| 国产成人亚洲综合色影视 | 国产精品一区专区| 成a人片亚洲日本久久| 在线观看视频一区二区| 宅男在线国产精品| 国产欧美日韩另类一区| 亚洲永久精品国产| 另类欧美日韩国产在线| av高清久久久| 欧美一区二区精品| 中文字幕一区二区在线观看| 亚洲小说欧美激情另类| 狠狠色丁香婷婷综合久久片| kk眼镜猥琐国模调教系列一区二区| 日本黄色一区二区| 欧美本精品男人aⅴ天堂| 亚洲品质自拍视频| 精品亚洲porn| 欧美在线你懂得| 国产亚洲欧美中文| 午夜av区久久| 成人动漫视频在线| 日韩免费观看高清完整版| 国产精品萝li| 美国三级日本三级久久99 | 高清国产一区二区| 欧美猛男gaygay网站| 中文字幕精品一区 | 亚洲午夜激情网页| 国产精品1区2区| 91精品啪在线观看国产60岁| 日本一二三四高清不卡| 美女网站色91| 欧美日韩一区二区三区视频| 国产欧美精品一区| 蜜桃视频在线观看一区二区| 色欧美88888久久久久久影院| 精品1区2区在线观看| 亚洲第一在线综合网站| 99久久伊人网影院| 国产亚洲视频系列| 国产一区中文字幕| 欧美电影免费提供在线观看| 亚洲一区在线视频| 99精品视频一区| 国产网站一区二区| 国产一区中文字幕| 日韩一区二区三区视频在线| 亚洲大尺度视频在线观看| 一本色道久久加勒比精品| 国产精品系列在线| 丁香桃色午夜亚洲一区二区三区| 51精品视频一区二区三区| 一区二区三区欧美在线观看| 91丨九色丨黑人外教| 中文字幕一区二区不卡| 国产91富婆露脸刺激对白| 国产亚洲短视频| 国产成人久久精品77777最新版本| 欧美一区二区免费视频| 免费的成人av| 日韩欧美一级在线播放| 老司机免费视频一区二区三区| 欧美精品乱码久久久久久按摩| 亚洲午夜精品网| 欧美欧美午夜aⅴ在线观看|