along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: protocol.c,v 1.28.4.17 2000/06/29 19:47:03 guus Exp $
+ $Id: protocol.c,v 1.28.4.20 2000/08/07 14:52:15 guus Exp $
*/
#include "config.h"
return 0;
}
+/* Evil hack - TCP tunneling is bad */
+int send_tcppacket(conn_list_t *cl, void *data, int len)
+{
+cp
+ if(debug_lvl > 1)
+ syslog(LOG_DEBUG, _("Sending PACKET to %s (%s)"),
+ cl->vpn_hostname, cl->real_hostname);
+
+ buflen = snprintf(buffer, MAXBUFSIZE, "%d %d\n", PACKET, len);
+
+ if((write(cl->meta_socket, buffer, buflen)) < 0)
+ {
+ syslog(LOG_ERR, _("Send failed: %s:%d: %m"), __FILE__, __LINE__);
+ return -1;
+ }
+
+ if((write(cl->meta_socket, data, len)) < 0)
+ {
+ syslog(LOG_ERR, _("Send failed: %s:%d: %m"), __FILE__, __LINE__);
+ return -1;
+ }
+
+cp
+ return 0;
+}
+
int send_ping(conn_list_t *cl)
{
cp
while(old = lookup_conn(cl->vpn_ip))
{
- syslog(LOG_NOTICE, _("Removing old entry for %s at %s in favour of new connection from %s"),
+ if(debug_lvl > 1)
+ syslog(LOG_NOTICE, _("Removing old entry for %s at %s in favour of new connection from %s"),
cl->vpn_hostname, old->real_hostname, cl->real_hostname);
old->status.active = 0;
terminate_connection(old);
cl->status.active = 1;
- syslog(LOG_NOTICE, _("Connection with %s (%s) activated"),
+ if(debug_lvl > 0)
+ syslog(LOG_NOTICE, _("Connection with %s (%s) activated"),
cl->vpn_hostname, cl->real_hostname);
notify_others(cl, NULL, send_add_host);
return 0;
}
+ /* Connections lists are really messed up if this happens */
+ if(vpn_ip == myself->vpn_ip)
+ {
+ syslog(LOG_ERR, _("Warning: got DEL_HOST from %s (%s) for ourself, restarting"),
+ cl->vpn_hostname, cl->real_hostname);
+ sighup = 1;
+ return 0;
+ }
+
if(debug_lvl > 1)
syslog(LOG_DEBUG, _("Got DEL_HOST for %s (%s) from %s (%s)"),
fw->vpn_hostname, fw->real_hostname, cl->vpn_hostname, cl->real_hostname);
return 0;
}
+int tcppacket_h(conn_list_t *cl)
+{
+ char packet[1600];
+ int len;
+cp
+ if(!cl->status.active)
+ {
+ syslog(LOG_ERR, _("Got unauthorized PACKET from %s (%s)"),
+ cl->vpn_hostname, cl->real_hostname);
+ return -1;
+ }
+
+ if(sscanf(cl->buffer, "%*d %d", &len) != 1)
+ {
+ syslog(LOG_ERR, _("Got bad PACKET from %s (%s)"),
+ cl->vpn_hostname, cl->real_hostname);
+ return -1;
+ }
+
+ if(len>1600)
+ {
+ syslog(LOG_ERR, _("Got too big PACKET from %s (%s)"),
+ cl->vpn_hostname, cl->real_hostname);
+ return -1;
+ }
+
+ if(debug_lvl > 1)
+ syslog(LOG_DEBUG, _("Got PACKET from %s (%s)"),
+ cl->vpn_hostname, cl->real_hostname);
+
+ /* Evil kludge comming up */
+ if(read(cl->meta_socket,packet,len)!=len)
+ {
+ syslog(LOG_ERR, _("Error while receiving PACKET data from %s (%s)"),
+ cl->vpn_hostname, cl->real_hostname);
+ return -1;
+ }
+
+ xrecv(cl,packet);
+cp
+ return 0;
+}
+
+
int ping_h(conn_list_t *cl)
{
cp
terminate_connection(old);
}
}
+
+ /* Connections lists are really messed up if this happens */
+ if(vpn_ip == myself->vpn_ip)
+ {
+ syslog(LOG_ERR, _("Warning: got ADD_HOST from %s (%s) for ourself, restarting"),
+ cl->vpn_hostname, cl->real_hostname);
+ sighup = 1;
+ return 0;
+ }
ncn = new_conn_list();
ncn->real_ip = real_ip;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ tcppacket_h, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
req_key_h, ans_key_h, key_changed_h, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
};