From 73f7efddd723b25c1477ec1139dc7211307ff660 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Fri, 20 Oct 2000 19:46:58 +0000 Subject: [PATCH] - Removed last reference to genauth from Makefile.am - Tinc spawns tinc-up and tinc-down scripts which can be used to configure the network device. The environment variable IFNAME is set to the name of the interface. --- src/Makefile.am | 4 +--- src/net.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- src/tincd.c | 5 ++--- 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 81e57974..dab09fc2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ ## 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 @@ -14,8 +14,6 @@ LIBS = @LIBS@ @INTLLIBS@ 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)\" diff --git a/src/net.c b/src/net.c index 81318e3e..4baefe52 100644 --- a/src/net.c +++ b/src/net.c @@ -17,7 +17,7 @@ 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" @@ -39,6 +39,7 @@ #ifdef HAVE_TUNTAP #include +#include #include LINUX_IF_TUN_H #endif @@ -333,7 +334,8 @@ int setup_tap_fd(void) int nfd; const char *tapfname; config_t const *cfg; - + char *envvar; + #ifdef HAVE_TUNTAP struct ifreq ifr; #endif @@ -369,12 +371,20 @@ cp { 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; @@ -743,6 +753,7 @@ cp int setup_network_connections(void) { config_t const *cfg; + char *scriptname; cp if((cfg = get_config_val(config, pingtimeout)) == NULL) timeout = 5; @@ -755,6 +766,23 @@ cp 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; @@ -781,6 +809,7 @@ cp void close_network_connections(void) { conn_list_t *p; + char *scriptname; cp for(p = conn_list; p != NULL; p = p->next) { @@ -804,6 +833,22 @@ cp 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(); diff --git a/src/tincd.c b/src/tincd.c index f0072522..89519c15 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -17,7 +17,7 @@ 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" @@ -373,7 +373,6 @@ void make_names(void) } else { - netname = "bla"; if(!pidfilename) pidfilename = "/var/run/tinc.pid"; if(!confbase) @@ -570,7 +569,7 @@ setup_signals(void) 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) -- 2.20.1