mirror of
https://github.com/lxsang/antd-tunnel-publishers
synced 2024-12-26 01:48:21 +01:00
update to latest changes on tunnel plugin
All checks were successful
gitea-sync/antd-tunnel-publishers/pipeline/head This commit looks good
All checks were successful
gitea-sync/antd-tunnel-publishers/pipeline/head This commit looks good
This commit is contained in:
parent
439ed880a2
commit
a16e89b087
Binary file not shown.
@ -243,7 +243,7 @@ int main(int argc, char **argv)
|
|||||||
signal(SIGABRT, SIG_IGN);
|
signal(SIGABRT, SIG_IGN);
|
||||||
signal(SIGINT, int_handler);
|
signal(SIGINT, int_handler);
|
||||||
// now try to request new channel from hotline
|
// now try to request new channel from hotline
|
||||||
fd = open_unix_socket(argv[1]);
|
fd = open_socket(argv[1]);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
||||||
@ -262,7 +262,7 @@ int main(int argc, char **argv)
|
|||||||
(void)close(fd);
|
(void)close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
M_DEBUG(MODULE_NAME, "Wait for comfirm creation of %s", argv[2]);
|
M_DEBUG(MODULE_NAME, "Wait for confirm creation of %s", argv[2]);
|
||||||
// now wait for message
|
// now wait for message
|
||||||
if (msg_read(fd, &response) == -1)
|
if (msg_read(fd, &response) == -1)
|
||||||
{
|
{
|
||||||
|
1
runner.c
1
runner.c
@ -42,6 +42,7 @@ static void execute_command(list_t *plist)
|
|||||||
ASSERT(pid != -1, "Unable to fork: %s", strerror(errno));
|
ASSERT(pid != -1, "Unable to fork: %s", strerror(errno));
|
||||||
if (pid == 0)
|
if (pid == 0)
|
||||||
{
|
{
|
||||||
|
M_LOG(MODULE_NAME, "Running %s", cmd.params[0]);
|
||||||
execve(cmd.params[0], &cmd.params[0], &cmd.envs[0]);
|
execve(cmd.params[0], &cmd.params[0], &cmd.envs[0]);
|
||||||
// Nothing below this line should be executed by child process. If so,
|
// Nothing below this line should be executed by child process. If so,
|
||||||
// it means that the execl function wasn't successfull, so lets exit:
|
// it means that the execl function wasn't successfull, so lets exit:
|
||||||
|
34
runner.ini
34
runner.ini
@ -1,21 +1,27 @@
|
|||||||
[vterm]
|
[vterm]
|
||||||
exec = /opt/www/bin/vterm
|
exec = /opt/www/bin/vterm
|
||||||
param = /opt/www/tmp/channels/antd_hotline.sock
|
param = unix:/opt/www/tmp/antd_hotline.sock
|
||||||
debug = 0
|
debug = 0
|
||||||
|
|
||||||
[notification_fifo]
|
# [notification_fifo]
|
||||||
|
# exec = /opt/www/bin/wfifo
|
||||||
|
# param = unix:/opt/www/tmp/antd_hotline.sock
|
||||||
|
# param = notification
|
||||||
|
# param = /var/wfifo_notification
|
||||||
|
# param = r
|
||||||
|
# debug = 1
|
||||||
|
|
||||||
|
# [broadcast]
|
||||||
|
# exec = /opt/www/bin/broadcast
|
||||||
|
# param = unix:/opt/www/tmp/antd_hotline.sock
|
||||||
|
# param = broadcast
|
||||||
|
# debug = 1
|
||||||
|
|
||||||
|
# used only by tunnel to authentificate user
|
||||||
|
[tunnel_keychain]
|
||||||
exec = /opt/www/bin/wfifo
|
exec = /opt/www/bin/wfifo
|
||||||
param = /opt/www/tmp/channels/antd_hotline.sock
|
param = unix:/opt/www/tmp/antd_hotline.sock
|
||||||
param = notification
|
param = keychain
|
||||||
param = /var/wfifo_notification
|
param = /opt/www/tmp/antunnel_keychain
|
||||||
param = r
|
param = r
|
||||||
debug = 1
|
debug = 1
|
||||||
|
|
||||||
[broadcast]
|
|
||||||
exec = /opt/www/bin/broadcast
|
|
||||||
param = /opt/www/tmp/channels/antd_hotline.sock
|
|
||||||
param = broadcast
|
|
||||||
debug = 1
|
|
||||||
|
|
||||||
;service=/opt/www/bin/wfifo /opt/www/tmp/channels/antd_hotline.sock server_to_client /var/wfifo_s2c r
|
|
||||||
;service=/opt/www/bin/wfifo /opt/www/tmp/channels/antd_hotline.sock client_to_server /var/wfifo_c2s w
|
|
@ -95,7 +95,7 @@ int main(int argc, char **argv)
|
|||||||
M_LOG(MODULE_NAME, "Unix domain socket: %s created", argv[3]);
|
M_LOG(MODULE_NAME, "Unix domain socket: %s created", argv[3]);
|
||||||
M_LOG(MODULE_NAME, "Hotline is: %s", argv[1]);
|
M_LOG(MODULE_NAME, "Hotline is: %s", argv[1]);
|
||||||
// now try to request new channel from hotline
|
// now try to request new channel from hotline
|
||||||
fd = open_unix_socket(argv[1]);
|
fd = open_socket(argv[1]);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
||||||
|
107
tunnel.c
107
tunnel.c
@ -5,11 +5,16 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
|
||||||
#include "tunnel.h"
|
#include "tunnel.h"
|
||||||
|
|
||||||
#define MODULE_NAME "api"
|
#define MODULE_NAME "api"
|
||||||
|
#ifdef MAX_PATH_LEN
|
||||||
|
#undef MAX_PATH_LEN
|
||||||
|
#endif
|
||||||
|
#define MAX_PATH_LEN 108
|
||||||
|
|
||||||
static int guard_read(int fd, void* buffer, size_t size)
|
static int guard_read(int fd, void* buffer, size_t size)
|
||||||
{
|
{
|
||||||
@ -126,7 +131,7 @@ static uint8_t* msg_read_payload(int fd, uint32_t* size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int open_unix_socket(char* path)
|
static int open_unix_socket(char* path)
|
||||||
{
|
{
|
||||||
struct sockaddr_un address;
|
struct sockaddr_un address;
|
||||||
address.sun_family = AF_UNIX;
|
address.sun_family = AF_UNIX;
|
||||||
@ -147,6 +152,69 @@ int open_unix_socket(char* path)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int open_tcp_socket(char * address, int port)
|
||||||
|
{
|
||||||
|
struct sockaddr_in servaddr;
|
||||||
|
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (fd == -1)
|
||||||
|
{
|
||||||
|
M_ERROR(MODULE_NAME, "Cannot create TCP socket %s:%d: %s",address, port, strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bzero(&servaddr, sizeof(servaddr));
|
||||||
|
|
||||||
|
// assign IP, PORT
|
||||||
|
servaddr.sin_family = AF_INET;
|
||||||
|
servaddr.sin_addr.s_addr = inet_addr(address);
|
||||||
|
servaddr.sin_port = htons(port);
|
||||||
|
|
||||||
|
// connect the client socket to server socket
|
||||||
|
if (connect(fd, (struct sockaddr*)&servaddr, sizeof(servaddr))!= 0) {
|
||||||
|
M_ERROR(MODULE_NAME, "Unable to connect to socket '%s:%d': %s", address, port, strerror(errno));
|
||||||
|
close(fd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
M_LOG(MODULE_NAME, "Connected to server: %s:%d at [%d]", address, port, fd);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
int open_socket( char *path)
|
||||||
|
{
|
||||||
|
regmatch_t regex_matches[3];
|
||||||
|
if(strncmp(path,"unix:", 5) == 0)
|
||||||
|
{
|
||||||
|
if(strlen(path + 5) > MAX_PATH_LEN - 1)
|
||||||
|
{
|
||||||
|
M_ERROR(MODULE_NAME, "socket configuration is too long: %s", path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
M_LOG(MODULE_NAME, "Found Unix domain socket configuration: %s", path + 5);
|
||||||
|
return open_unix_socket(path + 5);
|
||||||
|
}
|
||||||
|
else if(regex_match("^([a-zA-Z0-9\\-_\\.]+):([0-9]+)$", path,3, regex_matches))
|
||||||
|
{
|
||||||
|
if(regex_matches[1].rm_eo - regex_matches[1].rm_so > MAX_PATH_LEN - 1)
|
||||||
|
{
|
||||||
|
M_ERROR(MODULE_NAME, "socket configuration is too long: %s", path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
char address[MAX_PATH_LEN];
|
||||||
|
memcpy(address, path + regex_matches[2].rm_so, regex_matches[2].rm_eo - regex_matches[2].rm_so);
|
||||||
|
int port = atoi(address);
|
||||||
|
(void*) memset(address, 0, MAX_PATH_LEN);
|
||||||
|
memcpy(address, path + regex_matches[1].rm_so, regex_matches[1].rm_eo - regex_matches[1].rm_so);
|
||||||
|
M_LOG(MODULE_NAME, "Found TCP socket configuration: %s:%d", address, port);
|
||||||
|
return open_tcp_socket(address, port);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
M_ERROR(MODULE_NAME, "Unknown socket configuration: %s", path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int msg_read(int fd, tunnel_msg_t* msg)
|
int msg_read(int fd, tunnel_msg_t* msg)
|
||||||
{
|
{
|
||||||
@ -249,3 +317,40 @@ int msg_write(int fd, tunnel_msg_t* msg)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int regex_match(const char* expr,const char* search, int msize, regmatch_t* matches)
|
||||||
|
{
|
||||||
|
regex_t regex;
|
||||||
|
int reti;
|
||||||
|
char msgbuf[100];
|
||||||
|
int ret;
|
||||||
|
/* Compile regular expression */
|
||||||
|
reti = regcomp(®ex, expr, REG_ICASE | REG_EXTENDED);
|
||||||
|
if( reti ){
|
||||||
|
//ERROR("Could not compile regex: %s",expr);
|
||||||
|
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
|
||||||
|
M_ERROR(MODULE_NAME, "Regex match failed: %s", msgbuf);
|
||||||
|
//return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Execute regular expression */
|
||||||
|
reti = regexec(®ex, search, msize, matches, 0);
|
||||||
|
if( !reti ){
|
||||||
|
//LOG("Match");
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
else if( reti == REG_NOMATCH ){
|
||||||
|
//LOG("No match");
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
|
||||||
|
//ERROR("Regex match failed: %s\n", msgbuf);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
regfree(®ex);
|
||||||
|
return ret;
|
||||||
|
}
|
6
tunnel.h
6
tunnel.h
@ -2,6 +2,7 @@
|
|||||||
#define TUNNEL_H
|
#define TUNNEL_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <regex.h>
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#define MAX_CHANNEL_PATH 108
|
#define MAX_CHANNEL_PATH 108
|
||||||
@ -31,10 +32,9 @@ typedef struct{
|
|||||||
uint8_t* data;
|
uint8_t* data;
|
||||||
} tunnel_msg_t;
|
} tunnel_msg_t;
|
||||||
|
|
||||||
int open_unix_socket(char* path);
|
int open_socket(char* path);
|
||||||
int msg_write(int fd, tunnel_msg_t* msg);
|
int msg_write(int fd, tunnel_msg_t* msg);
|
||||||
int msg_read(int fd, tunnel_msg_t* msg);
|
int msg_read(int fd, tunnel_msg_t* msg);
|
||||||
|
int regex_match(const char* expr,const char* search, int msize, regmatch_t* matches);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -449,7 +449,7 @@ int main(const int argc, const char **argv)
|
|||||||
{
|
{
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
sock = open_unix_socket((char *)argv[1]);
|
sock = open_socket((char *)argv[1]);
|
||||||
if (sock == -1)
|
if (sock == -1)
|
||||||
{
|
{
|
||||||
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
||||||
|
@ -336,7 +336,7 @@ int main(int argc, char **argv)
|
|||||||
signal(SIGINT, int_handler);
|
signal(SIGINT, int_handler);
|
||||||
M_LOG(MODULE_NAME, "Hotline is: %s", argv[1]);
|
M_LOG(MODULE_NAME, "Hotline is: %s", argv[1]);
|
||||||
// now try to request new channel from hotline
|
// now try to request new channel from hotline
|
||||||
fd = open_unix_socket(argv[1]);
|
fd = open_socket(argv[1]);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
||||||
|
@ -213,6 +213,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (argc != 5)
|
if (argc != 5)
|
||||||
{
|
{
|
||||||
|
M_LOG(MODULE_NAME, "Usage: %s path/to/hotline/socket channel_name input_file r/w\n", argv[0]);
|
||||||
printf("Usage: %s path/to/hotline/socket channel_name input_file r/w\n", argv[0]);
|
printf("Usage: %s path/to/hotline/socket channel_name input_file r/w\n", argv[0]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -221,7 +222,7 @@ int main(int argc, char **argv)
|
|||||||
signal(SIGINT, int_handler);
|
signal(SIGINT, int_handler);
|
||||||
|
|
||||||
// now try to request new channel from hotline
|
// now try to request new channel from hotline
|
||||||
fd = open_unix_socket(argv[1]);
|
fd = open_socket(argv[1]);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
M_ERROR(MODULE_NAME, "Unable to open the hotline: %s", argv[1]);
|
||||||
@ -240,7 +241,7 @@ int main(int argc, char **argv)
|
|||||||
(void)close(fd);
|
(void)close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
M_LOG(MODULE_NAME, "Wait for comfirm creation of %s", argv[2]);
|
M_LOG(MODULE_NAME, "Wait for confirm creation of %s", argv[2]);
|
||||||
// now wait for message
|
// now wait for message
|
||||||
if (msg_read(fd, &msg) == -1)
|
if (msg_read(fd, &msg) == -1)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user