$OpenBSD: patch-igmpproxy_c,v 1.1.1.1 2008/02/08 19:30:52 sthen Exp $ --- igmpproxy.c.orig Sat Aug 20 13:56:32 2005 +++ igmpproxy.c Mon Nov 19 12:56:50 2007 @@ -41,8 +41,8 @@ #include "version.h" #include "build.h" +#include - // Constants static const char Version[] = "igmpproxy, Version " VERSION ", Build" BUILD "\n" @@ -80,7 +80,7 @@ int upStreamVif; * on commandline. The number of commandline arguments, and a * pointer to the arguments are recieved on the line... */ -int main( int ArgCn, const char *ArgVc[] ) { +int main( int ArgCn, char *ArgVc[] ) { int debugMode = 0; @@ -133,6 +133,24 @@ int main( int ArgCn, const char *ArgVc[] ) { exit(1); } + { + int ipmforwarding = 0; + int mib[4]; + size_t len; + + /* multicast IP forwarding must be enabled */ + mib[0] = CTL_NET; + mib[1] = PF_INET; + mib[2] = IPPROTO_IP; + mib[3] = IPCTL_MFORWARDING; + len = sizeof(ipmforwarding); + if (sysctl(mib, 4, &ipmforwarding, &len, NULL, 0) == -1) + log(LOG_ERR, 0, "sysctl"); + + if (!ipmforwarding) + log(LOG_ERR, 0, "multicast IP forwarding not enabled"); + } + // Write debug notice with file path... IF_DEBUG log(LOG_DEBUG, 0, "Searching for config file at '%s'" , configFilePath); @@ -155,17 +173,8 @@ int main( int ArgCn, const char *ArgVc[] ) { if ( ! debugMode ) { IF_DEBUG log( LOG_DEBUG, 0, "Starting daemon mode."); - - // Only daemon goes past this line... - if (fork()) exit(0); - - // Detach deamon from terminal - if ( close( 0 ) < 0 || close( 1 ) < 0 || close( 2 ) < 0 - || open( "/dev/null", 0 ) != 0 || dup2( 0, 1 ) < 0 || dup2( 0, 2 ) < 0 - || setpgrp() < 0 - ) { + if ( daemon(1, 0) < 0) log( LOG_ERR, errno, "failed to detach deamon" ); - } } // Go to the main loop. @@ -218,7 +227,7 @@ int igmpProxyInit() { int vifcount = 0; upStreamVif = -1; - for ( Ix = 0; Dp = getIfByIx( Ix ); Ix++ ) { + for ( Ix = 0; (Dp = getIfByIx( Ix )); Ix++ ) { if ( Dp->InAdr.s_addr && ! (Dp->Flags & IFF_LOOPBACK) ) { if(Dp->state == IF_STATE_UPSTREAM) { @@ -237,7 +246,7 @@ int igmpProxyInit() { // If there is only one VIF, or no defined upstream VIF, we send an error. if(vifcount < 2 || upStreamVif < 0) { - log(LOG_ERR, 0, "There must be at least 2 Vif's where one is upstream."); + log(LOG_ERR, 0, "There must be at least 2 Vif's where one is upstream. (vifcount %d, upStreamVif %d)", vifcount, upStreamVif); } }