From c5108dcccfa232db3ff581012e062a00b65d0ad5 Mon Sep 17 00:00:00 2001 From: papush! Date: Wed, 6 Nov 2019 07:36:00 +0100 Subject: [PATCH] coucou --- VM1-6/Vagrantfile | 2 +- VM3-6/Vagrantfile | 2 +- partage/Makefile | 53 +++++++++++--------------- partage/Makefile.old | 46 +++++++++++++++++++++++ partage/build/ext-in.o | Bin 5840 -> 0 bytes partage/build/ext-out.o | Bin 5808 -> 0 bytes partage/build/extremite.a | Bin 9020 -> 0 bytes partage/build/extremite.o | Bin 8864 -> 0 bytes partage/build/iftun.a | Bin 7876 -> 0 bytes partage/build/iftun.o | Bin 7720 -> 0 bytes partage/build/test-iftun.o | Bin 5992 -> 0 bytes partage/capture.txt | 23 ++++++++++++ partage/config.vm1-6 | 9 +++++ partage/config.vm3-6 | 9 +++++ partage/configure-tun.sh | 4 +- partage/ext-in | Bin 14528 -> 19344 bytes partage/ext-out | Bin 14504 -> 19320 bytes partage/src/ext-in.c | 18 ++++++++- partage/src/ext-out.c | 16 +++++++- partage/src/extremite.c | 46 ++++++++++++++++++----- partage/src/extremite.h | 3 +- partage/src/iftun.c | 17 ++++----- partage/src/iftun.h | 2 +- partage/src/tunnel64d.c | 74 +++++++++++++++++++++++++++++++++++++ partage/test-iftun | Bin 13552 -> 13472 bytes partage/tunnel64d | Bin 0 -> 22712 bytes 26 files changed, 265 insertions(+), 59 deletions(-) create mode 100644 partage/Makefile.old delete mode 100644 partage/build/ext-in.o delete mode 100644 partage/build/ext-out.o delete mode 100644 partage/build/extremite.a delete mode 100644 partage/build/extremite.o delete mode 100644 partage/build/iftun.a delete mode 100644 partage/build/iftun.o delete mode 100644 partage/build/test-iftun.o create mode 100644 partage/capture.txt create mode 100644 partage/config.vm1-6 create mode 100644 partage/config.vm3-6 create mode 100644 partage/src/tunnel64d.c create mode 100755 partage/tunnel64d diff --git a/VM1-6/Vagrantfile b/VM1-6/Vagrantfile index 3451f76..0d45707 100644 --- a/VM1-6/Vagrantfile +++ b/VM1-6/Vagrantfile @@ -25,7 +25,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provider "virtualbox" do |vb| # Commenter pour s'exécuter sans GUI - vb.gui = true + # vb.gui = true vb.customize ["modifyvm", :id, "--memory", "768"] end diff --git a/VM3-6/Vagrantfile b/VM3-6/Vagrantfile index 806afd1..c62e61a 100644 --- a/VM3-6/Vagrantfile +++ b/VM3-6/Vagrantfile @@ -25,7 +25,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provider "virtualbox" do |vb| # Commenter pour s'exécuter sans GUI - vb.gui = true + # vb.gui = true vb.customize ["modifyvm", :id, "--memory", "768"] end diff --git a/partage/Makefile b/partage/Makefile index 080b849..f2c2e93 100644 --- a/partage/Makefile +++ b/partage/Makefile @@ -1,40 +1,31 @@ -CC := gcc -Wall -Wextra -Wpedantic -Werror -Iinclude -std=c11 -g +CC := gcc -Wall -Wextra -Wpedantic -Werror -Iinclude -g + +LIBS := + +LDFLAGS := $(LDFLAGS) $(shell pkg-config --libs $(LIBS)) +CFLAGS := $(CFLAGS) $(shell pkg-config --cflags $(LIBS)) + +CFLAGS := $(CFLAGS) -D_POSIX_C_SOURCE=200809L + +BUILD_DIR ?= build + +OUT := $(notdir $(shell pwd)) + +SRC := $(wildcard src/*.c) +OBJS := $(patsubst src/%.c,$(BUILD_DIR)/%.o,$(SRC)) +DEPS := $(wildcard $(BUILD_DIR)/*.d) -all: build test-iftun ext-in ext-out +all: ext-in ext-out test-iftun tunnel64d -build: - -mkdir build +$(OUT): $(OBJS) + $(CC) $(LDFLAGS) -o $@ $^ -ext-in: build/ext-in.o build/extremite.a - $(CC) $(CFLAGS) $^ -o $@ -ext-out: build/ext-out.o build/extremite.a - $(CC) $(CFLAGS) $^ -o $@ +-include $(DEPS) +$(BUILD_DIR)/%.o: src/%.c + $(CC) $(CFLAGS) -MP -MD $< -c -o $@ -build/ext-in.o: src/ext-in.c src/extremite.h - $(CC) $(CFLAGS) $< -c -o $@ - -build/ext-out.o: src/ext-out.c src/extremite.h - $(CC) $(CFLAGS) $< -c -o $@ - -build/extremite.a: build/extremite.o - ar rcs $@ $< - -build/extremite.o: src/extremite.c src/extremite.h - $(CC) $(CFLAGS) $< -c -o $@ - -test-iftun: build/test-iftun.o build/iftun.a - $(CC) $(CFLAGS) $^ -o $@ - -build/test-iftun.o: src/test-iftun.c src/iftun.h - $(CC) $(CFLAGS) $< -c -o $@ - -build/iftun.a: build/iftun.o - ar rcs $@ $< - -build/iftun.o: src/iftun.c src/iftun.h - $(CC) $(CFLAGS) $< -c -o $@ clean: -rm -f $(BUILD_DIR)/*.o diff --git a/partage/Makefile.old b/partage/Makefile.old new file mode 100644 index 0000000..9836fb9 --- /dev/null +++ b/partage/Makefile.old @@ -0,0 +1,46 @@ +CC := gcc -Wall -Wextra -Wpedantic -Werror -Iinclude -std=c11 -g -D_POSIX_C_SOURCE=200809L + + +all: build test-iftun ext-in ext-out tunnel64d + +build: + -mkdir build + +tunnel64d: build/tunnel64d.o build/iftun.a build/extremite.a + $(CC) $(CFLAGS) $^ -o $@ + +build/tunnel64d.o: src/tunnel64d.c src/iftun.h src/extremite.h + $(CC) $(CFLAGS) $< -c -o $@ + +ext-in: build/ext-in.o build/extremite.a build/iftun.a + $(CC) $(CFLAGS) $^ -o $@ + +ext-out: build/ext-out.o build/extremite.a build/iftun.a + $(CC) $(CFLAGS) $^ -o $@ + +build/ext-in.o: src/ext-in.c src/extremite.h src/iftun.h + $(CC) $(CFLAGS) $< -c -o $@ + +build/ext-out.o: src/ext-out.c src/extremite.h src/iftun.h + $(CC) $(CFLAGS) $< -c -o $@ + +build/extremite.a: build/extremite.o + ar rcs $@ $< + +build/extremite.o: src/extremite.c src/extremite.h + $(CC) $(CFLAGS) $< -c -o $@ + +test-iftun: build/test-iftun.o build/iftun.a + $(CC) $(CFLAGS) $^ -o $@ + +build/test-iftun.o: src/test-iftun.c src/iftun.h + $(CC) $(CFLAGS) $< -c -o $@ + +build/iftun.a: build/iftun.o + ar rcs $@ $< + +build/iftun.o: src/iftun.c src/iftun.h + $(CC) $(CFLAGS) $< -c -o $@ + +clean: + -rm -f build/* diff --git a/partage/build/ext-in.o b/partage/build/ext-in.o deleted file mode 100644 index 66ad5b59d640d9443c78fa63765a91ab457acbe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5840 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 diff --git a/partage/build/ext-out.o b/partage/build/ext-out.o deleted file mode 100644 index e61bbd986fca2e878755b33d76205f785c45454c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5808 zcmbtYZEPGz8J@X2+n1buzSy*}n;vDEuHoRL!4O{gT?KPzebMDnQDgKvD9iMFpgohWDL$ z$6il1e_*8Bd7o$AuX$&7cI-ph>o7vw|jAhWC zWyKV(n1?S0&fxpUi9|HkdTus3qQ|z$X90RDq`)b%xQ`?U}^B$<@k(COm6JH~Q1E~`S z2E|wwjZ-Ju5D1sJfMn0lF-OL?@Ui@GE}h?&-@=Fb3R^+(T9(f5%H5W$4#Te7!E(9X zFbRL3JT2pbK%S(?Y(!$-Sz0AiXki0pVE!odU@ zN`&glDMHpG=c873p_M(q@RR#eDM;U}e%Y)=P1AN8%=Fp~(`z;ZJ7h4M@_I)HK0tTokp<}My@^6vR&JE>HsajK0gCBEly1u#gydBPy>`@bnc4LMX8ElJW(F{Gk=MTJ{y7%8fzxvBhEbolAZxR0H6~H9 z4)a{+*R+IRn5diyIK#3ihjR9Es*xK7c4MaqB&Lc*kwx6#OoZ)N4y5Qp>175JvIA?( z=N4A(xM8_#`JvTESHHA_7D(*;SR9shodfZxHMw9 zAYjLXeTt(ZX*sqKTD7(vUuUr`$k1uqt|v^e{1AfOwRi6>rJ49RT``ho;=7Z;i%(AiFTPqE zc#Jp{tB*Rg(L<7#Yp%lM9!t{SaTPvx7K_)_3Oz?1L(Q%a2SXE8OgOH=17kOfr~J_1 ztXD6~c4v&o_=>L*kN1f9s@)sY$1AeZZ^ihb7_U|q{fNs5>Ge~OJpPUoR@ZLD!v|C} ztQ$7PpT-Rf4L_jR5Uzb;K)wk{Xs93GEhWLO`W& z;=ii#W5hqC@wX6eYy4jbe?#N{L4Lla@qZ_NS>x4upVasj(*Lo>r-*++=Zvk`Ka|# zJX};n+o|baPmcCz{3FEg*Z50>@6-4%kpHH}4-p?|yn26*YW!a*?s1JTk)NkEzDoF~ z8vh6K^J|U&BJr$HU3{h zo3VE^{!P+9r}3|oe*An^G7hP4k)F>PveS8kcnm|Ki246I1I#g2JU8?>iw|h(dn=LD zRWkP5;D@)7S@^}mRqo$HC$Z#ussJH4ZFuhIC&9s2xV?I*xi zuQfVX@vlP=YkK_MFs5^;{u{Enpe>fJdn@QA)vrrety6S4!201D>Gk_OaJo;R*h^H9 zKO=}WUH3s4(>YZCJ|+ciTy|?uUH1@-B;{YAi-xkt{5Qc*&mX_Hx=*0k8x;R{2x3jw z#qW4h{8@^x_8G>U8>>Xe=8PmsMD zSN&F%s3NFWc8Y!;1mv_d>7RUzO)Ev}b+^v~pH#m?3H8G>OWCWsqMH8hVWh l>G>z+F4S?eKzo}E@b5?b>p+i>YDw|mrt=5Shj`QD{}*{;Vjlni diff --git a/partage/build/extremite.a b/partage/build/extremite.a deleted file mode 100644 index 15a13a26ba3f5ae89e32c8a434560187d0934f6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9020 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 diff --git a/partage/build/extremite.o b/partage/build/extremite.o deleted file mode 100644 index f0d5b50002c0763c55e34512d38f4d8cb83892f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8864 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 diff --git a/partage/build/iftun.a b/partage/build/iftun.a deleted file mode 100644 index ab666dbd3f7dfeb8af217bf301b04a6efd78cdb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7876 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 Bo*V!G diff --git a/partage/build/test-iftun.o b/partage/build/test-iftun.o deleted file mode 100644 index b3aa4682f126677a570d5522c07e2c8ba71030cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5992 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 literal 14528 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 Q`roij=s#jMF#p#gf!mi?Bsd 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 bcNP9r-l^vw{l1mzzx_&~|FEsm<_`OBQXR~L diff --git a/partage/src/ext-in.c b/partage/src/ext-in.c index af6e578..d61bcf0 100644 --- a/partage/src/ext-in.c +++ b/partage/src/ext-in.c @@ -1,10 +1,13 @@ #include "extremite.h" +#include "iftun.h" #include #include +#include +#include -int main(int argc, char *argv[argc]){ +int main(int argc, char *argv[argc]) { int port = 123; if (argc == 3) { port = atoi(argv[2]); @@ -13,6 +16,17 @@ int main(int argc, char *argv[argc]){ fprintf(stderr, "Utilisation : %s adresse [port]\n", argv[0]); return 1; } - ext_in(argv[1], port, 0); + + if (getuid() != 0) { + fprintf(stderr, "%s doit être lancé en tant que superutilisateur.\n", argv[0]); + return 1; + } + int tun = tun_alloc("tun0"); + if (system("./configure-tun.sh tun0 172.16.2.1/28") != 0) { + fprintf(stderr, "Erreur lors de l’exécution du script de configuration de l’interface.\n"); + return 1; + } + ext_in(argv[1], port, tun); + return 0; } diff --git a/partage/src/ext-out.c b/partage/src/ext-out.c index 12a66bc..0bada03 100644 --- a/partage/src/ext-out.c +++ b/partage/src/ext-out.c @@ -1,7 +1,10 @@ #include "extremite.h" +#include "iftun.h" #include #include +#include +#include int main(int argc, char *argv[argc]) { @@ -13,6 +16,17 @@ int main(int argc, char *argv[argc]) { fprintf(stderr, "Utilisation : %s [port]\n", argv[0]); return 1; } - ext_out(port); + + if (getuid() != 0) { + fprintf(stderr, "%s doit être lancé en tant que superutilisateur.\n", argv[0]); + return 1; + } + int tun = tun_alloc("tun0"); + if (system("./configure-tun.sh tun0 172.16.2.10/28") != 0) { + fprintf(stderr, "Erreur lors de l’exécution du script de configuration de l’interface.\n"); + return 1; + } + ext_out(port, tun); + return 0; } diff --git a/partage/src/extremite.c b/partage/src/extremite.c index 295ea28..16337b9 100644 --- a/partage/src/extremite.c +++ b/partage/src/extremite.c @@ -1,5 +1,3 @@ -#define _POSIX_C_SOURCE 200112L - #include #include #include @@ -15,15 +13,21 @@ #include #include #include +#include -void ext_out(int port) { +#define BUFSIZE 1024 + + +void ext_out(int port, int out) { int server = socket(AF_INET6, SOCK_STREAM, 0); if (server == -1) { perror("socket"); exit(1); } + setsockopt(server, SOL_SOCKET, SO_REUSEADDR, &(int) {1}, sizeof (int)); + struct sockaddr_in6 server_addr = {0}; server_addr.sin6_family = AF_INET6; server_addr.sin6_port = htons(port); @@ -49,10 +53,19 @@ void ext_out(int port) { inet_ntop(AF_INET6, &(client_addr.sin6_addr), client_addr_pretty, sizeof client_addr_pretty); printf("Client connecté : %s\n", client_addr_pretty); - char buf[1024]; + char buf[BUFSIZE]; + ssize_t n; while (1) { - ssize_t n = read(client, buf, sizeof buf); - write(1, buf, n); + n = read(client, buf, sizeof buf); + if (n == -1) { + perror("read"); + exit(1); + } + n = write(out, buf, n); + if (n == -1) { + perror("write"); + exit(1); + } } close(client); @@ -73,17 +86,18 @@ void ext_in(const char addr[], int port, int in) { inet_pton(AF_INET6, addr, &sa.sin6_addr); puts("Connexion."); - if (connect(s, (struct sockaddr *) &sa, sizeof sa) == -1) { + while (connect(s, (struct sockaddr *) &sa, sizeof sa) == -1) { perror("connect"); - exit(1); + sleep(1); } char addr_pretty[INET6_ADDRSTRLEN] = ""; inet_ntop(AF_INET6, &(sa.sin6_addr), addr_pretty, sizeof addr_pretty); printf("Connecté à : %s\n", addr_pretty); - char buf[1024]; + char buf[BUFSIZE]; + ssize_t n; while (1) { - ssize_t n = read(in, buf, sizeof buf); + n = read(in, buf, sizeof buf); if (n == -1) { perror("read"); exit(1); @@ -97,3 +111,15 @@ void ext_in(const char addr[], int port, int in) { close(s); } + + +void ext_bidir(const char addr[], int port, int in, int out) { + pid_t pid = fork(); + if (pid == 0) { + ext_in(addr, port, in); + } + else { + ext_out(port, out); + waitpid(pid, NULL, 0); + } +} diff --git a/partage/src/extremite.h b/partage/src/extremite.h index 3ad66dc..ee70913 100644 --- a/partage/src/extremite.h +++ b/partage/src/extremite.h @@ -2,8 +2,9 @@ #define EXTREMITE_H -void ext_out(int port); +void ext_out(int port, int out); void ext_in(const char addr[], int port, int in); +void ext_bidir(const char addr[], int port, int in, int out); #endif diff --git a/partage/src/iftun.c b/partage/src/iftun.c index 25b3008..1d17640 100644 --- a/partage/src/iftun.c +++ b/partage/src/iftun.c @@ -17,27 +17,26 @@ #include -int tun_alloc(char *dev) { +int tun_alloc(const char *dev) { int fd = open("/dev/net/tun", O_RDWR); - if(fd < 0 ) { - perror("alloc tun"); + if(fd < 0) { + perror("open"); exit(1); } - struct ifreq ifr = {.ifr_flags = IFF_TUN}; - ifr.ifr_flags = IFF_TUN | IFF_NO_PI; + struct ifreq ifr = { + .ifr_flags = IFF_TUN | IFF_NO_PI + }; if (*dev) { strncpy(ifr.ifr_name, dev, IFNAMSIZ); } int err = ioctl(fd, TUNSETIFF, (void *) &ifr); - if(err < 0 ){ - close(fd); - return err; + if(err < 0){ + exit(1); } - strcpy(dev, ifr.ifr_name); return fd; } diff --git a/partage/src/iftun.h b/partage/src/iftun.h index a9139b0..3747b3b 100644 --- a/partage/src/iftun.h +++ b/partage/src/iftun.h @@ -2,7 +2,7 @@ #define IFTUN_H -int tun_alloc(char *dev); +int tun_alloc(const char *dev); int copy(int src, int dest); diff --git a/partage/src/tunnel64d.c b/partage/src/tunnel64d.c new file mode 100644 index 0000000..558b184 --- /dev/null +++ b/partage/src/tunnel64d.c @@ -0,0 +1,74 @@ +#include "iftun.h" +#include "extremite.h" + +#include +#include +#include +#include +#include +#include + + +char *dev; +char *inip; +char *outip; +int inport; +int outport; + + +int main(int argc, char *argv[argc]) { + if (argc != 2) { + fprintf(stderr, "Utilisation : %s fichier_conf\n", argv[0]); + } + if (getuid() != 0) { + fprintf(stderr, "%s doit être lancé en tant que superutilisateur.\n", argv[0]); + return 1; + } + + FILE *f = fopen(argv[1], "r"); + + char *line = NULL; + size_t n = 0; + ssize_t len; + while ((len = getline(&line, &n, f)) > 0) { + char *pair = strtok(line, "#"); + char *key = strtok(pair, "="); + char *val = strtok(NULL, "="); + if (val != NULL) { + line[len-1] = '\0'; + printf("%s=%s\n", key, val); + if (strcmp(key, "tun") == 0) { + dev = malloc(strlen(val)); + strcpy(dev, val); + } + else if (strcmp(key, "inip") == 0) { + inip = malloc(strlen(val) + 1); + strcpy(inip, val); + } + else if (strcmp(key, "outip") == 0) { + outip = malloc(strlen(val) + 1); + strcpy(outip, val); + } + else if (strcmp(key, "inport") == 0) { + inport = atoi(val); + } + else if (strcmp(key, "outport") == 0) { + outport = atoi(val); + } + } + } + if (line) free(line); + fclose(f); + + int tun = tun_alloc(dev); + + char full_cmd[1024] = ""; + sprintf(full_cmd, "./configure-tun.sh %s %s", dev, inip); + if (system(full_cmd) != 0) { + fprintf(stderr, "Erreur lors de l’exécution du script de configuration de l’interface.\n"); + return 1; + } + ext_bidir(outip, outport, tun, tun); + + return 0; +} diff --git a/partage/test-iftun b/partage/test-iftun index e9234a684980a6ed9a81c10406f1e7e797e6a108..326c2a200bdccb64f3570a75b45d08082c5f9960 100755 GIT binary patch delta 4591 zcmZWt3v?9K8NPRBXLn}bk0i58BH1MnF_PUR1j0KTd2N8!aB5oABEdW$M+h-IwbD%* ztyvIH)_Y2^r3E}~k63L(Q#GO`K`Iz(F{rhvP`aX=ldamWqLxY^{r|f&Nu>9jz4!mW z|9SuWn3+vA9&GINy8Wgw!Itg`N!%JQ_*KOQD+h@_65{6oh299iW=-B~t>L&nwhEjj zoysINWlrm)%wbNX%mUe3Uk?jP{h2Vm)^mO#SmS=4hgE%02Y3BmU>u^;C({$vZuwWK+0YN zFd;JUq1(`SZ*6e%rr=D{(6C|a=Jm{Hn8~UQ%SG_derd>?y;aj(rCH*C(ZnBT_X5^uwB%18vfPetbIC+rsUzvc% z3MM-_{~7XF>0~SC|A{=-Fxkxci^$_DBx^YT9`XwERh)kddE8*hFy~JrZ-MwES;T=? z5x{+!^aEe~NoDNpJ(1YONc)GWsyixA_0^ceBy#F_O2Oe&mK-KSOF{AT21o89LVErK zg{_Vh;@U^ruh=88OWU%0z#A{5YjrOQMiQX>FoIv<#4AsN1^_Tnz03Q;^nj>8YW) zzz!MH*zKAHlu)x6K#S^CAl|)rm^*d9X<5_}R6Q z5y+%{=P-F7qc@43{tZwsrZV)!HI}1<*hg&5Z32740vqumG+%i z$OGoI)dSbq3(EY0qg*l!29er<$eul^tB~I#L(oTJXCT1`LH^OJxGXHk?9Ev(_+b_H z6yo@;6}Ma}J{LKDO~i9C^aZOjKNX#~xM@qviNo~^g2AAlEIM&`U-vqhSY;i8^4q}2|6~yd>u?Qm8z?csc#MxhfaS+D+P`N8G5?ER< zOdR)h4Hf`eMtUHWHCj~qI%~6pq@J%vMiT6KOI}3-c;t1guseS!EVLPgZmUTqBnPbO z;CCJ5$I!#5{H0MjZpZ!1XU(MvHru+C%B;<*x>DNZKcI~ye#paKv04LOV;CI~8}GqA zEEP5%?;&ZH1XnwlVhaf=kT8m(XmMwW7%EqWd&Cagc!(q@FCM?=;?I0sW!n*s@Z-mUB#IB|eFzK0 zjJ9XsXW0OqjaaSX%~yd^2EmUw^*cZk#R87RTaY#=R>Y$PJODAh1Fpnd(cbD53(Fzj zv|(_ZVQ8FT5w}wU=%g5ND>3asA0FQTkAKCei{i;e9TaEsLVE zSDgJeD*ptP=cEH3KzeREU@g+~kd_s^_r>`sfCv@&NQsTBD8}W+?0=A7GFSx3~^~LsHYVoTtRsW?JE&Bq-z`klGoTl zObbxB>^j=Y;)=V0Q~rSNzLB*E#1QXtG81+G%E={&4%VaD5!C%# zDUv6Ve2hB`tsQD2B}@HE0A z(QKT)5D$CmTY$?;%hnT@5nwtE*~j2D0^4_akFGyO*PB~vH3cz#etX6#$UUtu#s{~1 z?%mozXdx46Yq|!?!D?n8qFt_9=Lt7h-jZx< zRcxcOS?~lmQ(Eak+!6rO5Fl0$9n-dfww(5a+IDrE%rWK(s>c;&EvAcwyxHY$Y1CNo z!iF#X8k+%9ElHGSVj?gPo`wW7dWSvkJ33Ln($!1rOD4y@NmXQO{OTr*U9mKO1n5` zCJ8=Th?fN>Wr|i3hEetD-$i2{U^(DDzmBb(q|#>SGesv!@zF(Qu{Pk{@LW6s(jCxe ziW#Jpy$>8d(lW&?vWmI#R9XXlrs##JIQqZ?jI1f|8DFdRm83`X0U^NSp^6nxR$ZO? zBU%$zu!_lQ0FNq#r}7o;u?vTrw+4=T$PN~ttoroFye1@g{3yX}k567h*R#MBmA3K+ z?}{loz8yE@fiEkRWRecnHbwR6UwXQ)3yI1@cwe&HLA|FaA)|yzzJ?wTKC=9J=Q(+57o7u_ZUV zB|jWB{%u%^m!bfV*Ki@XG)jUR>DjW)(N9Yd3+^iLXbF z8jkAS7R~C$?eslOAK(ASw?{R7{V4GFJy3WIqtKsYFZ~X5_#Eg-jt*jf)5n0~d~Wo3 zMc1C>h8xcf_lW*-r^odI?tl=&THdTzW>{&-kcG*g*n33K5r7Aq=K^!?q;`hnBW0=(%Kmnr%QZDp0fjs2?;15W>! zU=`~xE*pIfuCa61a1*#nLS}ti!ueQMGSjTD6nqNqDp?@FaJpmxEn>>_a;4LeHvE9C zoL;7ER@2;MR5Sk4k5CX|f0we-THezIBp{A{1QPIVa0Bs}*5D+Wf zU_=sWYI26QXsaY1ZBs36c$5ZIl0a*~wi>Jt@YSg0oLxa1w8s-DlK%hPdtt>nXJ`KJ zf6n~#yxX~EWKDa(8?}T97Of_vU`9voZ_0Ms1(O&pAtAw_P@CbmOPBAmM+M(#TOIrJWHz^3U0Y+*qJZ2UR;bfN3E*2l_M2JSpK_|s*#ewyBGvR(fQ zdUL_g2rCFeL=YF>BF*DbIlz0R0)9WVaVbFW;8a%W_js4&S8BmB#7|NmU5uEw%axfS zR}{E}Fi}HQyXM}i{PlJD#bo`4byfA7IW-lVs%q=j^Vz1wiiENFHd9vKk9C74XH-y_ zg%q8Kjp0}U+Qkq> z+$)_1Z^OJx@dx8c(&XNZ@RN!^Hku^WrvfaY=t;m{IRrziSQ6iv#E&$eW04(7HVcu+ zw*C!D{CN;Yn*YL%X-Z?W$Af4rI~{6QMi?l>t79ll439y{_96qPF)<`?3SykcM8Cii zVi|Fdz!xomO^7=M{v0vpHqkEdCx~$l5={bsgc!$@s2BJhz_HbsutZcaUPlEh;!1&E zL5wL&gatl|7*}SZK;XlOF=>gA!21wmvJ!50XsvUEQkZRRUlI{PH&QheX=@w#AE- z71UZme)gyQgZe-vq8FxbbD;`RDx~g$)b!bCfW7X>F z{1l?Dtlp@ut=^z+Xk1HH)YjHjg^+@iYl1uvrk~)_`~ie&hc*I%qR`HV{$estKzj<> zXJP!K&@!030Oa9*o@bj*hxsy_s`OtR8yn$mwyd(Bfb|a0B4tkZBhmtgS$f27VT7au zYbE>=Ab;;`^0%+Zacw=z&)YI+oO|pG6*okb@Pte$fCY=i&G-ZMDVddK4H~DzPM9|= zK~cl`&j;)ow3B~mS2LL@EVyP})*@-xIFGjTLWk;U(a$1rc7tXmZ*XLIh@$CYdaw-f zE{95c_(?|wZRh75bwICh!qM%l3{KH+s$#vpS#Ote&myhC zJLN;2a~%cNINt6GURBz^&s8T~g*?}LOYWB@LQDix$Y?#(bS9ijbub@S9bo`M-sDet zza3K;UJVj8pNGc$cNm{3y%I=E7Wi>XKi>y5y96$zUp@pRVL_yKAzLC=v^@&Hlv=19 zL}Hdt!Gp~%PyG@Y>=Xbw=XM|ovw=T(8qy|aM}97bi7{e+13b#pPXMyH<-EDjRn0Iz z$xux)EI>oXGSNvP^6kXjhCYfY*xF3;tQz$31+r$NE@AzsTa2_s%y@9iCFQ6ah{3kyNG!{ z3U9f9woG2M6cBp}JGEG|Z9@7xNSlax59;1J8)}Ogs(|vlgQ(vmL44)8JnRgc06kNl zN1CyXV66NeN8z@wS=T_6JrzKE?JMtFL6kor?PD#d^GBppiGwKzZGfE^Lg^Kx3FU`8 zP`hf@5#_KSIm&*#RvJuK`2(lgI+wghm5m;Kbop{_z0FoUuyezJ@s_ zj)3yI7mS@BBk!MWz;Zr=4&D%C3X*RM^1B$~EkUNC?%RUA8M&vb(QGg3o}Pu|%SgT> z$or6dcLi8D#R%RTFTo?jS&8iTu?x-wk{_%`yF1YFzh(o2Se8Sbqx`J|0*r{WQkw*N=|Z&AxQB0J~W=J5mm$xA4$@KGNu_e@gZQ{iP} z^HG}(q&DQ*9YkgbDty<0%;8UxIYEYQKnCmSsv;zbyMq%-J<1hZDFCZ_*4Lm9q`Eaq zQ?Vb=LD35Zx_XlTFnBoAIHvt)RhAMb{D+qFf8dlcSrMOjC{^n8}z)2?4-hGIT1ob2ZX zli3Qlet8)Z+=&#-b9A?`cSWfYeCUw=sim_C?kfo{7UO<5_>T*HFI?o0PrfJEZVwv* z(Y`CBsid2GvQ@a|%d-7J<0H;c#H#`(A3QXG)VSUaX)Z{;5VxIoWiOQ6F8)dO6#6LN zo9(Z75=3qixbnqhm^>p)oWyu*82smSSH>bRHst~IMh8Xxj;PP^lT#*6cYI@yxnVb9 z#B1kbB407pPm4sokkhID7@m|KShj&{W~~bO@G07r*j^rKJBA89A3Dn;>HE{6y+D?&*s^=^A-F; zuI5W}5AuxZm-mNegea{0vOLveyat(`qV0TZp2|n^0{nPhjAYt$ANp`(0GL5bD)Q)3t349M77o%|4>ZhfD1^9z8Cy#ar4 z6qZ<l Jly9At@qhM5pgjNp diff --git a/partage/tunnel64d b/partage/tunnel64d new file mode 100755 index 0000000000000000000000000000000000000000..d94f5576cae4bc55a4b07ce7a69fe740822737e9 GIT binary patch literal 22712 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 ZxHIcN*SCqv-+Gm@zr&n3lz3MB{x8l4RYm{+ literal 0 HcmV?d00001