2010-01-08 Manuel Reimer This patch allowes to specify an IP with the "-p"-option to VDR, to get VDR to open the port only on the given IP. Typical usecase: vdr -p 127.0.0.1:2001 diff -U 6 -pr vdr-1.6.0.org/svdrp.c vdr-1.6.0/svdrp.c --- vdr-1.6.0.org/svdrp.c 2009-07-17 20:49:30.936891806 +0200 +++ vdr-1.6.0/svdrp.c 2009-07-17 21:07:46.459050273 +0200 @@ -37,12 +37,14 @@ #include "remote.h" #include "skins.h" #include "timers.h" #include "tools.h" #include "videodir.h" +extern char *SVDRPip; + // --- cSocket --------------------------------------------------------------- cSocket::cSocket(int Port, int Queue) { port = Port; sock = -1; @@ -76,13 +78,13 @@ bool cSocket::Open(void) int ReUseAddr = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &ReUseAddr, sizeof(ReUseAddr)); // struct sockaddr_in name; name.sin_family = AF_INET; name.sin_port = htons(port); - name.sin_addr.s_addr = htonl(INADDR_ANY); + name.sin_addr.s_addr = SVDRPip ? inet_addr(SVDRPip) : htonl(INADDR_ANY); if (bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) { LOG_ERROR; Close(); return false; } // make it non-blocking: diff -U 6 -pr vdr-1.6.0.org/vdr.c vdr-1.6.0/vdr.c --- vdr-1.6.0.org/vdr.c 2009-07-17 20:49:30.940891674 +0200 +++ vdr-1.6.0/vdr.c 2009-07-17 20:50:48.507312043 +0200 @@ -83,12 +83,14 @@ #define VPSUPTODATETIME 3600 // seconds before the event or schedule of a VPS timer needs to be refreshed #define EXIT(v) { ShutdownHandler.Exit(v); goto Exit; } static int LastSignal = 0; +const char *SVDRPip = NULL; + static bool SetUser(const char *UserName, bool UserDump)//XXX name? { if (UserName) { struct passwd *user = getpwnam(UserName); if (!user) { fprintf(stderr, "vdr: unknown user: '%s'\n", UserName); @@ -319,12 +321,29 @@ int main(int argc, char *argv[]) break; case 'n' | 0x100: UseKbd = false; break; case 'p': if (isnumber(optarg)) SVDRPport = atoi(optarg); + else if (strstr(optarg, ":")) { + char *strtok_next; + char *cip = strtok_r(optarg, ":", &strtok_next); + char *cport = strtok_r(NULL , ":", &strtok_next); + if (cip && inet_addr(cip) != INADDR_NONE) + SVDRPip = cip; + else { + fprintf(stderr, "vdr: invalid IP: %s\n", optarg); + return 2; + } + if (cport && isnumber(cport)) + SVDRPport = atoi(cport); + else { + fprintf(stderr, "vdr: invalid port number: %s\n", optarg); + return 2; + } + } else { fprintf(stderr, "vdr: invalid port number: %s\n", optarg); return 2; } break; case 'P': PluginManager.AddPlugin(optarg);