mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Introduced 'svdrphosts.conf'
This commit is contained in:
parent
fa32be64a8
commit
0b7e9057da
20
FORMATS
20
FORMATS
@ -111,6 +111,26 @@ Video Disk Recorder File Formats
|
|||||||
1..9, the command can be selected directly by pressing the respective numerical
|
1..9, the command can be selected directly by pressing the respective numerical
|
||||||
key on the remote control.
|
key on the remote control.
|
||||||
|
|
||||||
|
* svdrphosts.conf
|
||||||
|
|
||||||
|
This file contains the IP numbers of all hosts that are allowed to access the
|
||||||
|
SVDRP port.
|
||||||
|
|
||||||
|
Each line contains one IP number in the format
|
||||||
|
|
||||||
|
IP-Address[/Netmask]
|
||||||
|
|
||||||
|
where 'IP-Address' is the address of a host or a network in the usual dot
|
||||||
|
separated notation (as in 192.168.100.1). If the optional 'Netmask' is given
|
||||||
|
only the given number of bits of 'IP-Address' are taken into account. This
|
||||||
|
allows you to grant SVDRP access to all hosts of an entire network. 'Netmask'
|
||||||
|
can be any integer from 1 to 32. The special value of 0 is only accepted if
|
||||||
|
the 'IP-Address' is 0.0.0.0, because this will give access to any host (USE
|
||||||
|
THIS WITH CARE!).
|
||||||
|
|
||||||
|
Everything following (and including) a '#' character is considered to be
|
||||||
|
comment.
|
||||||
|
|
||||||
* marks.vdr
|
* marks.vdr
|
||||||
|
|
||||||
This file (if present in a recording directory) contains the editing marks
|
This file (if present in a recording directory) contains the editing marks
|
||||||
|
3
HISTORY
3
HISTORY
@ -950,3 +950,6 @@ Video Disk Recorder Revision History
|
|||||||
thus making it safe to use them in nested 'if/else' statements.
|
thus making it safe to use them in nested 'if/else' statements.
|
||||||
- Fixed error handling in establishing an SVDRP connection (thanks to Davide
|
- Fixed error handling in establishing an SVDRP connection (thanks to Davide
|
||||||
Achilli) for pointing this out).
|
Achilli) for pointing this out).
|
||||||
|
- The new configuration file 'svdrphosts.conf' is now used to define which
|
||||||
|
hosts may access the SVDRP port (by default only 'localhost' has access).
|
||||||
|
See FORMATS for details.
|
||||||
|
5
INSTALL
5
INSTALL
@ -81,6 +81,11 @@ WARNING: DUE TO THE OPEN SVDRP PORT THIS PROGRAM MAY CONSTITUTE A
|
|||||||
A CONTROLLED ENVIRONMENT, YOU MAY WANT TO DISABLE SVDRP
|
A CONTROLLED ENVIRONMENT, YOU MAY WANT TO DISABLE SVDRP
|
||||||
BY USING '--port=0'!
|
BY USING '--port=0'!
|
||||||
|
|
||||||
|
The file 'svdrphosts.conf' can be used to define which hosts are allowed
|
||||||
|
to access the SVDRP port. By default only localhost (127.0.0.1) is granted
|
||||||
|
access. If you want to give other hosts access to your SVDRP port you need to
|
||||||
|
add their IP numbers to 'svdrphosts.conf'.
|
||||||
|
|
||||||
If the program shall run as a daemon, use the --daemon option. This
|
If the program shall run as a daemon, use the --daemon option. This
|
||||||
will completely detach it from the terminal and will continue as a
|
will completely detach it from the terminal and will continue as a
|
||||||
background process.
|
background process.
|
||||||
|
51
config.c
51
config.c
@ -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 1.80 2002/02/02 15:57:48 kls Exp $
|
* $Id: config.c 1.81 2002/02/02 17:15:03 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -646,6 +646,40 @@ const char *cCommand::Execute(void)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- cSVDRPhost -------------------------------------------------------------
|
||||||
|
|
||||||
|
cSVDRPhost::cSVDRPhost(void)
|
||||||
|
{
|
||||||
|
addr.s_addr = 0;
|
||||||
|
mask = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cSVDRPhost::Parse(const char *s)
|
||||||
|
{
|
||||||
|
mask = 0xFFFFFFFF;
|
||||||
|
const char *p = strchr(s, '/');
|
||||||
|
if (p) {
|
||||||
|
char *error = NULL;
|
||||||
|
int m = strtoul(p + 1, &error, 10);
|
||||||
|
if (error && !isspace(*error) || m > 32)
|
||||||
|
return false;
|
||||||
|
*(char *)p = 0; // yes, we know it's 'const' - will be restored!
|
||||||
|
if (m == 0)
|
||||||
|
mask = 0;
|
||||||
|
else
|
||||||
|
mask >>= (32 - m);
|
||||||
|
}
|
||||||
|
int result = inet_aton(s, &addr);
|
||||||
|
if (p)
|
||||||
|
*(char *)p = '/'; // there it is again
|
||||||
|
return result != 0 && (mask != 0 || addr.s_addr == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cSVDRPhost::Accepts(in_addr_t Address)
|
||||||
|
{
|
||||||
|
return (Address & mask) == addr.s_addr;
|
||||||
|
}
|
||||||
|
|
||||||
// -- cKeys ------------------------------------------------------------------
|
// -- cKeys ------------------------------------------------------------------
|
||||||
|
|
||||||
cKeys Keys;
|
cKeys Keys;
|
||||||
@ -778,6 +812,21 @@ cTimer *cTimers::GetNextActiveTimer(void)
|
|||||||
return t0;
|
return t0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- cSVDRPhosts ------------------------------------------------------------
|
||||||
|
|
||||||
|
cSVDRPhosts SVDRPhosts;
|
||||||
|
|
||||||
|
bool cSVDRPhosts::Acceptable(in_addr_t Address)
|
||||||
|
{
|
||||||
|
cSVDRPhost *h = First();
|
||||||
|
while (h) {
|
||||||
|
if (h->Accepts(Address))
|
||||||
|
return true;
|
||||||
|
h = (cSVDRPhost *)h->Next();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// -- cSetup -----------------------------------------------------------------
|
// -- cSetup -----------------------------------------------------------------
|
||||||
|
|
||||||
cSetup Setup;
|
cSetup Setup;
|
||||||
|
19
config.h
19
config.h
@ -4,12 +4,13 @@
|
|||||||
* 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 1.91 2002/02/02 15:57:48 kls Exp $
|
* $Id: config.h 1.92 2002/02/02 15:59:18 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
#define __CONFIG_H
|
#define __CONFIG_H
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -171,6 +172,16 @@ public:
|
|||||||
const char *Execute(void);
|
const char *Execute(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class cSVDRPhost : public cListObject {
|
||||||
|
private:
|
||||||
|
struct in_addr addr;
|
||||||
|
in_addr_t mask;
|
||||||
|
public:
|
||||||
|
cSVDRPhost(void);
|
||||||
|
bool Parse(const char *s);
|
||||||
|
bool Accepts(in_addr_t Address);
|
||||||
|
};
|
||||||
|
|
||||||
template<class T> class cConfig : public cList<T> {
|
template<class T> class cConfig : public cList<T> {
|
||||||
private:
|
private:
|
||||||
char *fileName;
|
char *fileName;
|
||||||
@ -268,10 +279,16 @@ public:
|
|||||||
|
|
||||||
class cCommands : public cConfig<cCommand> {};
|
class cCommands : public cConfig<cCommand> {};
|
||||||
|
|
||||||
|
class cSVDRPhosts : public cConfig<cSVDRPhost> {
|
||||||
|
public:
|
||||||
|
bool Acceptable(in_addr_t Address);
|
||||||
|
};
|
||||||
|
|
||||||
extern cChannels Channels;
|
extern cChannels Channels;
|
||||||
extern cTimers Timers;
|
extern cTimers Timers;
|
||||||
extern cKeys Keys;
|
extern cKeys Keys;
|
||||||
extern cCommands Commands;
|
extern cCommands Commands;
|
||||||
|
extern cSVDRPhosts SVDRPhosts;
|
||||||
|
|
||||||
class cSetup {
|
class cSetup {
|
||||||
private:
|
private:
|
||||||
|
14
svdrp.c
14
svdrp.c
@ -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 1.29 2002/02/02 13:33:57 kls Exp $
|
* $Id: svdrp.c 1.30 2002/02/02 15:59:18 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -101,8 +101,16 @@ int cSocket::Accept(void)
|
|||||||
struct sockaddr_in clientname;
|
struct sockaddr_in clientname;
|
||||||
uint size = sizeof(clientname);
|
uint size = sizeof(clientname);
|
||||||
int newsock = accept(sock, (struct sockaddr *)&clientname, &size);
|
int newsock = accept(sock, (struct sockaddr *)&clientname, &size);
|
||||||
if (newsock > 0)
|
if (newsock > 0) {
|
||||||
isyslog(LOG_INFO, "connect from %s, port %hd", inet_ntoa(clientname.sin_addr), ntohs(clientname.sin_port));
|
bool accepted = SVDRPhosts.Acceptable(clientname.sin_addr.s_addr);
|
||||||
|
if (!accepted) {
|
||||||
|
const char *s = "Access denied!\n";
|
||||||
|
write(newsock, s, strlen(s));
|
||||||
|
close(newsock);
|
||||||
|
newsock = -1;
|
||||||
|
}
|
||||||
|
isyslog(LOG_INFO, "connect from %s, port %hd - %s", inet_ntoa(clientname.sin_addr), ntohs(clientname.sin_port), accepted ? "accepted" : "DENIED");
|
||||||
|
}
|
||||||
else if (errno != EINTR && errno != EAGAIN)
|
else if (errno != EINTR && errno != EAGAIN)
|
||||||
LOG_ERROR;
|
LOG_ERROR;
|
||||||
return newsock;
|
return newsock;
|
||||||
|
13
svdrphosts.conf
Normal file
13
svdrphosts.conf
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#
|
||||||
|
# svdrphosts This file describes a number of host addresses that
|
||||||
|
# are allowed to connect to the SVDRP port of the Video
|
||||||
|
# Disk Recorder (VDR) running on this system.
|
||||||
|
# Syntax:
|
||||||
|
#
|
||||||
|
# IP-Address[/Netmask]
|
||||||
|
#
|
||||||
|
|
||||||
|
127.0.0.1 # always accept localhost
|
||||||
|
#192.168.100.0/24 # any host on the local net
|
||||||
|
#204.152.189.113 # a specific host
|
||||||
|
#0.0.0.0/0 # any host on any net (USE THIS WITH CARE!)
|
3
vdr.c
3
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 1.93 2002/01/26 14:07:01 kls Exp $
|
* $Id: vdr.c 1.94 2002/02/02 15:59:18 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -272,6 +272,7 @@ int main(int argc, char *argv[])
|
|||||||
Channels.Load(AddDirectory(ConfigDirectory, "channels.conf"));
|
Channels.Load(AddDirectory(ConfigDirectory, "channels.conf"));
|
||||||
Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
|
Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
|
||||||
Commands.Load(AddDirectory(ConfigDirectory, "commands.conf"));
|
Commands.Load(AddDirectory(ConfigDirectory, "commands.conf"));
|
||||||
|
SVDRPhosts.Load(AddDirectory(ConfigDirectory, "svdrphosts.conf"), true);
|
||||||
#if defined(REMOTE_LIRC)
|
#if defined(REMOTE_LIRC)
|
||||||
Keys.SetDummyValues();
|
Keys.SetDummyValues();
|
||||||
#elif !defined(REMOTE_NONE)
|
#elif !defined(REMOTE_NONE)
|
||||||
|
Loading…
Reference in New Issue
Block a user