1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

If svdrphosts.conf contains only the address of the local host, the SVDRP port is opened only for the local host

This commit is contained in:
Klaus Schmidinger 2010-01-17 12:27:01 +01:00
parent 97e4dbe773
commit c198a25943
5 changed files with 26 additions and 4 deletions

View File

@ -2526,6 +2526,8 @@ Valdemaras Pipiras <valdemaras@ambernet.lt>
Manuel Reimer <Manuel.Reimer@gmx.de> Manuel Reimer <Manuel.Reimer@gmx.de>
for fixing saving terminal settings when running in background for fixing saving terminal settings when running in background
for making the SVDRP port open only for the local host if svdrphosts.conf
contains only the address of the local host
Rene van den Braken <rene@vandenbraken.name> Rene van den Braken <rene@vandenbraken.name>
for reporting a bug in writing the PCR pid into the PMT in for reporting a bug in writing the PCR pid into the PMT in

View File

@ -6283,3 +6283,5 @@ Video Disk Recorder Revision History
- The "Edit timer" menu can now set the folder for the recording from a list of - The "Edit timer" menu can now set the folder for the recording from a list of
folders stored in "folders.conf". folders stored in "folders.conf".
- Updated the Italian OSD texts (thanks to Diego Pierotto). - Updated the Italian OSD texts (thanks to Diego Pierotto).
- If svdrphosts.conf contains only the address of the local host, the SVDRP port
is opened only for the local host (thanks to Manuel Reimer).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: config.c 2.7 2010/01/16 14:27:29 kls Exp $ * $Id: config.c 2.8 2010/01/17 12:22:56 kls Exp $
*/ */
#include "config.h" #include "config.h"
@ -118,6 +118,11 @@ bool cSVDRPhost::Parse(const char *s)
return result != 0 && (mask != 0 || addr.s_addr == 0); return result != 0 && (mask != 0 || addr.s_addr == 0);
} }
bool cSVDRPhost::IsLocalhost(void)
{
return addr.s_addr == htonl(INADDR_LOOPBACK);
}
bool cSVDRPhost::Accepts(in_addr_t Address) bool cSVDRPhost::Accepts(in_addr_t Address)
{ {
return (Address & mask) == (addr.s_addr & mask); return (Address & mask) == (addr.s_addr & mask);
@ -276,6 +281,17 @@ cCommands RecordingCommands;
cSVDRPhosts SVDRPhosts; cSVDRPhosts SVDRPhosts;
bool cSVDRPhosts::LocalhostOnly(void)
{
cSVDRPhost *h = First();
while (h) {
if (!h->IsLocalhost())
return false;
h = (cSVDRPhost *)h->Next();
}
return true;
}
bool cSVDRPhosts::Acceptable(in_addr_t Address) bool cSVDRPhosts::Acceptable(in_addr_t Address)
{ {
cSVDRPhost *h = First(); cSVDRPhost *h = First();

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: config.h 2.18 2010/01/16 13:33:10 kls Exp $ * $Id: config.h 2.19 2010/01/17 12:22:21 kls Exp $
*/ */
#ifndef __CONFIG_H #ifndef __CONFIG_H
@ -72,6 +72,7 @@ private:
public: public:
cSVDRPhost(void); cSVDRPhost(void);
bool Parse(const char *s); bool Parse(const char *s);
bool IsLocalhost(void);
bool Accepts(in_addr_t Address); bool Accepts(in_addr_t Address);
}; };
@ -190,6 +191,7 @@ class cCommands : public cConfig<cCommand> {};
class cSVDRPhosts : public cConfig<cSVDRPhost> { class cSVDRPhosts : public cConfig<cSVDRPhost> {
public: public:
bool LocalhostOnly(void);
bool Acceptable(in_addr_t Address); bool Acceptable(in_addr_t Address);
}; };

View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured * and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection. * graphical interface that sits on top of an SVDRP connection.
* *
* $Id: svdrp.c 2.7 2010/01/03 15:41:26 kls Exp $ * $Id: svdrp.c 2.8 2010/01/17 12:23:31 kls Exp $
*/ */
#include "svdrp.h" #include "svdrp.h"
@ -79,7 +79,7 @@ bool cSocket::Open(void)
struct sockaddr_in name; struct sockaddr_in name;
name.sin_family = AF_INET; name.sin_family = AF_INET;
name.sin_port = htons(port); name.sin_port = htons(port);
name.sin_addr.s_addr = htonl(INADDR_ANY); name.sin_addr.s_addr = SVDRPhosts.LocalhostOnly() ? htonl(INADDR_LOOPBACK) : htonl(INADDR_ANY);
if (bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) { if (bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) {
LOG_ERROR; LOG_ERROR;
Close(); Close();