projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove direct inclusion of OpenSSL headers in net_packet.c and tincd.c.
[tinc]
/
src
/
control.c
diff --git
a/src/control.c
b/src/control.c
index
86224c2
..
539ff36
100644
(file)
--- a/
src/control.c
+++ b/
src/control.c
@@
-1,6
+1,6
@@
/*
control.c -- Control socket handling.
/*
control.c -- Control socket handling.
- Copyright (C) 20
07
Guus Sliepen <guus@tinc-vpn.org>
+ Copyright (C) 20
13
Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-25,16
+25,15
@@
#include "graph.h"
#include "logger.h"
#include "meta.h"
#include "graph.h"
#include "logger.h"
#include "meta.h"
+#include "names.h"
#include "net.h"
#include "netutl.h"
#include "protocol.h"
#include "route.h"
#include "net.h"
#include "netutl.h"
#include "protocol.h"
#include "route.h"
-#include "splay_tree.h"
#include "utils.h"
#include "xalloc.h"
char controlcookie[65];
#include "utils.h"
#include "xalloc.h"
char controlcookie[65];
-extern char *pidfilename;
static bool control_return(connection_t *c, int type, int error) {
return send_request(c, "%d %d %d", CONTROL, type, error);
static bool control_return(connection_t *c, int type, int error) {
return send_request(c, "%d %d %d", CONTROL, type, error);
@@
-44,27
+43,27
@@
static bool control_ok(connection_t *c, int type) {
return control_return(c, type, 0);
}
return control_return(c, type, 0);
}
-bool control_h(connection_t *c, char *request) {
+bool control_h(connection_t *c, c
onst c
har *request) {
int type;
if(!c->status.control || c->allow_request != CONTROL) {
int type;
if(!c->status.control || c->allow_request != CONTROL) {
- logger(LOG_ERR, "Unauthorized control request from %s (%s)", c->name, c->hostname);
+ logger(
DEBUG_ALWAYS,
LOG_ERR, "Unauthorized control request from %s (%s)", c->name, c->hostname);
return false;
}
if(sscanf(request, "%*d %d", &type) != 1) {
return false;
}
if(sscanf(request, "%*d %d", &type) != 1) {
- logger(LOG_ERR, "Got bad %s from %s (%s)", "CONTROL", c->name, c->hostname);
+ logger(
DEBUG_ALWAYS,
LOG_ERR, "Got bad %s from %s (%s)", "CONTROL", c->name, c->hostname);
return false;
}
switch (type) {
case REQ_STOP:
return false;
}
switch (type) {
case REQ_STOP:
- event_
loopexit(NULL
);
+ event_
exit(
);
return control_ok(c, REQ_STOP);
case REQ_DUMP_NODES:
return dump_nodes(c);
return control_ok(c, REQ_STOP);
case REQ_DUMP_NODES:
return dump_nodes(c);
-
+
case REQ_DUMP_EDGES:
return dump_edges(c);
case REQ_DUMP_EDGES:
return dump_edges(c);
@@
-93,22
+92,18
@@
bool control_h(connection_t *c, char *request) {
return control_ok(c, REQ_RETRY);
case REQ_RELOAD:
return control_ok(c, REQ_RETRY);
case REQ_RELOAD:
- logger(LOG_NOTICE, "Got '%s' command", "reload");
+ logger(
DEBUG_ALWAYS,
LOG_NOTICE, "Got '%s' command", "reload");
int result = reload_configuration();
return control_return(c, REQ_RELOAD, result);
case REQ_DISCONNECT: {
char name[MAX_STRING_SIZE];
int result = reload_configuration();
return control_return(c, REQ_RELOAD, result);
case REQ_DISCONNECT: {
char name[MAX_STRING_SIZE];
- connection_t *other;
- splay_node_t *node, *next;
bool found = false;
if(sscanf(request, "%*d %*d " MAX_STRING, name) != 1)
return control_return(c, REQ_DISCONNECT, -1);
bool found = false;
if(sscanf(request, "%*d %*d " MAX_STRING, name) != 1)
return control_return(c, REQ_DISCONNECT, -1);
- for(node = connection_tree->head; node; node = next) {
- next = node->next;
- other = node->data;
+ for list_each(connection_t, other, connection_list) {
if(strcmp(other->name, name))
continue;
terminate_connection(other, other->status.active);
if(strcmp(other->name, name))
continue;
terminate_connection(other, other->status.active);
@@
-122,10
+117,17
@@
bool control_h(connection_t *c, char *request) {
return dump_traffic(c);
case REQ_PCAP:
return dump_traffic(c);
case REQ_PCAP:
+ sscanf(request, "%*d %*d %d", &c->outmaclength);
c->status.pcap = true;
pcap = true;
return true;
c->status.pcap = true;
pcap = true;
return true;
+ case REQ_LOG:
+ sscanf(request, "%*d %*d %d", &c->outcompression);
+ c->status.log = true;
+ logcontrol = true;
+ return true;
+
default:
return send_request(c, "%d %d", CONTROL, REQ_INVALID);
}
default:
return send_request(c, "%d %d", CONTROL, REQ_INVALID);
}
@@
-137,7
+139,7
@@
bool init_control(void) {
FILE *f = fopen(pidfilename, "w");
if(!f) {
FILE *f = fopen(pidfilename, "w");
if(!f) {
- logger(LOG_ERR, "Cannot write control socket cookie file %s: %s", pidfilename, strerror(errno));
+ logger(
DEBUG_ALWAYS,
LOG_ERR, "Cannot write control socket cookie file %s: %s", pidfilename, strerror(errno));
return false;
}
return false;
}
@@
-154,7
+156,7
@@
bool init_control(void) {
// Make sure we have a valid address, and map 0.0.0.0 and :: to 127.0.0.1 and ::1.
// Make sure we have a valid address, and map 0.0.0.0 and :: to 127.0.0.1 and ::1.
- if(getsockname(listen_socket[0].tcp, (struct sockaddr *)&sa, &len)) {
+ if(getsockname(listen_socket[0].tcp
.fd
, (struct sockaddr *)&sa, &len)) {
xasprintf(&localhost, "127.0.0.1 port %d", myport);
} else {
if(sa.sa.sa_family == AF_INET) {
xasprintf(&localhost, "127.0.0.1 port %d", myport);
} else {
if(sa.sa.sa_family == AF_INET) {