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

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

?? script.c

?? dhcp 的增強般
?? C
字號:
/* script.c
 *
 * Functions to call the DHCP client notification scripts 
 *
 * Russ Dill <Russ.Dill@asu.edu> July 2001
 *
 * 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 of the License, 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>

#include "options.h"
#include "dhcpd.h"
#include "dhcpc.h"
#include "packet.h"
#include "options.h"
#include "debug.h"

#include <udhcp_common.h>

/* get a rough idea of how long an option will be (rounding up...) */
static int max_option_length[] = {
	[OPTION_IP] =		sizeof("255.255.255.255 "),
	[OPTION_IP_PAIR] =	sizeof("255.255.255.255 ") * 2,
	[OPTION_STRING] =	1,
	[OPTION_BOOLEAN] =	sizeof("yes "),
	[OPTION_U8] =		sizeof("255 "),
	[OPTION_U16] =		sizeof("65535 "),
	[OPTION_S16] =		sizeof("-32768 "),
	[OPTION_U32] =		sizeof("4294967295 "),
	[OPTION_S32] =		sizeof("-2147483684 "),
};


static int upper_length(int length, struct dhcp_option *option)
{
	return max_option_length[option->flags & TYPE_MASK] *
	       (length / option_lengths[option->flags & TYPE_MASK]);
}


static int sprintip(char *dest, char *pre, unsigned char *ip) {
	return sprintf(dest, "%s%d.%d.%d.%d ", pre, ip[0], ip[1], ip[2], ip[3]);
}


/* Fill dest with the text of option 'option'. */
static void fill_options(char *dest, unsigned char *option, struct dhcp_option *type_p)
{
	int type, optlen;
	u_int16_t val_u16;
	int16_t val_s16;
	u_int32_t val_u32;
	int32_t val_s32;
	int len = option[OPT_LEN - 2];

	dest += sprintf(dest, "%s=", type_p->name);

	type = type_p->flags & TYPE_MASK;
	optlen = option_lengths[type];
	for(;;) {
		switch (type) {
		case OPTION_IP_PAIR:
			dest += sprintip(dest, "", option);
			*(dest++) = '/';
			option += 4;
			optlen = 4;
		case OPTION_IP:	/* Works regardless of host byte order. */
			dest += sprintip(dest, "", option);
 			break;
		case OPTION_BOOLEAN:
			dest += sprintf(dest, *option ? "yes " : "no ");
			break;
		case OPTION_U8:
			dest += sprintf(dest, "%u ", *option);
			break;
		case OPTION_U16:
			memcpy(&val_u16, option, 2);
			dest += sprintf(dest, "%u ", ntohs(val_u16));
			break;
		case OPTION_S16:
			memcpy(&val_s16, option, 2);
			dest += sprintf(dest, "%d ", ntohs(val_s16));
			break;
		case OPTION_U32:
			memcpy(&val_u32, option, 4);
			dest += sprintf(dest, "%lu ", (unsigned long) ntohl(val_u32));
			break;
		case OPTION_S32:
			memcpy(&val_s32, option, 4);
			dest += sprintf(dest, "%ld ", (long) ntohl(val_s32));
			break;
		case OPTION_STRING:
			memcpy(dest, option, len);
			dest[len] = '\0';
			return;	 /* Short circuit this case */
		}
		option += optlen;
		len -= optlen;
		if (len <= 0) break;
	}
}


static char *find_env(const char *prefix, char *defaultstr)
{
	extern char **environ;
	char **ptr;
	const int len = strlen(prefix);

	for (ptr = environ; *ptr != NULL; ptr++) {
		if (strncmp(prefix, *ptr, len) == 0)
			return *ptr;
	}
	return defaultstr;
}


