Browse Source

Compilation fixes

pull/365/head
Luca Deri 4 years ago
parent
commit
0825bfb16b
  1. 16
      src/edge_utils.c
  2. 215
      src/sn.c
  3. 4
      src/sn_utils.c

16
src/edge_utils.c

@ -1232,14 +1232,14 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) {
traceEvent(TRACE_DEBUG, "mgmt status rq"); traceEvent(TRACE_DEBUG, "mgmt status rq");
msg_len=0; msg_len=0;
msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len), msg_len += snprintf((char*)&udp_buf[msg_len], (N2N_PKT_BUF_SIZE-msg_len),
"STATISTICS FOR EDGE\n"); "STATISTICS FOR EDGE\n");
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"community: %s\n", eee->conf.community_name); "community: %s\n", eee->conf.community_name);
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"\tid tun_tap MAC edge last_seen\n"); "\tid tun_tap MAC edge last_seen\n");
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"--- pending peers -------------------------------------------------------------------\n"); "--- pending peers -------------------------------------------------------------------\n");
sendto(eee->udp_mgmt_sock, udp_buf, msg_len, 0/*flags*/, sendto(eee->udp_mgmt_sock, udp_buf, msg_len, 0/*flags*/,
@ -1247,7 +1247,7 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) {
msg_len = 0; msg_len = 0;
HASH_ITER(hh, eee->pending_peers, peer, tmpPeer) { HASH_ITER(hh, eee->pending_peers, peer, tmpPeer) {
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"\t%-4u %-18s %-17s %-21s %lu\n", "\t%-4u %-18s %-17s %-21s %lu\n",
++num, ip_subnet_to_str(ip_bit_str, &peer->dev_addr), ++num, ip_subnet_to_str(ip_bit_str, &peer->dev_addr),
macaddr_str(mac_buf, peer->mac_addr), macaddr_str(mac_buf, peer->mac_addr),
@ -1258,11 +1258,11 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) {
msg_len = 0; msg_len = 0;
} }
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"--- known peers ---------------------------------------------------------------------\n"); "--- known peers ---------------------------------------------------------------------\n");
HASH_ITER(hh, eee->known_peers, peer, tmpPeer) { HASH_ITER(hh, eee->known_peers, peer, tmpPeer) {
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"\t%-4u %-18s %-17s %-21s %lu\n", "\t%-4u %-18s %-17s %-21s %lu\n",
++num, ip_subnet_to_str(ip_bit_str, &peer->dev_addr), ++num, ip_subnet_to_str(ip_bit_str, &peer->dev_addr),
macaddr_str(mac_buf, peer->mac_addr), macaddr_str(mac_buf, peer->mac_addr),
@ -1273,7 +1273,7 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) {
msg_len = 0; msg_len = 0;
} }
msg_len += snprintf(udp_buf + msg_len, N2N_SN_PKTBUF_SIZE - msg_len, msg_len += snprintf((char*)&udp_buf[msg_len], N2N_SN_PKTBUF_SIZE - msg_len,
"-------------------------------------------------------------------------------------\n"); "-------------------------------------------------------------------------------------\n");
msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len), msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len),

215
src/sn.c

