miniupnpd: fixes ExecuteSoapAction() for missing " around SOAPAction
This commit is contained in:
parent
2b233cdf69
commit
c14788a13a
|
@ -1,4 +1,8 @@
|
||||||
$Id: Changelog.txt,v 1.383 2014/11/07 11:53:37 nanard Exp $
|
$Id: Changelog.txt,v 1.384 2014/11/28 13:18:56 nanard Exp $
|
||||||
|
|
||||||
|
2014/11/28:
|
||||||
|
fixes ExecuteSoapAction if SoapAction value is not enclosed into
|
||||||
|
double quotes
|
||||||
|
|
||||||
2014/11/07:
|
2014/11/07:
|
||||||
sockaddr_to_string() includes scope in IPv6 addresses
|
sockaddr_to_string() includes scope in IPv6 addresses
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: upnpsoap.c,v 1.129 2014/11/27 12:24:52 nanard Exp $ */
|
/* $Id: upnpsoap.c,v 1.130 2014/11/28 13:18:57 nanard Exp $ */
|
||||||
/* MiniUPnP project
|
/* MiniUPnP project
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* (c) 2006-2014 Thomas Bernard
|
* (c) 2006-2014 Thomas Bernard
|
||||||
|
@ -2043,34 +2043,32 @@ ExecuteSoapAction(struct upnphttp * h, const char * action, int n)
|
||||||
char * p2;
|
char * p2;
|
||||||
int i, len, methodlen;
|
int i, len, methodlen;
|
||||||
|
|
||||||
i = 0;
|
/* SoapAction example :
|
||||||
|
* urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo */
|
||||||
p = strchr(action, '#');
|
p = strchr(action, '#');
|
||||||
|
if(p && (p - action) < n) {
|
||||||
if(p)
|
|
||||||
{
|
|
||||||
p++;
|
p++;
|
||||||
p2 = strchr(p, '"');
|
p2 = strchr(p, '"');
|
||||||
if(p2)
|
if(p2 && (p2 - action) <= n)
|
||||||
methodlen = p2 - p;
|
methodlen = p2 - p;
|
||||||
else
|
else
|
||||||
methodlen = n - (p - action);
|
methodlen = n - (p - action);
|
||||||
/*syslog(LOG_DEBUG, "SoapMethod: %.*s", methodlen, p);*/
|
/*syslog(LOG_DEBUG, "SoapMethod: %.*s %d %d %p %p %d",
|
||||||
while(soapMethods[i].methodName)
|
methodlen, p, methodlen, n, action, p, (int)(p - action));*/
|
||||||
{
|
for(i = 0; soapMethods[i].methodName; i++) {
|
||||||
len = strlen(soapMethods[i].methodName);
|
len = strlen(soapMethods[i].methodName);
|
||||||
if((len == methodlen) && memcmp(p, soapMethods[i].methodName, len) == 0)
|
if((len == methodlen) && memcmp(p, soapMethods[i].methodName, len) == 0) {
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
syslog(LOG_DEBUG, "Remote Call of SoapMethod '%s'\n",
|
syslog(LOG_DEBUG, "Remote Call of SoapMethod '%s'\n",
|
||||||
soapMethods[i].methodName);
|
soapMethods[i].methodName);
|
||||||
#endif
|
#endif /* DEBUG */
|
||||||
soapMethods[i].methodImpl(h, soapMethods[i].methodName);
|
soapMethods[i].methodImpl(h, soapMethods[i].methodName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
syslog(LOG_NOTICE, "SoapMethod: Unknown: %.*s", methodlen, p);
|
syslog(LOG_NOTICE, "SoapMethod: Unknown: %.*s", methodlen, p);
|
||||||
|
} else {
|
||||||
|
syslog(LOG_NOTICE, "cannot parse SoapAction");
|
||||||
}
|
}
|
||||||
|
|
||||||
SoapError(h, 401, "Invalid Action");
|
SoapError(h, 401, "Invalid Action");
|
||||||
|
|
Loading…
Reference in New Issue