| From 3e8b73de8768ac32c76eef866ba47e14e4fb9e84 Mon Sep 17 00:00:00 2001 |
| From: Denton Gentry <dgentry@google.com> |
| Date: Sat, 16 Aug 2014 12:03:13 -0700 |
| Subject: [PATCH] Better support for cross-compilation. |
| |
| Allow MINIUPNPD_SERVER_STRING to be set from the command line. |
| Previously it was compiling in values from the build system. |
| |
| Allow OS_NAME and OS_VERSION to be overridden by the Makefile, |
| rather than always reflect that of the build system. |
| --- |
| genconfig.sh | 13 +++++++++++-- |
| minissdp.c | 12 ++++++++---- |
| minissdp.h | 3 +++ |
| miniupnpd.c | 9 +++++++++ |
| upnphttp.c | 11 +++++------ |
| 5 files changed, 36 insertions(+), 12 deletions(-) |
| |
| diff --git a/genconfig.sh b/genconfig.sh |
| index 3e72848..8bc7369 100755 |
| --- a/genconfig.sh |
| +++ b/genconfig.sh |
| @@ -39,8 +39,12 @@ UPNP_VERSION=`date +"%Y%m%d"` |
| LOG_MINIUPNPD="LOG_DAEMON" |
| |
| # detecting the OS name and version |
| -OS_NAME=`uname -s` |
| -OS_VERSION=`uname -r` |
| +if [ -z "$OS_NAME" ]; then |
| + OS_NAME=`uname -s` |
| +fi |
| +if [ -z "$OS_VERSION" ]; then |
| + OS_VERSION=`uname -r` |
| +fi |
| |
| # pfSense special case |
| if [ -f /etc/platform ]; then |
| @@ -264,6 +268,11 @@ case $OS_NAME in |
| FW=ipfw |
| OS_URL=http://developer.apple.com/macosx |
| ;; |
| + "Google Fiber") |
| + OS_URL=http://www.google.com/fiber |
| + echo "#define USE_IFACEWATCHER 1" >> ${CONFIGFILE} |
| + FW=netfilter |
| + ;; |
| *) |
| echo "Unknown OS : $OS_NAME" |
| echo "Please contact the author at http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/." |
| diff --git a/minissdp.c b/minissdp.c |
| index f937109..4f7399b 100644 |
| --- a/minissdp.c |
| +++ b/minissdp.c |
| @@ -32,6 +32,8 @@ |
| #define LL_SSDP_MCAST_ADDR "FF02::C" |
| #define SL_SSDP_MCAST_ADDR "FF05::C" |
| |
| +char miniupnpd_server_string[MINIUPNPD_SERVER_STRING_LEN]; |
| + |
| /* AddMulticastMembership() |
| * param s socket |
| * param ifaddr ip v4 address |
| @@ -338,7 +340,7 @@ SendSSDPAnnounce2(int s, const struct sockaddr * addr, |
| "ST: %.*s%s\r\n" |
| "USN: %s::%.*s%s\r\n" |
| "EXT:\r\n" |
| - "SERVER: " MINIUPNPD_SERVER_STRING "\r\n" |
| + "SERVER: %s \r\n" |
| "LOCATION: http://%s:%u" ROOTDESC_PATH "\r\n" |
| "OPT: \"http://schemas.upnp.org/upnp/1/0/\"; ns=01\r\n" /* UDA v1.1 */ |
| "01-NLS: %u\r\n" /* same as BOOTID. UDA v1.1 */ |
| @@ -347,6 +349,7 @@ SendSSDPAnnounce2(int s, const struct sockaddr * addr, |
| "\r\n", |
| st_len, st, suffix, |
| uuidvalue, st_len, st, suffix, |
| + miniupnpd_server_string, |
| host, (unsigned int)port, |
| upnp_bootid, upnp_bootid, upnp_configid); |
| addrlen = (addr->sa_family == AF_INET6) |
| @@ -435,7 +438,7 @@ SendSSDPNotifies(int s, const char * host, unsigned short port, |
| "HOST: %s:%d\r\n" |
| "CACHE-CONTROL: max-age=%u\r\n" |
| "lOCATION: http://%s:%d" ROOTDESC_PATH"\r\n" |
| - "SERVER: " MINIUPNPD_SERVER_STRING "\r\n" |
| + "SERVER: %s\r\n" |
| "NT: %s%s\r\n" |
| "USN: %s::%s%s\r\n" |
| "NTS: ssdp:alive\r\n" |
| @@ -448,6 +451,7 @@ SendSSDPNotifies(int s, const char * host, unsigned short port, |
| SSDP_PORT, |
| lifetime, |
| host, port, |
| + miniupnpd_server_string, |
| known_service_types[i].s, ver_str, |
| uuidvalue, known_service_types[i].s, ver_str, |
| upnp_bootid, upnp_bootid, upnp_configid ); |
| @@ -827,9 +831,9 @@ SubmitServicesToMiniSSDPD(const char * host, unsigned short port) { |
| CODELENGTH(l, p); |
| memcpy(p, strbuf, l); |
| p += l; |
| - l = (int)strlen(MINIUPNPD_SERVER_STRING); |
| + l = (int)strlen(miniupnpd_server_string); |
| CODELENGTH(l, p); |
| - memcpy(p, MINIUPNPD_SERVER_STRING, l); |
| + memcpy(p, miniupnpd_server_string, l); |
| p += l; |
| l = snprintf(strbuf, sizeof(strbuf), "http://%s:%u" ROOTDESC_PATH, |
| host, (unsigned int)port); |
| diff --git a/minissdp.h b/minissdp.h |
| index 6a41e42..4855bbe 100644 |
| --- a/minissdp.h |
| +++ b/minissdp.h |
| @@ -9,6 +9,9 @@ |
| |
| #include "miniupnpdtypes.h" |
| |
| +extern char miniupnpd_server_string[]; |
| +#define MINIUPNPD_SERVER_STRING_LEN 256 |
| + |
| int |
| OpenAndConfSSDPReceiveSocket(int ipv6); |
| |
| diff --git a/miniupnpd.c b/miniupnpd.c |
| index 050d8db..04cb436 100644 |
| --- a/miniupnpd.c |
| +++ b/miniupnpd.c |
| @@ -1070,6 +1070,13 @@ init(int argc, char * * argv, struct runtime_vars * v) |
| case 'f': |
| i++; /* discarding, the config file is already read */ |
| break; |
| + case 'V': |
| + if(i+1 < argc) { |
| + snprintf(miniupnpd_server_string, MINIUPNPD_SERVER_STRING_LEN, |
| + "%s", argv[++i]); |
| + } else |
| + fprintf(stderr, "Option -%c takes one argument.\n", argv[i][1]); |
| + break; |
| default: |
| fprintf(stderr, "Unknown option: %s\n", argv[i]); |
| } |
| @@ -1288,6 +1295,8 @@ main(int argc, char * * argv) |
| unsigned int next_pinhole_ts; |
| #endif |
| |
| + snprintf(miniupnpd_server_string, MINIUPNPD_SERVER_STRING_LEN, |
| + "%s", MINIUPNPD_SERVER_STRING); |
| if(init(argc, argv, &v) != 0) |
| return 1; |
| /* count lan addrs */ |
| diff --git a/upnphttp.c b/upnphttp.c |
| index 6620bfd..321ac06 100644 |
| --- a/upnphttp.c |
| +++ b/upnphttp.c |
| @@ -25,6 +25,7 @@ |
| #include "upnphttp.h" |
| #include "upnpdescgen.h" |
| #include "miniupnpdpath.h" |
| +#include "minissdp.h" |
| #include "upnpsoap.h" |
| #include "upnpevents.h" |
| #include "upnputils.h" |
| @@ -772,7 +773,7 @@ static const char httpresphead[] = |
| "Content-Type: %s\r\n" |
| "Connection: close\r\n" |
| "Content-Length: %d\r\n" |
| - "Server: " MINIUPNPD_SERVER_STRING "\r\n" |
| + "Server: %s\r\n" |
| ; /*"\r\n";*/ |
| /* |
| "<?xml version=\"1.0\"?>\n" |
| @@ -791,12 +792,10 @@ BuildHeader_upnphttp(struct upnphttp * h, int respcode, |
| const char * respmsg, |
| int bodylen) |
| { |
| - int templen; |
| - if(!h->res_buf || |
| - h->res_buf_alloclen < ((int)sizeof(httpresphead) + 256 + bodylen)) { |
| + int templen = sizeof(httpresphead) + 256 + bodylen + MINIUPNPD_SERVER_STRING_LEN; |
| + if(!h->res_buf || h->res_buf_alloclen < templen) { |
| if(h->res_buf) |
| free(h->res_buf); |
| - templen = sizeof(httpresphead) + 256 + bodylen; |
| h->res_buf = (char *)malloc(templen); |
| if(!h->res_buf) { |
| syslog(LOG_ERR, "malloc error in BuildHeader_upnphttp()"); |
| @@ -809,7 +808,7 @@ BuildHeader_upnphttp(struct upnphttp * h, int respcode, |
| httpresphead, h->HttpVer, |
| respcode, respmsg, |
| (h->respflags&FLAG_HTML)?"text/html":"text/xml; charset=\"utf-8\"", |
| - bodylen); |
| + bodylen, miniupnpd_server_string); |
| /* Content-Type MUST be 'text/xml; charset="utf-8"' according to UDA v1.1 */ |
| /* Content-Type MUST be 'text/xml' according to UDA v1.0 */ |
| /* Additional headers */ |
| -- |
| 2.1.0.rc2.206.gedb03e5 |
| |