/* put all the paramaters into an environment */
static char **fill_envp(struct dhcpMessage *packet)
{
	int num_options = 0;
	int i, j;
	char **envp;
	unsigned char *temp;
	char over = 0;

        unsigned char *ttt;
        struct in_addr addr;
	static unsigned long dhcp_addr;

#if 1 // __LCF__	
    char *p;
    FILE *pIn1=NULL;
    FILE *pIn2=NULL;
    FILE *pIn3 = NULL;
#else
	//add by 20040716
    char *p;
    FILE *pIn;
    char buffer[48];
    //add by 20040716
#endif    
    char szFileName[128];

	if (packet == NULL)
		num_options = 0;
	else {
		for (i = 0; options[i].code; i++)
			if (get_option(packet, options[i].code))
				num_options++;
		if (packet->siaddr) num_options++;
		if ((temp = get_option(packet, DHCP_OPTION_OVER)))
			over = *temp;
		if (!(over & FILE_FIELD) && packet->file[0]) num_options++;
		if (!(over & SNAME_FIELD) && packet->sname[0]) num_options++;		

		if ((ttt = get_option(packet, DHCP_SERVER_ID)))
		{
		    memcpy(&dhcp_addr, ttt, 4);		
    		    addr.s_addr = dhcp_addr;
				sprintf(szFileName, "%s_%s", UDHCP_DHCP, client_config.interface);
    		    pIn3 = fopen(szFileName, "w+");
    		    if (pIn3)
    		    {
    		        fprintf(pIn3, "%s\n", inet_ntoa(addr));
    		        fclose(pIn3);
    		    }
		}
		else
		    dhcp_addr = 0;
		//printf("....%ld, %s,\n", dhcp_addr, inet_ntoa(addr));		
	}
	
	envp = xmalloc((num_options + 5) * sizeof(char *));
	envp[0] = xmalloc(sizeof("interface=") + strlen(client_config.interface));
	sprintf(envp[0], "interface=%s", client_config.interface);
	envp[1] = find_env("PATH", "PATH=/bin:/usr/bin:/sbin:/usr/sbin");
	envp[2] = find_env("HOME", "HOME=/");

	if (packet == NULL) {
		envp[3] = NULL;
		return envp;
	}

	envp[3] = xmalloc(sizeof("ip=255.255.255.255"));
	sprintip(envp[3], "ip=", (unsigned char *) &packet->yiaddr);
	for (i = 0, j = 4; options[i].code; i++) {
		if ((temp = get_option(packet, options[i].code))) {
			envp[j] = xmalloc(upper_length(temp[OPT_LEN - 2], &options[i]) + strlen(options[i].name) + 2);
			fill_options(envp[j], temp, &options[i]);
			
			//add by 20040716
			p = strstr(envp[j], "dns");
            if (p)
            {
				p = strchr(p, '=');
				if (p)
				{
            		if (pIn1 == NULL)
            		{
            			sprintf(szFileName, "%s_%s", UDHCP_DNS, client_config.interface);
            			pIn1 = fopen(szFileName, "w+");
           	        }
                    if (pIn1)
                    {
                    	fputs(++p, pIn1);
                    	fputc(' ', pIn1);
                    }
				}
            }

            p = strstr(envp[j], "router");
            if (p)
            {
				p = strchr(p, '=');
				if (p)
				{
            		if (pIn2 == NULL)
            		{
					    sprintf(szFileName, "%s_%s", UDHCP_ROUTER, client_config.interface);
            			pIn2 = fopen(szFileName, "w+");
            		}
                    if (pIn2)
                    {
                    	fputs(++p, pIn2);
                    	fputc(' ', pIn2);
                    }
				}
            }
			//add by 20040716
			
			j++;
		}
	}
	
#if 1 // __LCF__
	if (pIn1)
		fclose(pIn1);
	if (pIn2)
		fclose(pIn2);
#endif	
	
	if (packet->siaddr) {
		envp[j] = xmalloc(sizeof("siaddr=255.255.255.255"));
		sprintip(envp[j++], "siaddr=", (unsigned char *) &packet->siaddr);
	}
	if (!(over & FILE_FIELD) && packet->file[0]) {
		/* watch out for invalid packets */
		packet->file[sizeof(packet->file) - 1] = '\0';
		envp[j] = xmalloc(sizeof("boot_file=") + strlen(packet->file));
		sprintf(envp[j++], "boot_file=%s", packet->file);
	}
	if (!(over & SNAME_FIELD) && packet->sname[0]) {
		/* watch out for invalid packets */
		packet->sname[sizeof(packet->sname) - 1] = '\0';
		envp[j] = xmalloc(sizeof("sname=") + strlen(packet->sname));
		sprintf(envp[j++], "sname=%s", packet->sname);
	}	
	envp[j] = NULL;
	return envp;
}


