## Produce this file with automake to get Makefile.in
-# $Id: Makefile.am,v 1.4.4.3 2000/10/20 16:49:20 guus Exp $
+# $Id: Makefile.am,v 1.4.4.4 2000/10/20 19:46:57 guus Exp $
sbin_PROGRAMS = tincd
tincd_LDADD = \
$(top_builddir)/lib/libvpn.a
-genauth_LDADD = $(top_builddir)/lib/libvpn.a
-
localedir = $(datadir)/locale
CFLAGS = @CFLAGS@ -DPKGLIBDIR=$(pkglibdir) -DCONFDIR=\"@sysconfdir@\" -DLOCALEDIR=\"$(localedir)\"
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: net.c,v 1.35.4.41 2000/10/20 15:34:35 guus Exp $
+ $Id: net.c,v 1.35.4.42 2000/10/20 19:46:57 guus Exp $
*/
#include "config.h"
#ifdef HAVE_TUNTAP
#include <net/if.h>
+#include <linux/sockios.h>
#include LINUX_IF_TUN_H
#endif
int nfd;
const char *tapfname;
config_t const *cfg;
-
+ char *envvar;
+
#ifdef HAVE_TUNTAP
struct ifreq ifr;
#endif
{
syslog(LOG_INFO, _("%s is a new style tun/tap device"), tapfname);
taptype = 1;
+
if((cfg = get_config_val(config, tapsubnet)) == NULL)
syslog(LOG_INFO, _("tun/tap device will be left unconfigured"));
else
/* Setup inetaddr/netmask etc */;
}
#endif
+
+ /* Add name of network interface to environment (for scripts) */
+
+ ioctl(tap_fd, SIOCGIFNAME, (void *) &ifr);
+ asprintf(&envvar, "IFNAME=%s", ifr.ifr_name);
+ putenv(envvar);
+ free(envvar);
cp
return 0;
int setup_network_connections(void)
{
config_t const *cfg;
+ char *scriptname;
cp
if((cfg = get_config_val(config, pingtimeout)) == NULL)
timeout = 5;
if(setup_myself() < 0)
return -1;
+ /* Run tinc-up script to further initialize the tap interface */
+
+ asprintf(&scriptname, "%s/tinc-up", confbase);
+
+ if(!fork())
+ {
+
+ execl(scriptname, NULL);
+
+ if(errno != ENOENT)
+ syslog(LOG_WARNING, _("Error while executing %s: %m"), scriptname);
+
+ exit(0);
+ }
+
+ free(scriptname);
+
if((cfg = get_next_config_val(config, connectto, upstreamindex++)) == NULL)
/* No upstream IP given, we're listen only. */
return 0;
void close_network_connections(void)
{
conn_list_t *p;
+ char *scriptname;
cp
for(p = conn_list; p != NULL; p = p->next)
{
close(myself->socket);
}
+ /* Execute tinc-down script right before shutting down the interface */
+
+ asprintf(&scriptname, "%s/tinc-down", confbase);
+
+ if(!fork())
+ {
+ execl(scriptname, NULL);
+
+ if(errno != ENOENT)
+ syslog(LOG_WARNING, _("Error while executing %s: %m"), scriptname);
+
+ exit(0);
+ }
+
+ free(scriptname);
+
close(tap_fd);
destroy_conn_list();
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: tincd.c,v 1.10.4.13 2000/10/20 16:49:20 guus Exp $
+ $Id: tincd.c,v 1.10.4.14 2000/10/20 19:46:58 guus Exp $
*/
#include "config.h"
}
else
{
- netname = "bla";
if(!pidfilename)
pidfilename = "/var/run/tinc.pid";
if(!confbase)
signal(SIGINT, sigint_handler);
signal(SIGUSR1, sigusr1_handler);
signal(SIGUSR2, sigusr2_handler);
-// signal(SIGCHLD, parent_exit);
+ signal(SIGCHLD, SIG_IGN);
}
RETSIGTYPE parent_exit(int a)