@ -101,10 +101,10 @@ static int load_allowed_sn_community(n2n_sn_t *sss, char *path) {
fclose(fd); fclose(fd);
if ((num_regex + num_communities) == 0) if ((num_regex + num_communities) == 0)
{ {
traceEvent(TRACE_WARNING, "File %s does not contain any valid community names or regular expressions", path); traceEvent(TRACE_WARNING, "File %s does not contain any valid community names or regular expressions", path);
return -1; return -1;
} }
traceEvent(TRACE_NORMAL, "Loaded %u fixed-name communities from %s", traceEvent(TRACE_NORMAL, "Loaded %u fixed-name communities from %s",
num_communities, path); num_communities, path);
@ -123,137 +123,136 @@ static int load_allowed_sn_community(n2n_sn_t *sss, char *path) {
/** Help message to print if the command line arguments are not valid. */ /** Help message to print if the command line arguments are not valid. */
static void help() { static void help() {
print_n2n_version(); print_n2n_version();
printf("supernode <config file> (see supernode.conf)\n" printf("supernode <config file> (see supernode.conf)\n"
"or\n" "or\n"
); );
printf("supernode "); printf("supernode ");
printf("-l <local port> "); printf("-l <local port> ");
printf("-c <path> "); printf("-c <path> ");
#if defined(N2N_HAVE_DAEMON) #if defined(N2N_HAVE_DAEMON)
printf("[-f] "); printf("[-f] ");
#endif #endif
#ifndef WIN32 #ifndef WIN32
printf("[-u <uid> -g <gid>] "); printf("[-u <uid> -g <gid>] ");
#endif /* ifndef WIN32 */ #endif /* ifndef WIN32 */
printf("[-t <mgmt port>] "); printf("[-t <mgmt port>] ");
printf("[-d <net/bit>] "); printf("[-d <net/bit>] ");
printf("[-v] "); printf("[-v] ");
printf("\n\n"); printf("\n\n");
printf("-l <port> | Set UDP main listen port to <port>\n"); printf("-l <port> | Set UDP main listen port to <port>\n");
printf("-c <path> | File containing the allowed communities.\n"); printf("-c <path> | File containing the allowed communities.\n");
#if defined(N2N_HAVE_DAEMON) #if defined(N2N_HAVE_DAEMON)
printf("-f | Run in foreground.\n"); printf("-f | Run in foreground.\n");
#endif /* #if defined(N2N_HAVE_DAEMON) */ #endif /* #if defined(N2N_HAVE_DAEMON) */
#ifndef WIN32 #ifndef WIN32
printf("-u <UID> | User ID (numeric) to use when privileges are dropped.\n"); printf("-u <UID> | User ID (numeric) to use when privileges are dropped.\n");
printf("-g <GID> | Group ID (numeric) to use when privileges are dropped.\n"); printf("-g <GID> | Group ID (numeric) to use when privileges are dropped.\n");
#endif /* ifndef WIN32 */ #endif /* ifndef WIN32 */
printf("-t <port> | Management UDP Port (for multiple supernodes on a machine).\n"); printf("-t <port> | Management UDP Port (for multiple supernodes on a machine).\n");
printf("-d <net/bit> | Subnet that provides dhcp service for edge. eg. -d 172.17.12.0/24\n"); printf("-d <net/bit> | Subnet that provides dhcp service for edge. eg. -d 172.17.12.0/24\n");
printf("-v | Increase verbosity. Can be used multiple times.\n"); printf("-v | Increase verbosity. Can be used multiple times.\n");
printf("-h | This help message.\n"); printf("-h | This help message.\n");
printf("\n"); printf("\n");
exit(1); exit(1);
} }
/* *************************************************** */ /* *************************************************** */
static int setOption(int optkey, char *_optarg, n2n_sn_t *sss) { static int setOption(int optkey, char *_optarg, n2n_sn_t *sss) {
//traceEvent(TRACE_NORMAL, "Option %c = %s", optkey, _optarg ? _optarg : ""); //traceEvent(TRACE_NORMAL, "Option %c = %s", optkey, _optarg ? _optarg : "");
switch (optkey) { switch (optkey) {
case 'l': /* local-port */ case 'l': /* local-port */
sss->lport = atoi(_optarg); sss->lport = atoi(_optarg);
break; break;
case 't': /* mgmt-port */ case 't': /* mgmt-port */
sss->mport = atoi(_optarg); sss->mport = atoi(_optarg);
break; break;
case 'd': { case 'd': {
dec_ip_str_t ip_str = {'\0'}; dec_ip_str_t ip_str = {'\0'};
in_addr_t net; in_addr_t net;
uint8_t bitlen; uint8_t bitlen;
if (sscanf(_optarg, "%15[^/]/%hhu", ip_str, &bitlen) != 2) { if (sscanf(_optarg, "%15[^/]/%hhu", ip_str, &bitlen) != 2) {
traceEvent(TRACE_WARNING, "Bad net/bit format '%s'. See -h.", _optarg); traceEvent(TRACE_WARNING, "Bad net/bit format '%s'. See -h.", _optarg);
break; break;
} }
net = inet_addr(ip_str); net = inet_addr(ip_str);
if ((net < 0) || (net == INADDR_NONE) || (net == INADDR_ANY)) { if ((net == (in_addr_t)(-1)) || (net == INADDR_NONE) || (net == INADDR_ANY)) {
traceEvent(TRACE_WARNING, "Bad network '%s' in '%s', Use default: '%s/%d'", traceEvent(TRACE_WARNING, "Bad network '%s' in '%s', Use default: '%s/%d'",
ip_str, _optarg, ip_str, _optarg,
N2N_SN_DHCP_NET_ADDR_DEFAULT, N2N_SN_DHCP_NET_BIT_DEFAULT); N2N_SN_DHCP_NET_ADDR_DEFAULT, N2N_SN_DHCP_NET_BIT_DEFAULT);
break; break;
} }
if (bitlen > 32) { if (bitlen > 32) {
traceEvent(TRACE_WARNING, "Bad prefix '%hhu' in '%s', Use default: '%s/%d'", traceEvent(TRACE_WARNING, "Bad prefix '%hhu' in '%s', Use default: '%s/%d'",
bitlen, _optarg, bitlen, _optarg,
N2N_SN_DHCP_NET_ADDR_DEFAULT, N2N_SN_DHCP_NET_BIT_DEFAULT); N2N_SN_DHCP_NET_ADDR_DEFAULT, N2N_SN_DHCP_NET_BIT_DEFAULT);
break; break;
} }
traceEvent(TRACE_NORMAL, "The subnet of DHCP service is: '%s/%hhu'.", ip_str, bitlen); traceEvent(TRACE_NORMAL, "The subnet of DHCP service is: '%s/%hhu'.", ip_str, bitlen);
sss->dhcp_addr.net_addr = ntohl(net); sss->dhcp_addr.net_addr = ntohl(net);
sss->dhcp_addr.net_bitlen = bitlen; sss->dhcp_addr.net_bitlen = bitlen;
break; break;
} }
#ifndef WIN32 #ifndef WIN32
case 'u': /* unprivileged uid */ case 'u': /* unprivileged uid */
sss->userid = atoi(_optarg); sss->userid = atoi(_optarg);
break; break;
case 'g': /* unprivileged uid */ case 'g': /* unprivileged uid */
sss->groupid = atoi(_optarg); sss->groupid = atoi(_optarg);
break; break;
#endif #endif
case 'c': /* community file */ case 'c': /* community file */
load_allowed_sn_community(sss, _optarg); load_allowed_sn_community(sss, _optarg);
break; break;
case 'f': /* foreground */ case 'f': /* foreground */
sss->daemon = 0; sss->daemon = 0;
break; break;
case 'h': /* help */ case 'h': /* help */
help(); help();
break; break;
case 'v': /* verbose */ case 'v': /* verbose */
setTraceLevel(getTraceLevel() + 1); setTraceLevel(getTraceLevel() + 1);
break; break;
default: default:
traceEvent(TRACE_WARNING, "Unknown option -%c: Ignored.", (char) optkey); traceEvent(TRACE_WARNING, "Unknown option -%c: Ignored.", (char) optkey);
return (-1); return (-1);
} }
return (0); return (0);
} }
/* *********************************************** */ /* *********************************************** */
static const struct option long_options[] = { static const struct option long_options[] = {
{"communities", required_argument, NULL, 'c'}, {"communities", required_argument, NULL, 'c'},
{"foreground", no_argument, NULL, 'f'}, {"foreground", no_argument, NULL, 'f'},
{"local-port", required_argument, NULL, 'l'}, {"local-port", required_argument, NULL, 'l'},
{"mgmt-port", required_argument, NULL, 't'}, {"mgmt-port", required_argument, NULL, 't'},
{"dhcp", required_argument, NULL, 'd'}, {"dhcp", required_argument, NULL, 'd'},
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"verbose", no_argument, NULL, 'v'}, {"verbose", no_argument, NULL, 'v'},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
/* *************************************************** */ /* *************************************************** */
@ -395,7 +394,7 @@ static int keep_running;
#ifdef WIN32 #ifdef WIN32
BOOL WINAPI term_handler(DWORD sig) BOOL WINAPI term_handler(DWORD sig)
#else #else
static void term_handler(int sig) static void term_handler(int sig)
#endif #endif
{ {
static int called = 0; static int called = 0;
@ -424,7 +423,7 @@ int main(int argc, char * const argv[]) {
struct passwd *pw = NULL; struct passwd *pw = NULL;
#endif #endif
sn_init(&sss_node); sn_init(&sss_node);
if((argc >= 2) && (argv[1][0] != '-')) { if((argc >= 2) && (argv[1][0] != '-')) {
rc = loadFromFile(argv[1], &sss_node); rc = loadFromFile(argv[1], &sss_node);
@ -437,7 +436,7 @@ int main(int argc, char * const argv[]) {
/* Load from current directory */ /* Load from current directory */
rc = loadFromFile("supernode.conf", &sss_node); rc = loadFromFile("supernode.conf", &sss_node);
#else #else
rc = -1; rc = -1;
#endif #endif
if(rc < 0) if(rc < 0)
@ -478,7 +477,7 @@ int main(int argc, char * const argv[]) {
} }
if((sss_node.userid != 0) || (sss_node.groupid != 0)) { if((sss_node.userid != 0) || (sss_node.groupid != 0)) {
traceEvent(TRACE_NORMAL, "Dropping privileges to uid=%d, gid=%d", traceEvent(TRACE_NORMAL, "Dropping privileges to uid=%d, gid=%d",
(signed int)sss_node.userid, (signed int)sss_node.groupid); (signed int)sss_node.userid, (signed int)sss_node.groupid);
/* Finished with the need for root privileges. Drop to unprivileged user. */ /* Finished with the need for root privileges. Drop to unprivileged user. */
if((setgid(sss_node.groupid) != 0) if((setgid(sss_node.groupid) != 0)

4
src/sn_utils.c

@ -874,10 +874,10 @@ static int process_udp(n2n_sn_t * sss,
if(!comm && sss->lock_communities) { if(!comm && sss->lock_communities) {
HASH_ITER(hh, sss->rules, re, tmp_re) { HASH_ITER(hh, sss->rules, re, tmp_re) {
allowed_match = re_matchp(re->rule, cmn.community, &match_length); allowed_match = re_matchp(re->rule, (const char *)cmn.community, &match_length);
if( (allowed_match != -1) if( (allowed_match != -1)
&& (match_length == strlen(cmn.community)) // --- only full matches allowed (remove, if also partial matches wanted) && (match_length == strlen((const char *)cmn.community)) // --- only full matches allowed (remove, if also partial matches wanted)
&& (allowed_match == 0)) { // --- only full matches allowed (remove, if also partial matches wanted) && (allowed_match == 0)) { // --- only full matches allowed (remove, if also partial matches wanted)
match = 1; match = 1;
break; break;

Loading…
Cancel
Save