diff --git a/re6st/ovpn-client.c b/re6st/ovpn-client.c new file mode 100755 index 0000000000000000000000000000000000000000..0187e3659ea0f4de735ad1a66c6a499d37b972b4 --- /dev/null +++ b/re6st/ovpn-client.c @@ -0,0 +1,52 @@ +#include <stdio.h> + +int main(int argc, char *argv[]) +{ + char *p; + int pd; + char buf[512]; + int n; + char *s, *s1, *s2; + + s = (char*)getenv("script_type"); + if (s == NULL) { + fprintf(stderr, "no script_type\n"); + return 1; + } + + if (strcmp(s, "up") == 0) + return 0; + + if (argc < 2) { + fprintf(stderr, "missing pipe\n"); + return 1; + } + + pd = strtol(argv[1], &p, 10); + if (! (*p == 0)) { + fprintf(stderr, "invalid pipe %s\n", argv[1]); + return 1; + } + + /* %(script_type)s %(common_name)s %(OPENVPN_external_ip)s */ + s1 = (char*)getenv("common_name"); + s2 = (char*)getenv("OPENVPN_external_ip"); + + if ( (s1 == NULL) || (s2 == NULL)) { + fprintf(stderr, "missing common_name and OPENVPN_external_ip\n"); + return 1; + } + + n = snprintf(buf, 512, "%s %s %s\n", s, s1, s2); + if (n >= 512) { + fprintf(stderr, "buffer overflow\n"); + return 1; + } + + if (write(pd, buf, n) == -1) { + fprintf(stderr, "write pipe failed\n"); + return 1; + } + + return 0; +} diff --git a/re6st/ovpn-server.c b/re6st/ovpn-server.c new file mode 100755 index 0000000000000000000000000000000000000000..0f22c0ae72ba3564d9a6e5bfc509c9ef9472c519 --- /dev/null +++ b/re6st/ovpn-server.c @@ -0,0 +1,95 @@ +#include <stdio.h> +/* +if os.environ['script_type'] == 'client-connect': + # Send client its external ip address + with open(sys.argv[2], 'w') as f: + f.write('push "setenv-safe external_ip %s"\n' + % os.environ['trusted_ip']) + +# Write into pipe connect/disconnect events +arg1 = sys.argv[1] +if arg1 != 'None': + os.write(int(arg1), '%(script_type)s %(common_name)s %(trusted_ip)s\n' + % os.environ) +*/ +int main(int argc, char *argv[]) +{ + char *p; + int pd; + char buf[512]; + int n; + char *s, *s1, *s2; + int fd; + + s = (char*)getenv("script_type"); + if (s == NULL) { + fprintf(stderr, "no script_type\n"); + return 1; + } + + s2 = (char*)getenv("trusted_ip"); + if (s2 == NULL) { + fprintf(stderr, "no trusted_ip\n"); + return 1; + } + + if (strcmp(s, "client-connect") == 0) { + if (argc < 3) { + fprintf(stderr, "missing filename\n"); + return 1; + } + n = snprintf(buf, 512, "push \"setenv-safe external_ip %s\"\n", s2); + if (n >= 512) { + fprintf(stderr, "buffer overflow\n"); + return 1; + } + + /* O_WRONLY == 1 */ + fd = open(argv[2], 1); + if (fd == -1) { + fprintf(stderr, "open %s failed\n", argv[2]); + return 1; + } + + if (write(fd, buf, n) == -1) { + fprintf(stderr, "write %s failed\n", argv[2]); + close(fd); + return 1; + } + close(fd); + } + + if (argc < 2) { + fprintf(stderr, "missing pipe\n"); + return 1; + } + + if (strcmp(argv[1], "None") == 0) + return 0; + + pd = strtol(argv[1], &p, 10); + if (! (*p == 0)) { + fprintf(stderr, "invalid pipe %s\n", argv[1]); + return 1; + } + + /* %(script_type)s %(common_name)s %(OPENVPN_external_ip)s */ + s1 = (char*)getenv("common_name"); + if (s1 == NULL) { + fprintf(stderr, "missing common_name\n"); + return 1; + } + + n = snprintf(buf, 512, "%s %s %s\n", s, s1, s2); + if (n >= 512) { + fprintf(stderr, "buffer overflow\n"); + return 1; + } + + if (write(pd, buf, n) == -1) { + fprintf(stderr, "write pipe failed\n"); + return 1; + } + + return 0; +} diff --git a/re6st/plib.py b/re6st/plib.py index 47454fd227074dd1674409ad0f984f8e7fb8087e..c223e8423d4ff2cb4407e695d89284f4e74dca2a 100644 --- a/re6st/plib.py +++ b/re6st/plib.py @@ -2,8 +2,9 @@ import logging, errno, os, sys from . import utils here = os.path.realpath(os.path.dirname(__file__)) -ovpn_server = os.path.join(here, 'ovpn-server') -ovpn_client = os.path.join(here, 'ovpn-client') +script_ext = '.exe' if sys.platform == 'cygwin' else '' +ovpn_server = os.path.join(here, 'ovpn-server' + script_ext) +ovpn_client = os.path.join(here, 'ovpn-client' + script_ext) ovpn_log = None def openvpn(iface, encrypt, *args, **kw): diff --git a/re6stnet b/re6stnet index c0df18a3def107b7e0ec37604181618460de7170..2bf28d661cdacdabba32f2b82aa3dac9363cd92b 100755 --- a/re6stnet +++ b/re6stnet @@ -359,7 +359,7 @@ def main(): exit(1) t = threading.Thread(target=check_no_default_route) t.daemon = True - # t.start() + t.start() if not sys.platform == 'cygwin': ip('route', 'unreachable', *x)