/* Call a script with a par file and env vars */
void run_script(struct dhcpMessage *packet, const char *name)
{
	int pid;
	char **envp;

	if (client_config.script == NULL)
		return;

	/* call script */
	pid = fork();
	if (pid) {
		waitpid(pid, NULL, 0);
		return;
	} else if (pid == 0) {
		envp = fill_envp(packet);
		
		/* close fd's? */
		
		/* exec script */
		DEBUG(LOG_INFO, "execle'ing %s", client_config.script);
		execle(client_config.script, client_config.script,
		       name, NULL, envp);
		LOG(LOG_ERR, "script %s failed: %s",
		    client_config.script, strerror(errno));
		exit(1);
	}			
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本中文字幕不卡| 日韩高清一区二区| 26uuu亚洲| 欧美一区二区视频免费观看| 欧美日韩一二三区| 欧美婷婷六月丁香综合色| 大美女一区二区三区| 国产大片一区二区| 97久久精品人人澡人人爽| 成人在线综合网站| 色欧美片视频在线观看在线视频| 色久综合一二码| 91久久精品一区二区| 6080yy午夜一二三区久久| 日韩美女一区二区三区四区| 2020国产精品久久精品美国| 亚洲国产高清在线观看视频| 一区二区三区波多野结衣在线观看| 樱花草国产18久久久久| 日本在线不卡视频一二三区| 国产精品自产自拍| 91国产精品成人| 91.xcao| 久久综合国产精品| 亚洲欧洲日韩av| 美女脱光内衣内裤视频久久网站| 国产在线播精品第三| 91亚洲资源网| 日韩免费看的电影| 亚洲色图在线播放| 久久精品国产免费| 高清不卡一二三区| 欧美丰满少妇xxxxx高潮对白| 久久久久久久久免费| 亚洲色图视频网| 免费成人你懂的| 成人午夜av影视| 欧美久久久久久蜜桃| 中文字幕制服丝袜一区二区三区| 日韩在线a电影| 97超碰欧美中文字幕| 日韩亚洲欧美一区二区三区| 亚洲欧美另类久久久精品| 久久精品av麻豆的观看方式| 91麻豆自制传媒国产之光| 日韩女优av电影| 亚洲bt欧美bt精品| 成人黄色在线视频| 日韩欧美国产综合在线一区二区三区| 国产精品免费视频观看| 精品一区免费av| 欧美日韩国产一级二级| 亚洲欧美一区二区不卡| 日韩一区精品字幕| 欧美色老头old∨ideo| 国产精品久久毛片a| 国产一区二三区好的| 91精品国产综合久久久久| 亚洲综合无码一区二区| 成人免费毛片高清视频| 国产视频一区在线观看| 蜜桃视频第一区免费观看| 欧美日韩久久一区二区| 一区二区三区免费在线观看| 国产99久久久精品| 国产无遮挡一区二区三区毛片日本| 老司机午夜精品| 欧美一区二区在线看| 性做久久久久久久久| 欧美日韩日日夜夜| 污片在线观看一区二区| 在线观看免费一区| 亚洲电影你懂得| 欧美日韩www| 日韩成人伦理电影在线观看| 欧美一级日韩免费不卡| 美洲天堂一区二卡三卡四卡视频| 在线播放日韩导航| 日韩vs国产vs欧美| 欧美成人r级一区二区三区| 日本欧美一区二区| 日韩精品一区二区三区四区| 久久精品72免费观看| 久久久久久影视| 波多野结衣亚洲一区| 亚洲黄色小视频| 欧美一区二区三区在线看| 久久成人免费网| 国产目拍亚洲精品99久久精品| 成人免费视频免费观看| 一区二区理论电影在线观看| 欧美日韩夫妻久久| 久久av老司机精品网站导航| 中文一区二区完整视频在线观看| 成人av在线电影| 亚洲成精国产精品女| 精品久久人人做人人爰| jlzzjlzz欧美大全| 性做久久久久久免费观看欧美| 欧美电影免费观看高清完整版在 | 成人av网站大全| 亚洲另类在线制服丝袜| 制服丝袜在线91| 大白屁股一区二区视频| 亚洲一线二线三线视频| 日韩欧美成人午夜| 色999日韩国产欧美一区二区| 亚洲自拍偷拍九九九| 日韩一区二区电影| 91视频一区二区三区| 久久精品久久久精品美女| 国产精品成人网| 日韩久久久久久| 色综合久久99| 国产精品99久久久久| 亚洲国产综合在线| 国产欧美视频一区二区三区| 欧美日精品一区视频| 成人丝袜高跟foot| 久久精品国产**网站演员| 亚洲黄色av一区| 国产精品免费人成网站| 日韩欧美中文字幕公布| 欧美中文字幕一二三区视频| 国产成人精品免费在线| 日本美女一区二区三区视频| 亚洲另类中文字| 中文字幕亚洲一区二区va在线| 欧美日韩不卡一区二区| 日本韩国欧美一区二区三区| 国内精品伊人久久久久影院对白| 亚洲午夜影视影院在线观看| 国产精品久久久久久久浪潮网站| 日韩一级二级三级| 欧美区视频在线观看| 91年精品国产| 99久精品国产| 成人美女视频在线观看18| 国产综合色视频| 麻豆成人91精品二区三区| 天天色图综合网| 午夜视频一区在线观看| 亚洲国产日韩精品| 一区二区三区四区乱视频| 日韩一区日韩二区| 成人免费在线观看入口| 国产精品成人网| 亚洲欧美区自拍先锋| 亚洲美女屁股眼交3| 亚洲精品少妇30p| 一区二区欧美视频| 亚洲综合色婷婷| 亚洲成人黄色影院| 天堂午夜影视日韩欧美一区二区| 亚洲精品第1页| 肉色丝袜一区二区| 免费成人av在线| 国产揄拍国内精品对白| 国产成人精品一区二区三区四区| 国产精品综合二区| 成人av在线网站| 91久久久免费一区二区| 欧美区视频在线观看| 91精品国产综合久久婷婷香蕉| 9191久久久久久久久久久| 日韩写真欧美这视频| 久久精品综合网| 中文字幕一区二| 亚洲电影在线播放| 蜜乳av一区二区| 不卡一区二区中文字幕| 色婷婷久久综合| 日韩精品专区在线| 国产精品美日韩| 亚洲国产精品一区二区www| 日韩精品电影在线观看| 国产一区二区免费在线| 91在线国产福利| 欧美日韩国产高清一区二区| 久久色在线视频| 一区二区三区在线观看动漫| 丝袜美腿亚洲综合| 国产69精品久久777的优势| 欧美亚洲一区二区在线观看| 欧美大片顶级少妇| 亚洲人成在线播放网站岛国| 婷婷丁香久久五月婷婷| 国产盗摄女厕一区二区三区| 欧美日韩一级视频| 久久亚洲捆绑美女| 亚洲国产视频网站| 国产成人精品免费在线| 欧美人与禽zozo性伦| 欧美激情综合五月色丁香| 日韩中文字幕亚洲一区二区va在线| 国产呦萝稀缺另类资源| 欧美精品色一区二区三区| 欧美激情艳妇裸体舞| 蜜臀av一区二区三区| 一本色道亚洲精品aⅴ|