diff --git a/build/files/addr_aliases.c b/build/files/addr_aliases.c new file mode 100644 index 0000000..6230a08 --- /dev/null +++ b/build/files/addr_aliases.c @@ -0,0 +1,44 @@ +#include +#include + +#define __USE_GNU +#include + +#include +#include +#include + +const char* getfield(char* line, int num) { + char* tmp = strdup(line); + const char* tok; + for (tok = strtok(tmp, " "); + tok && *tok; + tok = strtok(NULL, " ")) { + if (--num < 0) { + return strdup(tok); + } + } + return NULL; +} + +int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) { + FILE* stream = fopen("/host/etc/addr_aliases", "r"); + char line[1024]; + while (fgets(line, 1024, stream)) { + const char* host_from = getfield(line, 0); + const char* port_from = getfield(line, 1); + const char* host_to = getfield(line, 2); + const char* port_to = getfield(line, 3); + if (strcmp(node, host_from) == 0 && strcmp(service, port_from) == 0) { + fprintf(stderr, "%s:%s => %s:%s\n", host_from, port_from, host_to, port_to); + node = host_to; + service = host_to; + } + } + if (res_init () < 0) { + return EAI_SYSTEM; + } else { + int (*f)() = dlsym (RTLD_NEXT, "getaddrinfo"); + return f(node, service, hints, res); + } +} \ No newline at end of file diff --git a/build/make/csync.mk b/build/make/csync.mk index 03fa022..51295f2 100644 --- a/build/make/csync.mk +++ b/build/make/csync.mk @@ -1,4 +1,5 @@ csync: base sshd compile + $(call aux,addr_aliases.c) $(call script,$@) $(call runit,xinetd) $(call runit,lsyncd) diff --git a/build/scripts/csync.sh b/build/scripts/csync.sh index 69d33a4..7926e71 100644 --- a/build/scripts/csync.sh +++ b/build/scripts/csync.sh @@ -19,6 +19,14 @@ make make install make cert +## Address aliases +cd /opt +mv /addr_aliases.c . +gcc -fPIC -shared -o addr_aliases.so addr_aliases.c +mkdir -p /host/etc/ +touch /host/etc/addr_aliases +echo /opt/addr_aliases.so >> /etc/ld.so.preload + ## Xinetd apt_install_permanent xinetd @@ -39,8 +47,6 @@ echo "csync2 30865/tcp" >> /etc/services ## Lsyncd dependencies apt_install_permanent lua5.2 liblua5.2-dev bash-completion -ln -s /usr/share/bash-completion/completions/a2x /usr/bin/a2x -chmod +x /usr/bin/a2x ## Lsyncd cd /opt