Пример #1
0
static int
usb_status()
{
	if (usb_busy)
		return 0;
	else if (nvram_invmatch("usb_path1", "") || nvram_invmatch("usb_path2", ""))
		return 1;
	else
		return 0;
}
Пример #2
0
int
start_dhcpd(void)
{
	FILE *fp;
//	char name[100];
	char *lan_ifname=nvram_safe_get("lan_ifname");

	dprintf("%s %s %s %s\n",
		nvram_safe_get("lan_ifname"),
		nvram_safe_get("dhcp_start"),
		nvram_safe_get("dhcp_end"),
		nvram_safe_get("lan_lease"));

	if (nvram_invmatch("dhcp_enable", "1")) return -1;
	
	ifconfig(lan_ifname, IFUP, nvram_safe_get("lan_ipaddr"), nvram_safe_get("lan_netmask"));

	/* Touch leases file */
	if (!(fp = fopen("/tmp/udhcpd.leases", "a"))) {
		perror("/tmp/udhcpd.leases");
		return errno;
	}
	fclose(fp);

	/* Write configuration file based on current information */
	if (!(fp = fopen("/tmp/udhcpd.conf", "w"))) {
		perror("/tmp/udhcpd.conf");
		return errno;
	}
	fprintf(fp, "pidfile /var/run/udhcpd.pid\n");
	fprintf(fp, "start %s\n", nvram_safe_get("dhcp_start"));
	fprintf(fp, "end %s\n", nvram_safe_get("dhcp_end"));
	fprintf(fp, "interface %s\n", nvram_safe_get("lan_ifname"));
	fprintf(fp, "remaining yes\n");
	fprintf(fp, "lease_file /tmp/udhcpd.leases\n");
	fprintf(fp, "option subnet %s\n", nvram_safe_get("lan_netmask"));
	fprintf(fp, "option router %s\n", nvram_safe_get("lan_ipaddr"));
	//fprintf(fp, "option dns %s\n", nvram_safe_get("lan_ipaddr"));
	fprintf(fp, "option lease %s\n", nvram_safe_get("lan_lease"));
	//snprintf(name, sizeof(name), "%s_wins", nvram_safe_get("dhcp_wins"));
	//if (nvram_invmatch(name, ""))
	//	fprintf(fp, "option wins %s\n", nvram_get(name));
	//snprintf(name, sizeof(name), "%s_domain", nvram_safe_get("dhcp_domain"));
	if (nvram_invmatch("lan_domain", ""))
		fprintf(fp, "option domain %s\n", nvram_safe_get("lan_domain"));
	fclose(fp);

	system("udhcpd /tmp/udhcpd.conf");

	dprintf("done\n");
	return 0;
}
Пример #3
0
int wpacli_main(int argc, char **argv)
{
	if (argc < 3)
		return EINVAL;
	
	if (!argv[1])
		return EINVAL;
	
	if (nvram_invmatch("wan_auth_mode", "2"))
		return 0;
	
	if (strncmp(argv[2], "EAP-SUCCESS", 11) != 0)
	{
		logmessage("eapol-md5", "%s", argv[2]);
	}
	
#if 0
	/* disable DHCP lease force renew by issues with some ISP (lease losted after force renew) */
	else if (nvram_match("wan0_proto", "dhcp"))
	{
		/* Renew DHCP lease */
		system("killall -SIGUSR1 udhcpc");
	}
#endif
	
	return 0;
}
Пример #4
0
unsigned char *get_hwaddr(char *ifname, void *buf, int size)
{
#ifdef USE_IFNAME
    struct ifreq ifr;
    int fd, res;
    int addrlen = size > ETHER_ADDR_LEN ? ETHER_ADDR_LEN : size;

    if ((fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
        return NULL;

    memset(&ifr, 0, sizeof(ifr));
    snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", ifname);
    res = ioctl(fd, SIOCGIFHWADDR, &ifr);
    close(fd);

    if (res < 0 || ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER)
        return NULL;

    memmove(buf, ifr.ifr_hwaddr.sa_data, addrlen);
    return buf;
#else
    if (!nvram_invmatch("et0macaddr", ""))
        return NULL;

    ether_atoe(nvram_safe_get("et0macaddr"), buf);
    return buf;
#endif
}
Пример #5
0
int DeletePortMapping( UFILE *uclient, PService psvc, PAction ac, pvar_entry_t args, int nargs)
/*  {"NewRemoteHost", VAR_RemoteHost, VAR_IN},		*/
/*  {"NewExternalPort", VAR_ExternalPort, VAR_IN},	*/
/*  {"NewProtocol", VAR_PortMappingProtocol, VAR_IN},	*/
{
    int i, parse_status, status = 0;
    netconf_nat_t e;
    mapping_t mapping;
    
    // bypass port mapping when NAT is disabled
    if (nvram_invmatch("wan_nat_x", "1")) return 0;

    parse_status = (int) parse_dnat(&e, 
				    ac->params[2].value,	/* NewProtocol */
				    ac->params[0].value,	/* NewRemoteHost */
				    ac->params[1].value,	NULL, /* NewExternalPort */
				    NULL,		/* NewInternalClient */
				    NULL, NULL 		/* NewInternalPort */ );
    if (!parse_status) {
	status = SOAP_INVALID_ARGS;
    } else {
	status = SOAP_NOSUCHENTRYINARRAY;
	for (i = 0; mapmgr_get_port_map(i, &mapping); i++) {
	    if (SameMatchInfo(&e, (netconf_nat_t*)&mapping)) {
		mapmgr_delete_port_map(i);
		status = 0; /* SUCCESS! */
	    }
	}
    }	

    if (status) 
	soap_error( uclient, status );

    return (status == 0);
}
Пример #6
0
static int start_authcli(const char *prefix, int restart)
{
	FILE *fp;
	char tmp[100];
	const char *options = "/etc/authcliw.conf";
	char *authcli_argv[] = {
		"/usr/sbin/authcli",
		"-c", (char *)options,
	    /*	"-p", pid_file,    */
	    /*	"-c", info_name,   */
	    	"-u", "nobody",
   		NULL
	};

	if (restart)
		stop_authcli(1);

	/* Generate options file */
	if ((fp = fopen(options, "w")) == NULL) {
		perror(options);
		return -1;
	}
	fprintf(fp,
		"area=%s\r\n"
		"user=%s\r\n"
		"key=%s\r\n",
		nvram_invmatch("wan_heartbeat_x", "") ?
		    nvram_safe_get("wan_heartbeat_x") : "convex",
		nvram_safe_get(strcat_r(prefix, "auth_username", tmp)),
		nvram_safe_get(strcat_r(prefix, "auth_passwd", tmp)));
	fclose(fp);

	/* Start authcli */
	return _eval(authcli_argv, NULL, 0, NULL);
}
Пример #7
0
int start_shorewall(void)
{

	if (!nvram_invmatch("shorewall_enable", "0"))
		return 0;

	stop_firewall();
	stop_shorewall();

	mkdir("/var/shorewall", 0700);

	nvram2file("sh_interfaces", "/var/shorewall/interfaces");
	nvram2file("sh_masq", "/var/shorewall/masq");
	nvram2file("sh_policy", "/var/shorewall/policy");
	nvram2file("sh_routestopped", "/var/shorewall/route_stopped");
	nvram2file("sh_rules", "/var/shorewall/rules");
	nvram2file("sh_zones", "/var/shorewall/zones");
	symlink("/usr/sbin/shorewall", "/var/shorewall/shorewall");
	symlink("/usr/sbin/shorewall.conf", "/var/shorewall/shorewall.conf");
	symlink("/usr/sbin/firewall", "/var/shorewall/firewall");
	symlink("/usr/sbin/functions", "/var/shorewall/functions");
	symlink("/usr/sbin/common.def", "/var/shorewall/common.def");
	symlink("/usr/sbin/version", "/var/shorewall/version");

	system("/var/shorewall/shorewall start");

	return 0;
}
Пример #8
0
/* update current status of printer */
void sig_usr1(int sig)
{
    char    prninfo[256]/*, status[32]*/;
    int isUsb;

    //fp=fopen("/etc/linuxigd/printer.log","w");

    memset( prninfo , 0 , sizeof(prninfo) );


    if (check_par_usb_prn() == TRUE) //uese USB when return TRUE
    {
	    //fputs( "INTERFACE=USB\n" , fp );
	    nvram_set("printer_ifname", "usb");
	    readUsbPrnID(prninfo);
	    isUsb = 1;
    }
    else
    {
	    // Goto this step, then printer must be turn on
	    //fputs( "INTERFACE=PAR\n" , fp );
	    nvram_set("printer_ifname", "par");
	    readParPrnID(prninfo);
	    isUsb = 0;
    }

    if (strcmp(prninfo, "  ")==0 || strlen(prninfo)==0)
    {
		//fprintf(fp, "MODEL=\"\"\n");
		nvram_set("printer_model_t", "");

		if (!isUsb)
		{
			/* Retry, only when paraport is plugged and no device id is returned */
			printf("Try again 2 seconds later\n");
			g_retry++;

			if (g_retry<MAX_GETID_RETRY) alarm(6);
			else g_retry = 0;
		}
    }
    else
    {
		//fprintf(fp, "MODEL=\"%s\"\n", prninfo);
		nvram_set("printer_model_t", prninfo);
    }

    /* update status of printer */
    if (nvram_invmatch("printer_model_t", ""))
    {
		readPrnStatus();
    }
    else
    {
		nvram_set("printer_status_t", "");
		nvram_set("printer_user_t", "");
    }
//    PRINT("Enter sig_usr1\n");	// nosiy...
}
Пример #9
0
static void 
inet_handler(void)
{
	if (nvram_match("wan_route_x", "IP_Routed"))
	{
		if (nvram_invmatch("wan_gateway_t", "") && has_wan_ip(0))
		{
			/* sync time to ntp server if necessary */
			ntpc_handler();
		}
	}
	else
	{
		if (nvram_invmatch("lan_gateway_t", ""))
			ntpc_handler();
	}
}
Пример #10
0
int
start_infosvr(void)
{
	if (nvram_invmatch("adsc_enable", "1"))
		return 1;

	return eval("/usr/sbin/infosvr", IFNAME_BR);
}
Пример #11
0
int
start_lltd(void)
{
	if (nvram_invmatch("lltd_enable", "1"))
		return 1;

	return eval("/bin/lld2d", IFNAME_BR);
}
Пример #12
0
int
start_rstats(void)
{
	if (nvram_invmatch("rstats_enable", "1"))
		return 1;

	return eval("/sbin/rstats");
}
Пример #13
0
void ej_show_wan_domain(webs_t wp, int argc, char_t ** argv)
{
	if (nvram_invmatch("wan_domain", ""))
		tf_webWriteESCNV(wp, "wan_domain");
	else
		tf_webWriteESCNV(wp, "wan_get_domain");
	return;
}
Пример #14
0
void reload_nfsd(void)
{
	if (nvram_invmatch("nfsd_enable", "1"))
		return;

	write_nfsd_exports();

	eval("/usr/bin/nfsd.sh", "reload");
}
Пример #15
0
void run_nfsd(void)
{
	if (nvram_invmatch("nfsd_enable", "1"))
		return;

	// always update nfsd exports
	write_nfsd_exports();

	eval("/usr/bin/nfsd.sh", "start");
}
Пример #16
0
static int
check_usb2()
{
        if (usb_busy)
                return 0;
        else if ((model==MODEL_RTAC56U||model==MODEL_RTAC68U) && nvram_invmatch("usb_path2", ""))
                return 1;
        else
                return 0;
}
Пример #17
0
void wan6_up(char *wan_ifname)
{
	int ipv6_type, start_radvd_now;
	char *wan_addr6, *wan_gate6, *wan_addr4;

	ipv6_type = get_ipv6_type();
	if (ipv6_type == IPV6_DISABLED)
		return;

	stop_dhcp6c();

	build_dns6_var();

	control_if_ipv6_dad(IFNAME_BR, 1);

	start_radvd_now = 1;

	if (ipv6_type == IPV6_6IN4 || ipv6_type == IPV6_6TO4 || ipv6_type == IPV6_6RD)
	{
		wan_addr4 = nvram_safe_get("wan0_ipaddr");
		wan_addr6 = nvram_safe_get("wan0_addr6");
		start_sit_tunnel(ipv6_type, wan_addr4, wan_addr6);
	}
	else
	{
		control_if_ipv6_dad(wan_ifname, 1);
		
		if (ipv6_type == IPV6_NATIVE_STATIC) {
			wan_addr6 = nvram_safe_get("wan0_addr6");
			wan_gate6 = nvram_safe_get("wan0_gate6");
			control_if_ipv6_radv(wan_ifname, 0);
			clear_if_addr6(wan_ifname);
			if (*wan_addr6)
				doSystem("ip -6 addr add %s dev %s", wan_addr6, wan_ifname);
			if (*wan_gate6) {
				doSystem("ip -6 route add %s dev %s", wan_gate6, wan_ifname);
				doSystem("ip -6 route add default via %s metric %d", wan_gate6, 1);
			}
		}
		else {
			doSystem("ip -6 route add default dev %s metric %d", wan_ifname, 2048);
			control_if_ipv6_autoconf(wan_ifname, nvram_invmatch("ip6_wan_dhcp", "1"));
			control_if_ipv6_radv(wan_ifname, 1);
			/* wait for interface ready */
			sleep(2);
			start_dhcp6c(wan_ifname);
			if (nvram_match("ip6_lan_auto", "1"))
				start_radvd_now = 0;
		}
	}

	if (start_radvd_now)
		reload_radvd();
}
Пример #18
0
int is_lan_radv_on(void)
{
	int ipv6_type = get_ipv6_type();

	if (ipv6_type == IPV6_DISABLED)
		return -1;

	if (nvram_invmatch("ip6_lan_radv", "0"))
		return 1;

	return 0;
}
Пример #19
0
static int
check_usb3()
{
	if (usb_busy)
		return 0;
#ifndef RTCONFIG_BCMARM
	else if (nvram_match("usb_path1_host", "3") || nvram_match("usb_path2_host", "3"))
#else
	else if ((model==MODEL_RTAC56U||model==MODEL_RTAC68U) && nvram_invmatch("usb_path1", ""))
#endif
		return 1;
	else
		return 0;
}
Пример #20
0
void
reload_vpn_server(void)
{
	int i_type;

	if (nvram_invmatch("vpns_enable", "1") || get_ap_mode())
		return;

	i_type = nvram_get_int("vpns_type");
#if defined(APP_OPENVPN)
	if (i_type != 2)
#endif
		create_vpns_pppd_options(i_type);
}
Пример #21
0
void start_privoxy(void)
{
	if (!nvram_match("privoxy_enable", "1"))
		return;

	int mode = 0;
	char *ip = nvram_safe_get("lan_ipaddr");

	sysprintf("grep -q nobody /etc/passwd || echo \"nobody:*:65534:65534:nobody:/var:/bin/false\" >> /etc/passwd");
	mkdir("/var/log/privoxy", 0777);
	
	char *wan = get_wan_ipaddr();
	if (nvram_match("privoxy_transp_enable", "1")) {
		sysprintf("iptables -t nat -D PREROUTING -p tcp -d ! %s --dport 80 -j REDIRECT --to-port 8118", wan);
		sysprintf("iptables -t nat -I PREROUTING -p tcp -d ! %s --dport 80 -j REDIRECT --to-port 8118", wan);
		mode = 1;
	}

	FILE *fp = fopen("/tmp/privoxy.conf", "wb");

	if (nvram_match("privoxy_advanced", "1") && nvram_invmatch("privoxy_conf", "")) {
		fprintf(fp, "%s", nvram_safe_get("privoxy_conf"));
	} else {
		fprintf(fp, "confdir /etc/privoxy\n"
			"logdir /var/log/privoxy\n"
			"actionsfile match-all.action\n"
			"actionsfile default.action\n"
			"actionsfile user.action\n"
			"filterfile default.filter\n"
			"logfile logfile\n"
			"listen-address  %s:8118\n"
			"toggle  1\n"
			"enable-remote-toggle  0\n"
			"enable-remote-http-toggle  0\n"
			"enable-edit-actions 0\n"
			"buffer-limit 4096\n"
			"accept-intercepted-requests %d\n" 
			"split-large-forms 0\n" 
			"keep-alive-timeout 5\n" 
			"socket-timeout 300\n" 
			"max-client-connections 64\n" 
			"handle-as-empty-doc-returns-ok 1\n", ip, mode);
	}
	fclose(fp);
	eval("privoxy", "/tmp/privoxy.conf");
	syslog(LOG_INFO, "Privoxy : privoxy started\n");
	return;
}
Пример #22
0
/*
 * Called when link comes up
 */
int
ipup_main(int argc, char **argv)
{
	FILE *fp;
	char *wan_ifname;
	char *value;
	char buf[256];
	char tmp[100], prefix[WAN_PREFIX_SZ];

	if (ppp_prefix(&wan_ifname, prefix) < 0)
		return -1;

	umask(022);

	/* Touch connection file */
	if (!(fp = fopen(strcat_r("/tmp/ppp/link.", wan_ifname, tmp), "a"))) {
		perror(tmp);
		return errno;
	}
	fclose(fp);

	if ((value = getenv("IPLOCAL"))) {
		if (nvram_invmatch(strcat_r(prefix, "ipaddr", tmp), value))
			ifconfig(wan_ifname, IFUP, "0.0.0.0", NULL);
		_ifconfig(wan_ifname, IFUP,
			 value, "255.255.255.255", getenv("IPREMOTE"));
		nvram_set(strcat_r(prefix, "ipaddr", tmp), value);
		nvram_set(strcat_r(prefix, "netmask", tmp), "255.255.255.255");
	}

        if ((value = getenv("IPREMOTE")))
		nvram_set(strcat_r(prefix, "gateway", tmp), value);

	strcpy(buf, "");
	if (getenv("DNS1"))
		sprintf(buf, "%s", getenv("DNS1"));
	if (getenv("DNS2"))
		sprintf(buf + strlen(buf), "%s%s", strlen(buf) ? " " : "", getenv("DNS2"));
	nvram_set(strcat_r(prefix, "dns", tmp), buf);

	wan_up(wan_ifname);

	logmessage(nvram_safe_get("wan_proto_t"), "connected to ISP");
	wanmessage("");

	dprintf("done\n");
	return 0;
}
Пример #23
0
void start_sshd(void)
{
	int dirty = 0;

	mkdir("/etc/dropbear", 0700);
	mkdir("/root/.ssh", 0700);

	f_write_string("/root/.ssh/authorized_keys", nvram_safe_get("sshd_authkeys"), 0, 0700);

	dirty |= check_host_key("rsa", "sshd_hostkey", "/etc/dropbear/dropbear_rsa_host_key");
	dirty |= check_host_key("dss", "sshd_dsskey",  "/etc/dropbear/dropbear_dss_host_key");
	dirty |= check_host_key("ecdsa", "sshd_hostkey", "/etc/dropbear/dropbear_ecdsa_host_key");
	if (dirty)
		nvram_commit_x();

/*
	xstart("dropbear", "-a", "-p", nvram_safe_get("sshd_port"), nvram_get_int("sshd_pass") ? "" : "-s");
*/

	char *argv[11];
	int argc;
	char *p;

	argv[0] = "dropbear";
	argv[1] = "-p";
	argv[2] = nvram_safe_get("sshd_port");
	argc = 3;

	if (nvram_get_int("sshd_remote") && nvram_invmatch("sshd_rport", nvram_safe_get("sshd_port"))) {
		argv[argc++] = "-p";
		argv[argc++] = nvram_safe_get("sshd_rport");
	}

	if (!nvram_get_int("sshd_pass")) argv[argc++] = "-s";

	if (nvram_get_int("sshd_forwarding")) argv[argc++] = "-a";

	if (((p = nvram_get("sshd_rwb")) != NULL) && (*p)) {
		argv[argc++] = "-W";
		argv[argc++] = p;
	}

	argv[argc] = NULL;
	_eval(argv, NULL, 0, NULL);
}
Пример #24
0
void start_syslog(void)
{
	int ret1 = 0, ret2 = 0;

	if (!nvram_invmatch("syslogd_enable", "0"))
		return;

	if (strlen(nvram_safe_get("syslogd_rem_ip")) > 0)
		ret1 = eval("syslogd", "-L", "-R", nvram_safe_get("syslogd_rem_ip"));
	else
		ret1 = eval("syslogd", "-L");

	dd_syslog(LOG_INFO, "syslogd : syslog daemon successfully started\n");
	ret2 = eval("klogd");
	dd_syslog(LOG_INFO, "klogd : klog daemon successfully started\n");

	return;
}
Пример #25
0
static int start_lanauth(const char *prefix, int restart)
{
	char tmp[100];
	char *lanauth_argv[] = {
		"/usr/sbin/lanauth",
	    /*	"-v", protocol,	   */
	    /*	"-l", acces level, */
		"-p", nvram_safe_get(strcat_r(prefix, "auth_passwd", tmp)),
		nvram_invmatch("wan_heartbeat_x", "") ? "-s" : NULL,
		nvram_safe_get("wan_heartbeat_x"),
   		NULL
	};

	if (restart)
		stop_lanauth(1);

	/* Start lanauth */
	return _eval(lanauth_argv, NULL, 0, NULL);
}
Пример #26
0
void start_snmp(void)
{
	int ret = 0;
	pid_t pid;

	char *snmpd_argv[] = { "snmpd", "-c", SNMP_CONF_FILE, NULL };
	FILE *fp = NULL;

	stop_snmp();

	if (!nvram_invmatch("snmpd_enable", "0"))
		return;

	fp = fopen(SNMP_CONF_FILE, "w");
	if (NULL == fp)
		return;

	if (strlen(nvram_safe_get("snmpd_syslocation")) > 0)
		fprintf(fp, "syslocation %s\n",
			nvram_safe_get("snmpd_syslocation"));
	if (strlen(nvram_safe_get("snmpd_syscontact")) > 0)
		fprintf(fp, "syscontact %s\n",
			nvram_safe_get("snmpd_syscontact"));
	if (strlen(nvram_safe_get("snmpd_sysname")) > 0)
		fprintf(fp, "sysname %s\n", nvram_safe_get("snmpd_sysname"));
	if (strlen(nvram_safe_get("snmpd_rocommunity")) > 0)
		fprintf(fp, "rocommunity %s\n",
			nvram_safe_get("snmpd_rocommunity"));
	if (strlen(nvram_safe_get("snmpd_rwcommunity")) > 0)
		fprintf(fp, "rwcommunity %s\n",
			nvram_safe_get("snmpd_rwcommunity"));
	fprintf(fp, "sysservices 9\n");
	fprintf(fp, "pass_persist .1.3.6.1.4.1.2021.255 /etc/wl_snmpd.sh\n");

	fclose(fp);
	ret = _evalpid(snmpd_argv, NULL, 0, &pid);

	cprintf("done\n");
	dd_syslog(LOG_INFO, "snmpd : SNMP daemon successfully started\n");

	return;
}
Пример #27
0
void aoss_save(webs_t wp)
{
	char buf[32];
	nvram_set("aoss_enable", websGetVar(wp, "aoss_enable", "0"));
	nvram_set("aoss_aes", websGetVar(wp, "aoss_aes", "0"));
	nvram_set("aoss_tkip", websGetVar(wp, "aoss_tkip", "0"));
	nvram_set("aoss_wep", websGetVar(wp, "aoss_wep", "0"));
#ifdef HAVE_WPS
	nvram_set("wps_enabled", websGetVar(wp, "wps_enabled", "0"));
	char *pin = websGetVar(wp, "wps_ap_pin", NULL);
	if (pin)
		nvram_set("pincode", pin);
#endif
	// check if at least one value was set
	if (nvram_match("aoss_aes", "0")
	    && nvram_match("aoss_tkip", "0")
	    && nvram_match("aoss_wep", "0")) {
		nvram_set("aoss_aes", "1");
	}
	if (strlen(nvram_safe_get("aoss_vifs"))) {
		nvram_unset("ath0_vifs");
		nvram_unset("aoss_vifs");
		nvram_commit();
	}
	if (strlen(nvram_safe_get("aossa_vifs"))) {
		nvram_unset("ath1_vifs");
		nvram_unset("aossa_vifs");
		nvram_commit();
	}
	char *registrar = websGetVar(wp, "wps_registrar", NULL);
	if (registrar && nvram_invmatch("wps_registrar", registrar)) {
		nvram_set("wps_registrar", registrar);
		addAction("wireless");
		nvram_set("nowebaction", "1");
		service_restart();
	}
	// all other vars
	//validate_cgi(wp);
}
Пример #28
0
void stop_openvpn_wandone(void)
{
	if (nvram_invmatch("openvpncl_enable", "1"))
		return;

	if (stop_process("openvpn", "OpenVPN daemon (Client)")) {
		if (nvram_match("wshaper_enable", "1")) {
			stop_wshaper();
			start_wshaper();
		}
		//remove ebtables rules on shutdown     
		system("/usr/sbin/ebtables -t nat -D POSTROUTING -o tap1 --pkttype-type multicast -j DROP");
		unlink("/tmp/openvpncl/ca.crt");
		unlink("/tmp/openvpncl/client.crt");
		unlink("/tmp/openvpncl/client.key");
		unlink("/tmp/openvpncl/ta.key");
		unlink("/tmp/openvpncl/cert.p12");
		unlink("/tmp/openvpncl/static.key");
		unlink("/tmp/openvpncl/openvpncl.conf");
		unlink("/tmp/openvpncl/route-up.sh");
		unlink("/tmp/openvpncl/route-down.sh");
	}
}
Пример #29
0
int
control_static_routes(char *ift, char *ifname, int is_add)
{
	char word[128], *next;
	char *route_buf;
	char *ipaddr, *netmask, *gateway, *metric;

	if (is_add && nvram_invmatch("sr_enable_x", "1"))
		return 0;

	route_buf = (char *)malloc(SR_BUF_LEN*sizeof(char));
	if (!route_buf)
		return -1;

	fill_static_routes(route_buf, SR_BUF_LEN, ift);

	foreach(word, route_buf, next) {
		netmask = word;
		ipaddr = strsep(&netmask, ":");
		if (!ipaddr || !netmask)
			continue;
		gateway = netmask;
		netmask = strsep(&gateway, ":");
		if (!netmask || !gateway)
			continue;
		metric = gateway;
		gateway = strsep(&metric, ":");
		if (!gateway || !metric)
			continue;
		if (!is_valid_ipv4(gateway))
			gateway = nvram_safe_get("wanx_gateway");	// oleg patch
		
		if (is_add)
			route_add(ifname, atoi(metric), ipaddr, gateway, netmask);
		else
			route_del(ifname, atoi(metric), ipaddr, gateway, netmask);
	}
Пример #30
0
void sta_info_init(void)
{
	int i;

     	stainfo_g.mode = STATION_MODE_INFRA;
	stainfo_g.chan = 1;
	strcpy(stainfo_g.ssid, "WirelessHD");
	stainfo_g.rate = 0;
	stainfo_g.wep = 0;
	stainfo_g.wepkeylen = 0;
	stainfo_g.wepkeyactive = 0;
	stainfo_g.sharedkeyauth = 0;
	stainfo_g.brgmacclone = 0;
	stainfo_g.preamble = 0;	
	stainfo_g.profileCount = 0;

	// initial sites info
	wl_read_profile();
	stainfo_g.profileCount = profiles_g_count;

	/* Check if client mode is disabled */
	if (nvram_invmatch("wlp_clientmode_x", "0") && profiles_g_count!=0)
	{	
		//int pref = atoi(nvram_safe_get("wlp_pref_x"));
		//if (pref < profiles_g_count)
		//	sta_start_connecting_one(&profiles_g[pref]);
		//else sta_start_connecting_profile(0);
		if (nvram_match("wlp_clientmode_x", "2")) 
			nvram_set("wl0_mode", "wet");
		else nvram_set("wl0_mode", "sta");
		eval("wlconfig", "eth2");
		sta_start_scanning_profile(0);
	}
	else if (nvram_match("wlp_beap_x", "1")) sta_start_being_ap();
	else sta_stop();
}