mirror of
https://github.com/status-im/miniupnp.git
synced 2025-03-03 15:00:32 +00:00
remove trailing whitespace from miniupnpd
This commit is contained in:
parent
b1cc7aad36
commit
5c224accbf
@ -47,7 +47,7 @@ $Id: Changelog.txt,v 1.260 2012/02/15 22:44:26 nanard Exp $
|
||||
|
||||
2011/11/18:
|
||||
avoid infinite loop in SendResp_upnphttp() in case of error
|
||||
Replaced SendResp_upnphttp() + CloseSocket_upnphttp() by
|
||||
Replaced SendResp_upnphttp() + CloseSocket_upnphttp() by
|
||||
SendRespAndClose_upnphttp()
|
||||
Tomato specifics in genconfig.sh
|
||||
|
||||
@ -284,7 +284,7 @@ VERSION 1.3 :
|
||||
work to support iptables-1.4.3 and up
|
||||
|
||||
2009/04/10:
|
||||
fix in upnpevents_removeSubscriber()
|
||||
fix in upnpevents_removeSubscriber()
|
||||
|
||||
2009/02/14:
|
||||
added reload_from_lease_file()
|
||||
@ -296,7 +296,7 @@ VERSION 1.3 :
|
||||
|
||||
2009/01/29:
|
||||
Some minor changes to Makefile
|
||||
improving Makefile.linux in order to build with iptables not properly
|
||||
improving Makefile.linux in order to build with iptables not properly
|
||||
installed on the system.
|
||||
|
||||
2009/01/23:
|
||||
@ -327,7 +327,7 @@ VERSION 1.2 :
|
||||
2008/10/01:
|
||||
Improvements in genconfig.sh for detecting ipf or pf (under FreeBSD)
|
||||
and improve debian/ubuntu stuff.
|
||||
custom chain name patch from :
|
||||
custom chain name patch from :
|
||||
http://miniupnp.tuxfamily.org/forum/viewtopic.php?t=493
|
||||
|
||||
2008/08/24:
|
||||
@ -375,7 +375,7 @@ VERSION 1.1 :
|
||||
fixed a small bug in the description
|
||||
|
||||
2008/03/03:
|
||||
Fixed miniupnpd.c for compiling without natpmp support
|
||||
Fixed miniupnpd.c for compiling without natpmp support
|
||||
fixed presentationURL not there with L3F
|
||||
fixing lease file creation/modification
|
||||
|
||||
@ -643,7 +643,7 @@ VERSION 1.0 :
|
||||
minixml updated. should have no impact
|
||||
Added support for presentationURL with -w switch
|
||||
implemented getifstats() for linux. Added testgetifstats program
|
||||
improved error handling in getifstats() BSD
|
||||
improved error handling in getifstats() BSD
|
||||
|
||||
2006/11/26:
|
||||
no need to have miniupnpc sources to compile miniupnpd.
|
||||
@ -760,7 +760,7 @@ VERSION 1.0 :
|
||||
filtering SSDP requests and responding with same ST: field
|
||||
|
||||
2006/07/25:
|
||||
Added a dummy description for the WANDevice
|
||||
Added a dummy description for the WANDevice
|
||||
|
||||
2006/07/20:
|
||||
Command line arguments processing
|
||||
|
@ -25,7 +25,7 @@ To Build and Install :
|
||||
and "anchor miniupnpd" lines.
|
||||
- install as root using :
|
||||
# make install
|
||||
or
|
||||
or
|
||||
# PREFIX=/usr/local make install
|
||||
- run as root : The daemon needs rights to modify pf rules.
|
||||
|
||||
@ -66,7 +66,7 @@ To Build and install :
|
||||
> vi config.h
|
||||
- Build the daemon
|
||||
> make -f Makefile.linux
|
||||
If not using iptables from your system,
|
||||
If not using iptables from your system,
|
||||
> IPTABLESPATH=/path/to/iptables-1.4.1 make -f Makefile.linux
|
||||
note : make sure you have iptables with static libraries compiled.
|
||||
use "./configure --enable-static" before compiling iptables
|
||||
@ -137,7 +137,7 @@ automatically.
|
||||
|
||||
To stop the daemon use :
|
||||
# kill `cat /var/run/miniupnpd.pid`
|
||||
or if your linux system use /etc/init.d/
|
||||
or if your linux system use /etc/init.d/
|
||||
# /etc/init.d/miniupnpd stop
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
MiniUPnPd
|
||||
Copyright (c) 2006-2011, Thomas BERNARD
|
||||
Copyright (c) 2006-2011, Thomas BERNARD
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -192,4 +192,4 @@ config.h: genconfig.sh
|
||||
|
||||
# $(CC) $(CFLAGS) -c -o $(.TARGET) $(.IMPSRC)
|
||||
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
# $ IPTABLESPATH=/path/to/iptables-1.4.1 make -f Makefile.linux
|
||||
#
|
||||
#CFLAGS = -Wall -O -D_GNU_SOURCE -g -DDEBUG
|
||||
CFLAGS ?= -Wall -Os -D_GNU_SOURCE -fno-strict-aliasing -Wstrict-prototypes
|
||||
CFLAGS ?= -Wall -Os -D_GNU_SOURCE -fno-strict-aliasing -Wstrict-prototypes
|
||||
CC ?= gcc
|
||||
RM = rm -f
|
||||
INSTALL = install
|
||||
|
@ -35,7 +35,7 @@ struct nlist list[] = {
|
||||
{NULL}
|
||||
};
|
||||
|
||||
int
|
||||
int
|
||||
getifstats(const char * ifname, struct ifdata * data)
|
||||
{
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
|
@ -69,7 +69,7 @@ ProcessInterfaceWatchNotify(int s)
|
||||
}
|
||||
rtm = (struct rt_msghdr *)buf;
|
||||
syslog(LOG_DEBUG, "%u rt_msg : msglen=%d version=%d type=%d", (unsigned)len,
|
||||
rtm->rtm_msglen, rtm->rtm_version, rtm->rtm_type);
|
||||
rtm->rtm_msglen, rtm->rtm_version, rtm->rtm_type);
|
||||
switch(rtm->rtm_type) {
|
||||
case RTM_IFINFO: /* iface going up/down etc. */
|
||||
ifm = (struct if_msghdr *)buf;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006 Thomas Bernard
|
||||
* (c) 2006 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
||||
#define _SYS_QUEUE_H_
|
||||
|
||||
/*
|
||||
* This file defines five types of data structures: singly-linked lists,
|
||||
* This file defines five types of data structures: singly-linked lists,
|
||||
* lists, simple queues, tail queues, and circular queues.
|
||||
*
|
||||
*
|
||||
@ -95,7 +95,7 @@
|
||||
struct name { \
|
||||
struct type *slh_first; /* first element */ \
|
||||
}
|
||||
|
||||
|
||||
#define SLIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
@ -107,7 +107,7 @@ struct name { \
|
||||
struct { \
|
||||
struct type *sle_next; /* next element */ \
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Singly-linked List access methods.
|
||||
*/
|
||||
@ -322,8 +322,8 @@ struct { \
|
||||
struct type **tqe_prev; /* address of previous next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* tail queue access methods
|
||||
/*
|
||||
* tail queue access methods
|
||||
*/
|
||||
#define TAILQ_FIRST(head) ((head)->tqh_first)
|
||||
#define TAILQ_END(head) NULL
|
||||
@ -430,7 +430,7 @@ struct { \
|
||||
}
|
||||
|
||||
/*
|
||||
* Circular queue access methods
|
||||
* Circular queue access methods
|
||||
*/
|
||||
#define CIRCLEQ_FIRST(head) ((head)->cqh_first)
|
||||
#define CIRCLEQ_LAST(head) ((head)->cqh_last)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: daemonize.c,v 1.12 2011/05/27 09:35:02 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006 Thomas Bernard
|
||||
* (c) 2006 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -31,7 +31,7 @@ daemonize(void)
|
||||
case -1:
|
||||
perror("fork()");
|
||||
exit(1);
|
||||
|
||||
|
||||
/* child process */
|
||||
case 0:
|
||||
/* obtain a new process group */
|
||||
@ -42,14 +42,14 @@ daemonize(void)
|
||||
}
|
||||
|
||||
/* close all descriptors */
|
||||
for (i=getdtablesize();i>=0;--i) close(i);
|
||||
for (i=getdtablesize();i>=0;--i) close(i);
|
||||
|
||||
i = open("/dev/null", O_RDWR); /* open stdin */
|
||||
dup(i); /* stdout */
|
||||
dup(i); /* stderr */
|
||||
|
||||
umask(027);
|
||||
chdir("/"); /* chdir to /tmp ? */
|
||||
chdir("/"); /* chdir to /tmp ? */
|
||||
|
||||
return pid;
|
||||
|
||||
@ -69,7 +69,7 @@ writepidfile(const char * fname, int pid)
|
||||
|
||||
if(!fname || (strlen(fname) == 0))
|
||||
return -1;
|
||||
|
||||
|
||||
if( (pidfile = open(fname, O_WRONLY|O_CREAT, 0644)) < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "Unable to open pidfile for writing %s: %m", fname);
|
||||
@ -79,7 +79,7 @@ writepidfile(const char * fname, int pid)
|
||||
pidstringlen = snprintf(pidstring, sizeof(pidstring), "%d\n", pid);
|
||||
if(pidstringlen <= 0)
|
||||
{
|
||||
syslog(LOG_ERR,
|
||||
syslog(LOG_ERR,
|
||||
"Unable to write to pidfile %s: snprintf(): FAILED", fname);
|
||||
close(pidfile);
|
||||
return -1;
|
||||
@ -107,9 +107,9 @@ checkforrunning(const char * fname)
|
||||
|
||||
if( (pidfile = open(fname, O_RDONLY)) < 0)
|
||||
return 0;
|
||||
|
||||
|
||||
memset(buffer, 0, 64);
|
||||
|
||||
|
||||
if(read(pidfile, buffer, 63))
|
||||
{
|
||||
if( (pid = atol(buffer)) > 0)
|
||||
@ -121,9 +121,9 @@ checkforrunning(const char * fname)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
close(pidfile);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: daemonize.h,v 1.6 2008/01/29 13:04:46 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006 Thomas Bernard
|
||||
* (c) 2006 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
#ifndef USE_DAEMON
|
||||
/* daemonize()
|
||||
* "fork" to background, detach from terminal, etc...
|
||||
* "fork" to background, detach from terminal, etc...
|
||||
* returns: pid of the daemon, exits upon failure */
|
||||
int
|
||||
daemonize(void);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: getconnstatus.c,v 1.4 2011/05/23 20:22:41 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2011 Thomas Bernard
|
||||
* (c) 2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: getconnstatus.h,v 1.2 2011/05/23 20:22:41 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2011 Thomas Bernard
|
||||
* (c) 2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: getifaddr.c,v 1.14 2012/02/07 11:05:07 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: getifaddr.h,v 1.5 2011/05/15 08:59:27 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2008 Thomas Bernard
|
||||
* (c) 2006-2008 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* which weren't available during daemon start. It also takes care
|
||||
* of interfaces which become unavailable.
|
||||
*
|
||||
* Copyright (c) 2011, Alexey Osipov <simba@lerlan.ru>
|
||||
* Copyright (c) 2011, Alexey Osipov <simba@lerlan.ru>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -142,7 +142,7 @@ add_redirect_desc(unsigned short eport, int proto, const char * desc)
|
||||
{
|
||||
struct rdr_desc * p;
|
||||
size_t l;
|
||||
|
||||
|
||||
if (desc != NULL) {
|
||||
l = strlen(desc) + 1;
|
||||
p = malloc(sizeof(struct rdr_desc) + l);
|
||||
@ -178,7 +178,7 @@ static void
|
||||
get_redirect_desc(unsigned short eport, int proto, char * desc, int desclen)
|
||||
{
|
||||
struct rdr_desc * p;
|
||||
|
||||
|
||||
if (desc == NULL || desclen == 0)
|
||||
return;
|
||||
for (p = rdr_desc_list; p; p = p->next) {
|
||||
@ -192,7 +192,7 @@ get_redirect_desc(unsigned short eport, int proto, char * desc, int desclen)
|
||||
|
||||
int init_redirect(void)
|
||||
{
|
||||
|
||||
|
||||
dev = open(IPNAT_NAME, O_RDWR);
|
||||
if (dev < 0) {
|
||||
syslog(LOG_ERR, "open(\"%s\"): %m", IPNAT_NAME);
|
||||
@ -208,7 +208,7 @@ int init_redirect(void)
|
||||
|
||||
void shutdown_redirect(void)
|
||||
{
|
||||
|
||||
|
||||
if (dev >= 0) {
|
||||
close(dev);
|
||||
dev = -1;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: ipfrdr.h,v 1.3 2007/11/02 22:54:01 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2007 Thomas Bernard
|
||||
* (c) 2006-2007 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
#ifndef __IPFRDR_H__
|
||||
@ -18,7 +18,7 @@ int
|
||||
add_filter_rule2(const char * ifname, const char * iaddr,
|
||||
unsigned short eport, unsigned short iport,
|
||||
int proto, const char * desc);
|
||||
|
||||
|
||||
|
||||
/* get_redirect_rule() gets internal IP and port from
|
||||
* interface, external port and protocl
|
||||
|
@ -21,7 +21,7 @@
|
||||
static int ipfw_exec(int optname, void * optval, uintptr_t optlen) {
|
||||
static int sock = -1;
|
||||
int result;
|
||||
|
||||
|
||||
switch (optname) {
|
||||
case IP_FW_INIT:
|
||||
if (sock == -1)
|
||||
@ -48,14 +48,14 @@ static int ipfw_exec(int optname, void * optval, uintptr_t optlen) {
|
||||
result = getsockopt(sock, IPPROTO_IP, optname, optval, (socklen_t *)optlen);
|
||||
if (result == -1) {
|
||||
syslog(LOG_ERR, "getsockopt(): %m");
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
syslog(LOG_ERR, "unhandled option");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -69,23 +69,23 @@ static void ipfw_free_ruleset(struct ip_fw ** rules) {
|
||||
static int ipfw_fetch_ruleset(struct ip_fw ** rules, int * total_fetched, int count) {
|
||||
int fetched;
|
||||
socklen_t size;
|
||||
|
||||
|
||||
if (rules == NULL || *total_fetched < 0 || count < 1)
|
||||
return -1;
|
||||
|
||||
|
||||
size = sizeof(struct ip_fw) * (*total_fetched + count);
|
||||
*rules = (struct ip_fw *)realloc(*rules, size);
|
||||
if (*rules == NULL) {
|
||||
syslog(LOG_ERR, "realloc(): %m");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
(*rules)->version = IP_FW_CURRENT_API_VERSION;
|
||||
if (ipfw_exec(IP_FW_GET, *rules, (uintptr_t)&size) < 0)
|
||||
return -1;
|
||||
fetched = *total_fetched;
|
||||
*total_fetched = size / sizeof(struct ip_fw);
|
||||
|
||||
|
||||
return *total_fetched - fetched;
|
||||
}
|
||||
|
||||
|
@ -170,7 +170,7 @@ int add_redirect_rule2(
|
||||
return -1;
|
||||
if (ipfw_validate_ifname(ifname) < 0)
|
||||
return -1;
|
||||
|
||||
|
||||
memset(&rule, 0, sizeof(struct ip_fw));
|
||||
rule.version = IP_FW_CURRENT_API_VERSION;
|
||||
#if 0
|
||||
@ -191,7 +191,7 @@ int add_redirect_rule2(
|
||||
if (inet_aton(iaddr, &rule.fw_out_if.fu_via_ip) == 0) {
|
||||
syslog(LOG_ERR, "inet_aton(): %m");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
memcpy(&rule.fw_dst, &rule.fw_out_if.fu_via_ip, sizeof(struct in_addr));
|
||||
memcpy(&rule.fw_fwd_ip.sin_addr, &rule.fw_out_if.fu_via_ip, sizeof(struct in_addr));
|
||||
rule.fw_dmsk.s_addr = INADDR_BROADCAST; /* TODO check this */
|
||||
@ -216,10 +216,10 @@ int get_redirect_rule(
|
||||
const char * ifname,
|
||||
unsigned short eport,
|
||||
int proto,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
unsigned short * iport,
|
||||
char * desc,
|
||||
char * desc,
|
||||
int desclen,
|
||||
char * rhost,
|
||||
int rhostlen,
|
||||
@ -229,7 +229,7 @@ int get_redirect_rule(
|
||||
{
|
||||
int i, count_rules, total_rules = 0;
|
||||
struct ip_fw * rules = NULL;
|
||||
|
||||
|
||||
if (ipfw_validate_protocol(proto) < 0)
|
||||
return -1;
|
||||
if (ipfw_validate_ifname(ifname) < 0)
|
||||
@ -242,7 +242,7 @@ int get_redirect_rule(
|
||||
if (count_rules < 0)
|
||||
goto error;
|
||||
} while (count_rules == 10);
|
||||
|
||||
|
||||
for (i=0; i<total_rules-1; i++) {
|
||||
const struct ip_fw const * ptr = &rules[i];
|
||||
if (proto == ptr->fw_prot && eport == ptr->fw_uar.fw_pts[0]) {
|
||||
@ -258,7 +258,7 @@ int get_redirect_rule(
|
||||
if (inet_ntop(AF_INET, &ptr->fw_fwd_ip.sin_addr, iaddr, iaddrlen) == NULL) {
|
||||
syslog(LOG_ERR, "inet_ntop(): %m");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rhost != NULL && rhostlen > 0) {
|
||||
if (ptr->fw_src.s_addr == 0)
|
||||
@ -266,7 +266,7 @@ int get_redirect_rule(
|
||||
else if (inet_ntop(AF_INET, &ptr->fw_src.s_addr, rhost, rhostlen) == NULL) {
|
||||
syslog(LOG_ERR, "inet_ntop(): %m");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* And what if we found more than 1 matching rule? */
|
||||
ipfw_free_ruleset(&rules);
|
||||
@ -277,29 +277,29 @@ int get_redirect_rule(
|
||||
|
||||
error:
|
||||
if (rules != NULL)
|
||||
ipfw_free_ruleset(&rules);
|
||||
ipfw_free_ruleset(&rules);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int delete_redirect_rule(
|
||||
const char * ifname,
|
||||
unsigned short eport,
|
||||
int proto)
|
||||
int proto)
|
||||
{
|
||||
int i, count_rules, total_rules = 0;
|
||||
struct ip_fw * rules = NULL;
|
||||
|
||||
|
||||
if (ipfw_validate_protocol(proto) < 0)
|
||||
return -1;
|
||||
if (ipfw_validate_ifname(ifname) < 0)
|
||||
return -1;
|
||||
|
||||
|
||||
do {
|
||||
count_rules = ipfw_fetch_ruleset(&rules, &total_rules, 10);
|
||||
if (count_rules < 0)
|
||||
goto error;
|
||||
} while (count_rules == 10);
|
||||
|
||||
|
||||
for (i=0; i<total_rules-1; i++) {
|
||||
const struct ip_fw const * ptr = &rules[i];
|
||||
if (proto == ptr->fw_prot && eport == ptr->fw_uar.fw_pts[0]) {
|
||||
@ -311,47 +311,47 @@ int delete_redirect_rule(
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
error:
|
||||
if (rules != NULL)
|
||||
ipfw_free_ruleset(&rules);
|
||||
ipfw_free_ruleset(&rules);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int add_filter_rule2(
|
||||
const char * ifname,
|
||||
const char * ifname,
|
||||
const char * rhost,
|
||||
const char * iaddr,
|
||||
unsigned short eport,
|
||||
unsigned short eport,
|
||||
unsigned short iport,
|
||||
int proto,
|
||||
int proto,
|
||||
const char * desc)
|
||||
{
|
||||
return 0; /* nothing to do, always success */
|
||||
}
|
||||
|
||||
int delete_filter_rule(
|
||||
const char * ifname,
|
||||
unsigned short eport,
|
||||
int proto)
|
||||
const char * ifname,
|
||||
unsigned short eport,
|
||||
int proto)
|
||||
{
|
||||
return 0; /* nothing to do, always success */
|
||||
}
|
||||
|
||||
int get_redirect_rule_by_index(
|
||||
int index,
|
||||
char * ifname,
|
||||
char * ifname,
|
||||
unsigned short * eport,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
unsigned short * iport,
|
||||
int * proto,
|
||||
char * desc,
|
||||
int * proto,
|
||||
char * desc,
|
||||
int desclen,
|
||||
char * rhost,
|
||||
int rhostlen,
|
||||
unsigned int * timestamp,
|
||||
u_int64_t * packets,
|
||||
u_int64_t * packets,
|
||||
u_int64_t * bytes)
|
||||
{
|
||||
int total_rules = 0;
|
||||
@ -389,7 +389,7 @@ int get_redirect_rule_by_index(
|
||||
if (inet_ntop(AF_INET, &ptr->fw_fwd_ip.sin_addr, iaddr, iaddrlen) == NULL) {
|
||||
syslog(LOG_ERR, "inet_ntop(): %m");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rhost != NULL && rhostlen > 0) {
|
||||
if (ptr->fw_src.s_addr == 0)
|
||||
@ -397,7 +397,7 @@ int get_redirect_rule_by_index(
|
||||
else if (inet_ntop(AF_INET, &ptr->fw_src.s_addr, rhost, rhostlen) == NULL) {
|
||||
syslog(LOG_ERR, "inet_ntop(): %m");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
ipfw_free_ruleset(&rules);
|
||||
get_desc_time(*eport, *proto, desc, desclen, timestamp);
|
||||
@ -406,8 +406,8 @@ int get_redirect_rule_by_index(
|
||||
|
||||
error:
|
||||
if (rules != NULL)
|
||||
ipfw_free_ruleset(&rules);
|
||||
return -1;
|
||||
ipfw_free_ruleset(&rules);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* upnp_get_portmappings_in_range()
|
||||
@ -423,16 +423,16 @@ get_portmappings_in_range(unsigned short startport,
|
||||
unsigned int capacity = 128;
|
||||
int i, count_rules, total_rules = 0;
|
||||
struct ip_fw * rules = NULL;
|
||||
|
||||
|
||||
if (ipfw_validate_protocol(proto) < 0)
|
||||
return NULL;
|
||||
|
||||
|
||||
do {
|
||||
count_rules = ipfw_fetch_ruleset(&rules, &total_rules, 10);
|
||||
if (count_rules < 0)
|
||||
goto error;
|
||||
} while (count_rules == 10);
|
||||
|
||||
|
||||
array = calloc(capacity, sizeof(unsigned short));
|
||||
if(!array) {
|
||||
syslog(LOG_ERR, "get_portmappings_in_range() : calloc error");
|
||||
@ -461,7 +461,7 @@ get_portmappings_in_range(unsigned short startport,
|
||||
}
|
||||
error:
|
||||
if (rules != NULL)
|
||||
ipfw_free_ruleset(&rules);
|
||||
ipfw_free_ruleset(&rules);
|
||||
return array;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2009 Jardel Weyrich
|
||||
* (c) 2009 Jardel Weyrich
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution
|
||||
*/
|
||||
@ -23,12 +23,12 @@ int add_redirect_rule2(
|
||||
unsigned int timestamp);
|
||||
|
||||
int add_filter_rule2(
|
||||
const char * ifname,
|
||||
const char * rhost,
|
||||
const char * ifname,
|
||||
const char * rhost,
|
||||
const char * iaddr,
|
||||
unsigned short eport,
|
||||
unsigned short eport,
|
||||
unsigned short iport,
|
||||
int proto,
|
||||
int proto,
|
||||
const char * desc);
|
||||
|
||||
#if 0
|
||||
@ -41,25 +41,25 @@ int get_redirect_rule(
|
||||
const char * ifname,
|
||||
unsigned short eport,
|
||||
int proto,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
unsigned short * iport,
|
||||
char * desc,
|
||||
char * desc,
|
||||
int desclen,
|
||||
u_int64_t * packets,
|
||||
u_int64_t * bytes);
|
||||
|
||||
int get_redirect_rule_by_index(
|
||||
int index,
|
||||
char * ifname,
|
||||
char * ifname,
|
||||
unsigned short * eport,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
char * iaddr,
|
||||
int iaddrlen,
|
||||
unsigned short * iport,
|
||||
int * proto,
|
||||
char * desc,
|
||||
int * proto,
|
||||
char * desc,
|
||||
int desclen,
|
||||
u_int64_t * packets,
|
||||
u_int64_t * packets,
|
||||
u_int64_t * bytes);
|
||||
|
||||
#endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: getifstats.c,v 1.9 2011/05/25 22:22:57 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* which weren't available during daemon start. It also takes care
|
||||
* of interfaces which become unavailable.
|
||||
*
|
||||
* Copyright (c) 2011, Alexey Osipov <simba@lerlan.ru>
|
||||
* Copyright (c) 2011, Alexey Osipov <simba@lerlan.ru>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -28,7 +28,7 @@ int getifstats(const char * ifname, struct ifdata * data) {
|
||||
size_t needed;
|
||||
char *buf, *end, *p;
|
||||
struct if_msghdr *ifm;
|
||||
struct if_data ifdata;
|
||||
struct if_data ifdata;
|
||||
#ifdef ENABLE_GETIFSTATS_CACHING
|
||||
static time_t cache_timestamp = 0;
|
||||
static struct ifdata cache_data;
|
||||
@ -86,7 +86,7 @@ int getifstats(const char * ifname, struct ifdata * data) {
|
||||
#endif
|
||||
return 0; /* found, ok */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
return -1; /* not found or error */
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2009 Jardel Weyrich
|
||||
* (c) 2009 Jardel Weyrich
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution
|
||||
*/
|
||||
|
@ -42,7 +42,7 @@ AddMulticastMembership(int s, in_addr_t ifaddr)
|
||||
imr.imr_multiaddr.s_addr = inet_addr(SSDP_MCAST_ADDR);
|
||||
/*imr.imr_interface.s_addr = htonl(INADDR_ANY);*/
|
||||
imr.imr_interface.s_addr = ifaddr; /*inet_addr(ifaddr);*/
|
||||
|
||||
|
||||
if (setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *)&imr, sizeof(struct ip_mreq)) < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "setsockopt(udp, IP_ADD_MEMBERSHIP): %m");
|
||||
@ -84,7 +84,7 @@ AddMulticastMembershipIPv6(int s)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Open and configure the socket listening for
|
||||
/* Open and configure the socket listening for
|
||||
* SSDP udp packets sent on 239.255.255.250 port 1900
|
||||
* SSDP v6 udp packets sent on FF02::C, or FF05::C, port 1900 */
|
||||
int
|
||||
@ -153,7 +153,7 @@ OpenAndConfSSDPReceiveSocket(int ipv6)
|
||||
if(AddMulticastMembership(s, lan_addr->addr.s_addr) < 0)
|
||||
{
|
||||
syslog(LOG_WARNING,
|
||||
"Failed to add multicast membership for interface %s",
|
||||
"Failed to add multicast membership for interface %s",
|
||||
lan_addr->str);
|
||||
}
|
||||
}
|
||||
@ -172,7 +172,7 @@ OpenAndConfSSDPNotifySocket(in_addr_t addr)
|
||||
int bcast = 1;
|
||||
struct in_addr mc_if;
|
||||
struct sockaddr_in sockname;
|
||||
|
||||
|
||||
if( (s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "socket(udp_notify): %m");
|
||||
@ -194,7 +194,7 @@ OpenAndConfSSDPNotifySocket(in_addr_t addr)
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
if(setsockopt(s, SOL_SOCKET, SO_BROADCAST, &bcast, sizeof(bcast)) < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "setsockopt(udp_notify, SO_BROADCAST): %m");
|
||||
@ -272,12 +272,12 @@ SendSSDPAnnounce2(int s, const struct sockaddr * addr,
|
||||
char buf[512];
|
||||
char addr_str[64];
|
||||
socklen_t addrlen;
|
||||
/*
|
||||
/*
|
||||
* follow guideline from document "UPnP Device Architecture 1.0"
|
||||
* uppercase is recommended.
|
||||
* DATE: is recommended
|
||||
* SERVER: OS/ver UPnP/1.0 miniupnpd/1.0
|
||||
* - check what to put in the 'Cache-Control' header
|
||||
* - check what to put in the 'Cache-Control' header
|
||||
*
|
||||
* have a look at the document "UPnP Device Architecture v1.1 */
|
||||
l = snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\r\n"
|
||||
@ -345,7 +345,7 @@ SendSSDPNotifies(int s, const char * host, unsigned short port,
|
||||
|
||||
while(known_service_types[i])
|
||||
{
|
||||
l = snprintf(bufr, sizeof(bufr),
|
||||
l = snprintf(bufr, sizeof(bufr),
|
||||
"NOTIFY * HTTP/1.1\r\n"
|
||||
"HOST: %s:%d\r\n"
|
||||
"CACHE-CONTROL: max-age=%u\r\n"
|
||||
@ -547,7 +547,7 @@ ProcessSSDPData(int s, const char *bufr, int n,
|
||||
}
|
||||
}
|
||||
|
||||
/* This will broadcast ssdp:byebye notifications to inform
|
||||
/* This will broadcast ssdp:byebye notifications to inform
|
||||
* the network that UPnP is going down. */
|
||||
int
|
||||
SendSSDPGoodbye(int * sockets, int n_sockets)
|
||||
@ -629,7 +629,7 @@ SubmitServicesToMiniSSDPD(const char * host, unsigned short port) {
|
||||
if(i > 0)
|
||||
p[l-1] = '1';
|
||||
p += l;
|
||||
l = snprintf(strbuf, sizeof(strbuf), "%s::%s%s",
|
||||
l = snprintf(strbuf, sizeof(strbuf), "%s::%s%s",
|
||||
uuidvalue, known_service_types[i], (i==0)?"":"1");
|
||||
CODELENGTH(l, p);
|
||||
memcpy(p, strbuf, l);
|
||||
|
@ -263,13 +263,13 @@ static int nfqueue_cb(
|
||||
int dport = get_udp_dst_port(pkt);
|
||||
|
||||
int x = sizeof (struct ip) + sizeof (struct udphdr);
|
||||
|
||||
/* packets we are interested in are UDP multicast to 239.255.255.250:1900
|
||||
|
||||
/* packets we are interested in are UDP multicast to 239.255.255.250:1900
|
||||
* and start with a data string M-SEARCH
|
||||
*/
|
||||
if ( (dport == 1900) && (id_protocol == IPPROTO_UDP)
|
||||
if ( (dport == 1900) && (id_protocol == IPPROTO_UDP)
|
||||
&& (ssdp.sin_addr.s_addr == iph->ip_dst.s_addr) ) {
|
||||
|
||||
|
||||
/* get the index that the packet came in on */
|
||||
u_int32_t idx = nfq_get_indev(nfa);
|
||||
int i = 0;
|
||||
@ -279,7 +279,7 @@ static int nfqueue_cb(
|
||||
struct udphdr *udp = (struct udphdr *) (pkt + sizeof(struct ip));
|
||||
|
||||
char *dd = pkt + x;
|
||||
|
||||
|
||||
struct sockaddr_in sendername;
|
||||
sendername.sin_family = AF_INET;
|
||||
sendername.sin_port = udp->source;
|
||||
@ -291,7 +291,7 @@ static int nfqueue_cb(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
|
||||
|
||||
} else {
|
||||
@ -411,7 +411,7 @@ write_command_line(int fd, int argc, char * * argv)
|
||||
|
||||
#endif
|
||||
|
||||
/* Handler for the SIGTERM signal (kill)
|
||||
/* Handler for the SIGTERM signal (kill)
|
||||
* SIGINT is also handled */
|
||||
static void
|
||||
sigterm(int sig)
|
||||
@ -519,7 +519,7 @@ struct runtime_vars {
|
||||
* external interface associated with the lan subnet follows.
|
||||
* ex : 192.168.1.1/24 81.21.41.11
|
||||
*
|
||||
* return value :
|
||||
* return value :
|
||||
* 0 : ok
|
||||
* -1 : error */
|
||||
static int
|
||||
@ -721,7 +721,7 @@ init(int argc, char * * argv, struct runtime_vars * v)
|
||||
case UPNPSERIAL:
|
||||
strncpy(serialnumber, ary_options[i].value, SERIALNUMBER_MAX_LEN);
|
||||
serialnumber[SERIALNUMBER_MAX_LEN-1] = '\0';
|
||||
break;
|
||||
break;
|
||||
case UPNPMODEL_NUMBER:
|
||||
strncpy(modelnumber, ary_options[i].value, MODELNUMBER_MAX_LEN);
|
||||
modelnumber[MODELNUMBER_MAX_LEN-1] = '\0';
|
||||
@ -990,7 +990,7 @@ init(int argc, char * * argv, struct runtime_vars * v)
|
||||
{
|
||||
syslog(LOG_ERR, "MiniUPnPd is already running. EXITING");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
set_startup_time(GETFLAG(SYSUPTIMEMASK));
|
||||
|
||||
@ -1275,7 +1275,7 @@ main(int argc, char * * argv)
|
||||
if((startup_time<60*60*24) && (time(NULL)>60*60*24))
|
||||
{
|
||||
set_startup_time(GETFLAG(SYSUPTIMEMASK));
|
||||
}
|
||||
}
|
||||
/* send public address change notifications if needed */
|
||||
if(should_send_public_address_change_notif)
|
||||
{
|
||||
@ -1387,7 +1387,7 @@ main(int argc, char * * argv)
|
||||
FD_ZERO(&readset);
|
||||
FD_ZERO(&writeset);
|
||||
|
||||
if (sudp >= 0)
|
||||
if (sudp >= 0)
|
||||
{
|
||||
FD_SET(sudp, &readset);
|
||||
max_fd = MAX( max_fd, sudp);
|
||||
@ -1399,7 +1399,7 @@ main(int argc, char * * argv)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (shttpl >= 0)
|
||||
if (shttpl >= 0)
|
||||
{
|
||||
FD_SET(shttpl, &readset);
|
||||
max_fd = MAX( max_fd, shttpl);
|
||||
@ -1413,7 +1413,7 @@ main(int argc, char * * argv)
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NFQUEUE
|
||||
if (nfqh >= 0)
|
||||
if (nfqh >= 0)
|
||||
{
|
||||
FD_SET(nfqh, &readset);
|
||||
max_fd = MAX( max_fd, nfqh);
|
||||
@ -1455,7 +1455,7 @@ main(int argc, char * * argv)
|
||||
FD_SET(sctl, &readset);
|
||||
max_fd = MAX( max_fd, sctl);
|
||||
}
|
||||
|
||||
|
||||
for(ectl = ctllisthead.lh_first; ectl; ectl = ectl->entries.le_next)
|
||||
{
|
||||
if(ectl->socket >= 0) {
|
||||
@ -1699,7 +1699,7 @@ shutdown:
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*if(SendSSDPGoodbye(snotify, v.n_lan_addr) < 0)*/
|
||||
if (GETFLAG(ENABLEUPNPMASK))
|
||||
{
|
||||
@ -1728,9 +1728,9 @@ shutdown:
|
||||
free(snatpmp);
|
||||
#endif
|
||||
free(snotify);
|
||||
closelog();
|
||||
closelog();
|
||||
freeoptions();
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* webpage: http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* Author : Thomas Bernard
|
||||
|
||||
Copyright (c) 2005-2011, Thomas BERNARD
|
||||
Copyright (c) 2005-2011, Thomas BERNARD
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@ -149,7 +149,7 @@ static void parseelt(struct xmlparser * p)
|
||||
return;
|
||||
}
|
||||
if(memcmp(p->xml, "<![CDATA[", 9) == 0)
|
||||
{
|
||||
{
|
||||
/* CDATA handling */
|
||||
p->xml += 9;
|
||||
data = p->xml;
|
||||
|
@ -216,7 +216,7 @@ void ProcessIncomingNATPMPPacket(int s)
|
||||
}
|
||||
} else {
|
||||
/* To improve the interworking between nat-pmp and
|
||||
* UPnP, we should check that we remove only NAT-PMP
|
||||
* UPnP, we should check that we remove only NAT-PMP
|
||||
* mappings */
|
||||
r = _upnp_delete_redir(eport, proto);
|
||||
/*syslog(LOG_DEBUG, "%hu %d r=%d", eport, proto, r);*/
|
||||
@ -344,7 +344,7 @@ int CleanExpiredNATPMP()
|
||||
return ScanNATPMPforExpiration();
|
||||
/* check desc - this is important since we keep expiration time as part
|
||||
* of the desc.
|
||||
* If the rule is renewed, timestamp and nextnatpmptoclean_timestamp
|
||||
* If the rule is renewed, timestamp and nextnatpmptoclean_timestamp
|
||||
* can be different. In that case, the rule must not be removed ! */
|
||||
if(sscanf(desc, "NAT-PMP %u", ×tamp) == 1) {
|
||||
if(timestamp > nextnatpmptoclean_timestamp)
|
||||
@ -407,7 +407,7 @@ void SendNATPMPPublicAddressChangeNotification(int * sockets, int n_sockets)
|
||||
n = sendto(sockets[j], notif, 12, 0,
|
||||
(struct sockaddr *)&sockname, sizeof(struct sockaddr_in));
|
||||
if(n < 0)
|
||||
{
|
||||
{
|
||||
syslog(LOG_ERR, "%s: sendto(s_udp=%d): %m",
|
||||
"SendNATPMPPublicAddressChangeNotification", sockets[j]);
|
||||
return;
|
||||
@ -417,7 +417,7 @@ void SendNATPMPPublicAddressChangeNotification(int * sockets, int n_sockets)
|
||||
n = sendto(sockets[j], notif, 12, 0,
|
||||
(struct sockaddr *)&sockname, sizeof(struct sockaddr_in));
|
||||
if(n < 0)
|
||||
{
|
||||
{
|
||||
syslog(LOG_ERR, "%s: sendto(s_udp=%d): %m",
|
||||
"SendNATPMPPublicAddressChangeNotification", sockets[j]);
|
||||
return;
|
||||
|
@ -34,7 +34,7 @@ TEST_LIB := $(shell test -f /usr/lib$(ARCH)/libiptc.a && echo 1)
|
||||
ifeq ($(TEST_LIB), 1)
|
||||
LIBS = -liptc /usr/lib$(ARCH)/libiptc.a
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
all: iptcrdr.o testiptcrdr
|
||||
|
@ -33,5 +33,5 @@ else
|
||||
echo "Filter table clean..initalizing.."
|
||||
$IPTABLES -t filter -N MINIUPNPD
|
||||
$IPTABLES -t filter -I FORWARD 4 -i $EXTIF ! -o $EXTIF -j MINIUPNPD
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -219,7 +219,7 @@ add_filter_rule2(const char * ifname,
|
||||
return add_filter_rule(proto, rhost, iaddr, iport);
|
||||
}
|
||||
|
||||
/* get_redirect_rule()
|
||||
/* get_redirect_rule()
|
||||
* returns -1 if the rule is not found */
|
||||
int
|
||||
get_redirect_rule(const char * ifname, unsigned short eport, int proto,
|
||||
@ -305,7 +305,7 @@ get_redirect_rule(const char * ifname, unsigned short eport, int proto,
|
||||
return r;
|
||||
}
|
||||
|
||||
/* get_redirect_rule_by_index()
|
||||
/* get_redirect_rule_by_index()
|
||||
* return -1 when the rule was not found */
|
||||
int
|
||||
get_redirect_rule_by_index(int index,
|
||||
@ -577,7 +577,7 @@ delete_redirect_and_filter_rules(unsigned short eport, int proto)
|
||||
}
|
||||
|
||||
/* ==================================== */
|
||||
/* TODO : add the -m state --state NEW,ESTABLISHED,RELATED
|
||||
/* TODO : add the -m state --state NEW,ESTABLISHED,RELATED
|
||||
* only for the filter rule */
|
||||
static struct ipt_entry_match *
|
||||
get_tcp_match(unsigned short dport)
|
||||
@ -711,7 +711,7 @@ iptc_init_verify_and_append(const char * table,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* add nat rule
|
||||
/* add nat rule
|
||||
* iptables -t nat -A MINIUPNPD -p proto --dport eport -j DNAT --to iaddr:iport
|
||||
* */
|
||||
static int
|
||||
@ -753,7 +753,7 @@ addnatrule(int proto, unsigned short eport,
|
||||
e->ip.src.s_addr = inet_addr(rhost);
|
||||
e->ip.smsk.s_addr = INADDR_NONE;
|
||||
}
|
||||
|
||||
|
||||
r = iptc_init_verify_and_append("nat", miniupnpd_nat_chain, e, "addnatrule()");
|
||||
free(target);
|
||||
free(match);
|
||||
@ -816,7 +816,7 @@ add_filter_rule(int proto, const char * rhost,
|
||||
e->ip.src.s_addr = inet_addr(rhost);
|
||||
e->ip.smsk.s_addr = INADDR_NONE;
|
||||
}
|
||||
|
||||
|
||||
r = iptc_init_verify_and_append("filter", miniupnpd_forward_chain, e, "add_filter_rule()");
|
||||
free(target);
|
||||
free(match);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: iptcrdr.h,v 1.17 2011/06/04 15:44:58 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: testiptcrdr.c,v 1.16 2011/03/02 16:04:23 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -22,7 +22,7 @@ main(int argc, char ** argv)
|
||||
unsigned short eport, iport;
|
||||
const char * iaddr;
|
||||
printf("Usage %s <ext_port> <internal_ip> <internal_port>\n", argv[0]);
|
||||
|
||||
|
||||
if(argc<4)
|
||||
return -1;
|
||||
openlog("testiptcrdr", LOG_PERROR|LOG_CONS, LOG_LOCAL0);
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* author: Ryan Wagoner
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -99,7 +99,7 @@ readoptionsfile(const char * fname)
|
||||
while(fgets(buffer, sizeof(buffer), hfile))
|
||||
{
|
||||
linenum++;
|
||||
t = strchr(buffer, '\n');
|
||||
t = strchr(buffer, '\n');
|
||||
if(t)
|
||||
{
|
||||
*t = '\0';
|
||||
@ -111,7 +111,7 @@ readoptionsfile(const char * fname)
|
||||
t--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* skip leading whitespaces */
|
||||
name = buffer;
|
||||
while(isspace(*name))
|
||||
@ -214,7 +214,7 @@ readoptionsfile(const char * fname)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
fclose(hfile);
|
||||
|
||||
for(i = 0; i < num_options; i++)
|
||||
@ -222,7 +222,7 @@ readoptionsfile(const char * fname)
|
||||
/* add start address of string_repo to get right pointer */
|
||||
ary_options[i].value = string_repo + (size_t)ary_options[i].value;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* author: Ryan Wagoner
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -57,7 +57,7 @@ enum upnpconfigoptions {
|
||||
int
|
||||
readoptionsfile(const char * fname);
|
||||
|
||||
/* freeoptions()
|
||||
/* freeoptions()
|
||||
* frees memory allocated to option values */
|
||||
void
|
||||
freeoptions(void);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: obsdrdr.c,v 1.69 2012/02/03 11:59:16 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2010 Thomas Bernard
|
||||
* (c) 2006-2010 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -217,7 +217,7 @@ add_redirect_rule2(const char * ifname,
|
||||
pcr.rule.nat.addr.type = PF_ADDR_NONE;
|
||||
pcr.rule.rdr.addr.type = PF_ADDR_ADDRMASK;
|
||||
#endif
|
||||
|
||||
|
||||
pcr.rule.dst.port_op = PF_OP_EQ;
|
||||
pcr.rule.dst.port[0] = htons(eport);
|
||||
pcr.rule.dst.port[1] = htons(eport);
|
||||
@ -358,7 +358,7 @@ add_filter_rule2(const char * ifname,
|
||||
if(1)
|
||||
{
|
||||
#endif
|
||||
|
||||
|
||||
pcr.rule.dst.port_op = PF_OP_EQ;
|
||||
pcr.rule.dst.port[0] = htons(eport);
|
||||
pcr.rule.direction = PF_IN;
|
||||
@ -376,7 +376,7 @@ add_filter_rule2(const char * ifname,
|
||||
pcr.rule.flags = TH_SYN;
|
||||
pcr.rule.flagset = (TH_SYN|TH_ACK);
|
||||
#ifdef PFRULE_HAS_RTABLEID
|
||||
pcr.rule.rtableid = -1; /* first appeared in OpenBSD 4.0 */
|
||||
pcr.rule.rtableid = -1; /* first appeared in OpenBSD 4.0 */
|
||||
#endif
|
||||
#ifdef PFRULE_HAS_ONRDOMAIN
|
||||
pcr.rule.onrdomain = -1; /* first appeared in OpenBSD 5.0 */
|
||||
@ -402,7 +402,7 @@ add_filter_rule2(const char * ifname,
|
||||
TAILQ_INIT(&pcr.rule.rpool.list);
|
||||
inet_pton(AF_INET, iaddr, &a->addr.v.a.addr.v4.s_addr);
|
||||
TAILQ_INSERT_TAIL(&pcr.rule.rpool.list, a, entries);
|
||||
|
||||
|
||||
/* we have any - any port = # keep state label */
|
||||
/* we want any - iaddr port = # keep state label */
|
||||
/* memcpy(&pcr.rule.dst, a, sizeof(struct pf_pooladdr)); */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: obsdrdr.h,v 1.19 2011/06/04 15:47:18 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006 Thomas Bernard
|
||||
* (c) 2006 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -27,7 +27,7 @@ add_filter_rule2(const char * ifname,
|
||||
const char * rhost, const char * iaddr,
|
||||
unsigned short eport, unsigned short iport,
|
||||
int proto, const char * desc);
|
||||
|
||||
|
||||
|
||||
/* get_redirect_rule() gets internal IP and port from
|
||||
* interface, external port and protocl
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: testobsdrdr.c,v 1.22 2011/06/04 16:45:22 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -91,7 +91,7 @@ main(int arc, char * * argv)
|
||||
|
||||
list_rules();
|
||||
list_eports_tcp();
|
||||
|
||||
|
||||
|
||||
if(get_redirect_rule("xl1", 4662, IPPROTO_TCP,
|
||||
buf, sizeof(buf), &iport, desc, sizeof(desc),
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#include "../getifstats.h"
|
||||
|
||||
int
|
||||
int
|
||||
getifstats(const char * ifname, struct ifdata * data)
|
||||
{
|
||||
char buffer[64], *s;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: testgetifaddr.c,v 1.3 2011/04/11 10:41:57 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
#include <stdio.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: testgetifstats.c,v 1.4 2007/02/07 22:14:47 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006 Thomas Bernard
|
||||
* (c) 2006 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: testupnpdescgen.c,v 1.27 2012/02/04 23:34:39 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpdescgen.c,v 1.64 2012/02/04 23:05:21 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -118,15 +118,15 @@ static const char * magicargname[] = {
|
||||
"IsWorking"
|
||||
};
|
||||
|
||||
static const char xmlver[] =
|
||||
static const char xmlver[] =
|
||||
"<?xml version=\"1.0\"?>\r\n";
|
||||
static const char root_service[] =
|
||||
"scpd xmlns=\"urn:schemas-upnp-org:service-1-0\"";
|
||||
static const char root_device[] =
|
||||
static const char root_device[] =
|
||||
"root xmlns=\"urn:schemas-upnp-org:device-1-0\"";
|
||||
|
||||
/* root Description of the UPnP Device
|
||||
* fixed to match UPnP_IGD_InternetGatewayDevice 1.0.pdf
|
||||
/* root Description of the UPnP Device
|
||||
* fixed to match UPnP_IGD_InternetGatewayDevice 1.0.pdf
|
||||
* Needs to be checked with UPnP-gw-InternetGatewayDevice-v2-Device.pdf
|
||||
* presentationURL is only "recommended" but the router doesn't appears
|
||||
* in "Network connections" in Windows XP if it is not present. */
|
||||
@ -277,7 +277,7 @@ static const struct XMLElt rootDesc[] =
|
||||
{"/SCPDURL", L3F_PATH},
|
||||
#endif
|
||||
#ifdef ENABLE_DP_SERVICE
|
||||
/* InternetGatewayDevice v2 :
|
||||
/* InternetGatewayDevice v2 :
|
||||
* it is RECOMMEDED that DeviceProtection service is implemented and applied.
|
||||
* If DeviceProtection is not implemented and applied, it is RECOMMENDED
|
||||
* that control points are able to access only actions and parameters defined
|
||||
@ -355,7 +355,7 @@ static const struct argument GetExternalIPAddressArgs[] =
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
static const struct argument DeletePortMappingArgs[] =
|
||||
static const struct argument DeletePortMappingArgs[] =
|
||||
{
|
||||
{1, 11},
|
||||
{1, 12},
|
||||
@ -502,7 +502,7 @@ static const struct stateVar WANIPCnVars[] =
|
||||
{"PortMappingEnabled", 1, 0}, /* Required */
|
||||
/* 10 */
|
||||
{"PortMappingLeaseDuration", 3, 2, 1}, /* required */
|
||||
/* TODO : for IGD v2 :
|
||||
/* TODO : for IGD v2 :
|
||||
* <stateVariable sendEvents="no">
|
||||
* <name>PortMappingLeaseDuration</name>
|
||||
* <dataType>ui4</dataType>
|
||||
@ -580,14 +580,14 @@ static const struct action WANCfgActions[] =
|
||||
static const struct stateVar WANCfgVars[] =
|
||||
{
|
||||
{"WANAccessType", 0, 0, 1},
|
||||
/* Allowed Values : DSL / POTS / Cable / Ethernet
|
||||
/* Allowed Values : DSL / POTS / Cable / Ethernet
|
||||
* Default value : empty string */
|
||||
{"Layer1UpstreamMaxBitRate", 3, 0},
|
||||
{"Layer1DownstreamMaxBitRate", 3, 0},
|
||||
{"PhysicalLinkStatus", 0|0x80, 0, 6, 6},
|
||||
/* allowed values :
|
||||
/* allowed values :
|
||||
* Up / Down / Initializing (optional) / Unavailable (optionnal)
|
||||
* no Default value
|
||||
* no Default value
|
||||
* Evented */
|
||||
{"TotalBytesSent", 3, 0}, /* Optional */
|
||||
{"TotalBytesReceived", 3, 0}, /* Optional */
|
||||
@ -914,7 +914,7 @@ genXML(char * str, int * len, int * tmplen,
|
||||
/* genRootDesc() :
|
||||
* - Generate the root description of the UPnP device.
|
||||
* - the len argument is used to return the length of
|
||||
* the returned string.
|
||||
* the returned string.
|
||||
* - tmp_uuid argument is used to build the uuid string */
|
||||
char *
|
||||
genRootDesc(int * len)
|
||||
@ -934,7 +934,7 @@ genRootDesc(int * len)
|
||||
}
|
||||
|
||||
/* genServiceDesc() :
|
||||
* Generate service description with allowed methods and
|
||||
* Generate service description with allowed methods and
|
||||
* related variables. */
|
||||
static char *
|
||||
genServiceDesc(int * len, const struct serviceDesc * s)
|
||||
@ -953,7 +953,7 @@ genServiceDesc(int * len, const struct serviceDesc * s)
|
||||
/*strcpy(str, xmlver); */
|
||||
*len = strlen(xmlver);
|
||||
memcpy(str, xmlver, *len + 1);
|
||||
|
||||
|
||||
acts = s->actionList;
|
||||
vars = s->serviceStateTable;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpdescgen.h,v 1.22 2011/05/18 22:22:24 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/* for the root description
|
||||
/* for the root description
|
||||
* The child list reference is stored in "data" member using the
|
||||
* INITHELPER macro with index/nchild always in the
|
||||
* same order, whatever the endianness */
|
||||
@ -31,7 +31,7 @@ struct action {
|
||||
};
|
||||
|
||||
struct argument { /* the name of the arg is obtained from the variable */
|
||||
unsigned char dir; /* MSB : don't append "New" Flag,
|
||||
unsigned char dir; /* MSB : don't append "New" Flag,
|
||||
* 5 Medium bits : magic argument name index
|
||||
* 2 LSB : 1 = in, 2 = out */
|
||||
unsigned char relatedVar; /* index of the related variable */
|
||||
@ -41,12 +41,12 @@ struct stateVar {
|
||||
const char * name;
|
||||
unsigned char itype; /* MSB: sendEvent flag, 7 LSB: index in upnptypes */
|
||||
unsigned char idefault; /* default value */
|
||||
unsigned char iallowedlist; /* index in allowed values list
|
||||
unsigned char iallowedlist; /* index in allowed values list
|
||||
* or in allowed range list */
|
||||
unsigned char ieventvalue; /* fixed value returned or magical values */
|
||||
};
|
||||
|
||||
/* little endian
|
||||
/* little endian
|
||||
* The code has now be tested on big endian architecture */
|
||||
#define INITHELPER(i, n) ((char *)(((n)<<16)|(i)))
|
||||
|
||||
|
@ -299,7 +299,7 @@ upnp_event_notify_connect(struct upnp_event_notify * obj)
|
||||
|
||||
static void upnp_event_prepare(struct upnp_event_notify * obj)
|
||||
{
|
||||
static const char notifymsg[] =
|
||||
static const char notifymsg[] =
|
||||
"NOTIFY %s HTTP/1.1\r\n"
|
||||
"Host: %s%s\r\n"
|
||||
"Content-Type: text/xml\r\n"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpglobalvars.c,v 1.27 2012/02/04 23:05:21 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -43,7 +43,7 @@ char modelnumber[MODELNUMBER_MAX_LEN] = "1";
|
||||
|
||||
/* presentation url :
|
||||
* http://nnn.nnn.nnn.nnn:ppppp/ => max 30 bytes including terminating 0 */
|
||||
char presentationurl[PRESENTATIONURL_MAX_LEN];
|
||||
char presentationurl[PRESENTATIONURL_MAX_LEN];
|
||||
|
||||
/* friendly name for root devices in XML description */
|
||||
char friendly_name[FRIENDLY_NAME_MAX_LEN] = OS_NAME " router";
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpglobalvars.h,v 1.31 2012/02/04 23:05:21 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "upnpevents.h"
|
||||
#include "upnputils.h"
|
||||
|
||||
struct upnphttp *
|
||||
struct upnphttp *
|
||||
New_upnphttp(int s)
|
||||
{
|
||||
struct upnphttp * ret;
|
||||
@ -177,7 +177,7 @@ Send404(struct upnphttp * h)
|
||||
static void
|
||||
Send501(struct upnphttp * h)
|
||||
{
|
||||
static const char body501[] =
|
||||
static const char body501[] =
|
||||
"<HTML><HEAD><TITLE>501 Not Implemented</TITLE></HEAD>"
|
||||
"<BODY><H1>Not Implemented</H1>The HTTP Method "
|
||||
"is not implemented by this server.</BODY></HTML>\r\n";
|
||||
@ -254,7 +254,7 @@ ProcessHTTPPOST_upnphttp(struct upnphttp * h)
|
||||
/* we can process the request */
|
||||
syslog(LOG_INFO, "SOAPAction: %.*s",
|
||||
h->req_soapActionLen, h->req_soapAction);
|
||||
ExecuteSoapAction(h,
|
||||
ExecuteSoapAction(h,
|
||||
h->req_soapAction,
|
||||
h->req_soapActionLen);
|
||||
}
|
||||
@ -357,7 +357,7 @@ ProcessHTTPSubscribe_upnphttp(struct upnphttp * h, const char * path)
|
||||
SendRespAndClose_upnphttp(h);
|
||||
} else {
|
||||
/* - add to the subscriber list
|
||||
* - respond HTTP/x.x 200 OK
|
||||
* - respond HTTP/x.x 200 OK
|
||||
* - Send the initial event message */
|
||||
/* Server:, SID:; Timeout: Second-(xx|infinite) */
|
||||
/* Check that the callback URL is on the same IP as
|
||||
@ -411,7 +411,7 @@ ProcessHTTPUnSubscribe_upnphttp(struct upnphttp * h, const char * path)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Parse and process Http Query
|
||||
/* Parse and process Http Query
|
||||
* called once all the HTTP headers have been received. */
|
||||
static void
|
||||
ProcessHttpQuery_upnphttp(struct upnphttp * h)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnphttp.h,v 1.26 2012/02/07 00:21:54 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -103,7 +103,7 @@ BuildHeader_upnphttp(struct upnphttp * h, int respcode,
|
||||
const char * respmsg,
|
||||
int bodylen);
|
||||
|
||||
/* BuildResp_upnphttp()
|
||||
/* BuildResp_upnphttp()
|
||||
* fill the res_buf buffer with the complete
|
||||
* HTTP 200 OK response from the body passed as argument */
|
||||
void
|
||||
|
@ -29,14 +29,14 @@ struct upnpperm {
|
||||
* -1 error reading line
|
||||
*
|
||||
* line sample :
|
||||
* allow 1024-65535 192.168.3.0/24 1024-65535
|
||||
* allow 1024-65535 192.168.3.0/24 1024-65535
|
||||
* allow 22 192.168.4.33/32 22
|
||||
* deny 0-65535 0.0.0.0/0 0-65535 */
|
||||
int
|
||||
read_permission_line(struct upnpperm * perm,
|
||||
char * p);
|
||||
|
||||
/* check_upnp_rule_against_permissions()
|
||||
/* check_upnp_rule_against_permissions()
|
||||
* returns: 0 if the upnp rule should be rejected,
|
||||
* 1 if it could be accepted */
|
||||
int
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpredirect.c,v 1.60 2011/06/22 20:34:39 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
#define PRIu64 "llu"
|
||||
#endif
|
||||
|
||||
/* proto_atoi()
|
||||
/* proto_atoi()
|
||||
* convert the string "UDP" or "TCP" to IPPROTO_UDP and IPPROTO_UDP */
|
||||
static int
|
||||
proto_atoi(const char * protocol)
|
||||
@ -81,7 +81,7 @@ lease_file_add(unsigned short eport,
|
||||
((proto==IPPROTO_TCP)?"TCP":"UDP"), eport, iaddr, iport,
|
||||
timestamp, desc);
|
||||
fclose(fd);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -133,14 +133,14 @@ lease_file_remove(unsigned short eport, int proto)
|
||||
}
|
||||
fclose(fdt);
|
||||
fclose(fd);
|
||||
|
||||
|
||||
if (rename(tmpfilename, lease_file) < 0) {
|
||||
syslog(LOG_ERR, "could not rename temporary lease file to %s", lease_file);
|
||||
remove(tmpfilename);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* reload_from_lease_file()
|
||||
@ -239,12 +239,12 @@ int reload_from_lease_file()
|
||||
}
|
||||
}
|
||||
fclose(fd);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* upnp_redirect()
|
||||
/* upnp_redirect()
|
||||
* calls OS/fw dependant implementation of the redirection.
|
||||
* protocol should be the string "TCP" or "UDP"
|
||||
* returns: 0 on success
|
||||
@ -253,7 +253,7 @@ int reload_from_lease_file()
|
||||
* -3 permission check failed
|
||||
*/
|
||||
int
|
||||
upnp_redirect(const char * rhost, unsigned short eport,
|
||||
upnp_redirect(const char * rhost, unsigned short eport,
|
||||
const char * iaddr, unsigned short iport,
|
||||
const char * protocol, const char * desc,
|
||||
unsigned int leaseduration)
|
||||
@ -295,7 +295,7 @@ upnp_redirect(const char * rhost, unsigned short eport,
|
||||
} else {
|
||||
timestamp = (leaseduration > 0) ? time(NULL) + leaseduration : 0;
|
||||
syslog(LOG_INFO, "redirecting port %hu to %s:%hu protocol %s for: %s",
|
||||
eport, iaddr, iport, protocol, desc);
|
||||
eport, iaddr, iport, protocol, desc);
|
||||
return upnp_redirect_internal(rhost, eport, iaddr, iport, proto,
|
||||
desc, timestamp);
|
||||
}
|
||||
@ -374,7 +374,7 @@ upnp_get_redirection_infos(unsigned short eport, const char * protocol,
|
||||
int
|
||||
upnp_get_redirection_infos_by_index(int index,
|
||||
unsigned short * eport, char * protocol,
|
||||
unsigned short * iport,
|
||||
unsigned short * iport,
|
||||
char * iaddr, int iaddrlen,
|
||||
char * desc, int desclen,
|
||||
char * rhost, int rhostlen,
|
||||
@ -794,7 +794,7 @@ upnp_delete_inboundpinhole(const char * uid)
|
||||
{
|
||||
/* TODO : to be implemented */
|
||||
#if 0
|
||||
/* this is a alpha implementation calling ip6tables via system(),
|
||||
/* this is a alpha implementation calling ip6tables via system(),
|
||||
* it can be usefull as an example to code the netfilter version */
|
||||
int r, s, linenum=0;
|
||||
char cmd[256], cmd_raw[256];
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpredirect.h,v 1.24 2011/06/22 20:34:39 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
int reload_from_lease_file(void);
|
||||
#endif
|
||||
|
||||
/* upnp_redirect()
|
||||
/* upnp_redirect()
|
||||
* calls OS/fw dependant implementation of the redirection.
|
||||
* protocol should be the string "TCP" or "UDP"
|
||||
* returns: 0 on success
|
||||
@ -26,7 +26,7 @@ int reload_from_lease_file(void);
|
||||
* -3 permission check failed
|
||||
*/
|
||||
int
|
||||
upnp_redirect(const char * rhost, unsigned short eport,
|
||||
upnp_redirect(const char * rhost, unsigned short eport,
|
||||
const char * iaddr, unsigned short iport,
|
||||
const char * protocol, const char * desc,
|
||||
unsigned int leaseduration);
|
||||
@ -55,7 +55,7 @@ upnp_get_redirection_infos(unsigned short eport, const char * protocol,
|
||||
int
|
||||
upnp_get_redirection_infos_by_index(int index,
|
||||
unsigned short * eport, char * protocol,
|
||||
unsigned short * iport,
|
||||
unsigned short * iport,
|
||||
char * iaddr, int iaddrlen,
|
||||
char * desc, int desclen,
|
||||
char * rhost, int rhostlen,
|
||||
@ -81,7 +81,7 @@ struct rule_state
|
||||
struct rule_state * next;
|
||||
unsigned short eport;
|
||||
unsigned char proto;
|
||||
unsigned char to_remove;
|
||||
unsigned char to_remove;
|
||||
};
|
||||
|
||||
/* return a linked list of all rules
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpreplyparse.c,v 1.11 2011/02/07 16:17:06 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -90,7 +90,7 @@ ClearNameValueList(struct NameValueParserData * pdata)
|
||||
}
|
||||
}
|
||||
|
||||
char *
|
||||
char *
|
||||
GetValueFromNameValueList(struct NameValueParserData * pdata,
|
||||
const char * Name)
|
||||
{
|
||||
@ -131,7 +131,7 @@ GetValueFromNameValueListIgnoreNS(struct NameValueParserData * pdata,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* debug all-in-one function
|
||||
/* debug all-in-one function
|
||||
* do parsing then display to stdout */
|
||||
#ifdef DEBUG
|
||||
void
|
||||
|
@ -1,14 +1,14 @@
|
||||
/* $Id: upnpreplyparse.h,v 1.12 2012/01/21 13:30:33 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
#ifndef __UPNPREPLYPARSE_H__
|
||||
#define __UPNPREPLYPARSE_H__
|
||||
|
||||
#if defined(NO_SYS_QUEUE_H) || defined(_WIN32) || defined(__HAIKU__)
|
||||
#if defined(NO_SYS_QUEUE_H) || defined(_WIN32) || defined(__HAIKU__)
|
||||
#include "bsdqueue.h"
|
||||
#else
|
||||
#include <sys/queue.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpsoap.c,v 1.90 2012/02/04 23:34:40 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* (c) 2006-2012 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -219,7 +219,7 @@ GetStatusInfo(struct upnphttp * h, const char * action)
|
||||
uptime = (time(NULL) - startup_time);
|
||||
bodylen = snprintf(body, sizeof(body), resp,
|
||||
action, SERVICE_TYPE_WANIPC,
|
||||
status, (long)uptime, action);
|
||||
status, (long)uptime, action);
|
||||
BuildSendAndCloseSoapResp(h, body, bodylen);
|
||||
}
|
||||
|
||||
@ -334,11 +334,11 @@ AddPortMapping(struct upnphttp * h, const char * action)
|
||||
#endif
|
||||
|
||||
/* if ip not valid assume hostname and convert */
|
||||
if (inet_pton(AF_INET, int_ip, &result_ip) <= 0)
|
||||
if (inet_pton(AF_INET, int_ip, &result_ip) <= 0)
|
||||
{
|
||||
hp = gethostbyname(int_ip);
|
||||
if(hp && hp->h_addrtype == AF_INET)
|
||||
{
|
||||
if(hp && hp->h_addrtype == AF_INET)
|
||||
{
|
||||
for(ptr = hp->h_addr_list; ptr && *ptr; ptr++)
|
||||
{
|
||||
int_ip = inet_ntoa(*((struct in_addr *) *ptr));
|
||||
@ -346,14 +346,14 @@ AddPortMapping(struct upnphttp * h, const char * action)
|
||||
/* TODO : deal with more than one ip per hostname */
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
syslog(LOG_ERR, "Failed to convert hostname '%s' to ip address", int_ip);
|
||||
syslog(LOG_ERR, "Failed to convert hostname '%s' to ip address", int_ip);
|
||||
ClearNameValueList(&data);
|
||||
SoapError(h, 402, "Invalid Args");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* check if NewInternalAddress is the client address */
|
||||
@ -500,11 +500,11 @@ AddAnyPortMapping(struct upnphttp * h, const char * action)
|
||||
#endif
|
||||
|
||||
/* if ip not valid assume hostname and convert */
|
||||
if (inet_pton(AF_INET, int_ip, &result_ip) <= 0)
|
||||
if (inet_pton(AF_INET, int_ip, &result_ip) <= 0)
|
||||
{
|
||||
hp = gethostbyname(int_ip);
|
||||
if(hp && hp->h_addrtype == AF_INET)
|
||||
{
|
||||
if(hp && hp->h_addrtype == AF_INET)
|
||||
{
|
||||
for(ptr = hp->h_addr_list; ptr && *ptr; ptr++)
|
||||
{
|
||||
int_ip = inet_ntoa(*((struct in_addr *) *ptr));
|
||||
@ -512,14 +512,14 @@ AddAnyPortMapping(struct upnphttp * h, const char * action)
|
||||
/* TODO : deal with more than one ip per hostname */
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
syslog(LOG_ERR, "Failed to convert hostname '%s' to ip address", int_ip);
|
||||
syslog(LOG_ERR, "Failed to convert hostname '%s' to ip address", int_ip);
|
||||
ClearNameValueList(&data);
|
||||
SoapError(h, 402, "Invalid Args");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* check if NewInternalAddress is the client address */
|
||||
@ -535,7 +535,7 @@ AddAnyPortMapping(struct upnphttp * h, const char * action)
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO : accept a different external port
|
||||
/* TODO : accept a different external port
|
||||
* have some smart strategy to choose the port */
|
||||
for(;;) {
|
||||
r = upnp_redirect(r_host, eport, int_ip, iport, protocol, desc, leaseduration);
|
||||
@ -626,7 +626,7 @@ GetSpecificPortMappingEntry(struct upnphttp * h, const char * action)
|
||||
&leaseduration);
|
||||
|
||||
if(r < 0)
|
||||
{
|
||||
{
|
||||
SoapError(h, 714, "NoSuchEntryInArray");
|
||||
}
|
||||
else
|
||||
@ -687,13 +687,13 @@ DeletePortMapping(struct upnphttp * h, const char * action)
|
||||
* just an annoyance for the user using it. So this is not
|
||||
* a priority. */
|
||||
|
||||
syslog(LOG_INFO, "%s: external port: %hu, protocol: %s",
|
||||
syslog(LOG_INFO, "%s: external port: %hu, protocol: %s",
|
||||
action, eport, protocol);
|
||||
|
||||
r = upnp_delete_redirection(eport, protocol);
|
||||
|
||||
if(r < 0)
|
||||
{
|
||||
{
|
||||
SoapError(h, 714, "NoSuchEntryInArray");
|
||||
}
|
||||
else
|
||||
@ -755,7 +755,7 @@ static void
|
||||
GetGenericPortMappingEntry(struct upnphttp * h, const char * action)
|
||||
{
|
||||
int r;
|
||||
|
||||
|
||||
static const char resp[] =
|
||||
"<u:%sResponse "
|
||||
"xmlns:u=\"%s\">"
|
||||
@ -786,7 +786,7 @@ GetGenericPortMappingEntry(struct upnphttp * h, const char * action)
|
||||
ClearNameValueList(&data);
|
||||
SoapError(h, 402, "Invalid Args");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
index = (int)atoi(m_index);
|
||||
|
||||
@ -1062,7 +1062,7 @@ QueryStateVariable(struct upnphttp * h, const char * action)
|
||||
SoapError(h, 402, "Invalid Args");
|
||||
}
|
||||
else if(strcmp(var_name, "ConnectionStatus") == 0)
|
||||
{
|
||||
{
|
||||
const char * status;
|
||||
|
||||
status = get_wan_connection_status_str(ext_if_name);
|
||||
@ -1074,12 +1074,12 @@ QueryStateVariable(struct upnphttp * h, const char * action)
|
||||
#if 0
|
||||
/* not usefull */
|
||||
else if(strcmp(var_name, "ConnectionType") == 0)
|
||||
{
|
||||
{
|
||||
bodylen = snprintf(body, sizeof(body), resp, "IP_Routed");
|
||||
BuildSendAndCloseSoapResp(h, body, bodylen);
|
||||
}
|
||||
else if(strcmp(var_name, "LastConnectionError") == 0)
|
||||
{
|
||||
{
|
||||
bodylen = snprintf(body, sizeof(body), resp, "ERROR_NONE");
|
||||
BuildSendAndCloseSoapResp(h, body, bodylen);
|
||||
}
|
||||
@ -1100,7 +1100,7 @@ QueryStateVariable(struct upnphttp * h, const char * action)
|
||||
SoapError(h, 404, "Invalid Var");
|
||||
}
|
||||
|
||||
ClearNameValueList(&data);
|
||||
ClearNameValueList(&data);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_6FC_SERVICE
|
||||
@ -1153,7 +1153,7 @@ DataVerification(struct upnphttp * h, char * int_ip, unsigned short * int_port,
|
||||
SoapError(h, 708, "WildCardNotPermittedInSrcIP");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if (!strchr(int_ip, ':'))
|
||||
{
|
||||
SoapError(h, 402, "Invalid Args");
|
||||
@ -1265,7 +1265,7 @@ PinholeVerification(struct upnphttp * h, char * int_ip, unsigned short * int_por
|
||||
//char str[INET6_ADDRSTRLEN]="";
|
||||
//connecthostport(int_ip, *int_port, str);
|
||||
//printf("int_ip: %s / str: %s\n", int_ip, str);
|
||||
|
||||
|
||||
struct addrinfo hints, *ai, *p;
|
||||
struct in6_addr result_ip;/*unsigned char result_ip[16];*/ /* inet_pton() */ //IPv6 Modification
|
||||
|
||||
@ -1739,9 +1739,9 @@ GetPinholePackets(struct upnphttp * h, const char * action)
|
||||
* GetExternalIPAddress
|
||||
* QueryStateVariable / ConnectionStatus!
|
||||
*/
|
||||
static const struct
|
||||
static const struct
|
||||
{
|
||||
const char * methodName;
|
||||
const char * methodName;
|
||||
void (*methodImpl)(struct upnphttp *, const char *);
|
||||
}
|
||||
soapMethods[] =
|
||||
@ -1829,7 +1829,7 @@ ExecuteSoapAction(struct upnphttp * h, const char * action, int n)
|
||||
* -------- ---------------- -----------
|
||||
* 401 Invalid Action No action by that name at this service.
|
||||
* 402 Invalid Args Could be any of the following: not enough in args,
|
||||
* too many in args, no in arg by that name,
|
||||
* too many in args, no in arg by that name,
|
||||
* one or more in args are of the wrong data type.
|
||||
* 403 Out of Sync Out of synchronization.
|
||||
* 501 Action Failed May be returned in current state of service
|
||||
@ -1838,13 +1838,13 @@ ExecuteSoapAction(struct upnphttp * h, const char * action, int n)
|
||||
* Technical Committee.
|
||||
* 700-799 TBD Action-specific errors for standard actions.
|
||||
* Defined by UPnP Forum working committee.
|
||||
* 800-899 TBD Action-specific errors for non-standard actions.
|
||||
* 800-899 TBD Action-specific errors for non-standard actions.
|
||||
* Defined by UPnP vendor.
|
||||
*/
|
||||
void
|
||||
SoapError(struct upnphttp * h, int errCode, const char * errDesc)
|
||||
{
|
||||
static const char resp[] =
|
||||
static const char resp[] =
|
||||
"<s:Envelope "
|
||||
"xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpsoap.h,v 1.8 2007/02/07 22:16:19 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006 Thomas Bernard
|
||||
* (c) 2006 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -14,7 +14,7 @@ void
|
||||
ExecuteSoapAction(struct upnphttp *, const char *, int);
|
||||
|
||||
/* SoapError():
|
||||
* sends a correct SOAP error with an UPNPError code and
|
||||
* sends a correct SOAP error with an UPNPError code and
|
||||
* description */
|
||||
void
|
||||
SoapError(struct upnphttp * h, int errCode, const char * errDesc);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id: upnpurns.h,v 1.1 2011/05/13 15:32:53 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* (c) 2006-2011 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user