diff --git a/.gitmodules b/.gitmodules index 4526f04..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +0,0 @@ -[submodule "etc/libnatpmp"] - path = etc/libnatpmp - url = git://github.com/miniupnp/libnatpmp.git -[submodule "etc/miniupnp"] - path = etc/miniupnp - url = git://github.com/miniupnp/miniupnp.git diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index add6daf..0000000 --- a/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -fauno -Ernesto Bazzano -Mauricio Pasquier Juan -Matías Lang -aza -hellekin diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index b435ca2..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -# Proceso de consenso - -* Tenés una idea para mejorar LibreVPN -* Abrís un issue detallándola -* Se consensúa la idea -* Mandás un PR con una implementación de tu idea -* Se consensúa el PR -* Se mergea - -# Herramientas - -Se prefiere gitflow. diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt diff --git a/Makefile b/Makefile index 6d26857..78a7aaa 100644 --- a/Makefile +++ b/Makefile @@ -1,214 +1,17 @@ -# The default target is the first target listed. We declare 'default' first -# thing, so we don't have to worry about the order later -default: all +.DEFAULT_GOAL := all -# Configuration ################################################################ - -# Where to install to. -# PREFIX is the install prefix, most programs on a system are "/" or "/usr" -# TARGET is a staging directory to install to, a sort of 'root' directory -TARGET ?= -PREFIX ?= /usr/local -# If this were a GNU package, 'TARGET' would be called 'DESTDIR', and 'PREFIX' -# would be 'prefix' - -# Supplemental/derived install directories. Again, if we wanted to be -# consistent with GNU, they would have different names. -LIBDIR ?= $(PREFIX)/lib/$(NETWORK) -DOC ?= $(PREFIX)/share/$(NETWORK)/doc -CONTRIB ?= $(PREFIX)/share/$(NETWORK)/contrib -HOSTS ?= $(PREFIX)/share/$(NETWORK)/hosts -BEADLE ?= $(PREFIX)/share/$(NETWORK)/beadle - -# Gettext -TEXTDOMAINDIR ?= $(PREFIX)/share/locale -TEXTDOMAIN ?= $(NETWORK) - -# Nombre de la red -NETWORK ?= lvpn -# La configuración de tinc -TINC ?= /etc/tinc/$(NETWORK) -# `lvpn` -LVPN ?= $(PREFIX)/bin/$(NETWORK) - -# Flags por defecto para el daemon -FLAGS ?= --logfile -U nobody -# Tamaño de las llaves -KEYSIZE ?= 4096 -# Puerto por defecto -PORT ?= 655 - -# Las subredes -SUBNET ?= 192.168.9.0/24 -SUBNET6 ?= 2001:1291:200:83ab::/64 - -# Sub-projects to optionally build -#BUILD_UPNPC = true -#BUILD_LIBNATPMP = true -BUILD_GEN_IPV6 = true -BUILD_CONTRIB = true - -# Set up some runtime variables ################################################ - -# The language that the messages in the source are. -native_lang = es -# Detect available translations -langs = $(sort $(native_lang) $(notdir $(wildcard doc/* locale/*))) - -arch := $(shell uname -m) - -# The source and output files of our 'compile' routines -src_sh = lvpn.in -out_sh = $(patsubst %.in,%.out,$(src_sh)) -src_po = $(wildcard locale/*/LC_MESSAGES/*.po) -out_po = $(patsubst %.po,%.mo,$(src_po)) src_man = $(wildcard doc/*/*.markdown) out_man = $(patsubst %.markdown,%.1,$(src_man)) -# List of host names that we have files for -hosts = $(notdir $(wildcard hosts/*)) -# List of man pages to install, structured like relative directories to /usr/share/man -mans = $(patsubst en/%,./%,$(subst /,/man1/,$(patsubst doc/%,%,$(out_man)))) -# The list of programs to install to $(PREFIX)/bin -bins = lvpn +all: man +clean: man-clean -# List of subdirectories to recurse into -SUBDIRS = - -# Add the hooks for optionally compiled sub-projects ########################### - -ifdef BUILD_UPNPC -bins += upnpc -SUBDIRS += etc/miniupnpc -$(TARGET)$(PREFIX)/bin/%: etc/miniupnpc/%-shared - install -Dm755 '$<' '$@' -endif - -ifdef BUILD_LIBNATPMP -bins += natpmpc -SUBDIRS += etc/libnatpmp -$(TARGET)$(PREFIX)/bin/%: etc/libnatpmp/%-shared - install -Dm755 '$<' '$@' -endif - -ifdef BUILD_GEN_IPV6 -bins += $(arch)-generate-ipv6-address -SUBDIRS += etc/generate-ipv6-address-0.1 -$(TARGET)$(PREFIX)/bin/%: etc/generate-ipv6-address-0.1/% - install -Dm755 '$<' '$@' -endif - -ifdef BUILD_CONTRIB -bins += collectd-lvpn -$(TARGET)$(PREFIX)/bin/%: contrib/collectd/% - install -Dm755 '$<' '$@' -endif - -# All the high-level 'phony' targets ########################################### - -all: PHONY build man locale -clean-all: PHONY clean man-clean locale-clean - -build: PHONY $(out_sh) $(addsuffix /all,$(SUBDIRS)) -clean: PHONY $(addsuffix /clean,$(SUBDIRS)) - rm -rf $(out_sh) - -man: PHONY $(out_man) -man-clean: PHONY +man: $(out_man) +man-clean: rm -rf $(out_man) -locale: PHONY $(out_po) -locale-clean: PHONY - rm -rf $(out_po) - -# This loops over the configured sub-projects to proxy targets to them. -# '${subdirectory}/${target}' runs 'make ${target}' in that subdirectory. -$(foreach subdir,$(SUBDIRS),$(eval \ -$(subdir)/%: ; \ - $$(MAKE) -C '$(subdir)' '$$*' \ -)) - -# If we wanted to run 'make install' in each of the sub-projects, we would have -# 'install' depend on this: -# $(addsuffix /install,$(SUBDIRS)) -# However, instead we've added rules to know how to find programs named in -# $(bin) from the relevent sub-directories, so 'install-bin' installs them, and -# we don't have to recurse. This is a questionable move, but it works for now. - -# List of all the files to be created during install, as absolute paths -inst_progs = $(addprefix $(TARGET)$(PREFIX)/bin/,$(bins)) -inst_hosts = $(addprefix $(TARGET)$(HOSTS)/,$(hosts)) -inst_man = $(addprefix $(TARGET)$(PREFIX)/share/man/,$(mans)) -inst_trans = $(patsubst locale/%,$(TARGET)$(TEXTDOMAINDIR)/%,$(out_po)) -# And now, the 'install' target, depending on all of those files -install: PHONY all $(inst_progs) $(inst_hosts) $(inst_man) $(inst_trans) -# Except that listing all the files in lib would be a pain, so just cp -r it - install -dm755 $(TARGET)$(LIBDIR)/ - cp -rfv lib/* $(TARGET)$(LIBDIR)/ - install -dm755 $(TARGET)$(CONTRIB)/ - cp -rfv contrib/* $(TARGET)$(CONTRIB)/ -# Correctly set the permissions - find $(TARGET)$(LIBDIR)/ $(TARGET)$(CONTRIB)/ | while read _f; do \ - chmod u+w "$${_f}"; \ - chmod g-w "$${_f}"; \ - chmod o=g "$${_f}" ; \ - done - -# Actual make rules ############################################################ - -# Reemplazar todas las variables en los .in y pasarlas a los .out -%.out: %.in - sed -e "s/@NETWORK@/$(NETWORK)/g" \ - -e "s,@LIBDIR@,$(LIBDIR),g" \ - -e "s,@DOC@,$(DOC),g" \ - -e "s,@CONTRIB@,$(CONTRIB),g" \ - -e "s,@HOSTS@,$(HOSTS),g" \ - -e "s,@BEADLE@,$(BEADLE),g" \ - -e "s,@TINC@,$(TINC),g" \ - -e "s,@LVPN@,$(LVPN),g" \ - -e "s/@FLAGS@/$(FLAGS)/g" \ - -e "s/@KEYSIZE@/$(KEYSIZE)/g" \ - -e "s/@PORT@/$(PORT)/g" \ - -e "s,@SUBNET@,$(SUBNET),g" \ - -e "s,@SUBNET6@,$(SUBNET6),g" \ - -e "s,@TEXTDOMAINDIR@,$(TEXTDOMAINDIR),g" \ - -e "s/@TEXTDOMAIN@/$(TEXTDOMAIN)/g" \ - '$<' > '$@' -$(TARGET)$(PREFIX)/bin/%: %.out - install -Dm755 '$<' '$@' - -# How to generate man pages %.1: %.markdown pandoc --standalone \ --output='$@' \ --to=man \ '$<' -# How to install man pages. We have to loop over the supported languages to -# create a rule for each language. -$(foreach lang,$(langs),$(eval \ -$$(TARGET)$$(PREFIX)/share/man/$(patsubst en,.,$(lang))/man1/%.1: doc/$(lang)/%.1; \ - install -Dm644 '$$<' '$$@' \ -)) - -# Gettext translation files -%.mo: %.po - msgfmt -o '$@' '$<' -$(TARGET)$(TEXTDOMAINDIR)/%/LC_MESSAGES/$(TEXTDOMAIN).mo: locale/%/LC_MESSAGES/$(TEXTDOMAIN).mo - install -Dm644 '$<' '$@' - -# Host configuration files -$(TARGET)$(HOSTS)/%: hosts/% - install -Dm644 '$<' '$@' - -# Boilerplate ################################################################## - -# You might have noticed that all of the targets that aren't actually files -# depend on 'PHONY'. This declares them as phony targets to make; it says -# "don't look at the filesystem for this on, it's a high-level rule, not a file" -# GNU Make does this by having a special target, '.PHONY' which you set to -# depend on all of your phony targets. I don't think that's very elegant. -# Because anything depending on a phony target becomes a phony target itself, -# I like to declare one phony target to make, 'PHONY', and have the rest of my -# phony targets depend on it. -PHONY: -.PHONY: PHONY diff --git a/README.md b/README.md index cf9a5b9..40a64c2 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,55 @@ -# LibreVPN +# Red Autónoma Pirata (RAP) -> http://librevpn.org.ar +> Un fork de LibreVPN, una red libre virtual. -LibreVPN es una red libre virtual. +Estos son los scripts de configuración y administración de la RAP +y aplican muchas de las acciones comunes sobre tinc. -Estos son los scripts de configuración y administración de la VPN y aplican -muchas de las acciones comunes sobre tinc. - -Para obtener ayuda, ejecutar `lvpn -h`. Cada comando tiene su -h tambien. +Para obtener ayuda, ejecutar `./rap -h`. Cada comando tiene su -h +también. ## Crear un nodo - lvpn init -h + rap init -h ## Dónde está la configuración de mi nodo? -En el directorio `nodos/`, esto permite mantener la configuración de +En el directorio `nodes/`, esto permite mantener la configuración de varios nodos en una sola máquina, intercambiarlos o copiarlos a otras máquinas. -Por cada cambio en la configuración tenés que usar `lvpn install` o -`lvpn push` (dependiendo si es un nodo local o remoto). +Por cada cambio en la configuración tenés que usar `rap install` o +`rap push` (dependiendo si es un nodo local o remoto). -## El nombre de mi nodo está lleno de guiones bajos y/o es feo +## El nombre de mi nodo está lleno de guiones bajos / no me gusta -Si no le diste un nombre a tu nodo, `lvpn` va a usar el nombre de tu +Si no le diste un nombre a tu nodo, `rap` va a usar el nombre de tu máquina. Si cuando instalaste tu distro dejaste que el instalador elija por su cuenta, vas a tener un nombre de nodo lleno de guiones bajos en lugar de los caracteres que tinc no acepta (por ejemplo, "-" se convierte en "\_") y además el modelo de tu computadora. -Si querés cambiar esto lo mejor es cambiando el hostname de tu +Si querés cambiar esto lo mejor es cambiando el "hostname" de tu computadora, siguiendo los pasos que indique tu distro. Sino, agregá un -nombre al comando `lvpn init un_nombre_lindo`. +nombre al comando `./rap init un_nombre_lindo`. -## Cómo me conecto con otro nodo? +## Cómo me conecto a la red? -Enviá tu archivo de nodo a la lista vpn@hackcoop.com.ar o dáselo a -alguien que ya esté dentro de la red. - -Luego, conectate a ese nodo con: - - lvpn connectto tu_nodo el_otro_nodo - lvpn install tu_nodo +Esta es una red de confianza, podés crear e intercambiar nodos con tu +grupx de afinidad ;) ## Lo puedo usar en Android? Sí! Instalá Tinc for Android desde [F-Droid](https://f-droid.org) y -crea un nodo con `lvpn init -A`. +crea un nodo con `./rap init -A`. ## Requisitos -tinc (1 o 1.1), avahi-daemon, bash. +`tinc`, `bash`. Además los scripts informan sobre otros comandos que pueden llegar a necesitar. -## Instalación en el sistema - - sudo make install PREFIX=/usr - - ## Desarrolladoras Ver _doc/CONVENCIONES.markdown_. - -## Wiki - -http://wiki.hackcoop.com.ar/Categoría:LibreVPN diff --git a/bin/armv6l-generate-ipv6-address b/bin/armv6l-generate-ipv6-address deleted file mode 100755 index d117631..0000000 Binary files a/bin/armv6l-generate-ipv6-address and /dev/null differ diff --git a/bin/avahi-publish-alias b/bin/avahi-publish-alias deleted file mode 100755 index 210dad5..0000000 --- a/bin/avahi-publish-alias +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python2 -# avahi-alias.py - -import avahi, dbus -from encodings.idna import ToASCII - -# Got these from /usr/include/avahi-common/defs.h -CLASS_IN = 0x01 -TYPE_CNAME = 0x05 - -TTL = 60 - -def publish_cname(cname): - bus = dbus.SystemBus() - server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), - avahi.DBUS_INTERFACE_SERVER) - group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), - avahi.DBUS_INTERFACE_ENTRY_GROUP) - - rdata = createRR(server.GetHostNameFqdn()) - cname = encode_dns(cname) - - group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), - cname, CLASS_IN, TYPE_CNAME, TTL, rdata) - group.Commit() - - -def encode_dns(name): - out = [] - for part in name.split('.'): - if len(part) == 0: continue - out.append(ToASCII(part)) - return '.'.join(out) - -def createRR(name): - out = [] - for part in name.split('.'): - if len(part) == 0: continue - out.append(chr(len(part))) - out.append(ToASCII(part)) - out.append('\0') - return ''.join(out) - -if __name__ == '__main__': - import time, sys, locale - for each in sys.argv[1:]: - name = unicode(each, locale.getpreferredencoding()) - publish_cname(name) - try: - # Just loop forever - while 1: time.sleep(60) - except KeyboardInterrupt: - print "Exiting" diff --git a/bin/cronjob b/bin/cronjob deleted file mode 100755 index 0128ad7..0000000 --- a/bin/cronjob +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -DIR="/home/fauno/projects/graph/" -GRAPHWEB="/srv/http/hack.lab/graph/current.png" - -pushd $DIR - -$DIR/bin/graph | \ - tee graph.dot | \ - circo -Tpng > $GRAPHWEB - -git commit -m "Actualización $(date +"%Y.%m.%d %Hhs")" graph.dot diff --git a/bin/graph b/bin/graph deleted file mode 100755 index da54cb3..0000000 --- a/bin/graph +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env ruby - -begin - require 'graphviz' -rescue - puts 'Este script necesita ruby-graphviz para funcionar' - exit 1 -end - -# Encontrar los nodos y sus uniones -re_nodes = /(\w+) to (\w+)/ - -# Encontrar las conexiones en la red -re_log = /([0-9\-: ]+).*Edges:(.*)End of edges./m - -# Pedirle a tincd que imprima toda la red -# Necesita iniciarse con los flags --logfile -U nobody -`sudo -u nobody killall -SIGUSR2 tincd` - -# Salir si no se pudo enviar la señal -exit 1 if $?.to_i > 0 - -# Leer el log buscando la lista de edges -log = IO::read('/var/log/tinc.lab.log').scan(re_log).to_s - -# Crear el grafico -g = GraphViz::new('lab', 'type' => 'graph') - -# Estilo -g.node[:fontname] = 'DejaVu Sans' -g.node[:fontsize] = '12' -g.node[:style] = 'filled' -g.node[:fillcolor] = '#b3e86a' - -# Buscar todas las uniones -log.scan(re_nodes) do |n| - -# Agregar el nodo - g.add_node(n[0]) - -# Agregar la conexión - g.add_edge(n[0], n[1]) - -end - -# Salida -#g.output(:png => '/tmp/graph.png') -g.output(:dot => nil) -#puts '// El grafico se guardo en /tmp/graph.png' diff --git a/bin/i686-generate-ipv6-address b/bin/i686-generate-ipv6-address deleted file mode 100755 index d677820..0000000 Binary files a/bin/i686-generate-ipv6-address and /dev/null differ diff --git a/bin/mips64-generate-ipv6-address b/bin/mips64-generate-ipv6-address deleted file mode 100755 index c5a20de..0000000 Binary files a/bin/mips64-generate-ipv6-address and /dev/null differ diff --git a/bin/natpmpc b/bin/natpmpc deleted file mode 100755 index 1af30bf..0000000 Binary files a/bin/natpmpc and /dev/null differ diff --git a/bin/tinc2dot b/bin/tinc2dot deleted file mode 100755 index 62fb69f..0000000 --- a/bin/tinc2dot +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash -# -# grafico tinc2dot version 0.2.1 -# Ernesto bazzano (c) Liberado bajo licencia AGPL -# -# Basado en los ejemplos de graphviz -# http://graphviz.org/content/psg -# http://graphviz.org/content/fsm -# -# Documentación: http://lab.hackcoop.com.ar/projects/librevpn/wiki/Tinc2dot -# -# requiere: graphviz -# optativo avahi-browse - -DOT="/tmp/lvpn.dot" - -DIA=$(date) -NODOS=$( cat $DOT | grep ">" ) -SERVICIOS=$(avahi-browse --all -t -p | sort -u | sed 's/\ /-/g' ) - -echo "digraph Lab { - graph [fontsize=30 labelloc=\"b\" splines=true overlap=false rankdir=\"LR\"]; - layout=circo; - size=\"10, 7.5\" ; - pad=\"0.5\"; - stylesheet=\"style.css\"; - mindist=0.05; - node [style = \"filled\", shape=\"circle\", margin=\".5,.5\", fixedsize=true, width=1.5, style=\"filled\"]; - edge [penwidth=2, arrowsize=\"1.5\", margin=\"1,1\", pencolor=\"1 1 1\"]; - - ${NODOS} - - label=\"\nLibreVPN - ${DIA} - http://anastasia.local/tinc2dot\" -" - -for NODO in $(echo $NODOS | sed 's/->/\n/g; s/;/\n/g; s/\ //g' | sort -u); do - - ENLACES=$(echo $NODOS | sed 's/;/\n/g' | grep $NODO | wc -l) - GRUESO=$(echo $ENLACES/2 | bc -l | sed 's/\..*//g') - COLOR=$(echo \(1/10*0$GRUESO\)+0.3 | bc -l) - SATURACION="0.$(echo $((-11+$ENLACES)) | sed 's/-//g')" - - #IP=$( ping -c 1 $NODO.local | grep from | sed 's/.*(\(.*\..*\..*\..*\)).*/\1/g') - if [ "$ENLACES" == "1" ]; then - ESTILO="style=\"dotted\"" - GRUESO=1 - else - ESTILO="" - fi - - echo "$NODO [ $ESTILO \" - fillcolor=\"$COLOR $SATURACION .85\", \ - penwidth=\"$(echo 14/10*$GRUESO+.8 | bc -l)\", \ - tooltip=\"$(echo $(echo $SERVICIOS | sed 's/ /\n/g' | grep $NODO))\", \ - URL=\"/vpn/?nodo=${NODO}\",\ - width=\"$(echo \(3/10*$GRUESO\)+1.2 | bc -l)\", \ - -label=<\ -\ -
${NODO}
>\ -]" - -done - -exit - image=\"vpn/img/${NODO}.png\",\ - #fillcolor=\"$(echo \(1/10*0$GRUESO\)+0.5 | bc -l) $(echo 1/8*$GRUESO | bc -l) $(echo $GRUESO/10+.7 | bc -l)\", \ - -Que hay de nuevo: - - -Mejoras graficas - -Solo una linea con doble flecha - -colores segun enlaces - -Mas enlaces - -color rojo - -mas saturacion - -Menos enlaces - -color azul - -mas saturacion - -enlaces promedio - -menos saturacion - -Avatares pequeños - -Listas diff --git a/bin/upnpc b/bin/upnpc deleted file mode 100755 index 729cb36..0000000 Binary files a/bin/upnpc and /dev/null differ diff --git a/bin/x86_64-generate-ipv6-address b/bin/x86_64-generate-ipv6-address deleted file mode 100755 index 9fbe54e..0000000 Binary files a/bin/x86_64-generate-ipv6-address and /dev/null differ diff --git a/contrib/cgp/lvpn.php b/contrib/cgp/lvpn.php deleted file mode 100644 index 97606f3..0000000 --- a/contrib/cgp/lvpn.php +++ /dev/null @@ -1,31 +0,0 @@ -data_sources = array('value'); -$obj->ds_names = array( - 'nodes' => 'Total', - 'unknown-peers' => 'Desconocidos' - ); -$obj->colors = array( - 'nodes' => 'ff0000', - 'unknown-peers' => '00ff00'); - -$obj->rrd_title = 'LibreVPN'; -$obj->rrd_vertical = 'Nodos'; -$obj->rrd_format = '%.0lf'; - -collectd_flush($obj->identifiers); -$obj->rrd_graph(); diff --git a/contrib/collectd/collectd-lvpn b/contrib/collectd/collectd-lvpn deleted file mode 100755 index 2013a12..0000000 --- a/contrib/collectd/collectd-lvpn +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# -# lvpn -# -# Copyright (c) 2011-2014 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# Agregar a collectd.conf -# -# -# Exec "daemon:daemon" "/usr/bin/collectd-lvpn" "lvpn" "63" -# - -NETWORK="${1:-lvpn}" -DOT="/tmp/${NETWORK}.dot" -INTERVAL="${2:-63}" - -if test ! -r "${DOT}" ; then - echo "No existe ${DOT} o no se puede leer, agregá 'GraphDumpFile = ${DOT}' en tinc.conf" - exit 1 -fi - -# tipo_datos tipo_valor valor -function putval() { - stdbuf --output=L \ - printf "PUTVAL \"%s/%s/%s-%s\" interval=%d N:%d\n" \ - "${COLLECTD_HOSTNAME:-${HOSTNAME}}" \ - "${NETWORK}" \ - "${1}" "${2}" \ - "${INTERVAL}" \ - "${3}" -} - -# El script duerme para siempre y cuando se despierta escupe comandos de -# collectd -while sleep ${INTERVAL}; do - # obtener la cantidad de nodos - nodes=$(grep label "${DOT}" | cut -d" " -f1 | tr -d "\t" | wc -l) - # y guardarlos - putval "gauge" "nodes" "${nodes}" - - unknown=$(lvpn unknown-peers | wc -l) - putval "gauge" "unknown-peers" "${unknown}" -done diff --git a/contrib/postfix/GATEWAYS.md b/contrib/postfix/GATEWAYS.md deleted file mode 100644 index af702f1..0000000 --- a/contrib/postfix/GATEWAYS.md +++ /dev/null @@ -1,4 +0,0 @@ -# Nodos que actuan de gateways hacia internet - -* naven.local -* agregá el tuyo diff --git a/contrib/postfix/README.md b/contrib/postfix/README.md deleted file mode 100644 index dd177d2..0000000 --- a/contrib/postfix/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Correo entre nodos de LibreVPN - -Copiá los archivos main.cf y transport en este directorio a -`/etc/postfix` o adaptalos a tu configuración actual. - -Lo importante es cambiar el valor de `myhostname` por el nombre de tu -nodo.local, lo que va a ser el @nodo.local de tu cuenta normal. Lo -mismo para transport. - -> Nota: buscá los valores para cambiar entre {{llaves}}, por ejemplo en -> transport y main.cf está la variable {{node}} que tenés que cambiar -> por el nombre de tu nodo - -Por ejemplo para fauno en naven.local, la dirección de correo va a ser -`fauno@naven.local`. - -Los correos recibidos se guardan en `~/Maildir` para cambiar esto, -adapta la variable `home_mailbox`. - -Además, para que postfix reconozca el archivo transport, hay que -ejecutar `postmap /etc/postfix/transport` cada vez que se lo modifica. - - -# Email between LibreVPN nodes - -Copy `main.cf` and `transport` inside `/etc/postfix` or adapt them to -your actual config. - -You need to change the `myhostname` variable to the name of your -node.local, which is going to be your @node.local address. Also set -your node in transport. - -> Note: Look for {{variable}} in both files, ie {{node}} - -For instance, fauno on naven.local would have `fauno@naven.local` as his -address. - -Email will be saved on `~/Maildir`. To change this, adapt the -`home_mailbox` var. - -Remember to run `postmap /etc/postfix/transport` for postfix to -recognize this file. - - -# Test - -## Artesanal - -``` - -$ echo -e "From: vos@nodo.local\nTo: fauno@yap.local\nSubject: hola\n\nhola!" | sendmail -t - -``` - -## Mail - -``` - -$ mail fauno@yap.local - -Subject: hola - -hola - -``` diff --git a/contrib/postfix/gateway/from_lvpn b/contrib/postfix/gateway/from_lvpn deleted file mode 100644 index 72cdc7e..0000000 --- a/contrib/postfix/gateway/from_lvpn +++ /dev/null @@ -1,3 +0,0 @@ -# convert person@node.local to person@node.librevpn.org.ar for delivery -# from the vpn to internet -/^(.*)@(.*)\.local$/ $1@$2.librevpn.org.ar diff --git a/contrib/postfix/gateway/main.cf b/contrib/postfix/gateway/main.cf deleted file mode 100644 index 463e817..0000000 --- a/contrib/postfix/gateway/main.cf +++ /dev/null @@ -1,6 +0,0 @@ -# add this to your postfix main.cf to convert between librevpn public -# and private addresses - -sender_canonical_maps = regexp:/etc/postfix/from_lvpn -recipient_canonical_maps = regexp:/etc/postfix/to_lvpn - diff --git a/contrib/postfix/gateway/to_lvpn b/contrib/postfix/gateway/to_lvpn deleted file mode 100644 index e77a54a..0000000 --- a/contrib/postfix/gateway/to_lvpn +++ /dev/null @@ -1,3 +0,0 @@ -# convert person@node.librevpn.org.ar address to person@node.local for -# delivery inside the vpn -/^(.*)@(.*)\.librevpn\.org\.ar$/ $1@$2.local diff --git a/contrib/postfix/main.cf b/contrib/postfix/main.cf deleted file mode 100644 index 3039f9d..0000000 --- a/contrib/postfix/main.cf +++ /dev/null @@ -1,672 +0,0 @@ -# Global Postfix configuration file. This file lists only a subset -# of all parameters. For the syntax, and for a complete parameter -# list, see the postconf(5) manual page (command: "man 5 postconf"). -# -# For common configuration examples, see BASIC_CONFIGURATION_README -# and STANDARD_CONFIGURATION_README. To find these documents, use -# the command "postconf html_directory readme_directory", or go to -# http://www.postfix.org/BASIC_CONFIGURATION_README.html etc. -# -# For best results, change no more than 2-3 parameters at a time, -# and test if Postfix still works after every change. - -# SOFT BOUNCE -# -# The soft_bounce parameter provides a limited safety net for -# testing. When soft_bounce is enabled, mail will remain queued that -# would otherwise bounce. This parameter disables locally-generated -# bounces, and prevents the SMTP server from rejecting mail permanently -# (by changing 5xx replies into 4xx replies). However, soft_bounce -# is no cure for address rewriting mistakes or mail routing mistakes. -# -soft_bounce = yes - -# LOCAL PATHNAME INFORMATION -# -# The queue_directory specifies the location of the Postfix queue. -# This is also the root directory of Postfix daemons that run chrooted. -# See the files in examples/chroot-setup for setting up Postfix chroot -# environments on different UNIX systems. -# -queue_directory = /var/spool/postfix - -# The command_directory parameter specifies the location of all -# postXXX commands. -# -command_directory = /usr/sbin - -# The daemon_directory parameter specifies the location of all Postfix -# daemon programs (i.e. programs listed in the master.cf file). This -# directory must be owned by root. -# -daemon_directory = /usr/lib/postfix - -# The data_directory parameter specifies the location of Postfix-writable -# data files (caches, random numbers). This directory must be owned -# by the mail_owner account (see below). -# -data_directory = /var/lib/postfix - -# QUEUE AND PROCESS OWNERSHIP -# -# The mail_owner parameter specifies the owner of the Postfix queue -# and of most Postfix daemon processes. Specify the name of a user -# account THAT DOES NOT SHARE ITS USER OR GROUP ID WITH OTHER ACCOUNTS -# AND THAT OWNS NO OTHER FILES OR PROCESSES ON THE SYSTEM. In -# particular, don't specify nobody or daemon. PLEASE USE A DEDICATED -# USER. -# -mail_owner = postfix - -# The default_privs parameter specifies the default rights used by -# the local delivery agent for delivery to external file or command. -# These rights are used in the absence of a recipient user context. -# DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER. -# -#default_privs = nobody - -# INTERNET HOST AND DOMAIN NAMES -# -# The myhostname parameter specifies the internet hostname of this -# mail system. The default is to use the fully-qualified domain name -# from gethostname(). $myhostname is used as a default value for many -# other configuration parameters. -# -#myhostname = host.domain.tld -#myhostname = virtual.domain.tld -myhostname = {{node}}.local - -# The mydomain parameter specifies the local internet domain name. -# The default is to use $myhostname minus the first component. -# $mydomain is used as a default value for many other configuration -# parameters. -# -mydomain = $myhostname - -# SENDING MAIL -# -# The myorigin parameter specifies the domain that locally-posted -# mail appears to come from. The default is to append $myhostname, -# which is fine for small sites. If you run a domain with multiple -# machines, you should (1) change this to $mydomain and (2) set up -# a domain-wide alias database that aliases each user to -# user@that.users.mailhost. -# -# For the sake of consistency between sender and recipient addresses, -# myorigin also specifies the default domain name that is appended -# to recipient addresses that have no @domain part. -# -#myorigin = $myhostname -myorigin = $mydomain - -# RECEIVING MAIL - -# The inet_interfaces parameter specifies the network interface -# addresses that this mail system receives mail on. By default, -# the software claims all active interfaces on the machine. The -# parameter also controls delivery of mail to user@[ip.address]. -# -# See also the proxy_interfaces parameter, for network addresses that -# are forwarded to us via a proxy or network address translator. -# -# Note: you need to stop/start Postfix when this parameter changes. -# -inet_interfaces = all -#inet_interfaces = $myhostname -#inet_interfaces = $myhostname, localhost - -# The proxy_interfaces parameter specifies the network interface -# addresses that this mail system receives mail on by way of a -# proxy or network address translation unit. This setting extends -# the address list specified with the inet_interfaces parameter. -# -# You must specify your proxy/NAT addresses when your system is a -# backup MX host for other domains, otherwise mail delivery loops -# will happen when the primary MX host is down. -# -#proxy_interfaces = -#proxy_interfaces = 1.2.3.4 - -# The mydestination parameter specifies the list of domains that this -# machine considers itself the final destination for. -# -# These domains are routed to the delivery agent specified with the -# local_transport parameter setting. By default, that is the UNIX -# compatible delivery agent that lookups all recipients in /etc/passwd -# and /etc/aliases or their equivalent. -# -# The default is $myhostname + localhost.$mydomain. On a mail domain -# gateway, you should also include $mydomain. -# -# Do not specify the names of virtual domains - those domains are -# specified elsewhere (see VIRTUAL_README). -# -# Do not specify the names of domains that this machine is backup MX -# host for. Specify those names via the relay_domains settings for -# the SMTP server, or use permit_mx_backup if you are lazy (see -# STANDARD_CONFIGURATION_README). -# -# The local machine is always the final destination for mail addressed -# to user@[the.net.work.address] of an interface that the mail system -# receives mail on (see the inet_interfaces parameter). -# -# Specify a list of host or domain names, /file/name or type:table -# patterns, separated by commas and/or whitespace. A /file/name -# pattern is replaced by its contents; a type:table is matched when -# a name matches a lookup key (the right-hand side is ignored). -# Continue long lines by starting the next line with whitespace. -# -# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS". -# -#mydestination = $myhostname, localhost.$mydomain, localhost -#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain -#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, -# mail.$mydomain, www.$mydomain, ftp.$mydomain - -mydestination = $myhostname, {{node}}.librevpn.org.ar - -# REJECTING MAIL FOR UNKNOWN LOCAL USERS -# -# The local_recipient_maps parameter specifies optional lookup tables -# with all names or addresses of users that are local with respect -# to $mydestination, $inet_interfaces or $proxy_interfaces. -# -# If this parameter is defined, then the SMTP server will reject -# mail for unknown local users. This parameter is defined by default. -# -# To turn off local recipient checking in the SMTP server, specify -# local_recipient_maps = (i.e. empty). -# -# The default setting assumes that you use the default Postfix local -# delivery agent for local delivery. You need to update the -# local_recipient_maps setting if: -# -# - You define $mydestination domain recipients in files other than -# /etc/passwd, /etc/aliases, or the $virtual_alias_maps files. -# For example, you define $mydestination domain recipients in -# the $virtual_mailbox_maps files. -# -# - You redefine the local delivery agent in master.cf. -# -# - You redefine the "local_transport" setting in main.cf. -# -# - You use the "luser_relay", "mailbox_transport", or "fallback_transport" -# feature of the Postfix local delivery agent (see local(8)). -# -# Details are described in the LOCAL_RECIPIENT_README file. -# -# Beware: if the Postfix SMTP server runs chrooted, you probably have -# to access the passwd file via the proxymap service, in order to -# overcome chroot restrictions. The alternative, having a copy of -# the system passwd file in the chroot jail is just not practical. -# -# The right-hand side of the lookup tables is conveniently ignored. -# In the left-hand side, specify a bare username, an @domain.tld -# wild-card, or specify a user@domain.tld address. -# -local_recipient_maps = unix:passwd.byname $alias_maps -#local_recipient_maps = proxy:unix:passwd.byname $alias_maps -#local_recipient_maps = - -# The unknown_local_recipient_reject_code specifies the SMTP server -# response code when a recipient domain matches $mydestination or -# ${proxy,inet}_interfaces, while $local_recipient_maps is non-empty -# and the recipient address or address local-part is not found. -# -# The default setting is 550 (reject mail) but it is safer to start -# with 450 (try again later) until you are certain that your -# local_recipient_maps settings are OK. -# -unknown_local_recipient_reject_code = 550 - -# TRUST AND RELAY CONTROL - -# The mynetworks parameter specifies the list of "trusted" SMTP -# clients that have more privileges than "strangers". -# -# In particular, "trusted" SMTP clients are allowed to relay mail -# through Postfix. See the smtpd_recipient_restrictions parameter -# in postconf(5). -# -# You can specify the list of "trusted" network addresses by hand -# or you can let Postfix do it for you (which is the default). -# -# By default (mynetworks_style = subnet), Postfix "trusts" SMTP -# clients in the same IP subnetworks as the local machine. -# On Linux, this does works correctly only with interfaces specified -# with the "ifconfig" command. -# -# Specify "mynetworks_style = class" when Postfix should "trust" SMTP -# clients in the same IP class A/B/C networks as the local machine. -# Don't do this with a dialup site - it would cause Postfix to "trust" -# your entire provider's network. Instead, specify an explicit -# mynetworks list by hand, as described below. -# -# Specify "mynetworks_style = host" when Postfix should "trust" -# only the local machine. -# -#mynetworks_style = class -#mynetworks_style = subnet -#mynetworks_style = host - -# Alternatively, you can specify the mynetworks list by hand, in -# which case Postfix ignores the mynetworks_style setting. -# -# Specify an explicit list of network/netmask patterns, where the -# mask specifies the number of bits in the network part of a host -# address. -# -# You can also specify the absolute pathname of a pattern file instead -# of listing the patterns here. Specify type:table for table-based lookups -# (the value on the table right-hand side is not used). -# -#mynetworks = 168.100.189.0/28, 127.0.0.0/8 -#mynetworks = $config_directory/mynetworks -#mynetworks = hash:/etc/postfix/network_table - -# The relay_domains parameter restricts what destinations this system will -# relay mail to. See the smtpd_recipient_restrictions description in -# postconf(5) for detailed information. -# -# By default, Postfix relays mail -# - from "trusted" clients (IP address matches $mynetworks) to any destination, -# - from "untrusted" clients to destinations that match $relay_domains or -# subdomains thereof, except addresses with sender-specified routing. -# The default relay_domains value is $mydestination. -# -# In addition to the above, the Postfix SMTP server by default accepts mail -# that Postfix is final destination for: -# - destinations that match $inet_interfaces or $proxy_interfaces, -# - destinations that match $mydestination -# - destinations that match $virtual_alias_domains, -# - destinations that match $virtual_mailbox_domains. -# These destinations do not need to be listed in $relay_domains. -# -# Specify a list of hosts or domains, /file/name patterns or type:name -# lookup tables, separated by commas and/or whitespace. Continue -# long lines by starting the next line with whitespace. A file name -# is replaced by its contents; a type:name table is matched when a -# (parent) domain appears as lookup key. -# -# NOTE: Postfix will not automatically forward mail for domains that -# list this system as their primary or backup MX host. See the -# permit_mx_backup restriction description in postconf(5). -# -#relay_domains = $mydestination - -# INTERNET OR INTRANET - -# The relayhost parameter specifies the default host to send mail to -# when no entry is matched in the optional transport(5) table. When -# no relayhost is given, mail is routed directly to the destination. -# -# On an intranet, specify the organizational domain name. If your -# internal DNS uses no MX records, specify the name of the intranet -# gateway host instead. -# -# In the case of SMTP, specify a domain, host, host:port, [host]:port, -# [address] or [address]:port; the form [host] turns off MX lookups. -# -# If you're connected via UUCP, see also the default_transport parameter. -# -#relayhost = $mydomain -#relayhost = [gateway.my.domain] -#relayhost = [mailserver.isp.tld] -#relayhost = uucphost -#relayhost = [an.ip.add.ress] - -# REJECTING UNKNOWN RELAY USERS -# -# The relay_recipient_maps parameter specifies optional lookup tables -# with all addresses in the domains that match $relay_domains. -# -# If this parameter is defined, then the SMTP server will reject -# mail for unknown relay users. This feature is off by default. -# -# The right-hand side of the lookup tables is conveniently ignored. -# In the left-hand side, specify an @domain.tld wild-card, or specify -# a user@domain.tld address. -# -#relay_recipient_maps = hash:/etc/postfix/relay_recipients - -# INPUT RATE CONTROL -# -# The in_flow_delay configuration parameter implements mail input -# flow control. This feature is turned on by default, although it -# still needs further development (it's disabled on SCO UNIX due -# to an SCO bug). -# -# A Postfix process will pause for $in_flow_delay seconds before -# accepting a new message, when the message arrival rate exceeds the -# message delivery rate. With the default 100 SMTP server process -# limit, this limits the mail inflow to 100 messages a second more -# than the number of messages delivered per second. -# -# Specify 0 to disable the feature. Valid delays are 0..10. -# -#in_flow_delay = 1s - -# ADDRESS REWRITING -# -# The ADDRESS_REWRITING_README document gives information about -# address masquerading or other forms of address rewriting including -# username->Firstname.Lastname mapping. - -# ADDRESS REDIRECTION (VIRTUAL DOMAIN) -# -# The VIRTUAL_README document gives information about the many forms -# of domain hosting that Postfix supports. - -# "USER HAS MOVED" BOUNCE MESSAGES -# -# See the discussion in the ADDRESS_REWRITING_README document. - -# TRANSPORT MAP -# -# See the discussion in the ADDRESS_REWRITING_README document. - -# ALIAS DATABASE -# -# The alias_maps parameter specifies the list of alias databases used -# by the local delivery agent. The default list is system dependent. -# -# On systems with NIS, the default is to search the local alias -# database, then the NIS alias database. See aliases(5) for syntax -# details. -# -# If you change the alias database, run "postalias /etc/aliases" (or -# wherever your system stores the mail alias file), or simply run -# "newaliases" to build the necessary DBM or DB file. -# -# It will take a minute or so before changes become visible. Use -# "postfix reload" to eliminate the delay. -# -#alias_maps = dbm:/etc/aliases -#alias_maps = hash:/etc/aliases -#alias_maps = hash:/etc/aliases, nis:mail.aliases -#alias_maps = netinfo:/aliases -alias_maps = hash:/etc/postfix/aliases - -# The alias_database parameter specifies the alias database(s) that -# are built with "newaliases" or "sendmail -bi". This is a separate -# configuration parameter, because alias_maps (see above) may specify -# tables that are not necessarily all under control by Postfix. -# -#alias_database = dbm:/etc/aliases -#alias_database = dbm:/etc/mail/aliases -#alias_database = hash:/etc/aliases -#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases -alias_database = $alias_maps - -# ADDRESS EXTENSIONS (e.g., user+foo) -# -# The recipient_delimiter parameter specifies the separator between -# user names and address extensions (user+foo). See canonical(5), -# local(8), relocated(5) and virtual(5) for the effects this has on -# aliases, canonical, virtual, relocated and .forward file lookups. -# Basically, the software tries user+foo and .forward+foo before -# trying user and .forward. -# -#recipient_delimiter = + - -# DELIVERY TO MAILBOX -# -# The home_mailbox parameter specifies the optional pathname of a -# mailbox file relative to a user's home directory. The default -# mailbox file is /var/spool/mail/user or /var/mail/user. Specify -# "Maildir/" for qmail-style delivery (the / is required). -# -#home_mailbox = Mailbox -# home_mailbox = Maildir/ - -# The mail_spool_directory parameter specifies the directory where -# UNIX-style mailboxes are kept. The default setting depends on the -# system type. -# -#mail_spool_directory = /var/mail -#mail_spool_directory = /var/spool/mail - -# The mailbox_command parameter specifies the optional external -# command to use instead of mailbox delivery. The command is run as -# the recipient with proper HOME, SHELL and LOGNAME environment settings. -# Exception: delivery for root is done as $default_user. -# -# Other environment variables of interest: USER (recipient username), -# EXTENSION (address extension), DOMAIN (domain part of address), -# and LOCAL (the address localpart). -# -# Unlike other Postfix configuration parameters, the mailbox_command -# parameter is not subjected to $parameter substitutions. This is to -# make it easier to specify shell syntax (see example below). -# -# Avoid shell meta characters because they will force Postfix to run -# an expensive shell process. Procmail alone is expensive enough. -# -# IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN -# ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER. -# -#mailbox_command = /some/where/procmail -#mailbox_command = /some/where/procmail -a "$EXTENSION" - -# The mailbox_transport specifies the optional transport in master.cf -# to use after processing aliases and .forward files. This parameter -# has precedence over the mailbox_command, fallback_transport and -# luser_relay parameters. -# -# Specify a string of the form transport:nexthop, where transport is -# the name of a mail delivery transport defined in master.cf. The -# :nexthop part is optional. For more details see the sample transport -# configuration file. -# -# NOTE: if you use this feature for accounts not in the UNIX password -# file, then you must update the "local_recipient_maps" setting in -# the main.cf file, otherwise the SMTP server will reject mail for -# non-UNIX accounts with "User unknown in local recipient table". -# -# Cyrus IMAP over LMTP. Specify ``lmtpunix cmd="lmtpd" -# listen="/var/imap/socket/lmtp" prefork=0'' in cyrus.conf. -#mailbox_transport = lmtp:unix:/var/imap/socket/lmtp -# -# Cyrus IMAP via command line. Uncomment the "cyrus...pipe" and -# subsequent line in master.cf. -#mailbox_transport = cyrus - -# The fallback_transport specifies the optional transport in master.cf -# to use for recipients that are not found in the UNIX passwd database. -# This parameter has precedence over the luser_relay parameter. -# -# Specify a string of the form transport:nexthop, where transport is -# the name of a mail delivery transport defined in master.cf. The -# :nexthop part is optional. For more details see the sample transport -# configuration file. -# -# NOTE: if you use this feature for accounts not in the UNIX password -# file, then you must update the "local_recipient_maps" setting in -# the main.cf file, otherwise the SMTP server will reject mail for -# non-UNIX accounts with "User unknown in local recipient table". -# -#fallback_transport = lmtp:unix:/file/name -#fallback_transport = cyrus -#fallback_transport = - -# The luser_relay parameter specifies an optional destination address -# for unknown recipients. By default, mail for unknown@$mydestination, -# unknown@[$inet_interfaces] or unknown@[$proxy_interfaces] is returned -# as undeliverable. -# -# The following expansions are done on luser_relay: $user (recipient -# username), $shell (recipient shell), $home (recipient home directory), -# $recipient (full recipient address), $extension (recipient address -# extension), $domain (recipient domain), $local (entire recipient -# localpart), $recipient_delimiter. Specify ${name?value} or -# ${name:value} to expand value only when $name does (does not) exist. -# -# luser_relay works only for the default Postfix local delivery agent. -# -# NOTE: if you use this feature for accounts not in the UNIX password -# file, then you must specify "local_recipient_maps =" (i.e. empty) in -# the main.cf file, otherwise the SMTP server will reject mail for -# non-UNIX accounts with "User unknown in local recipient table". -# -#luser_relay = $user@other.host -#luser_relay = $local@other.host -#luser_relay = admin+$local - -# JUNK MAIL CONTROLS -# -# The controls listed here are only a very small subset. The file -# SMTPD_ACCESS_README provides an overview. - -# The header_checks parameter specifies an optional table with patterns -# that each logical message header is matched against, including -# headers that span multiple physical lines. -# -# By default, these patterns also apply to MIME headers and to the -# headers of attached messages. With older Postfix versions, MIME and -# attached message headers were treated as body text. -# -# For details, see "man header_checks". -# -#header_checks = regexp:/etc/postfix/header_checks - -# FAST ETRN SERVICE -# -# Postfix maintains per-destination logfiles with information about -# deferred mail, so that mail can be flushed quickly with the SMTP -# "ETRN domain.tld" command, or by executing "sendmail -qRdomain.tld". -# See the ETRN_README document for a detailed description. -# -# The fast_flush_domains parameter controls what destinations are -# eligible for this service. By default, they are all domains that -# this server is willing to relay mail to. -# -#fast_flush_domains = $relay_domains - -# SHOW SOFTWARE VERSION OR NOT -# -# The smtpd_banner parameter specifies the text that follows the 220 -# code in the SMTP server's greeting banner. Some people like to see -# the mail version advertised. By default, Postfix shows no version. -# -# You MUST specify $myhostname at the start of the text. That is an -# RFC requirement. Postfix itself does not care. -# -#smtpd_banner = $myhostname ESMTP $mail_name -#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) - -# PARALLEL DELIVERY TO THE SAME DESTINATION -# -# How many parallel deliveries to the same user or domain? With local -# delivery, it does not make sense to do massively parallel delivery -# to the same user, because mailbox updates must happen sequentially, -# and expensive pipelines in .forward files can cause disasters when -# too many are run at the same time. With SMTP deliveries, 10 -# simultaneous connections to the same domain could be sufficient to -# raise eyebrows. -# -# Each message delivery transport has its XXX_destination_concurrency_limit -# parameter. The default is $default_destination_concurrency_limit for -# most delivery transports. For the local delivery agent the default is 2. - -#local_destination_concurrency_limit = 2 -#default_destination_concurrency_limit = 20 - -# DEBUGGING CONTROL -# -# The debug_peer_level parameter specifies the increment in verbose -# logging level when an SMTP client or server host name or address -# matches a pattern in the debug_peer_list parameter. -# -debug_peer_level = 2 - -# The debug_peer_list parameter specifies an optional list of domain -# or network patterns, /file/name patterns or type:name tables. When -# an SMTP client or server host name or address matches a pattern, -# increase the verbose logging level by the amount specified in the -# debug_peer_level parameter. -# -#debug_peer_list = 127.0.0.1 -#debug_peer_list = some.domain - -# The debugger_command specifies the external command that is executed -# when a Postfix daemon program is run with the -D option. -# -# Use "command .. & sleep 5" so that the debugger can attach before -# the process marches on. If you use an X-based debugger, be sure to -# set up your XAUTHORITY environment variable before starting Postfix. -# -debugger_command = - PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin - ddd $daemon_directory/$process_name $process_id & sleep 5 - -# If you can't use X, use this to capture the call stack when a -# daemon crashes. The result is in a file in the configuration -# directory, and is named after the process name and the process ID. -# -# debugger_command = -# PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont; -# echo where) | gdb $daemon_directory/$process_name $process_id 2>&1 -# >$config_directory/$process_name.$process_id.log & sleep 5 -# -# Another possibility is to run gdb under a detached screen session. -# To attach to the screen sesssion, su root and run "screen -r -# " where uniquely matches one of the detached -# sessions (from "screen -list"). -# -# debugger_command = -# PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH; screen -# -dmS $process_name gdb $daemon_directory/$process_name -# $process_id & sleep 1 - -# INSTALL-TIME CONFIGURATION INFORMATION -# -# The following parameters are used when installing a new Postfix version. -# -# sendmail_path: The full pathname of the Postfix sendmail command. -# This is the Sendmail-compatible mail posting interface. -# -sendmail_path = /usr/bin/sendmail - -# newaliases_path: The full pathname of the Postfix newaliases command. -# This is the Sendmail-compatible command to build alias databases. -# -newaliases_path = /usr/bin/newaliases - -# mailq_path: The full pathname of the Postfix mailq command. This -# is the Sendmail-compatible mail queue listing command. -# -mailq_path = /usr/bin/mailq - -# setgid_group: The group for mail submission and queue management -# commands. This must be a group name with a numerical group ID that -# is not shared with other accounts, not even with the Postfix account. -# -setgid_group = postdrop - -# html_directory: The location of the Postfix HTML documentation. -# -html_directory = no - -# manpage_directory: The location of the Postfix on-line manual pages. -# -manpage_directory = /usr/share/man - -# sample_directory: The location of the Postfix sample configuration files. -# This parameter is obsolete as of Postfix 2.1. -# -sample_directory = /etc/postfix/sample - -# readme_directory: The location of the Postfix README files. -# -readme_directory = /usr/share/doc/postfix -#inet_protocols = ipv4 - -# librevpn: These options allow postfix to solve .local addresses -smtp_host_lookup = native -ignore_mx_lookup_error = yes -# this is deprecated in 2.11+ -disable_dns_lookups = yes -# this is only available on 2.11+ -smtp_dns_support_level = enabled - -transport_maps = hash:/etc/postfix/transport diff --git a/contrib/postfix/transport b/contrib/postfix/transport deleted file mode 100644 index 990c494..0000000 --- a/contrib/postfix/transport +++ /dev/null @@ -1,302 +0,0 @@ -# TRANSPORT(5) TRANSPORT(5) -# -# NAME -# transport - Postfix transport table format -# -# SYNOPSIS -# postmap /etc/postfix/transport -# -# postmap -q "string" /etc/postfix/transport -# -# postmap -q - /etc/postfix/transport . diff --git a/doc/en/CONVENCIONES.markdown b/doc/en/CONVENCIONES.markdown deleted file mode 100644 index 4fdea7f..0000000 --- a/doc/en/CONVENCIONES.markdown +++ /dev/null @@ -1,189 +0,0 @@ -% CONVENCIONES(2) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Notas para desarrolladores de lvpn :) - - -# SYNOPSIS - -lib/ -: comandos - -lib/skel/ -: archivos base para tinc - -doc/ -: documentación - -bin/ -: programas de ayuda que no son especificamente de lvpn - -etc/ -: código fuente extra - -hosts/ -: archivos de nodos - -nodos/ -: nodos propios - -locale/ -: traducciones - - -# DESCRIPTION - -## Dónde van los scripts - -El script _lvpn_ autodescubre los comandos siguiendo la convención -_lib/lvpn-tuscript_. Además setea algunas variables de entorno que los -scripts pueden usar para saber en qué red están trabajando. - -Los scripts pueden estar en cualquier lenguaje de programación mientras -sepan leer esas variables de entorno. - - -## Variables de entorno - -Estas son las variables de entorno que _lvpn_ exporta para el resto de los -comandos. - -TINC -: Ubicación del directorio del nodo, por defecto _/etc/tinc/lvpn_. - -NETWORK -: Nombre de la red, por defecto el último directorio de _TINC_. - -LVPN -: Path completo de _lvpn_. - -LVPN\_DIR -: Path completo del directorio de trabajo, por defecto el directorio - base de _LVPN_ - -LVPN\_LIBDIR -: Path completo del directorio de comandos. - -LVPN\_HOSTS -: Path completo del directorio de hosts. - -LVPN\_BEADLE -: Path completo del directorio de llaves anunciables nuevas de desconocidos. - -KEYSIZE -: Tamaño por defecto de las llaves. - -LVPN\_SUBNET -: El rango de IPv4 - -LVPN\_SUBNET6 -: El rango de IPv6 - -TINCD\_FLAGS -: Flags para el demonio _tincd_. - -PORT -: Puerto por defecto - -sudo -: Usar esta variable delante de cualquier comando que deba correr con - privilegios de root, ej: _${sudo} rsync_. Requiere _"root=true"_ al - principio del script. - - -## Dónde va la documentación - -La documentación lleva el nombre completo del script: -_doc/idioma/lvpn-tuscript.markdown_. La función _help()_ en _lib/msg_ -lo lleva como argumento para mostrar la ayuda. - -Además, toma la variable de entorno _PAGER_ para paginar la salida, por -defecto se usa _less_. - - -## Flags y parámetros - -_lvpn comando_ -flags nodolocal parametros extra - -Seguido de _lvpn_ viene el comando, al que se le pasan en orden las flags (con -sus opciones). El primer parámetro siempre tiene que ser el nodo local en el -que se realiza la acción. Luego vienen los parámetros extra (nombres de otros -nodos, por ejemplo). - -## Funciones comunes - -En el archivo _lib/common_ se almacenan las funciones de uso común entre todos -los comandos. Se la puede incluir en un script añadiendo la línea - - . "${LVPN_LIBDIR}"/common - -al principio del script. - -Nota: Agregar _root=true_ antes de common para poder correr funciones de -root. - -### Variables - -* self: nombre del script. Usado para obtener el nombre del script. Ejemplo: - _help $self_ llama a la ayuda del script actual. - -### Funciones - -* _add_to_file()_: Agrega una línea al final de un archivo. Uso: _add_to_file - archivo "Texto a agregar"_ - -* _requires()_: Indica que el script necesita que un programa se encuentre en el - PATH. Se recomienda cuando el script llama a un programa que puede no - encontrarse en una instalación estándar. Uso: _requires avahi-publish rsync_ - -* _get\_node\_dir()_: Encuentra el directorio de un nodo pasándole el nombre del - nodo como argumento. _node_dir="$(get_node_dir ${node})"_ - -* _get\_node\_file()_: Encuentra el archivo de host de un nodo dentro del - directorio del nodo. _node_file="$(get_node_file ${node})"_ - -* _get\_node\_name()_: Limpia el nombre del nodo de caracteres inválidos - -* _get\_host\_file()_: Obtiene el archivo del nodo en $LVPN\_HOSTS - -* _find\_init\_system()_: Encuentra el tipo de inicio de tinc. Ver - _lib/lvpn-install_. - -* _get\_id()_: Obtiene nombre y mail del responsable del nodo usando git o - usuario@hostname. - -* _get\_ipv4()_: Genera una dirección IPv4 a partir de LVPN_SUBNET. - -* _get\_ipv6()_: Genera una dirección IPv6 a partir de LVPN_SUBNET6. - - -## Mensajes - -En _lib/msg_ se encuentran las funciones básicas para imprimir mensajes en la -salida de errores estándar. Esto es para que no sean procesados como la salida -estándar de los scripts, que se reservan para poder enviar la información a una -tubería. - -No es necesario incluirla ya que se llama desde _lib/common_. - -Todas las funciones tienen soporte para traducciones utilizando gettext, por lo -que los mensajes que se completan con variables deben seguir el formato de -_printf_: _%s_ para reemplazar por cadenas, _%d_ para números enteros, etc. - -Por ejemplo: _msg "Procesando el nodo %s..." "$node"_ - -* _msg()_: Información -* _error()_: Mensaje de error -* _warning()_: Alerta -* _fatal\_error()_: Imprime un mensaje de error y termina el programa - inmediatamente -* _tip()_: Recomendaciones, por ejemplo, cual comando correr a continuación. - - -## Los comandos - -La mayoria de los comandos solo configuran, luego hay que enviar los cambios a -directorio de instalación con el comando _lvpn init install_. diff --git a/doc/en/lvpn-add-host.1 b/doc/en/lvpn-add-host.1 deleted file mode 100644 index 14c468c..0000000 --- a/doc/en/lvpn-add-host.1 +++ /dev/null @@ -1,43 +0,0 @@ -.TH LVPN\-ADD\-HOST 1 "2013" "Manual de LibreVPN" "LibreVPN" -.SH NAME -.PP -lvpn add\-host adds a node to known nodes -.SH SYNOPSIS -.PP -lvpn add\-host [\-hfu] local\-node remote\-node [remote\-node2 ...] -.SH DESCRIPTION -.PP -For a node to connect to another, the latter must "recognize" it by -adding it\[aq]s host file. -.PP -For instance, if the \f[I]ponape\f[] node has a "ConnectTo = medieval" -line in it\[aq]s \f[I]tinc.conf\f[] file, for \f[I]medieval\f[] to -recognize it, it must add \f[I]ponape\f[]\[aq]s host file in it\[aq]s -node dir. -.PP -The \f[C]\-u\f[] flag updates the already recognized nodes. -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-u -Update host files -.RS -.RE -.TP -.B \-f -Replace if already exists -.RS -.RE -.SH EXAMPLES -.SS Add haiti and noanoa to ponape -.PP -\f[I]lvpn add\-host\f[] ponape haiti noanoa -.SS Update nodes -.PP -\f[I]lvpn add\-host\f[] \-u ponape -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-add-host.markdown b/doc/en/lvpn-add-host.markdown deleted file mode 100644 index 76c0199..0000000 --- a/doc/en/lvpn-add-host.markdown +++ /dev/null @@ -1,48 +0,0 @@ -% LVPN-ADD-HOST(1) Manual de LibreVPN | LibreVPN -% fauno -% 2013 - -# NAME - -lvpn add-host adds a node to known nodes - - -# SYNOPSIS - -lvpn add-host [-hfu] local-node remote-node [remote-node2 ...] - - -# DESCRIPTION - -For a node to connect to another, the latter must "recognize" it by -adding it's host file. - -For instance, if the _ponape_ node has a "ConnectTo = medieval" line in -it's _tinc.conf_ file, for _medieval_ to recognize it, it must add -_ponape_'s host file in it's node dir. - -The `-u` flag updates the already recognized nodes. - - -# OPTIONS - --h -: This message - --u -: Update host files - --f -: Replace if already exists - - -# EXAMPLES - -## Add haiti and noanoa to ponape - -_lvpn add-host_ ponape haiti noanoa - - -## Update nodes - -_lvpn add-host_ -u ponape diff --git a/doc/en/lvpn-add-subnet.1 b/doc/en/lvpn-add-subnet.1 deleted file mode 100644 index fb2e027..0000000 --- a/doc/en/lvpn-add-subnet.1 +++ /dev/null @@ -1,51 +0,0 @@ -.TH LVPN\-ADD\-SUBNET 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -\f[I]lvpn add\-subnet\f[] adds an IP address to a node -.SH SYNOPSIS -.PP -\f[I]lvpn add\-subnet\f[] [\-hvg] \-[4|6][local\-node] [address] -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-v -Verbose mode, informs everything -.RS -.RE -.TP -.B \-g -Generate the IP address instead of waiting for a manually assigned one. -This is the default behavior if nothing is specified. -.RS -.RE -.TP -.B \-4 -Generate an IPv4 address -.RS -.RE -.TP -.B \-6 -Generate an IPv6 address. -This is the default behavior. -.RS -.RE -.SH DESCRIPTION -.PP -Adds or generates an IP address to the specified host file. -It can be either an IPv4 (with \f[I]\-4\f[]) or an IPv6 (with -\f[I]\-6\f[]) address. -.PP -Useful for migrating to IPv6. -.PP -This command guesses the node\[aq]s name from the $HOSTNAME if none is -specified. -.SH EXAMPLES -.SS Generate and add an IPv6 to the local node -.PP -\f[I]lvpn add\-subnet\f[] \-v -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-add-subnet.markdown b/doc/en/lvpn-add-subnet.markdown deleted file mode 100644 index a048505..0000000 --- a/doc/en/lvpn-add-subnet.markdown +++ /dev/null @@ -1,49 +0,0 @@ -% LVPN-ADD-SUBNET(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -_lvpn add-subnet_ adds an IP address to a node - - -# SYNOPSIS - -_lvpn add-subnet_ [-hvg] -[4|6] [local-node] [address] - - -# OPTIONS - --h -: This message - --v -: Verbose mode, informs everything - --g -: Generate the IP address instead of waiting for a manually assigned - one. This is the default behavior if nothing is specified. - --4 -: Generate an IPv4 address - --6 -: Generate an IPv6 address. This is the default behavior. - - -# DESCRIPTION - -Adds or generates an IP address to the specified host file. It can be -either an IPv4 (with _-4_) or an IPv6 (with _-6_) address. - -Useful for migrating to IPv6. - -This command guesses the node's name from the $HOSTNAME if none is -specified. - - -# EXAMPLES - -## Generate and add an IPv6 to the local node - -_lvpn add-subnet_ -v diff --git a/doc/en/lvpn-announce.1 b/doc/en/lvpn-announce.1 deleted file mode 100644 index b4d7296..0000000 --- a/doc/en/lvpn-announce.1 +++ /dev/null @@ -1,59 +0,0 @@ -.TH "LVPN\-ANNOUNCE" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -\f[I]lvpn announce\f[] announce a key on the LAN using Avahi. -.SH SYNOPSIS -.PP -\f[I]lvpn announce\f[] [\-h] [\-sp] local\-node -.SH DESCRIPTION -.PP -Facilitates key exchange on a local network by announcing the local host -file on mDNS. -Use it with \f[I]lvpn discover\f[]. -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-s -Stop announcing. -With \f[I]\-p\f[], removes the \f[I]lvpn.service\f[] file, otherwise it -stops \f[I]avahi\-publish\f[]. -.RS -.RE -.TP -.B \-p -Announce permanently (requires root). -Installs \f[I]lvpn.service\f[] so that \f[I]avahi\-daemon\f[] announces -the host key every time the service is started. -.RS -.RE -.SH EXAMPLES -.SS Announce a node -.PP -lvpn announce noanoa -.SS Announce a node permanently -.PP -lvpn announce \-p noanoa -.PP -Installs the \f[I]noanoa\f[] host file on -/etc/avahi/services/lvpn.service. -.SS Announce keys on beadle (?) -.PP -lvpn announce \-b amigo -.SS Stop announcement -.PP -lvpn announce \-s -.PP -Stops \f[I]avahi\-publish\f[] on this session. -.SS Stop announcement permanently -.PP -lvpn announce \-sp -.SH SEE ALSO -.PP -\f[I]avahi.service(5)\f[], \f[I]avahi\-publish(1)\f[], -\f[I]lvpn\-discover(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-announce.markdown b/doc/en/lvpn-announce.markdown deleted file mode 100644 index 63548e5..0000000 --- a/doc/en/lvpn-announce.markdown +++ /dev/null @@ -1,68 +0,0 @@ -% LVPN-ANNOUNCE(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -_lvpn announce_ announce a key on the LAN using Avahi. - - -# SYNOPSIS - -_lvpn announce_ [-h] [-sp] local-node - - -# DESCRIPTION - -Facilitates key exchange on a local network by announcing the local host -file on mDNS. Use it with _lvpn discover_. - - -# OPTIONS - --h -: This message - --s -: Stop announcing. With _-p_, removes the _lvpn.service_ file, - otherwise it stops _avahi-publish_. - --p -: Announce permanently (requires root). Installs _lvpn.service_ so - that _avahi-daemon_ announces the host key every time the service - is started. - -# EXAMPLES - -## Announce a node - - lvpn announce noanoa - - -## Announce a node permanently - - lvpn announce -p noanoa - -Installs the _noanoa_ host file on /etc/avahi/services/lvpn.service. - - -## Announce keys on beadle (?) - - lvpn announce -b amigo - - -## Stop announcement - - lvpn announce -s - -Stops _avahi-publish_ on this session. - - -## Stop announcement permanently - - lvpn announce -sp - - -# SEE ALSO - -_avahi.service(5)_, _avahi-publish(1)_, _lvpn-discover(1)_ diff --git a/doc/en/lvpn-avahi-anuncio.1 b/doc/en/lvpn-avahi-anuncio.1 deleted file mode 100644 index cff5eb0..0000000 --- a/doc/en/lvpn-avahi-anuncio.1 +++ /dev/null @@ -1,14 +0,0 @@ -.TH "LVPN\-AVAHI\-ANUNCIO.MARKDOWN" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH lvpn\-announce -.PP -Anunciar la llave en la red local usando avahi. -.PP -\-h Este mensaje -.PP -Uso: -.IP \[bu] 2 -Anunciar un nodo -.PP -lvpn avahi\-anuncio nodo [tcp|udp] puerto archivo -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-avahi-anuncio.markdown b/doc/en/lvpn-avahi-anuncio.markdown deleted file mode 100644 index 7f5ff1a..0000000 --- a/doc/en/lvpn-avahi-anuncio.markdown +++ /dev/null @@ -1,17 +0,0 @@ -% LVPN-AVAHI-ANUNCIO.MARKDOWN(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# lvpn-announce - -Anunciar la llave en la red local usando avahi. - - -h Este mensaje - -Uso: - -* Anunciar un nodo - - lvpn avahi-anuncio nodo [tcp|udp] puerto archivo - - diff --git a/doc/en/lvpn-connectto.1 b/doc/en/lvpn-connectto.1 deleted file mode 100644 index e32f3ee..0000000 --- a/doc/en/lvpn-connectto.1 +++ /dev/null @@ -1,37 +0,0 @@ -.TH LVPN\-CONNECTTO 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Connect to other nodes -.SH SYNOPSIS -.PP -\f[I]lvpn connectto\f[] local\-node [nodo\-remoto nodo\-remoto2...] -.SH DESCRIPTION -.PP -Configures the local node to connecto to the specified remote nodes. -To join a tinc network, you have to copy the host file for the remote -node on your hosts/ directory and add the \f[I]ConnectTo = -remote\-node\f[] line on your \f[I]tinc.conf\f[]. -This script automatizes this step. -.PP -The remote nodes must run the \f[I]lvpn add\-host\f[] command for the -local node. -.SH EXAMPLES -.SS List nodes to which noanoa connects to -.IP -.nf -\f[C] -lvpn\ connectto\ noanoa -\f[] -.fi -.SS Add ponape and medieval to noanoa -.IP -.nf -\f[C] -lvpn\ connectto\ noanoa\ ponape\ medieval -\f[] -.fi -.SH SEE ALSO -.PP -\f[I]tinc.conf(5)\f[], \f[I]lvpn\-add\-host(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-connectto.markdown b/doc/en/lvpn-connectto.markdown deleted file mode 100644 index 382b910..0000000 --- a/doc/en/lvpn-connectto.markdown +++ /dev/null @@ -1,39 +0,0 @@ -% LVPN-CONNECTTO(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Connect to other nodes - - -# SYNOPSIS - -_lvpn connectto_ local-node [nodo-remoto nodo-remoto2...] - - -# DESCRIPTION - -Configures the local node to connecto to the specified remote nodes. To -join a tinc network, you have to copy the host file for the remote node -on your hosts/ directory and add the _ConnectTo = remote-node_ line on -your _tinc.conf_. This script automatizes this step. - -The remote nodes must run the _lvpn add-host_ command for the local -node. - - -# EXAMPLES - -## List nodes to which noanoa connects to - - lvpn connectto noanoa - -## Add ponape and medieval to noanoa - - lvpn connectto noanoa ponape medieval - - -# SEE ALSO - -_tinc.conf(5)_, _lvpn-add-host(1)_ diff --git a/doc/en/lvpn-d3.1 b/doc/en/lvpn-d3.1 deleted file mode 100644 index 9b5585e..0000000 --- a/doc/en/lvpn-d3.1 +++ /dev/null @@ -1,15 +0,0 @@ -.TH LVPN\-D3 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Export links and nodes to a d3js force graph. -.SH SYNOPSIS -.PP -lvpn d3 > data.json -.SH DESCRIPTION -.PP -Extracts known nodes and links from the tincd log and prints them in -JSON format for D3. -.PP -Tincd must be started with \f[I]\-\-logfile\f[]. -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-d3.markdown b/doc/en/lvpn-d3.markdown deleted file mode 100644 index e76067a..0000000 --- a/doc/en/lvpn-d3.markdown +++ /dev/null @@ -1,20 +0,0 @@ -% LVPN-D3(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Export links and nodes to a d3js force graph. - - -# SYNOPSIS - -lvpn d3 > data.json - - -# DESCRIPTION - -Extracts known nodes and links from the tincd log and prints them in -JSON format for D3. - -Tincd must be started with *--logfile*. diff --git a/doc/en/lvpn-discover.1 b/doc/en/lvpn-discover.1 deleted file mode 100644 index 2eb9c60..0000000 --- a/doc/en/lvpn-discover.1 +++ /dev/null @@ -1,85 +0,0 @@ -.TH "LVPN\-DISCOVER" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Discover nodes in the local network using Avahi and optionally adds -them. -.SH SYNOPSIS -.PP -\f[I]lvpn discover\f[] [\-h] [\-i if|\-A] [\-a|\-c] [\-f] [\-b] -local\-node [nodo\-remoto] -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-i -Filter by network interface -.RS -.RE -.TP -.B \-a -Add nodes, recognize them. -Downloads the host file and adds it using \f[I]lvpn add\-host\f[]. -.RS -.RE -.TP -.B \-c -Connect to the nodes (implies \-a). -After running \f[I]\-a\f[], connect to the nodes using \f[I]lvpn -connectto\f[]. -.RS -.RE -.TP -.B \-f -Trust keys on the network rather than local copies. -When you already have the host file, this copy is used. -With this option the host is always downloaded. -.RS -.RE -.TP -.B \-A -Use any interface (VPN included, don\[aq]t use with \f[I]\-c\f[]!) -.RS -.RE -.TP -.B \-b -Uses beadle (?) -.RS -.RE -.SH DESCRIPTION -.PP -Facilitates host file exchange in a local network. -.PP -Used with \f[I]lvpn announce\f[] to discover nodes on the local network. -.PP -For security, if the host file already exists, this file is used. -With \f[I]\-f\f[] host file is always downloaded. -.SH EXAMPLES -.SS Lists nodes discovered on the LAN -.PP -lvpn discover -.SS List all discovered nodes, even in the VPN -.PP -lvpn discover \-A -.SS Add discovered nodes to ponape -.PP -lvpn discover \-a ponape -.SS Ponape connects to all nodes -.PP -lvpn discover \-c ponape -.SS Trust the local network for all host files -.PP -lvpn discover \-f \-c ponape -.SS Only search on one interface -.PP -lvpn discover \-i eth0 \-c ponape -.SS Connect to all announced nodes (warning!) -.PP -lvpn discover \-c ponape \-A -.SS Connects using beadle -.PP -lvpn discover \-b ponape nuevo\-nodo -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-discover.markdown b/doc/en/lvpn-discover.markdown deleted file mode 100644 index 73b0846..0000000 --- a/doc/en/lvpn-discover.markdown +++ /dev/null @@ -1,86 +0,0 @@ -% LVPN-DISCOVER(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Discover nodes in the local network using Avahi and optionally adds -them. - - -# SYNOPSIS - -_lvpn discover_ [-h] [-i if|-A] [-a|-c] [-f] [-b] local-node [nodo-remoto] - - -# OPTIONS - --h -: This message - --i -: Filter by network interface - --a -: Add nodes, recognize them. Downloads the host file and adds it - using _lvpn add-host_. - --c -: Connect to the nodes (implies -a). After running _-a_, connect to - the nodes using _lvpn connectto_. - --f -: Trust keys on the network rather than local copies. When you - already have the host file, this copy is used. With this option - the host is always downloaded. - --A -: Use any interface (VPN included, don't use with _-c_!) - --b -: Uses beadle (?) - - -# DESCRIPTION - -Facilitates host file exchange in a local network. - -Used with _lvpn announce_ to discover nodes on the local network. - -For security, if the host file already exists, this file is used. -With _-f_ host file is always downloaded. - - -# EXAMPLES - -## Lists nodes discovered on the LAN - -lvpn discover - -## List all discovered nodes, even in the VPN - - lvpn discover -A - -## Add discovered nodes to ponape - - lvpn discover -a ponape - -## Ponape connects to all nodes - - lvpn discover -c ponape - -## Trust the local network for all host files - - lvpn discover -f -c ponape - -## Only search on one interface - - lvpn discover -i eth0 -c ponape - -## Connect to all announced nodes (warning!) - - lvpn discover -c ponape -A - -## Connects using beadle - - lvpn discover -b ponape nuevo-nodo diff --git a/doc/en/lvpn-init.1 b/doc/en/lvpn-init.1 deleted file mode 100644 index 96fcede..0000000 --- a/doc/en/lvpn-init.1 +++ /dev/null @@ -1,120 +0,0 @@ -.TH "LVPN\-INIT" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Creates a new node -.SH SYNOPSIS -.PP -lvpn init [\-A] [\-f] [\-q] [\-p 655] [\-l 192.168.9.202/32] [\-s -10.4.24.128/27] [\-r] [\-a internet.domain.tld] [\-c otronodo] nodo -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-q -Silent mode -.RS -.RE -.TP -.B \-a example.org -Public address of the node (domain or IP). -It can be specified multiple times, so tinc tries these addresses in the -given order. -If not provided, the node isn\[aq]t publicly accesible and doesn\[aq]t -accept connections (it\[aq]s only a client). -.RS -.RE -.TP -.B \-c remote\-node -Connect to this node. -Fast version of \f[I]lvpn connectto\f[]. -Can be provided multiple times. -.RS -.RE -.TP -.B \-l 192.168.9.0 -Use this IP address. -If not provided, an address is automatically generated. -.RS -.RE -.TP -.B \-i -Install when done (requires root). -It\[aq]s the same as \f[I]lvpn install\f[] afterwards. -.RS -.RE -.TP -.B \-f -Force creation. -Use when a previous attempt was cancelled or you need to start over. -All data is lost! -.RS -.RE -.TP -.B \-p 655 -Port number, default is 655 o \f[I]LVPN_PORT\f[] env var. -.RS -.RE -.TP -.B \-s 10.0.0.0 -Announce another subnet (deprecated) -.RS -.RE -.TP -.B \-r -Accept other subnets (deprecated) -.RS -.RE -.TP -.B \-A -Creates a node for Android. -Since the system doesn\[aq]t have advanced configuration utilities, this -option provides a stripped down version of \f[I]tinc\-up\f[]. -.RS -.RE -.SH DESCRIPTION -.PP -Generates the basic configuration of a node and stores it on the -\f[I]nodos/node\-name\f[] directory. -.PP -Se puede correr varias veces con diferentes nombres de nodo para tener -configuraciones separadas (un sólo host, varios nodos) o unidas (un nodo -para cada host local o remoto). -.PP -You can run it several times using different node names so you can have -separate configurations (single host, several nodes) or united (a node -per local or remote host). -.PP -For instance, embedded devices may not support \f[I]lvpn\f[], but from a -GNU/Linux system you can generate the config and push it to the -correspondent host (Android phone or tablet, OpenWrt router, etc.) -.PP -\f[I]IMPORTANT\f[]: by default, nodes without an Address field are -assumed to be behind firewalls or not configured to accept direct -connections. -If you add an Address later you have to remove the IndirectData option. -.SH EXAMPLES -.SS Basic config with a single connection -.PP -lvpn init \-c trululu guachiguau -.SS Generate and install basic config with a single connection -.PP -lvpn init \-i \-a guachiguau.org \-c trululu guachiguau -.SS Create a node with a given IP address -.PP -lvpn init \-l 192.168.9.202/32 guachiguau -.SS Create a node that reaches other subnets -.PP -lvpn init \-r guachiguau -.SS Create a node that reaches other subnets and routes one -.PP -lvpn init \-r \-s 10.4.23.224/27 guachiguau -.SS Create an Android node -.PP -Requires Tinc GUI for Android (http://tinc_gui.poirsouille.org/) -.PP -lvpn init \-A \-c ponape rapanui -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-init.markdown b/doc/en/lvpn-init.markdown deleted file mode 100644 index 0daac34..0000000 --- a/doc/en/lvpn-init.markdown +++ /dev/null @@ -1,107 +0,0 @@ -% LVPN-INIT(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Creates a new node - - -# SYNOPSIS - -lvpn init [-A] [-f] [-q] [-p 655] [-l 192.168.9.202/32] [-s 10.4.24.128/27] [-r] [-a internet.domain.tld] [-c otronodo] nodo - - -# OPTIONS - --h -: This message - --q -: Silent mode - --a example.org -: Public address of the node (domain or IP). It can be specified - multiple times, so tinc tries these addresses in the given order. - If not provided, the node isn't publicly accesible and doesn't - accept connections (it's only a client). - --c remote-node -: Connect to this node. Fast version of _lvpn connectto_. Can be - provided multiple times. - --l 192.168.9.0 -: Use this IP address. If not provided, an address is automatically - generated. - --i -: Install when done (requires root). It's the same as _lvpn install_ - afterwards. - --f -: Force creation. Use when a previous attempt was cancelled or you - need to start over. All data is lost! - --p 655 -: Port number, default is 655 o *LVPN_PORT* env var. - --s 10.0.0.0 -: Announce another subnet (deprecated) - --r -: Accept other subnets (deprecated) - --A -: Creates a node for Android. Since the system doesn't have advanced - configuration utilities, this option provides a stripped down - version of _tinc-up_. - - -# DESCRIPTION - -Generates the basic configuration of a node and stores it on the -_nodos/node-name_ directory. - -Se puede correr varias veces con diferentes nombres de nodo para tener -configuraciones separadas (un sólo host, varios nodos) o unidas (un nodo -para cada host local o remoto). - -You can run it several times using different node names so you can have -separate configurations (single host, several nodes) or united (a node -per local or remote host). - -For instance, embedded devices may not support _lvpn_, but from a -GNU/Linux system you can generate the config and push it to the -correspondent host (Android phone or tablet, OpenWrt router, etc.) - -_IMPORTANT_: by default, nodes without an Address field are assumed to -be behind firewalls or not configured to accept direct connections. If -you add an Address later you have to remove the IndirectData option. - -# EXAMPLES - -## Basic config with a single connection - - lvpn init -c trululu guachiguau - -## Generate and install basic config with a single connection - - lvpn init -i -a guachiguau.org -c trululu guachiguau - -## Create a node with a given IP address - - lvpn init -l 192.168.9.202/32 guachiguau - -## Create a node that reaches other subnets - - lvpn init -r guachiguau - -## Create a node that reaches other subnets and routes one - - lvpn init -r -s 10.4.23.224/27 guachiguau - -## Create an Android node - -Requires [Tinc GUI for Android](http://tinc_gui.poirsouille.org/) - - lvpn init -A -c ponape rapanui diff --git a/doc/en/lvpn-install-mail-server.1 b/doc/en/lvpn-install-mail-server.1 deleted file mode 100644 index efa0d3e..0000000 --- a/doc/en/lvpn-install-mail-server.1 +++ /dev/null @@ -1,38 +0,0 @@ -.TH "LVPN\-INSTALL\-MAIL\-SERVER" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -\f[I]lvpn install\-mail\-server\f[] installs a local mailserver for -email exchange from node to node. -.SH SYNOPSIS -.PP -\f[I]lvpn install\-mail\-server\f[] [\-h] [\-f] [\-p /etc/postfix] -local\-node -.SH DESCRIPTION -.PP -Install a \f[I]postfix\f[] configuration suited for email exchange -between nodes using local addresses in the form -\f[I]user\@node.local\f[]. -It can also route email to Internet via a SMTP gateway that knows how to -translate addresses. -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-f -Force installation. -It will replace your actual postfix config! -.RS -.RE -.TP -.B \-p /etc/postfix -Install configuration on another path. -.RS -.RE -.SH SEE ALSO -.PP -\f[I]postfix(1)\f[] \f[I]postmap(1)\f[] \f[I]transport(5)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-install-mail-server.markdown b/doc/en/lvpn-install-mail-server.markdown deleted file mode 100644 index 94eb999..0000000 --- a/doc/en/lvpn-install-mail-server.markdown +++ /dev/null @@ -1,38 +0,0 @@ -% LVPN-INSTALL-MAIL-SERVER(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -_lvpn install-mail-server_ installs a local mailserver for email -exchange from node to node. - - -# SYNOPSIS - -_lvpn install-mail-server_ [-h] [-f] [-p /etc/postfix] local-node - - -# DESCRIPTION - -Install a _postfix_ configuration suited for email exchange between -nodes using local addresses in the form _user@node.local_. It can also -route email to Internet via a SMTP gateway that knows how to translate -addresses. - - -# OPTIONS - --h -: This message - --f -: Force installation. It will replace your actual postfix config! - --p /etc/postfix -: Install configuration on another path. - - -# SEE ALSO - -_postfix(1)_ _postmap(1)_ _transport(5)_ diff --git a/doc/en/lvpn-install-script.1 b/doc/en/lvpn-install-script.1 deleted file mode 100644 index 9ee0eed..0000000 --- a/doc/en/lvpn-install-script.1 +++ /dev/null @@ -1,90 +0,0 @@ -.TH "LVPN\-INSTALL\-SCRIPT" "1" "2013" "LibreVPN Manual" "LibreVPN" -.SH NAME -.PP -lvpn install\-script install a script thats executed during VPN events. -.SH SYNOPSIS -.PP -lvpn install\-script [\-hves] local\-node event script -.SH DESCRIPTION -.PP -Installs scripts to be executed on VPN events. -At the moment, \f[C]tincd\f[] only supports two kinds of events after -the VPN starts, when a node connects or disconnects, or when a subnet is -announced or dis\-announced. -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-v -Verbose mode -.RS -.RE -.TP -.B \-e -List available events -.RS -.RE -.TP -.B \-s -List available scripts -.RS -.RE -.SH EVENTS -.TP -.B tinc -This event triggers when the VPN starts/stops. -Put scripts that should run once here. -.RS -.RE -.TP -.B host -Run this script when a node (dis)connects. -.RS -.RE -.TP -.B subnet -Run this script when a subnet becomes (un)reachable -.RS -.RE -.SH SCRIPTS -.TP -.B debug -Debug events -.RS -.RE -.TP -.B notify -Show a notification using D\-Bus. -\f[B]It doesn\[aq]t work\f[] because D\-Bus doesn\[aq]t allow users to -send notification to another user\[aq]s session. -.RS -.RE -.TP -.B ipv6\-router -Set this node as an IPv6 router/gateway. -.RS -.RE -.TP -.B ipv6\-default\-route -Set this node\[aq]s IPv6 default route. -.RS -.RE -.TP -.B port\-forwarding -Asks the default router to open up the ports, using NAT\-PMP and -.RS -.RE -.PP -UPnP -.SH EXAMPLES -.SS Notify when a host (dis)connects -.PP -\f[I]lvpn install\-script\f[] ponape host notify -.SH SEE ALSO -.PP -\f[I]tinc.conf(5)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-install-script.markdown b/doc/en/lvpn-install-script.markdown deleted file mode 100644 index e8aa030..0000000 --- a/doc/en/lvpn-install-script.markdown +++ /dev/null @@ -1,79 +0,0 @@ -% LVPN-INSTALL-SCRIPT(1) LibreVPN Manual | LibreVPN -% fauno -% 2013 - -# NAME - -lvpn install-script install a script thats executed during VPN events. - - -# SYNOPSIS - -lvpn install-script [-hves] local-node event script - - -# DESCRIPTION - -Installs scripts to be executed on VPN events. At the moment, `tincd` -only supports two kinds of events after the VPN starts, when a node -connects or disconnects, or when a subnet is announced or dis-announced. - - -# OPTIONS - --h -: This message - --v -: Verbose mode - --e -: List available events - --s -: List available scripts - - -# EVENTS - -tinc -: This event triggers when the VPN starts/stops. Put scripts that - should run once here. - -host -: Run this script when a node (dis)connects. - -subnet -: Run this script when a subnet becomes (un)reachable - - -# SCRIPTS - -debug -: Debug events - -notify -: Show a notification using D-Bus. **It doesn't work** because D-Bus - doesn't allow users to send notification to another user's session. - -ipv6-router -: Set this node as an IPv6 router/gateway. - -ipv6-default-route -: Set this node's IPv6 default route. - -port-forwarding -: Asks the default router to open up the ports, using NAT-PMP and -UPnP - - -# EXAMPLES - -## Notify when a host (dis)connects - -_lvpn install-script_ ponape host notify - - -# SEE ALSO - -_tinc.conf(5)_ diff --git a/doc/en/lvpn-install.1 b/doc/en/lvpn-install.1 deleted file mode 100644 index ab02c10..0000000 --- a/doc/en/lvpn-install.1 +++ /dev/null @@ -1,46 +0,0 @@ -.TH "LVPN\-INSTALL" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Installs or synchronizes a node on the system. -.SH SYNOPSIS -.PP -\f[I]lvpn install\f[] [\-hvdn] local\-node -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-v -Verbose mode -.RS -.RE -.TP -.B \-r -Remove extra files, pristine copy of \f[I]nodos/local\-node\f[]. -It was \f[I]\-d\f[] but this flag is now reserved for debugging. -.RS -.RE -.TP -.B \-n -Dry\-run, use it with \f[I]\-v\f[]. -.RS -.RE -.SH DESCRIPTION -.PP -Syncs \f[I]nodos/local\-node\f[] to \f[I]/etc/tinc/lvpn\f[]. -.PP -It\[aq]s required to run it after any change on the config. -.PP -Also, it configures the system to run the VPN after reboot, and if -NetworkManager is used, automatic reconnection after a succesful -connection. -.PP -If the package providing \f[I]nss\-mdns\f[] is installed, edits -\f[I]/etc/nsswitch.conf\f[] so it can solve .local addresses. -.SH SEE ALSO -.PP -\f[I]rsync(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-install.markdown b/doc/en/lvpn-install.markdown deleted file mode 100644 index b1ce7b5..0000000 --- a/doc/en/lvpn-install.markdown +++ /dev/null @@ -1,47 +0,0 @@ -% LVPN-INSTALL(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Installs or synchronizes a node on the system. - - -# SYNOPSIS - -_lvpn install_ [-hvdn] local-node - - -# OPTIONS - --h -: This message - --v -: Verbose mode - --r -: Remove extra files, pristine copy of _nodos/local-node_. It was - _-d_ but this flag is now reserved for debugging. - --n -: Dry-run, use it with _-v_. - - -# DESCRIPTION - -Syncs _nodos/local-node_ to _/etc/tinc/lvpn_. - -It's required to run it after any change on the config. - -Also, it configures the system to run the VPN after reboot, and if -NetworkManager is used, automatic reconnection after a succesful -connection. - -If the package providing _nss-mdns_ is installed, edits -_/etc/nsswitch.conf_ so it can solve .local addresses. - - -# SEE ALSO - -_rsync(1)_ diff --git a/doc/en/lvpn-push.1 b/doc/en/lvpn-push.1 deleted file mode 100644 index a16458a..0000000 --- a/doc/en/lvpn-push.1 +++ /dev/null @@ -1,19 +0,0 @@ -.TH LVPN\-PUSH 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Push a node to a remote host -.SH SYNOPSIS -.PP -\f[I]lvpn push\f[] nodo user\@host [remote tinc dir] -.SH DESCRIPTION -.PP -This command allows to install or update a node on a remote host. -It\[aq]s designed to work with embedded systems, like OpenWrts routers. -.PP -Requires SSH access. -.SH EXAMPLES -.SS Sync a node -.PP -\f[I]lvpn push\f[] guachiguau root\@10.4.23.225 -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-push.markdown b/doc/en/lvpn-push.markdown deleted file mode 100644 index f1b1266..0000000 --- a/doc/en/lvpn-push.markdown +++ /dev/null @@ -1,27 +0,0 @@ -% LVPN-PUSH(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Push a node to a remote host - - -# SYNOPSIS - -_lvpn push_ nodo user@host [remote tinc dir] - - -# DESCRIPTION - -This command allows to install or update a node on a remote host. It's -designed to work with embedded systems, like OpenWrts routers. - -Requires SSH access. - - -# EXAMPLES - -## Sync a node - -_lvpn push_ guachiguau root@10.4.23.225 diff --git a/doc/en/lvpn-send-email.1 b/doc/en/lvpn-send-email.1 deleted file mode 100644 index aaec938..0000000 --- a/doc/en/lvpn-send-email.1 +++ /dev/null @@ -1,45 +0,0 @@ -.TH LVPN\-SEND\-EMAIL 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Sends the host file by email -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-t -Destinataion, default is vpn\@hackcoop.com.ar -.RS -.RE -.TP -.B \-f -From field, default is git user or user\@hostname -.RS -.RE -.TP -.B \-s -Alternate subject -.RS -.RE -.TP -.B \-m -Alternate message -.RS -.RE -.SS Env vars -.TP -.B SENDMAIL -Alternate sendmail -.RS -.RE -.SH DESCRIPTION -.PP -Generates an email with the host file and sends it. -.PP -Requires \f[I]sendmail\f[] or compatible to be configured in the system. -.SH SEE ALSO -.PP -\f[I]sendmail(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-send-email.markdown b/doc/en/lvpn-send-email.markdown deleted file mode 100644 index 3c02344..0000000 --- a/doc/en/lvpn-send-email.markdown +++ /dev/null @@ -1,39 +0,0 @@ -% LVPN-SEND-EMAIL(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Sends the host file by email - --h -: This message - --t -: Destinataion, default is vpn@hackcoop.com.ar - --f -: From field, default is git user or user@hostname - --s -: Alternate subject - --m -: Alternate message - - -## Env vars - -SENDMAIL -: Alternate sendmail - - -# DESCRIPTION - -Generates an email with the host file and sends it. - -Requires _sendmail_ or compatible to be configured in the system. - -# SEE ALSO - -_sendmail(1)_ diff --git a/doc/en/lvpn-unknown-peers.1 b/doc/en/lvpn-unknown-peers.1 deleted file mode 100644 index 5dfea5e..0000000 --- a/doc/en/lvpn-unknown-peers.1 +++ /dev/null @@ -1,32 +0,0 @@ -.TH "LVPN\-UNKNOWN\-PEERS" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Lists unknown peers -.SH SYNOPSIS -.PP -\f[I]lvpn unknown\-peers\f[] [/var/log/tinc.lvpn.log] -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-c -Count failed connection attempts. -Shows a numeric summary of the failed connections. -.RS -.RE -.SH DESCRIPTION -.PP -Searchs the logfile for nodes which connection attempts are denied -because their host files aren\[aq]t available. -.PP -Tincd must be started with _\-\-logfile__. -.PP -Useful with \f[I]lvpn add\-host\f[] -.SH SEE ALSO -.PP -\f[I]lvpn\-add\-host(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-unknown-peers.markdown b/doc/en/lvpn-unknown-peers.markdown deleted file mode 100644 index db14eac..0000000 --- a/doc/en/lvpn-unknown-peers.markdown +++ /dev/null @@ -1,37 +0,0 @@ -% LVPN-UNKNOWN-PEERS(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Lists unknown peers - - -# SYNOPSIS - -_lvpn unknown-peers_ [/var/log/tinc.lvpn.log] - - -# OPTIONS - --h -: This message - --c -: Count failed connection attempts. Shows a numeric summary of the - failed connections. - - -# DESCRIPTION - -Searchs the logfile for nodes which connection attempts are denied -because their host files aren't available. - -Tincd must be started with _--logfile__. - -Useful with _lvpn add-host_ - - -# SEE ALSO - -_lvpn-add-host(1)_ diff --git a/doc/en/lvpn-update-skel.1 b/doc/en/lvpn-update-skel.1 deleted file mode 100644 index 3bc3bbd..0000000 --- a/doc/en/lvpn-update-skel.1 +++ /dev/null @@ -1,22 +0,0 @@ -.TH "LVPN\-UPDATE\-SKEL" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -Upgrades skel files -.SH SYNOPSIS -.PP -\f[I]lvpn update\-skel\f[] [\-v] node1 [node2 ...] -.SH OPTIONS -.TP -.B \-v -Verbose mode -.RS -.RE -.SH DESCRIPTION -.PP -The \f[I]lvpn\f[] skel includes init and self\-configuration scripts -(\f[I]tinc\-up\f[], etc.). -This command upgrades the scripts on the specified nodes. -.PP -If the files already exist, they\[aq]re saved as \f[I]\&.backup\f[]. -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn-update-skel.markdown b/doc/en/lvpn-update-skel.markdown deleted file mode 100644 index 647d7ff..0000000 --- a/doc/en/lvpn-update-skel.markdown +++ /dev/null @@ -1,26 +0,0 @@ -% LVPN-UPDATE-SKEL(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -Upgrades skel files - - -# SYNOPSIS - -_lvpn update-skel_ [-v] node1 [node2 ...] - - -# OPTIONS - --v -: Verbose mode - - -# DESCRIPTION - -The _lvpn_ skel includes init and self-configuration scripts (_tinc-up_, -etc.). This command upgrades the scripts on the specified nodes. - -If the files already exist, they're saved as _.backup_. diff --git a/doc/en/lvpn.1 b/doc/en/lvpn.1 deleted file mode 100644 index 32a3261..0000000 --- a/doc/en/lvpn.1 +++ /dev/null @@ -1,53 +0,0 @@ -.TH "LVPN" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -LibreVPN -.SS SYNOPSIS -.PP -lvpn command \-options parameters -.SH OPTIONS -.TP -.B \-h -This message -.RS -.RE -.TP -.B \-c -Available commands -.RS -.RE -.TP -.B \-d -Debug mode. -Use this flag to enable command debug. -.RS -.RE -.SH DESCRIPTION -.SS How do I start? -.PP -By reading http://librevpn.org.ar o \f[I]lvpn init\f[]\[aq]s help :) -.SS Where\[aq]s my node? -.PP -The \f[I]lvpn init\f[] command creates your node on the \f[I]nodos/\f[] -directory if running \f[I]lvpn\f[] from the development clone, or to -\f[I]~/.config/lvpn/nodos\f[] if installed on system. -.PP -You can have several nodes but only one per host can be installed (using -\f[I]lvpn install your\-node\f[]). -.PP -Any command that makes changes on the local node must be installed -afterwards using the \f[I]lvpn install local\-node\f[] command. -.PP -All command\[aq]s help can be queried using the \f[I]\-h\f[] flag after -the command name: -.IP -.nf -\f[C] -lvpn\ add\-host\ \-h -\f[] -.fi -.SH SEE ALSO -.PP -\f[I]lvpn\-init(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn.markdown b/doc/en/lvpn.markdown deleted file mode 100644 index e33524f..0000000 --- a/doc/en/lvpn.markdown +++ /dev/null @@ -1,52 +0,0 @@ -% LVPN(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -LibreVPN - -## SYNOPSIS - - lvpn command -options parameters - - -# OPTIONS - --h -: This message - --c -: Available commands - --d -: Debug mode. Use this flag to enable command debug. - - -# DESCRIPTION - -## How do I start? - -By reading http://librevpn.org.ar o _lvpn init_'s help :) - -## Where's my node? - -The _lvpn init_ command creates your node on the _nodos/_ directory if -running _lvpn_ from the development clone, or to _~/.config/lvpn/nodos_ -if installed on system. - -You can have several nodes but only one per host can be installed (using -_lvpn install your-node_). - -Any command that makes changes on the local node must be installed -afterwards using the _lvpn install local-node_ command. - -All command's help can be queried using the _-h_ flag after the command -name: - - lvpn add-host -h - - -# SEE ALSO - -_lvpn-init(1)_ diff --git a/doc/en/lvpn_tincd.1 b/doc/en/lvpn_tincd.1 deleted file mode 100644 index 9f12790..0000000 --- a/doc/en/lvpn_tincd.1 +++ /dev/null @@ -1,41 +0,0 @@ -.TH "LVPN_TINCD" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NAME -.PP -LibreVPN -.SH OPTIONS -.PP -Recommended flags to run \f[I]tincd\f[]: -.SS Security -.TP -.B \-U nobody -Root privileges are dropped -.RS -.RE -.TP -.B \-R -Chroots to the config dir -.RS -.RE -.TP -.B \-L -Put tincd in protected memory. -This option protects the encryption keys but it makes tincd unstabled. -Use with precaution. -.RS -.RE -.SS Log -.TP -.B \-\-logfile -Logs to /var/log/tinc.vpn.log -.RS -.RE -.TP -.B \-d 1 -Logs connections -.RS -.RE -.SH SEE ALSO -.PP -\f[I]tincd(8)\f[] -.SH AUTHORS -fauno . diff --git a/doc/en/lvpn_tincd.markdown b/doc/en/lvpn_tincd.markdown deleted file mode 100644 index bb056bf..0000000 --- a/doc/en/lvpn_tincd.markdown +++ /dev/null @@ -1,37 +0,0 @@ -% LVPN\_TINCD(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NAME - -LibreVPN - -# OPTIONS - -Recommended flags to run _tincd_: - -### Security - --U nobody -: Root privileges are dropped - --R -: Chroots to the config dir - --L -: Put tincd in protected memory. This option protects the encryption - keys but it makes tincd unstabled. Use with precaution. - - -### Log - ---logfile -: Logs to /var/log/tinc.vpn.log - --d 1 -: Logs connections - - -# SEE ALSO - -_tincd(8)_ diff --git a/doc/es/CONVENCIONES.1 b/doc/es/CONVENCIONES.1 index 8543d2c..e075daf 100644 --- a/doc/es/CONVENCIONES.1 +++ b/doc/es/CONVENCIONES.1 @@ -1,239 +1,179 @@ -.TH "CONVENCIONES" "2" "2013" "Manual de LibreVPN" "lvpn" +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "CONVENCIONES" "2" "2013" "Manual de RAP" "rap" +.hy .SH NOMBRE .PP -Notas para desarrolladores de lvpn :) +Notas para desarrolladorxs de RAP :) .SH SINOPSIS .TP -.B lib/ +lib/ +herramientas +.TP +lib/exec/ comandos -.RS -.RE .TP -.B lib/skel/ +skel/ archivos base para tinc -.RS -.RE .TP -.B lib/skel/scripts/ +skel/scripts/ directorio de scripts/hooks -.RS -.RE .TP -.B doc/ -documentación -.RS -.RE +doc/ +documentaci\['o]n .TP -.B bin/ -programas de ayuda que no son especificamente de lvpn -.RS -.RE -.TP -.B etc/ -código fuente extra -.RS -.RE -.TP -.B hosts/ +hosts/ archivos de nodos -.RS -.RE .TP -.B nodos/ +nodos/ nodos propios -.RS -.RE .TP -.B locale/ +locale/ traducciones -.RS -.RE .SH DESCRIPCION -.SS Dónde van los scripts +.SS D\['o]nde van los scripts .PP -El script \f[I]lvpn\f[] autodescubre los comandos siguiendo la -convención \f[I]lib/lvpn\-tuscript\f[]. -Además setea algunas variables de entorno que los scripts pueden usar -para saber en qué red están trabajando. +El script \f[I]rap\f[R] autodescubre los comandos siguiendo la +convenci\['o]n \f[I]lib/exec/el-script\f[R]. +Adem\['a]s configura algunas variables de entorno que los scripts pueden +usar para saber en qu\['e] red est\['a]n trabajando. .PP -Los scripts pueden estar en cualquier lenguaje de programación mientras -sepan leer esas variables de entorno. +Los scripts pueden estar en cualquier lenguaje de programaci\['o]n +mientras sepan leer esas variables de entorno. .SS Variables de entorno .PP -Estas son las variables de entorno que \f[I]lvpn\f[] exporta para el +Estas son las variables de entorno que \f[I]rap\f[R] exporta para el resto de los comandos. .TP -.B TINC -Ubicación del directorio del nodo, por defecto \f[I]/etc/tinc/lvpn\f[]. -.RS -.RE +TINC +Ubicaci\['o]n del directorio del nodo, por defecto +\f[I]/etc/tinc/rap\f[R]. .TP -.B NETWORK -Nombre de la red, por defecto el último directorio de \f[I]TINC\f[]. -.RS -.RE +NETWORK +Nombre de la red, por defecto \f[I]rap\f[R]. .TP -.B LVPN -Path completo de \f[I]lvpn\f[]. -.RS -.RE +RAP +Path completo de \f[I]rap\f[R]. .TP -.B LVPN_DIR +RAP_DIR Path completo del directorio de trabajo, por defecto el directorio base -de \f[I]LVPN\f[] -.RS -.RE +de \f[I]RAP\f[R] .TP -.B LVPN_LIBDIR +RAP_LIBDIR Path completo del directorio de comandos. -.RS -.RE .TP -.B LVPN_HOSTS +RAP_HOSTS Path completo del directorio de hosts. -.RS -.RE .TP -.B LVPN_BEADLE -Path completo del directorio de llaves anunciables nuevas de -desconocidos. -.RS -.RE +KEYSIZE +Tama\[~n]o por defecto de las llaves. .TP -.B KEYSIZE -Tamaño por defecto de las llaves. -.RS -.RE +TINCD_FLAGS +Flags para el demonio \f[I]tincd\f[R]. .TP -.B LVPN_SUBNET -El rango de IPv4 -.RS -.RE -.TP -.B LVPN_SUBNET6 -El rango de IPv6 -.RS -.RE -.TP -.B TINCD_FLAGS -Flags para el demonio \f[I]tincd\f[]. -.RS -.RE -.TP -.B PORT +PORT Puerto por defecto -.RS -.RE .TP -.B sudo +sudo Usar esta variable delante de cualquier comando que deba correr con -privilegios de root, ej: \f[I]${sudo} rsync\f[]. -Requiere \f[I]"root=true"\f[] al principio del script. -.RS -.RE -.SS Dónde va la documentación +privilegios de root, ej: \f[I]${sudo} rsync\f[R]. +Requiere \f[I]\[lq]root=true\[rq]\f[R] al principio del script. +.SS D\['o]nde va la documentaci\['o]n .PP -La documentación lleva el nombre completo del script: -\f[I]doc/idioma/lvpn\-tuscript.markdown\f[]. -La función \f[I]help()\f[] en \f[I]lib/msg\f[] lo lleva como argumento -para mostrar la ayuda. +La documentaci\['o]n lleva el nombre completo del script: +\f[I]doc/idioma/tuscript.markdown\f[R]. +La funci\['o]n \f[I]help()\f[R] en \f[I]lib/msg\f[R] lo lleva como +argumento para mostrar la ayuda. .PP -Además, toma la variable de entorno \f[I]PAGER\f[] para paginar la -salida, por defecto se usa \f[I]less\f[]. -.SS Flags y parámetros +Adem\['a]s, toma la variable de entorno \f[I]PAGER\f[R] para paginar la +salida, por defecto se usa \f[I]less\f[R]. +.SS Flags y par\['a]metros .PP -\f[I]lvpn comando\f[] \-flags nodolocal parametros extra +\f[I]rap comando\f[R] -flags nodolocal parametros extra .PP -Seguido de \f[I]lvpn\f[] viene el comando, al que se le pasan en orden -las flags (con sus opciones). -El primer parámetro siempre tiene que ser el nodo local en el que se -realiza la acción. -Luego vienen los parámetros extra (nombres de otros nodos, por ejemplo). +Seguido de \f[I]rap\f[R] viene el comando, al que se le pasan en orden +las opciones (con sus valores). +El primer par\['a]metro siempre tiene que ser el nodo local en el que se +realiza la acci\['o]n. +Luego vienen los par\['a]metros extra (nombres de otros nodos, por +ejemplo). .SS Funciones comunes .PP -En el archivo \f[I]lib/common\f[] se almacenan las funciones de uso -común entre todos los comandos. -Se la puede incluir en un script añadiendo la línea +En el archivo \f[I]lib/common\f[R] se almacenan las funciones de uso +com\['u]n entre todos los comandos. +Se la puede incluir en un script a\[~n]adiendo la l\['i]nea .IP .nf \f[C] -\&.\ "${LVPN_LIBDIR}"/common -\f[] +\&. \[dq]${RAP_LIBDIR}\[dq]/common +\f[R] .fi .PP al principio del script. .PP -Nota: Agregar \f[I]root=true\f[] antes de common para poder correr -funciones de root. +\f[B]Nota:\f[R] Agregar \f[I]root=true\f[R] antes de common para poder +correr funciones de root. .SS Variables .IP \[bu] 2 self: nombre del script. Usado para obtener el nombre del script. -Ejemplo: \f[I]help $self\f[] llama a la ayuda del script actual. +Ejemplo: \f[I]help $self\f[R] llama a la ayuda del script actual. .SS Funciones .IP \[bu] 2 -\f[I]add_to_file()\f[]: Agrega una línea al final de un archivo. -Uso: \f[I]add_to_file archivo "Texto a agregar"\f[] +\f[I]add_to_file()\f[R]: Agrega una l\['i]nea al final de un archivo. +Uso: \f[I]add_to_file archivo \[lq]Texto a agregar\[rq]\f[R] .IP \[bu] 2 -\f[I]requires()\f[]: Indica que el script necesita que un programa se +\f[I]requires()\f[R]: Indica que el script necesita que un programa se encuentre en el PATH. Se recomienda cuando el script llama a un programa que puede no -encontrarse en una instalación estándar. -Uso: \f[I]requires avahi\-publish rsync\f[] +encontrarse en una instalaci\['o]n est\['a]ndar. +Uso: \f[I]requires avahi-publish rsync\f[R] .IP \[bu] 2 -\f[I]get_node_dir()\f[]: Encuentra el directorio de un nodo pasándole el -nombre del nodo como argumento. -\f[I]node_dir="(\f[I]g\f[]\f[I]e\f[]\f[I]t\f[]_\f[I]n\f[]\f[I]o\f[]\f[I]d\f[]\f[I]e\f[]_\f[I]d\f[]\f[I]i\f[]\f[I]r\f[]{node})"\f[] +\f[I]get_node_dir()\f[R]: Encuentra el directorio de un nodo +pas\['a]ndole el nombre del nodo como argumento. +\f[I]node_dir=\[lq]$(get_node_dir ${node})\[rq]\f[R] .IP \[bu] 2 -\f[I]get_node_file()\f[]: Encuentra el archivo de host de un nodo dentro -del directorio del nodo. -\f[I]node_file="(\f[I]g\f[]\f[I]e\f[]\f[I]t\f[]_\f[I]n\f[]\f[I]o\f[]\f[I]d\f[]\f[I]e\f[]_\f[I]f\f[]\f[I]i\f[]\f[I]l\f[]\f[I]e\f[]{node})"\f[] +\f[I]get_node_file()\f[R]: Encuentra el archivo de host de un nodo +dentro del directorio del nodo. +\f[I]node_file=\[lq]$(get_node_file ${node})\[rq]\f[R] .IP \[bu] 2 -\f[I]get_node_name()\f[]: Limpia el nombre del nodo de caracteres -inválidos +\f[I]get_node_name()\f[R]: Limpia el nombre del nodo de caracteres +inv\['a]lidos .IP \[bu] 2 -\f[I]get_host_file()\f[]: Obtiene el archivo del nodo en $LVPN_HOSTS -.IP \[bu] 2 -\f[I]find_init_system()\f[]: Encuentra el tipo de inicio de tinc. -Ver \f[I]lib/lvpn\-install\f[]. -.IP \[bu] 2 -\f[I]get_id()\f[]: Obtiene nombre y mail del responsable del nodo usando -git o usuario\@hostname. -.IP \[bu] 2 -\f[I]get_ipv4()\f[]: Genera una dirección IPv4 a partir de LVPN_SUBNET. -.IP \[bu] 2 -\f[I]get_ipv6()\f[]: Genera una dirección IPv6 a partir de LVPN_SUBNET6. +\f[I]get_host_file()\f[R]: Obtiene el archivo del nodo en $RAP_HOSTS .SS Mensajes .PP -En \f[I]lib/msg\f[] se encuentran las funciones básicas para imprimir -mensajes en la salida de errores estándar. -Esto es para que no sean procesados como la salida estándar de los -scripts, que se reservan para poder enviar la información a una tubería. +En \f[I]lib/msg\f[R] se encuentran las funciones b\['a]sicas para +imprimir mensajes en la salida de errores est\['a]ndar. +Esto es para que no sean procesados como la salida est\['a]ndar de los +scripts, que se reservan para poder enviar la informaci\['o]n a una +tuber\['i]a. .PP -No es necesario incluirla ya que se llama desde \f[I]lib/common\f[]. +No es necesario incluirla ya que se llama desde \f[I]lib/common\f[R]. .PP Todas las funciones tienen soporte para traducciones utilizando gettext, por lo que los mensajes que se completan con variables deben seguir el -formato de \f[I]printf\f[]: \f[I]%s\f[] para reemplazar por cadenas, -\f[I]%d\f[] para números enteros, etc. +formato de \f[I]printf\f[R]: \f[I]%s\f[R] para reemplazar por cadenas, +\f[I]%d\f[R] para n\['u]meros enteros, etc. .PP -Por ejemplo: \f[I]msg "Procesando el nodo %s..." "$node"\f[] +Por ejemplo: \f[I]msg \[lq]Procesando el nodo %s\&...\[rq] +\[lq]$node\[rq]\f[R] .IP \[bu] 2 -\f[I]msg()\f[]: Información +\f[I]msg()\f[R]: Informaci\['o]n .IP \[bu] 2 -\f[I]error()\f[]: Mensaje de error +\f[I]error()\f[R]: Mensaje de error .IP \[bu] 2 -\f[I]warning()\f[]: Alerta +\f[I]warning()\f[R]: Alerta .IP \[bu] 2 -\f[I]fatal_error()\f[]: Imprime un mensaje de error y termina el +\f[I]fatal_error()\f[R]: Imprime un mensaje de error y termina el programa inmediatamente .IP \[bu] 2 -\f[I]tip()\f[]: Recomendaciones, por ejemplo, cual comando correr a -continuación. +\f[I]tip()\f[R]: Recomendaciones, por ejemplo, cual comando correr a +continuaci\['o]n. .SS Los comandos .PP La mayoria de los comandos solo configuran, luego hay que enviar los -cambios a directorio de instalación con el comando \f[I]lvpn init -install\f[]. +cambios a directorio de instalaci\['o]n con el comando \f[I]rap init +install\f[R]. .SH AUTHORS fauno . diff --git a/doc/es/CONVENCIONES.markdown b/doc/es/CONVENCIONES.markdown index 2c28bb2..3a3f2d1 100644 --- a/doc/es/CONVENCIONES.markdown +++ b/doc/es/CONVENCIONES.markdown @@ -1,32 +1,29 @@ -% CONVENCIONES(2) Manual de LibreVPN | lvpn +% CONVENCIONES(2) Manual de RAP | rap % fauno % 2013 # NOMBRE -Notas para desarrolladores de lvpn :) +Notas para desarrolladorxs de RAP :) # SINOPSIS lib/ +: herramientas + +lib/exec/ : comandos -lib/skel/ +skel/ : archivos base para tinc -lib/skel/scripts/ +skel/scripts/ : directorio de scripts/hooks doc/ : documentación -bin/ -: programas de ayuda que no son especificamente de lvpn - -etc/ -: código fuente extra - hosts/ : archivos de nodos @@ -41,9 +38,9 @@ locale/ ## Dónde van los scripts -El script _lvpn_ autodescubre los comandos siguiendo la convención -_lib/lvpn-tuscript_. Además setea algunas variables de entorno que los -scripts pueden usar para saber en qué red están trabajando. +El script _rap_ autodescubre los comandos siguiendo la convención +_lib/exec/el-script_. Además configura algunas variables de entorno que +los scripts pueden usar para saber en qué red están trabajando. Los scripts pueden estar en cualquier lenguaje de programación mientras sepan leer esas variables de entorno. @@ -51,40 +48,31 @@ sepan leer esas variables de entorno. ## Variables de entorno -Estas son las variables de entorno que _lvpn_ exporta para el resto de los -comandos. +Estas son las variables de entorno que _rap_ exporta para el resto de +los comandos. TINC -: Ubicación del directorio del nodo, por defecto _/etc/tinc/lvpn_. +: Ubicación del directorio del nodo, por defecto _/etc/tinc/rap_. NETWORK -: Nombre de la red, por defecto el último directorio de _TINC_. +: Nombre de la red, por defecto _rap_. -LVPN -: Path completo de _lvpn_. +RAP +: Path completo de _rap_. -LVPN\_DIR +RAP\_DIR : Path completo del directorio de trabajo, por defecto el directorio - base de _LVPN_ + base de _RAP_ -LVPN\_LIBDIR +RAP\_LIBDIR : Path completo del directorio de comandos. -LVPN\_HOSTS +RAP\_HOSTS : Path completo del directorio de hosts. -LVPN\_BEADLE -: Path completo del directorio de llaves anunciables nuevas de desconocidos. - KEYSIZE : Tamaño por defecto de las llaves. -LVPN\_SUBNET -: El rango de IPv4 - -LVPN\_SUBNET6 -: El rango de IPv6 - TINCD\_FLAGS : Flags para el demonio _tincd_. @@ -100,8 +88,8 @@ sudo ## Dónde va la documentación La documentación lleva el nombre completo del script: -_doc/idioma/lvpn-tuscript.markdown_. La función _help()_ en _lib/msg_ -lo lleva como argumento para mostrar la ayuda. +_doc/idioma/tuscript.markdown_. La función _help()_ en _lib/msg_ lo +lleva como argumento para mostrar la ayuda. Además, toma la variable de entorno _PAGER_ para paginar la salida, por defecto se usa _less_. @@ -109,72 +97,65 @@ defecto se usa _less_. ## Flags y parámetros -_lvpn comando_ -flags nodolocal parametros extra +_rap comando_ -flags nodolocal parametros extra -Seguido de _lvpn_ viene el comando, al que se le pasan en orden las flags (con -sus opciones). El primer parámetro siempre tiene que ser el nodo local en el -que se realiza la acción. Luego vienen los parámetros extra (nombres de otros -nodos, por ejemplo). +Seguido de _rap_ viene el comando, al que se le pasan en orden las +opciones (con sus valores). El primer parámetro siempre tiene que ser +el nodo local en el que se realiza la acción. Luego vienen los +parámetros extra (nombres de otros nodos, por ejemplo). ## Funciones comunes -En el archivo _lib/common_ se almacenan las funciones de uso común entre todos -los comandos. Se la puede incluir en un script añadiendo la línea +En el archivo _lib/common_ se almacenan las funciones de uso común entre +todos los comandos. Se la puede incluir en un script añadiendo la línea - . "${LVPN_LIBDIR}"/common + . "${RAP_LIBDIR}"/common al principio del script. -Nota: Agregar _root=true_ antes de common para poder correr funciones de -root. +**Nota:** Agregar _root=true_ antes de common para poder correr +funciones de root. ### Variables -* self: nombre del script. Usado para obtener el nombre del script. Ejemplo: - _help $self_ llama a la ayuda del script actual. +* self: nombre del script. Usado para obtener el nombre del + script. Ejemplo: _help $self_ llama a la ayuda del script actual. ### Funciones * _add\_to\_file()_: Agrega una línea al final de un archivo. Uso: _add\_to\_file archivo "Texto a agregar"_ -* _requires()_: Indica que el script necesita que un programa se encuentre en el - PATH. Se recomienda cuando el script llama a un programa que puede no - encontrarse en una instalación estándar. Uso: _requires avahi-publish rsync_ +* _requires()_: Indica que el script necesita que un programa se + encuentre en el PATH. Se recomienda cuando el script llama a un + programa que puede no encontrarse en una instalación estándar. Uso: + _requires avahi-publish rsync_ -* _get\_node\_dir()_: Encuentra el directorio de un nodo pasándole el nombre del - nodo como argumento. _node\_dir="$(get\_node\_dir ${node})"_ +* _get\_node\_dir()_: Encuentra el directorio de un nodo pasándole el + nombre del nodo como argumento. _node\_dir="$(get\_node\_dir + ${node})"_ -* _get\_node\_file()_: Encuentra el archivo de host de un nodo dentro del - directorio del nodo. _node\_file="$(get\_node\_file ${node})"_ +* _get\_node\_file()_: Encuentra el archivo de host de un nodo dentro + del directorio del nodo. _node\_file="$(get\_node\_file ${node})"_ * _get\_node\_name()_: Limpia el nombre del nodo de caracteres inválidos -* _get\_host\_file()_: Obtiene el archivo del nodo en $LVPN\_HOSTS - -* _find\_init\_system()_: Encuentra el tipo de inicio de tinc. Ver - _lib/lvpn-install_. - -* _get\_id()_: Obtiene nombre y mail del responsable del nodo usando git o - usuario@hostname. - -* _get\_ipv4()_: Genera una dirección IPv4 a partir de LVPN_SUBNET. - -* _get\_ipv6()_: Genera una dirección IPv6 a partir de LVPN_SUBNET6. +* _get\_host\_file()_: Obtiene el archivo del nodo en $RAP\_HOSTS ## Mensajes -En _lib/msg_ se encuentran las funciones básicas para imprimir mensajes en la -salida de errores estándar. Esto es para que no sean procesados como la salida -estándar de los scripts, que se reservan para poder enviar la información a una -tubería. +En _lib/msg_ se encuentran las funciones básicas para imprimir mensajes +en la salida de errores estándar. Esto es para que no sean procesados +como la salida estándar de los scripts, que se reservan para poder +enviar la información a una tubería. No es necesario incluirla ya que se llama desde _lib/common_. -Todas las funciones tienen soporte para traducciones utilizando gettext, por lo -que los mensajes que se completan con variables deben seguir el formato de -_printf_: _%s_ para reemplazar por cadenas, _%d_ para números enteros, etc. +Todas las funciones tienen soporte para traducciones utilizando gettext, +por lo que los mensajes que se completan con variables deben seguir el +formato de _printf_: _%s_ para reemplazar por cadenas, _%d_ para números +enteros, etc. Por ejemplo: _msg "Procesando el nodo %s..." "$node"_ @@ -188,5 +169,5 @@ Por ejemplo: _msg "Procesando el nodo %s..." "$node"_ ## Los comandos -La mayoria de los comandos solo configuran, luego hay que enviar los cambios a -directorio de instalación con el comando _lvpn init install_. +La mayoria de los comandos solo configuran, luego hay que enviar los +cambios a directorio de instalación con el comando _rap init install_. diff --git a/doc/es/add-host.1 b/doc/es/add-host.1 new file mode 100644 index 0000000..b5d29b1 --- /dev/null +++ b/doc/es/add-host.1 @@ -0,0 +1,40 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP-ADD-HOST" "1" "2013" "Manual de RAP" "RAP" +.hy +.SH NOMBRE +.PP +rap add-host agrega un nodo a los nodos conocidos +.SH SINOPSIS +.PP +rap add-host [-hfu] nodo-local nodo-remoto1 [nodo-remoto2 \&...] +.SH DESCRIPCION +.PP +Para que un nodo pueda conectarse a otro, el segundo nodo debe +\[lq]reconocerlo\[rq] agregando su archivo de host. +.PP +Por ejemplo, si el nodo \f[I]ponape\f[R] posee en su archivo +\f[I]tinc.conf\f[R] el comando \[lq]ConnectTo = medieval\[rq], para que +\f[I]medieval\f[R] lo reconozca, debe agregar el archivo de +\f[I]ponape\f[R] en su directorio de nodos. +.PP +Con el flag \f[C]-u\f[R] se actualizan los hosts ya agregados. +.SH OPCIONES +.TP +-h +Este mensaje +.TP +-u +Actualizar los hosts +.TP +-f +Reemplazar el host si ya existe, forzar +.SH EJEMPLOS +.SS Agregar los nodos haiti y noanoa a ponape +.PP +\f[I]rap add-host\f[R] ponape haiti noanoa +.SS Actualizar los nodos +.PP +\f[I]rap add-host\f[R] -u ponape +.SH AUTHORS +fauno . diff --git a/doc/es/lvpn-add-host.markdown b/doc/es/add-host.markdown similarity index 66% rename from doc/es/lvpn-add-host.markdown rename to doc/es/add-host.markdown index aad6ef7..6c8efc1 100644 --- a/doc/es/lvpn-add-host.markdown +++ b/doc/es/add-host.markdown @@ -1,15 +1,15 @@ -% LVPN-ADD-HOST(1) Manual de LibreVPN | LibreVPN +% RAP-ADD-HOST(1) Manual de RAP | RAP % fauno % 2013 # NOMBRE -lvpn add-host agrega un nodo a los nodos conocidos +rap add-host agrega un nodo a los nodos conocidos # SINOPSIS -lvpn add-host [-hfu] nodo-local nodo-remoto1 [nodo-remoto2 ...] +rap add-host [-hfu] nodo-local nodo-remoto1 [nodo-remoto2 ...] # DESCRIPCION @@ -17,7 +17,7 @@ lvpn add-host [-hfu] nodo-local nodo-remoto1 [nodo-remoto2 ...] Para que un nodo pueda conectarse a otro, el segundo nodo debe "reconocerlo" agregando su archivo de host. -Por ejemplo, si el nodo _ponape_ posee en tu archivo _tinc.conf_ el +Por ejemplo, si el nodo _ponape_ posee en su archivo _tinc.conf_ el comando "ConnectTo = medieval", para que _medieval_ lo reconozca, debe agregar el archivo de _ponape_ en su directorio de nodos. @@ -40,9 +40,9 @@ Con el flag `-u` se actualizan los hosts ya agregados. ## Agregar los nodos haiti y noanoa a ponape -_lvpn add-host_ ponape haiti noanoa +_rap add-host_ ponape haiti noanoa ## Actualizar los nodos -_lvpn add-host_ -u ponape +_rap add-host_ -u ponape diff --git a/doc/es/lvpn-add-subnet.1 b/doc/es/add-subnet.1 similarity index 100% rename from doc/es/lvpn-add-subnet.1 rename to doc/es/add-subnet.1 diff --git a/doc/es/lvpn-announce.1 b/doc/es/announce.1 similarity index 100% rename from doc/es/lvpn-announce.1 rename to doc/es/announce.1 diff --git a/doc/es/lvpn-avahi-anuncio.1 b/doc/es/avahi-anuncio.1 similarity index 100% rename from doc/es/lvpn-avahi-anuncio.1 rename to doc/es/avahi-anuncio.1 diff --git a/doc/es/connectto.1 b/doc/es/connectto.1 new file mode 100644 index 0000000..64cabac --- /dev/null +++ b/doc/es/connectto.1 @@ -0,0 +1,41 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP-CONNECTTO" "1" "2013" "Manual de RAP" "rap" +.hy +.SH NOMBRE +.PP +Se conecta con otros nodos +.SH SINOPSIS +.PP +\f[I]rap connectto\f[R] nodo-local [nodo-remoto nodo-remoto2\&...] +.SH DESCRIPCION +.PP +Configura el nodo local para conectarse a los nodos remotos +especificados. +Para poder ingresar a una red aut\['o]noma pirata, hay que copiar el +archivo de host del nodo remoto en el directorio hosts/ y agregar la +l\['i]nea \f[I]ConnectTo = nodo-remoto\f[R] en \f[I]tinc.conf\f[R]. +Este script automatiza este paso. +.PP +Los nodos remotos deben ejecutar el comando \f[I]rap add-host\f[R] con +el nombre del nodo local. +.SH EJEMPLOS +.SS Listar los nodos a los que noanoa se conecta +.IP +.nf +\f[C] +rap connectto noanoa +\f[R] +.fi +.SS Agregar los nodos ponape y medieval al nodo noanoa +.IP +.nf +\f[C] +rap connectto noanoa ponape medieval +\f[R] +.fi +.SH VER TAMBIEN +.PP +\f[I]tinc.conf(5)\f[R], \f[I]rap-add-host(1)\f[R] +.SH AUTHORS +fauno . diff --git a/doc/es/connectto.markdown b/doc/es/connectto.markdown new file mode 100644 index 0000000..8209d67 --- /dev/null +++ b/doc/es/connectto.markdown @@ -0,0 +1,40 @@ +% RAP-CONNECTTO(1) Manual de RAP | rap +% fauno +% 2013 + +# NOMBRE + +Se conecta con otros nodos + + +# SINOPSIS + +_rap connectto_ nodo-local [nodo-remoto nodo-remoto2...] + + +# DESCRIPCION + +Configura el nodo local para conectarse a los nodos remotos +especificados. Para poder ingresar a una red autónoma pirata, hay que +copiar el archivo de host del nodo remoto en el directorio hosts/ +y agregar la línea _ConnectTo = nodo-remoto_ en _tinc.conf_. Este +script automatiza este paso. + +Los nodos remotos deben ejecutar el comando _rap add-host_ con el +nombre del nodo local. + + +# EJEMPLOS + +## Listar los nodos a los que noanoa se conecta + + rap connectto noanoa + +## Agregar los nodos ponape y medieval al nodo noanoa + + rap connectto noanoa ponape medieval + + +# VER TAMBIEN + +_tinc.conf(5)_, _rap-add-host(1)_ diff --git a/doc/es/lvpn-d3.1 b/doc/es/d3.1 similarity index 100% rename from doc/es/lvpn-d3.1 rename to doc/es/d3.1 diff --git a/doc/es/lvpn-discover.1 b/doc/es/discover.1 similarity index 100% rename from doc/es/lvpn-discover.1 rename to doc/es/discover.1 diff --git a/doc/es/init.1 b/doc/es/init.1 new file mode 100644 index 0000000..f26c45a --- /dev/null +++ b/doc/es/init.1 @@ -0,0 +1,70 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP-INIT" "1" "2013" "Manual de RAP" "rap" +.hy +.SH NOMBRE +.PP +Crea un nuevo nodo +.SH SINOPSIS +.PP +rap init [-f] [-q] [-p 655] [-a dominio.eninternet.tld] [-c otronodo] +nodo +.SH OPCIONES +.TP +-h +Ayuda +.TP +-q +Modo silencioso +.TP +-a ejemplo.org +Ubicaci\['o]n p\['u]blica del nodo (dominio o IP). +Puede especificarse varias veces en el orden en que se quiera que los +dem\['a]s nodos intenten conectarse. +Si no se especifica esta opci\['o]n se entiende que el nodo no es +accesible p\['u]blicamente y no acepta conexiones (s\['o]lo cliente). +.TP +-c nodo-remoto +Conectar a este nodo. +Versi\['o]n r\['a]pida de \f[I]rap connectto\f[R]. +Puede especificarse varias veces. +.TP +-i +Instalar al finalizar (requiere root). +Es lo mismo que correr \f[I]rap install\f[R] m\['a]s tarde. +.TP +-f +Forzar la creaci\['o]n de un nodo. +\['U]til si se cancel\['o] previamente o se quiere comenzar desde cero. +.TP +-p 655 +N\['u]mero de puerto, por defecto 655 o la variable de entorno +\f[I]RAP_PORT\f[R]. +.SH DESCRIPCION +.PP +Genera la configuraci\['o]n b\['a]sica de un nodo y lo almacena en el +directorio \f[I]nodos/nombre-del-nodo\f[R]. +.PP +Se puede correr varias veces con diferentes nombres de nodo para tener +configuraciones separadas (un s\['o]lo host, varios nodos) o unidas (un +nodo para cada host local o remoto). +.PP +Por ejemplo, los dispositivos embebidos pueden no soportar las +herramientas de \f[I]rap\f[R], pero desde un sistema GNU/Linux se puede +generar la configuraci\['o]n y luego copiarla al host que corresponda +(al celular o tablet Android, router con OpenWrt, etc.) +.PP +\f[I]IMPORTANTE\f[R]: La configuraci\['o]n por defecto de un nodo sin el +campo Address asume que se encuentra detr\['a]s de un firewall o que no +est\['a]n configurados para aceptar conexiones directas. +Si luego agreg\['a]s una direcci\['o]n p\['u]blica tambi\['e]n ten\['e]s +que deshabilitar la opci\['o]n IndirectData. +.SH EJEMPLOS +.SS Uso b\['a]sico con una sola conexi\['o]n +.PP +rap init -c trululu guachiguau +.SS Crear un nodo p\['u]blico con una conexi\['o]n e instalarlo localmente +.PP +rap init -i -a guachiguau.org -c trululu guachiguau +.SH AUTHORS +fauno . diff --git a/doc/es/init.markdown b/doc/es/init.markdown new file mode 100644 index 0000000..9f7b00f --- /dev/null +++ b/doc/es/init.markdown @@ -0,0 +1,74 @@ +% RAP-INIT(1) Manual de RAP | rap +% fauno +% 2013 + +# NOMBRE + +Crea un nuevo nodo + + +# SINOPSIS + +rap init [-f] [-q] [-p 655] [-a dominio.eninternet.tld] [-c otronodo] nodo + + +# OPCIONES + +-h +: Ayuda + +-q +: Modo silencioso + +-a ejemplo.org +: Ubicación pública del nodo (dominio o IP). Puede especificarse + varias veces en el orden en que se quiera que los demás nodos + intenten conectarse. Si no se especifica esta opción se entiende + que el nodo no es accesible públicamente y no acepta conexiones + (sólo cliente). + +-c nodo-remoto +: Conectar a este nodo. Versión rápida de _rap connectto_. Puede + especificarse varias veces. + +-i +: Instalar al finalizar (requiere root). Es lo mismo que correr + _rap install_ más tarde. + +-f +: Forzar la creación de un nodo. Útil si se canceló previamente o se + quiere comenzar desde cero. + +-p 655 +: Número de puerto, por defecto 655 o la variable de entorno + _RAP\_PORT_. + +# DESCRIPCION + +Genera la configuración básica de un nodo y lo almacena en el directorio +_nodos/nombre-del-nodo_. + +Se puede correr varias veces con diferentes nombres de nodo para tener +configuraciones separadas (un sólo host, varios nodos) o unidas (un nodo +para cada host local o remoto). + +Por ejemplo, los dispositivos embebidos pueden no soportar las +herramientas de _rap_, pero desde un sistema GNU/Linux se puede generar +la configuración y luego copiarla al host que corresponda (al celular o +tablet Android, router con OpenWrt, etc.) + +_IMPORTANTE_: La configuración por defecto de un nodo sin el campo +Address asume que se encuentra detrás de un firewall o que no están +configurados para aceptar conexiones directas. Si luego agregás una +dirección pública también tenés que deshabilitar la opción IndirectData. + + +# EJEMPLOS + +## Uso básico con una sola conexión + + rap init -c trululu guachiguau + +## Crear un nodo público con una conexión e instalarlo localmente + + rap init -i -a guachiguau.org -c trululu guachiguau diff --git a/doc/es/lvpn-install-mail-server.1 b/doc/es/install-mail-server.1 similarity index 100% rename from doc/es/lvpn-install-mail-server.1 rename to doc/es/install-mail-server.1 diff --git a/doc/es/install-script.1 b/doc/es/install-script.1 new file mode 100644 index 0000000..304f2d7 --- /dev/null +++ b/doc/es/install-script.1 @@ -0,0 +1,62 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP-INSTALL-SCRIPT" "1" "2013" "Manual de RAP" "RAP" +.hy +.SH NOMBRE +.PP +rap install-script instala script que se ejecutan en eventos de la VPN. +.SH SINOPSIS +.PP +rap install-script [-hves] nodo-local evento script +.SH DESCRIPCION +.PP +Instala scripts que se ejecutan durante eventos de la VPN. +Al momento \f[C]tincd\f[R] s\['o]lo soporta dos tipos de eventos luego +de iniciado, cuando un nodo se conecta o desconecta, o cuando una subred +es anunciada o desanunciada. +.SH OPCIONES +.TP +-h +Este mensaje +.TP +-v +Modo verborr\['a]gico +.TP +-e +Listar los eventos disponibles +.TP +-s +Listar los scripts disponibles +.SH EVENTOS +.TP +tinc +Este evento se ejecuta cuando se inicia o se detiene la VPN. +Colocar scripts que s\['o]lo deben ejecutarse una vez ac\['a]. +.TP +host +Ejecutar este script cada vez que un nodo aparece o desaparece. +.TP +subnet +Ejecutar este script cada vez que una subred aparece o desaparece. +.SH SCRIPTS +.TP +debug +\['U]til para debuguear eventos +.TP +ipv6-router +Configura este nodo como un router/gateway de IPv6 +.TP +ipv6-default-route +Configura la ruta IPv6 por defecto para este nodo +.TP +port-forwarding +Le pide al router que abra los puertos, usando NAT-PMP y UPnP +.SH EJEMPLOS +.SS Configurar el nodo como un router IPv6 +.PP +\f[I]rap install-script\f[R] ponape host ipv6-router +.SH VER TAMBIEN +.PP +\f[I]tinc.conf(5)\f[R] +.SH AUTHORS +fauno . diff --git a/doc/es/lvpn-install-script.markdown b/doc/es/install-script.markdown similarity index 68% rename from doc/es/lvpn-install-script.markdown rename to doc/es/install-script.markdown index 196a1d1..ffb8e64 100644 --- a/doc/es/lvpn-install-script.markdown +++ b/doc/es/install-script.markdown @@ -1,15 +1,15 @@ -% LVPN-INSTALL-SCRIPT(1) Manual de LibreVPN | LibreVPN +% RAP-INSTALL-SCRIPT(1) Manual de RAP | RAP % fauno % 2013 # NOMBRE -lvpn install-script instala script que se ejecutan en eventos de la VPN. +rap install-script instala script que se ejecutan en eventos de la VPN. # SINOPSIS -lvpn install-script [-hves] nodo-local evento script +rap install-script [-hves] nodo-local evento script # DESCRIPCION @@ -53,11 +53,6 @@ subnet debug : Útil para debuguear eventos -notify -: Muestra una notificación cada vez que un nodo se conecta o - desconecta, usando libnotify. **No funciona**, D-Bus no permite que - un usuario mande notificaciones a la sesión de otro. - ipv6-router : Configura este nodo como un router/gateway de IPv6 @@ -70,9 +65,9 @@ port-forwarding # EJEMPLOS -## Mostrar una notificación cuando un nodo se (des)conecta +## Configurar el nodo como un router IPv6 -_lvpn install-script_ ponape host notify +_rap install-script_ ponape host ipv6-router # VER TAMBIEN diff --git a/doc/es/install.1 b/doc/es/install.1 new file mode 100644 index 0000000..84bc70e --- /dev/null +++ b/doc/es/install.1 @@ -0,0 +1,38 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP-INSTALL" "1" "2013" "Manual de RAP" "rap" +.hy +.SH NOMBRE +.PP +Instala o sincroniza el nodo en el sistema. +.SH SINOPSIS +.PP +\f[I]rap install\f[R] [-hvdn] nodo-local +.SH OPCIONES +.TP +-h +Esta ayuda +.TP +-v +Modo verborr\['a]gico +.TP +-r +Eliminar archivos extra, copiar tal cual se ve en nodos/nodo-local. +Antes era \f[I]-d\f[R] pero esta flag est\['a] reservada para debug. +.TP +-n +Mostrar los cambios sin realizarlos (usar con -v) +.SH DESCRIPCION +.PP +Sincroniza \f[I]nodos/nodo-local\f[R] con \f[I]/etc/tinc/rap\f[R]. +.PP +\f[B]Es necesario correrlo luego de cada cambio.\f[R] +.PP +Adem\['a]s, configura el sistema para el inicio autom\['a]tico de la VPN +y si se usa NetworkManager, la reconexi\['o]n inmediata al conectarse a +una red. +.SH VER TAMBIEN +.PP +\f[I]rsync(1)\f[R] +.SH AUTHORS +fauno . diff --git a/doc/es/lvpn-install.markdown b/doc/es/install.markdown similarity index 63% rename from doc/es/lvpn-install.markdown rename to doc/es/install.markdown index 3a56cab..d53485f 100644 --- a/doc/es/lvpn-install.markdown +++ b/doc/es/install.markdown @@ -1,4 +1,4 @@ -% LVPN-INSTALL(1) Manual de LibreVPN | lvpn +% RAP-INSTALL(1) Manual de RAP | rap % fauno % 2013 @@ -9,7 +9,7 @@ Instala o sincroniza el nodo en el sistema. # SINOPSIS -_lvpn install_ [-hvdn] nodo-local +_rap install_ [-hvdn] nodo-local # OPCIONES @@ -30,17 +30,13 @@ _lvpn install_ [-hvdn] nodo-local # DESCRIPCION -Sincroniza _nodos/nodo-local_ con _/etc/tinc/lvpn_. +Sincroniza _nodos/nodo-local_ con _/etc/tinc/rap_. -Es necesario correrlo luego de cada cambio. +**Es necesario correrlo luego de cada cambio.** Además, configura el sistema para el inicio automático de la VPN y si se usa NetworkManager, la reconexión inmediata al conectarse a una red. -Si el paquete que provee _nss-mdns_ se encuentra instalado, modificar el -archivo _/etc/nsswitch.conf_ para resolver direcciones _hostname.local_. - - # VER TAMBIEN _rsync(1)_ diff --git a/doc/es/lvpn-add-host.1 b/doc/es/lvpn-add-host.1 deleted file mode 100644 index 0fe5907..0000000 --- a/doc/es/lvpn-add-host.1 +++ /dev/null @@ -1,43 +0,0 @@ -.TH LVPN\-ADD\-HOST 1 "2013" "Manual de LibreVPN" "LibreVPN" -.SH NOMBRE -.PP -lvpn add\-host agrega un nodo a los nodos conocidos -.SH SINOPSIS -.PP -lvpn add\-host [\-hfu] nodo\-local nodo\-remoto1 [nodo\-remoto2 ...] -.SH DESCRIPCION -.PP -Para que un nodo pueda conectarse a otro, el segundo nodo debe -"reconocerlo" agregando su archivo de host. -.PP -Por ejemplo, si el nodo \f[I]ponape\f[] posee en tu archivo -\f[I]tinc.conf\f[] el comando "ConnectTo = medieval", para que -\f[I]medieval\f[] lo reconozca, debe agregar el archivo de -\f[I]ponape\f[] en su directorio de nodos. -.PP -Con el flag \f[C]\-u\f[] se actualizan los hosts ya agregados. -.SH OPCIONES -.TP -.B \-h -Este mensaje -.RS -.RE -.TP -.B \-u -Actualizar los hosts -.RS -.RE -.TP -.B \-f -Reemplazar el host si ya existe, forzar -.RS -.RE -.SH EJEMPLOS -.SS Agregar los nodos haiti y noanoa a ponape -.PP -\f[I]lvpn add\-host\f[] ponape haiti noanoa -.SS Actualizar los nodos -.PP -\f[I]lvpn add\-host\f[] \-u ponape -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn-add-subnet.markdown b/doc/es/lvpn-add-subnet.markdown deleted file mode 100644 index 805a2e7..0000000 --- a/doc/es/lvpn-add-subnet.markdown +++ /dev/null @@ -1,50 +0,0 @@ -% LVPN-ADD-SUBNET(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -_lvpn add-subnet_ agrega una dirección IP al nodo - - -# SINOPSIS - -_lvpn add-subnet_ [-hvg] -[4|6] [nodo-local] [dirección] - - -# OPCIONES - --h -: Ayuda - --v -: Modo verborrágico, informa todo lo que se está haciendo - --g -: Generar la dirección IP automáticamente en lugar de esperar una - dirección asignada manualmente. Este es el comportamiento por - defecto si no se especifica nada. - --4 -: Generar una dirección IPv4 - --6 -: Generar una dirección IPv6. Este es el comportamiento por defecto. - - -# DESCRIPCION - -Agrega o genera una dirección IP en el archivo de host del nodo -especificado. Puede ser IPv4 (con _-4_) o IPv6 (con _-6_). - -Útil para la migración a IPv6. - -Este comando adivina el nombre del nodo a partir de $HOSTNAME si no se -pasa como argumento. - - -# EJEMPLOS - -## Generar y agregar una IPv6 al nodo local - -_lvpn add-subnet_ -v diff --git a/doc/es/lvpn-announce.markdown b/doc/es/lvpn-announce.markdown deleted file mode 100644 index 4101088..0000000 --- a/doc/es/lvpn-announce.markdown +++ /dev/null @@ -1,68 +0,0 @@ -% LVPN-ANNOUNCE(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -_lvpn announce_ Anunciar la llave en la red local usando avahi. - - -# SINOPSIS - -_lvpn announce_ [-h] [-sp] nodo-local - - -# DESCRIPCION - -Facilita el intercambio de llaves en una red local anunciando el host -local en mDNS. Usar en conjunto con _lvpn discover_. - - -# OPCIONES - --h -: Ayuda - --s -: Dejar de anunciar, junto con _-p_ elimina el archivo - _lvpn.service_, sino, detiene _avahi-publish_. - --p -: Anunciar permanentemente (requiere root). Instala _lvpn.service_ - de forma que _avahi-daemon_ anuncie la llave cada vez que se inicia - el servicio. - -# EJEMPLOS - -## Anunciar un nodo - - lvpn announce noanoa - - -## Anunciar un nodo permanentemente - - lvpn announce -p noanoa - -Instala el host _noanoa_ en /etc/avahi/services/lvpn.service. - - -## Anuncia una llaves tipo conserje (?) - - lvpn announce -b amigo - - -## Dejar de anunciar un nodo - - lvpn announce -s - -Detiene _avahi-publish_ para esta sesión. - - -## Dejar de anunciar un nodo permanente - - lvpn announce -sp - - -# VER TAMBIEN - -_avahi.service(5)_, _avahi-publish(1)_, _lvpn-discover(1)_ diff --git a/doc/es/lvpn-avahi-anuncio.markdown b/doc/es/lvpn-avahi-anuncio.markdown deleted file mode 100644 index 7f5ff1a..0000000 --- a/doc/es/lvpn-avahi-anuncio.markdown +++ /dev/null @@ -1,17 +0,0 @@ -% LVPN-AVAHI-ANUNCIO.MARKDOWN(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# lvpn-announce - -Anunciar la llave en la red local usando avahi. - - -h Este mensaje - -Uso: - -* Anunciar un nodo - - lvpn avahi-anuncio nodo [tcp|udp] puerto archivo - - diff --git a/doc/es/lvpn-connectto.1 b/doc/es/lvpn-connectto.1 deleted file mode 100644 index 642ebe4..0000000 --- a/doc/es/lvpn-connectto.1 +++ /dev/null @@ -1,38 +0,0 @@ -.TH LVPN\-CONNECTTO 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NOMBRE -.PP -Agregar otros nodos a los que conectarse -.SH SINOPSIS -.PP -\f[I]lvpn connectto\f[] nodo\-local [nodo\-remoto nodo\-remoto2...] -.SH DESCRIPCION -.PP -Configura el nodo local para conectarse a los nodos remotos -especificados. -Para poder ingresar a una red tinc, hay que copiar el archivo de host -del nodo remoto en el directorio hosts/ y agregar la línea -\f[I]ConnectTo = nodo\-remoto\f[] en \f[I]tinc.conf\f[]. -Este script automatiza este paso. -.PP -Los nodos remotos deben ejecutar el comando \f[I]lvpn add\-host\f[] con -el nombre del nodo local. -.SH EJEMPLOS -.SS Listar los nodos a los que noanoa se conecta -.IP -.nf -\f[C] -lvpn\ connectto\ noanoa -\f[] -.fi -.SS Agregar los nodos ponape y medieval al nodo noanoa -.IP -.nf -\f[C] -lvpn\ connectto\ noanoa\ ponape\ medieval -\f[] -.fi -.SH VER TAMBIEN -.PP -\f[I]tinc.conf(5)\f[], \f[I]lvpn\-add\-host(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn-connectto.markdown b/doc/es/lvpn-connectto.markdown deleted file mode 100644 index 2c58891..0000000 --- a/doc/es/lvpn-connectto.markdown +++ /dev/null @@ -1,40 +0,0 @@ -% LVPN-CONNECTTO(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Agregar otros nodos a los que conectarse - - -# SINOPSIS - -_lvpn connectto_ nodo-local [nodo-remoto nodo-remoto2...] - - -# DESCRIPCION - -Configura el nodo local para conectarse a los nodos remotos -especificados. Para poder ingresar a una red tinc, hay que copiar el -archivo de host del nodo remoto en el directorio hosts/ y agregar la -línea _ConnectTo = nodo-remoto_ en _tinc.conf_. Este script automatiza -este paso. - -Los nodos remotos deben ejecutar el comando _lvpn add-host_ con el -nombre del nodo local. - - -# EJEMPLOS - -## Listar los nodos a los que noanoa se conecta - - lvpn connectto noanoa - -## Agregar los nodos ponape y medieval al nodo noanoa - - lvpn connectto noanoa ponape medieval - - -# VER TAMBIEN - -_tinc.conf(5)_, _lvpn-add-host(1)_ diff --git a/doc/es/lvpn-d3.markdown b/doc/es/lvpn-d3.markdown deleted file mode 100644 index 7528b61..0000000 --- a/doc/es/lvpn-d3.markdown +++ /dev/null @@ -1,20 +0,0 @@ -% LVPN-D3(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Exportar los enlaces y nodos a un gráfico de fuerza con d3.js. - - -# SINOPSIS - -lvpn d3 > data.json - - -# DESCRIPCION - -Extrae los nodos y enlaces conocidos del log de tincd y los imprime en -JSON para D3. - -El daemon tincd debe iniciarse con *--logfile*. diff --git a/doc/es/lvpn-discover.markdown b/doc/es/lvpn-discover.markdown deleted file mode 100644 index a77cc9b..0000000 --- a/doc/es/lvpn-discover.markdown +++ /dev/null @@ -1,86 +0,0 @@ -% LVPN-DISCOVER(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Descubrir nodos en la red local usando Avahi y opcionalmente agregarlos. - - -# SINOPSIS - -_lvpn discover_ [-h] [-i if|-A] [-a|-c] [-f] [-b] nodo-local [nodo-remoto] - - -# OPCIONES - --h -: Ayuda - --i -: Filtrar por interface de red - --a -: Agregar los nodos, reconocerlos. Descarga el archivo de host del - nodo y lo agrega usando _lvpn add-host_. - --c -: Conectarse a los nodos (implica -a). Luego de correr _-a_, se - conecta a los nodos como si se corriera _lvpn connectto_. - --f -: Confiar en las llaves de la red en lugar de las locales. Cuando ya - se posee una copia del archivo de host, se utiliza esa copia. Con - esta opción siempre se usa el host anunciado. - --A -: Usar todas las interfaces (incluso la de la VPN, ¡no usar con _-c_!) - --b -: Agrega una llave anunciada en la LibreVPN (?) - - -# DESCRIPCION - -Facilita el intercambio de archivos de nodo en una red local. - -Usado en conjunto con _lvpn announce_ para descubrir nodos anunciados en -la red local de esta forma. - -Por seguridad, si el archivo del nodo ya existe localmente, se utiliza ese. -Con la opción _-f_ se confía en todos. - - -# EJEMPLOS - -## Listar los nodos encontrados en la LAN - -lvpn discover - -## Encontrar todos los nodos anunciados, incluida la VPN - - lvpn discover -A - -## Agregar los nodos encontrados a ponape - - lvpn discover -a ponape - -## Conectarse a los nodos encontrados por ponape - - lvpn discover -c ponape - -## La red local es de confianza - - lvpn discover -f -c ponape - -## Si estamos conectados a varias redes, sólo buscar en una: - - lvpn discover -i eth0 -c ponape - -## Conectarse a todos los nodos anunciados, incluida la VPN (¡nunca hacer esto!) - - lvpn discover -c ponape -A - -## Conecta a una llave anunciada en la VPN - - lvpn discover -b ponape nuevo-nodo diff --git a/doc/es/lvpn-init.1 b/doc/es/lvpn-init.1 deleted file mode 100644 index ee2d16b..0000000 --- a/doc/es/lvpn-init.1 +++ /dev/null @@ -1,120 +0,0 @@ -.TH "LVPN\-INIT" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NOMBRE -.PP -Crea un nuevo nodo -.SH SINOPSIS -.PP -lvpn init [\-A] [\-f] [\-q] [\-p 655] [\-l 192.168.9.202/32] [\-s -10.4.24.128/27] [\-r] [\-a dominio.eninternet.tld] [\-c otronodo] nodo -.SH OPCIONES -.TP -.B \-h -Ayuda -.RS -.RE -.TP -.B \-q -Modo silencioso -.RS -.RE -.TP -.B \-a ejemplo.org -Ubicación pública del nodo (dominio o IP). -Puede especificarse varias veces en el orden en que se quiera que los -demás nodos intenten conectarse. -Si no se especifica esta opción se entiende que el nodo no es accesible -públicamente y no acepta conexiones (sólo cliente). -.RS -.RE -.TP -.B \-c nodo\-remoto -Conectar a este nodo. -Versión rápida de \f[I]lvpn connectto\f[]. -Puede especificarse varias veces. -.RS -.RE -.TP -.B \-l 192.168.9.0 -Usar esta dirección IP. -Si no se especifica, la dirección es generada automáticamente. -.RS -.RE -.TP -.B \-i -Instalar al finalizar (requiere root). -Es lo mismo que correr \f[I]lvpn install\f[] más tarde. -.RS -.RE -.TP -.B \-f -Forzar la creación de un nodo. -Útil si se canceló previamente o se quiere comenzar desde cero. -Se pierden todos los datos! -.RS -.RE -.TP -.B \-p 655 -Número de puerto, por defecto 655 o la variable de entorno -\f[I]LVPN_PORT\f[]. -.RS -.RE -.TP -.B \-s 10.0.0.0 -Anunciar otra subred (\f[I]opción no funcional\f[]). -.RS -.RE -.TP -.B \-r -Aceptar otras subredes remotas (\f[I]opción no funcional\f[]). -.RS -.RE -.TP -.B \-A -Crear un nodo para sistemas Android. -Dado que el sistema puede no contener utilidades avanzadas de -configuración, esta opción instala una versión mínima de -\f[I]tinc\-up\f[]. -.RS -.RE -.SH DESCRIPCION -.PP -Genera la configuración básica de un nodo y lo almacena en el directorio -\f[I]nodos/nombre\-del\-nodo\f[]. -.PP -Se puede correr varias veces con diferentes nombres de nodo para tener -configuraciones separadas (un sólo host, varios nodos) o unidas (un nodo -para cada host local o remoto). -.PP -Por ejemplo, los dispositivos embebidos pueden no soportar las -herramientas de \f[I]lvpn\f[], pero desde un sistema GNU/Linux se puede -generar la configuración y luego copiarla al host que corresponda (al -celular o tablet Android, router con OpenWrt, etc.) -.PP -\f[I]IMPORTANTE\f[]: La configuración por defecto de un nodo sin el -campo Address asume que se encuentra detrás de un firewall o que no -están configurados para aceptar conexiones directas. -Si agregás un dirección pública también tenés que deshabilitar la opción -IndirectData. -.SH EJEMPLOS -.SS Uso básico con una sola conexión -.PP -lvpn init \-c trululu guachiguau -.SS Crear un nodo público con una conexión e instalarlo localmente -.PP -lvpn init \-i \-a guachiguau.org \-c trululu guachiguau -.SS Crear un nodo con una IP predeterminada en la red -.PP -lvpn init \-l 192.168.9.202/32 guachiguau -.SS Crear un nodo que acepte otras redes -.PP -lvpn init \-r guachiguau -.SS Crear un nodo que acepte otras redes y sea puente de otra red -.PP -lvpn init \-r \-s 10.4.23.224/27 guachiguau -.SS Crear el nodo rapanui para sistemas android -.PP -Necesita Tinc GUI for Android (http://tinc_gui.poirsouille.org/) -.PP -lvpn init \-A \-c ponape rapanui -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn-init.markdown b/doc/es/lvpn-init.markdown deleted file mode 100644 index 569d363..0000000 --- a/doc/es/lvpn-init.markdown +++ /dev/null @@ -1,108 +0,0 @@ -% LVPN-INIT(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Crea un nuevo nodo - - -# SINOPSIS - -lvpn init [-A] [-f] [-q] [-p 655] [-l 192.168.9.202/32] [-s 10.4.24.128/27] [-r] [-a dominio.eninternet.tld] [-c otronodo] nodo - - -# OPCIONES - --h -: Ayuda - --q -: Modo silencioso - --a ejemplo.org -: Ubicación pública del nodo (dominio o IP). Puede especificarse - varias veces en el orden en que se quiera que los demás nodos - intenten conectarse. Si no se especifica esta opción se entiende - que el nodo no es accesible públicamente y no acepta conexiones - (sólo cliente). - --c nodo-remoto -: Conectar a este nodo. Versión rápida de _lvpn connectto_. Puede - especificarse varias veces. - --l 192.168.9.0 -: Usar esta dirección IP. Si no se especifica, la dirección es - generada automáticamente. - --i -: Instalar al finalizar (requiere root). Es lo mismo que correr - _lvpn install_ más tarde. - --f -: Forzar la creación de un nodo. Útil si se canceló previamente o se - quiere comenzar desde cero. Se pierden todos los datos! - --p 655 -: Número de puerto, por defecto 655 o la variable de entorno - _LVPN\_PORT_. - --s 10.0.0.0 -: Anunciar otra subred (_opción no funcional_). - --r -: Aceptar otras subredes remotas (_opción no funcional_). - --A -: Crear un nodo para sistemas Android. Dado que el sistema puede no - contener utilidades avanzadas de configuración, esta opción instala - una versión mínima de _tinc-up_. - - -# DESCRIPCION - -Genera la configuración básica de un nodo y lo almacena en el directorio -_nodos/nombre-del-nodo_. - -Se puede correr varias veces con diferentes nombres de nodo para tener -configuraciones separadas (un sólo host, varios nodos) o unidas (un nodo -para cada host local o remoto). - -Por ejemplo, los dispositivos embebidos pueden no soportar las -herramientas de _lvpn_, pero desde un sistema GNU/Linux se puede generar -la configuración y luego copiarla al host que corresponda (al celular o -tablet Android, router con OpenWrt, etc.) - -_IMPORTANTE_: La configuración por defecto de un nodo sin el campo -Address asume que se encuentra detrás de un firewall o que no están -configurados para aceptar conexiones directas. Si agregás un dirección -pública también tenés que deshabilitar la opción IndirectData. - - -# EJEMPLOS - -## Uso básico con una sola conexión - - lvpn init -c trululu guachiguau - -## Crear un nodo público con una conexión e instalarlo localmente - - lvpn init -i -a guachiguau.org -c trululu guachiguau - -## Crear un nodo con una IP predeterminada en la red - - lvpn init -l 192.168.9.202/32 guachiguau - -## Crear un nodo que acepte otras redes - - lvpn init -r guachiguau - -## Crear un nodo que acepte otras redes y sea puente de otra red - - lvpn init -r -s 10.4.23.224/27 guachiguau - -## Crear el nodo rapanui para sistemas android - -Necesita [Tinc GUI for Android](http://tinc_gui.poirsouille.org/) - - lvpn init -A -c ponape rapanui diff --git a/doc/es/lvpn-install-mail-server.markdown b/doc/es/lvpn-install-mail-server.markdown deleted file mode 100644 index 155dd07..0000000 --- a/doc/es/lvpn-install-mail-server.markdown +++ /dev/null @@ -1,39 +0,0 @@ -% LVPN-INSTALL-MAIL-SERVER(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -_lvpn install-mail-server_ instala un servidor de correo local para -intercambio de correo electrónico de nodo a nodo. - - -# SINOPSIS - -_lvpn install-mail-server_ [-h] [-f] [-p /etc/postfix] nodo-local - - -# DESCRIPCION - -Instala una configuración de _postfix_ orientada a intercambiar correo -electrónico entre nodos usando direcciones locales con la forma -_usuario@nodo.local_. Además puede enviar correo hacia Internet usando -un gateway SMTP que traduce las direcciones. - - -# OPCIONES - --h -: Este mensaje - --f -: Forzar la instalación, eliminando la configuración de postfix - existente - --p /etc/postfix -: Instala la configuración en otra ruta. - - -# VER TAMBIEN - -_postfix(1)_ _postmap(1)_ _transport(5)_ diff --git a/doc/es/lvpn-install-script.1 b/doc/es/lvpn-install-script.1 deleted file mode 100644 index 7731784..0000000 --- a/doc/es/lvpn-install-script.1 +++ /dev/null @@ -1,90 +0,0 @@ -.TH "LVPN\-INSTALL\-SCRIPT" "1" "2013" "Manual de LibreVPN" "LibreVPN" -.SH NOMBRE -.PP -lvpn install\-script instala script que se ejecutan en eventos de la -VPN. -.SH SINOPSIS -.PP -lvpn install\-script [\-hves] nodo\-local evento script -.SH DESCRIPCION -.PP -Instala scripts que se ejecutan durante eventos de la VPN. -Al momento \f[C]tincd\f[] sólo soporta dos tipos de eventos luego de -iniciado, cuando un nodo se conecta o desconecta, o cuando una subred es -anunciada o desanunciada. -.SH OPCIONES -.TP -.B \-h -Este mensaje -.RS -.RE -.TP -.B \-v -Modo verborrágico -.RS -.RE -.TP -.B \-e -Listar los eventos disponibles -.RS -.RE -.TP -.B \-s -Listar los scripts disponibles -.RS -.RE -.SH EVENTOS -.TP -.B tinc -Este evento se ejecuta cuando se inicia o se detiene la VPN. -Colocar scripts que sólo deben ejecutarse una vez acá. -.RS -.RE -.TP -.B host -Ejecutar este script cada vez que un nodo aparece o desaparece. -.RS -.RE -.TP -.B subnet -Ejecutar este script cada vez que una subred aparece o desaparece. -.RS -.RE -.SH SCRIPTS -.TP -.B debug -Útil para debuguear eventos -.RS -.RE -.TP -.B notify -Muestra una notificación cada vez que un nodo se conecta o desconecta, -usando libnotify. -\f[B]No funciona\f[], D\-Bus no permite que un usuario mande -notificaciones a la sesión de otro. -.RS -.RE -.TP -.B ipv6\-router -Configura este nodo como un router/gateway de IPv6 -.RS -.RE -.TP -.B ipv6\-default\-route -Configura la ruta IPv6 por defecto para este nodo -.RS -.RE -.TP -.B port\-forwarding -Le pide al router que abra los puertos, usando NAT\-PMP y UPnP -.RS -.RE -.SH EJEMPLOS -.SS Mostrar una notificación cuando un nodo se (des)conecta -.PP -\f[I]lvpn install\-script\f[] ponape host notify -.SH VER TAMBIEN -.PP -\f[I]tinc.conf(5)\f[] -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn-install.1 b/doc/es/lvpn-install.1 deleted file mode 100644 index b833db9..0000000 --- a/doc/es/lvpn-install.1 +++ /dev/null @@ -1,46 +0,0 @@ -.TH "LVPN\-INSTALL" "1" "2013" "Manual de LibreVPN" "lvpn" -.SH NOMBRE -.PP -Instala o sincroniza el nodo en el sistema. -.SH SINOPSIS -.PP -\f[I]lvpn install\f[] [\-hvdn] nodo\-local -.SH OPCIONES -.TP -.B \-h -Esta ayuda -.RS -.RE -.TP -.B \-v -Modo verborrágico -.RS -.RE -.TP -.B \-r -Eliminar archivos extra, copiar tal cual se ve en nodos/nodo\-local. -Antes era \f[I]\-d\f[] pero esta flag está reservada para debug. -.RS -.RE -.TP -.B \-n -Mostrar los cambios sin realizarlos (usar con \-v) -.RS -.RE -.SH DESCRIPCION -.PP -Sincroniza \f[I]nodos/nodo\-local\f[] con \f[I]/etc/tinc/lvpn\f[]. -.PP -Es necesario correrlo luego de cada cambio. -.PP -Además, configura el sistema para el inicio automático de la VPN y si se -usa NetworkManager, la reconexión inmediata al conectarse a una red. -.PP -Si el paquete que provee \f[I]nss\-mdns\f[] se encuentra instalado, -modificar el archivo \f[I]/etc/nsswitch.conf\f[] para resolver -direcciones \f[I]hostname.local\f[]. -.SH VER TAMBIEN -.PP -\f[I]rsync(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn-push.markdown b/doc/es/lvpn-push.markdown deleted file mode 100644 index 14ca107..0000000 --- a/doc/es/lvpn-push.markdown +++ /dev/null @@ -1,28 +0,0 @@ -% LVPN-PUSH(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Sincronizar un nodo en otro sistema - - -# SINOPSIS - -_lvpn push_ nodo user@host [directorio de tinc] - - -# DESCRIPCION - -Este comando permite instalar o actualizar un nodo en otro sistema. Está -pensado para poder trabajar con nodos embebidos, como los instalados en -routers con OpenWRT. - -Necesita acceso SSH. - - -# EJEMPLOS - -## Sincronizar un nodo - -_lvpn push_ guachiguau root@10.4.23.225 diff --git a/doc/es/lvpn-send-email.markdown b/doc/es/lvpn-send-email.markdown deleted file mode 100644 index 0fb4b0f..0000000 --- a/doc/es/lvpn-send-email.markdown +++ /dev/null @@ -1,41 +0,0 @@ -% LVPN-SEND-EMAIL(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Envía un nodo por correo - --h -: Ayuda - --t -: Destinatario, por defecto es la lista vpn@hackcoop.com.ar - --f -: Remitente, por defecto email de git o usuario@hostname - --s -: Asunto alternativo - --m -: Mensaje alternativo - - -## Variables de entorno: - -SENDMAIL -: Programa alternativo a sendmail - - -# DESCRIPCION - -Genera un email con el archivo de host del nodo especificado y lo envía -al destinatario. - -Necesita la utilidad _sendmail_ o compatible configurada en el sistema. - - -# VER TAMBIEN - -_sendmail(1)_ diff --git a/doc/es/lvpn-unknown-peers.1 b/doc/es/lvpn-unknown-peers.1 deleted file mode 100644 index 2b68cbb..0000000 --- a/doc/es/lvpn-unknown-peers.1 +++ /dev/null @@ -1,32 +0,0 @@ -.TH LVPN\-UNKNOWN\-PEERS 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NOMBRE -.PP -Lista los pares desconocidos -.SH SINOPSIS -.PP -\f[I]lvpn unknown-peers\f[] [/var/log/tinc.lvpn.log] -.SH OPCIONES -.TP -.B \-h -Esta ayuda -.RS -.RE -.TP -.B \-c -Contar los intentos de conexión fallidos. -Muestra una cuenta de las conexiones sin éxito de cada par. -.RS -.RE -.SH DESCRIPCION -.PP -Busca los nodos que intentan conectarse con el nodo local pero son -rechazados porque la llave no está accesible. -.PP -El demonio tincd debe iniciarse con la opción \f[I]\-\-logfile\f[]. -.PP -Útil para usar en conjunto con \f[I]lvpn add\-host\f[]. -.SH VER TAMBIEN -.PP -\f[I]lvpn\-add\-host(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn-update-skel.markdown b/doc/es/lvpn-update-skel.markdown deleted file mode 100644 index 36fcb04..0000000 --- a/doc/es/lvpn-update-skel.markdown +++ /dev/null @@ -1,29 +0,0 @@ -% LVPN-UPDATE-SKEL(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -Actualizar los archivos base. - - -# SINOPSIS - -_lvpn update-skel_ [-v] nodo1 [nodo2 ...] - - -# OPCIONES - --v -: Modo verborrágico - - -# DESCRIPCION - -El "skel" de _lvpn_ incluye los scripts que inician y configuran la red -(_tinc-up_, _tinc-down_, etc.). Este comando actualiza esos scripts en -los nodos especificados. - -Si los archivos ya existen se guardan backups con la extensión -_.backup_. - diff --git a/doc/es/lvpn.1 b/doc/es/lvpn.1 deleted file mode 100644 index febc8e7..0000000 --- a/doc/es/lvpn.1 +++ /dev/null @@ -1,55 +0,0 @@ -.TH LVPN 1 "2013" "Manual de LibreVPN" "lvpn" -.SH NOMBRE -.PP -LibreVPN -.SS SINOPSIS -.PP -lvpn comando \-opciones parametros -.SH OPCIONES -.TP -.B \-h -Ayuda -.RS -.RE -.TP -.B \-c -Lista de comandos disponibles -.RS -.RE -.TP -.B \-d -Habilitar debug. -Para hacer debug de los comandos, agregar esta opción. -.RS -.RE -.SH DESCRIPCION -.SS ¿Cómo empiezo? -.PP -Leyendo el sitio http://librevpn.org.ar o la ayuda de \f[I]lvpn init\f[] -:) -.SS ¿Donde está mi nodo? -.PP -El comando \f[I]lvpn init\f[] crea tu nodo dentro del directorio -\f[I]nodos/\f[] si se está corriendo \f[I]lvpn\f[] desde el directorio -de desarrollo, o en \f[I]~/.config/lvpn/nodos\f[] si se encuentra -instalado en el sistema. -.PP -Podés tener varios nodos pero instalar uno por sistema (usando \f[I]lvpn -install tunodo\f[]). -.PP -Cualquier comando que aplique cambios en tu nodo, debe instalarse luego -usando el comando \f[I]lvpn install tunodo\f[]. -.PP -Consultar la ayuda de cada comando usando la opción \-h luego del nombre -de comando: -.IP -.nf -\f[C] -lvpn\ add\-host\ \-h -\f[] -.fi -.SH VER TAMBIEN -.PP -\f[I]lvpn\-init(1)\f[] -.SH AUTHORS -fauno . diff --git a/doc/es/lvpn_tincd.markdown b/doc/es/lvpn_tincd.markdown deleted file mode 100644 index 8b5de65..0000000 --- a/doc/es/lvpn_tincd.markdown +++ /dev/null @@ -1,38 +0,0 @@ -% LVPN\_TINCD(1) Manual de LibreVPN | lvpn -% fauno -% 2013 - -# NOMBRE - -LibreVPN - -# OPCIONES - -Las flags recomendadas para correr _tincd_ son: - -### Seguridad - --U nobody -: No correr con privilegios de root - --R -: Chroot al directorio de configuración - --L -: Poner tincd en memoria protegida. Esta opción protege mejor los - parámetros de cifrado pero en mi experiencia hace que _tincd_ se - cierre inesperadamente. Usar con precaución. - - -### Log - ---logfile -: Crea /var/log/tinc.vpn.log - --d 1 -: Informa las conexiones - - -# VER TAMBIEN - -_tincd(8)_ diff --git a/doc/es/lvpn-push.1 b/doc/es/push.1 similarity index 100% rename from doc/es/lvpn-push.1 rename to doc/es/push.1 diff --git a/doc/es/rap.1 b/doc/es/rap.1 new file mode 100644 index 0000000..a43b9e2 --- /dev/null +++ b/doc/es/rap.1 @@ -0,0 +1,49 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP" "1" "2013" "Manual de RAP" "rap" +.hy +.SH NOMBRE +.PP +RAP +.SS SINOPSIS +.PP +rap comando -opciones parametros +.SH OPCIONES +.TP +-h +Ayuda +.TP +-c +Lista de comandos disponibles +.TP +-d +Habilitar debug. +Para hacer debug de los comandos, agregar esta opci\['o]n. +.SH DESCRIPCION +.SS \[r?]C\['o]mo empiezo? +.PP +Leyendo la ayuda de \f[I]rap init\f[R] :) +.SS \[r?]Donde est\['a] mi nodo? +.PP +El comando \f[I]rap init\f[R] crea tu nodo dentro del directorio +\f[I]nodos/\f[R]. +.PP +Pod\['e]s tener varios nodos pero instalar uno por sistema (usando +\f[I]rap install tu-nodo\f[R]). +.PP +Cualquier comando que aplique cambios en tu nodo, debe instalarse luego +usando el comando \f[I]rap install tu-nodo\f[R]. +.PP +Consultar la ayuda de cada comando usando la opci\['o]n -h luego del +nombre de comando: +.IP +.nf +\f[C] +rap add-host -h +\f[R] +.fi +.SH VER TAMBIEN +.PP +\f[I]rap-init(1)\f[R] +.SH AUTHORS +fauno . diff --git a/doc/es/lvpn.markdown b/doc/es/rap.markdown similarity index 54% rename from doc/es/lvpn.markdown rename to doc/es/rap.markdown index a483362..fef52fa 100644 --- a/doc/es/lvpn.markdown +++ b/doc/es/rap.markdown @@ -1,14 +1,14 @@ -% LVPN(1) Manual de LibreVPN | lvpn +% RAP(1) Manual de RAP | rap % fauno % 2013 # NOMBRE -LibreVPN +RAP ## SINOPSIS - lvpn comando -opciones parametros + rap comando -opciones parametros # OPCIONES @@ -28,26 +28,24 @@ LibreVPN ## ¿Cómo empiezo? -Leyendo el sitio http://librevpn.org.ar o la ayuda de _lvpn init_ :) +Leyendo la ayuda de _rap init_ :) ## ¿Donde está mi nodo? -El comando _lvpn init_ crea tu nodo dentro del directorio _nodos/_ -si se está corriendo _lvpn_ desde el directorio de desarrollo, o en -_~/.config/lvpn/nodos_ si se encuentra instalado en el sistema. +El comando _rap init_ crea tu nodo dentro del directorio _nodos/_. -Podés tener varios nodos pero instalar uno por sistema (usando _lvpn -install tunodo_). +Podés tener varios nodos pero instalar uno por sistema (usando _rap +install tu-nodo_). Cualquier comando que aplique cambios en tu nodo, debe instalarse luego -usando el comando _lvpn install tunodo_. +usando el comando _rap install tu-nodo_. Consultar la ayuda de cada comando usando la opción -h luego del nombre de comando: - lvpn add-host -h + rap add-host -h # VER TAMBIEN -_lvpn-init(1)_ +_rap-init(1)_ diff --git a/doc/es/lvpn_tincd.1 b/doc/es/rap_tincd.1 similarity index 100% rename from doc/es/lvpn_tincd.1 rename to doc/es/rap_tincd.1 diff --git a/doc/es/lvpn-send-email.1 b/doc/es/send-email.1 similarity index 100% rename from doc/es/lvpn-send-email.1 rename to doc/es/send-email.1 diff --git a/doc/es/unknown-peers.1 b/doc/es/unknown-peers.1 new file mode 100644 index 0000000..271bcc5 --- /dev/null +++ b/doc/es/unknown-peers.1 @@ -0,0 +1,33 @@ +.\" Automatically generated by Pandoc 2.9.2 +.\" +.TH "RAP-UNKNOWN-PEERS" "1" "2013" "Manual de RAP" "rap" +.hy +.SH NOMBRE +.PP +Lista los pares desconocidos que est\['a]n intentando conectarse al +nuestro. +.SH SINOPSIS +.PP +\f[I]rap unknown-peers\f[R] [/var/log/tinc.rap.log] +.SH OPCIONES +.TP +-h +Esta ayuda +.TP +-c +Contar los intentos de conexi\['o]n fallidos. +Muestra una cuenta de las conexiones sin \['e]xito de cada par. +.SH DESCRIPCION +.PP +Busca los nodos que intentan conectarse con el nodo local pero son +rechazados porque la llave no est\['a] accesible. +.PP +El demonio tincd debe iniciarse con la opci\['o]n +\f[I]\[en]logfile\f[R]. +.PP +\['U]til para usar en conjunto con \f[I]rap add-host\f[R]. +.SH VER TAMBIEN +.PP +\f[I]rap-add-host(1)\f[R] +.SH AUTHORS +fauno . diff --git a/doc/es/lvpn-unknown-peers.markdown b/doc/es/unknown-peers.markdown similarity index 65% rename from doc/es/lvpn-unknown-peers.markdown rename to doc/es/unknown-peers.markdown index b082f95..66c2787 100644 --- a/doc/es/lvpn-unknown-peers.markdown +++ b/doc/es/unknown-peers.markdown @@ -1,15 +1,15 @@ -% LVPN-UNKNOWN-PEERS(1) Manual de LibreVPN | lvpn +% RAP-UNKNOWN-PEERS(1) Manual de RAP | rap % fauno % 2013 # NOMBRE -Lista los pares desconocidos +Lista los pares desconocidos que están intentando conectarse al nuestro. # SINOPSIS -_lvpn unknown-peers_ [/var/log/tinc.lvpn.log] +_rap unknown-peers_ [/var/log/tinc.rap.log] # OPCIONES @@ -29,9 +29,9 @@ rechazados porque la llave no está accesible. El demonio tincd debe iniciarse con la opción _--logfile_. -Útil para usar en conjunto con _lvpn add-host_. +Útil para usar en conjunto con _rap add-host_. # VER TAMBIEN -_lvpn-add-host(1)_ +_rap-add-host(1)_ diff --git a/doc/es/lvpn-update-skel.1 b/doc/es/update-skel.1 similarity index 100% rename from doc/es/lvpn-update-skel.1 rename to doc/es/update-skel.1 diff --git a/etc/generate-ipv6-address-0.1/Makefile b/etc/generate-ipv6-address-0.1/Makefile deleted file mode 100644 index e2f4751..0000000 --- a/etc/generate-ipv6-address-0.1/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -PREFIX = /usr/local - -CDEBUGFLAGS = -Os -g -Wall - -DEFINES = $(PLATFORM_DEFINES) - -CFLAGS = $(CDEBUGFLAGS) $(DEFINES) $(EXTRA_DEFINES) - -arch := $(shell uname -m) - -all: $(arch)-generate-ipv6-address - -$(arch)-generate-ipv6-address: generate-ipv6-address.c - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< - -%.html: %.man - rman -f html $< | \ - sed -e "s|\\(.*(8)\\)|\1|" \ - > $@ - -generate-ipv6-address.html: generate-ipv6-address.man - -.PHONY: install.minimal install - -install.minimal: all - mkdir -p $(TARGET)$(PREFIX)/bin/ - -rm -f $(TARGET)$(PREFIX)/bin/generate-ipv6-address - cp generate-ipv6-address $(TARGET)$(PREFIX)/bin/ - chmod +x $(TARGET)$(PREFIX)/bin/generate-ipv6-address - -install: all install.minimal - mkdir -p $(TARGET)$(PREFIX)/man/man8/ - cp -f generate-ipv6-address.man $(TARGET)$(PREFIX)/man/man8/generate-ipv6-address.8 - -.PHONY: uninstall - -uninstall: - -rm -f $(TARGET)$(PREFIX)/bin/generate-ipv6-address - -rm -f $(TARGET)$(PREFIX)/man/man8/generate-ipv6-address.8 - -.PHONY: clean - -clean: - -rm -f *generate-ipv6-address - -rm -f *.o *~ core TAGS gmon.out - -rm -f generate-ipv6-address.html diff --git a/etc/generate-ipv6-address-0.1/generate-ipv6-address.c b/etc/generate-ipv6-address-0.1/generate-ipv6-address.c deleted file mode 100644 index 649df39..0000000 --- a/etc/generate-ipv6-address-0.1/generate-ipv6-address.c +++ /dev/null @@ -1,167 +0,0 @@ -/* -Copyright (c) 2006 by Juliusz Chroboczek - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int -main(int argc, char **argv) -{ - char *sprefix = NULL, *smac = NULL; - const char *p; - unsigned char mac[6]; - unsigned char address[16]; - char saddress[100]; - int i, rc, fd; - int random_prefix = 0, random_subnet = 0, print_prefix = 0; - - const char *usage = - "Usage: generate-ipv6-address [-p] [-s] {-r | prefix} [mac-48]\n"; - - i = 1; - while(i < argc) { - if(argv[i][0] != '-') { - break; - } else if(strcmp(argv[i], "--") == 0) { - i++; - break; - } else if(strcmp(argv[i], "-p") == 0) { - print_prefix = 1; - i++; - } else if(strcmp(argv[i], "-s") == 0) { - random_subnet = 1; - i++; - } else if(strcmp(argv[i], "-r") == 0) { - random_prefix = 1; - i++; - } else { - goto usage; - } - } - - if(!random_prefix) { - if(i >= argc) - goto usage; - sprefix = argv[i]; - i++; - } - - if(i < argc) { - smac = argv[i]; - i++; - } else { - smac = NULL; - } - - if(i < argc) - goto usage; - - if(!smac || random_prefix || random_subnet) { - fd = open("/dev/urandom", O_RDONLY); - if(fd < 0) { - perror("open(random)"); - exit(1); - } - } else { - fd = -1; - } - - if(random_prefix) { - address[0] = (0xFC | 0x01); /* locally generated */ - rc = read(fd, address + 1, 5); - if(rc != 5) { - perror("read(random)"); - exit(1); - } - memset(address + 6, 0, 2); - } else { - rc = inet_pton(AF_INET6, sprefix, address); - if(rc != 1) - goto usage; - } - - if(random_subnet) { - if(address[6] != 0 || address[7] != 0) { - fprintf(stderr, "Cannot use -s with this prefix.\n"); - exit(1); - } else { - rc = read(fd, address + 6, 2); - if(rc != 2) { - perror("read(random)"); - exit(1); - } - } - } - - if(print_prefix) { - memset(address + 8, 0, 8); - } else if(smac) { - rc = sscanf(smac, "%2hhx:%2hhx:%2hhx:%2hhx:%2hhx:%2hhx", - &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); - if(rc != 6) - goto usage; - - if((mac[0] & 1) != 0) { - fprintf(stderr, "Warning: group bit is not 0.\n"); - mac[0] &= ~1; - } - - address[8] = mac[0] ^ 2; - address[9] = mac[1]; - address[10] = mac[2]; - address[11] = 0xFF; - address[12] = 0xFE; - address[13] = mac[3]; - address[14] = mac[4]; - address[15] = mac[5]; - } else { - rc = read(fd, address + 8, 8); - if(rc != 8) { - perror("read(random)"); - exit(1); - } - address[8] &= ~3; - } - - if(fd >= 0) - close(fd); - - p = inet_ntop(AF_INET6, address, saddress, 100); - if(p == NULL) { - perror("inet_ntop"); - exit(1); - } - - printf("%s\n", p); - return 0; - - usage: - fputs(usage, stderr); - exit(1); -} diff --git a/etc/generate-ipv6-address-0.1/generate-ipv6-address.man b/etc/generate-ipv6-address-0.1/generate-ipv6-address.man deleted file mode 100644 index 749e3a2..0000000 --- a/etc/generate-ipv6-address-0.1/generate-ipv6-address.man +++ /dev/null @@ -1,64 +0,0 @@ -.TH GENERATE-IPV6-ADDRESS 8 -.SH NAME -generate\-ipv6\-address \- perform IPv6 address generation -.SH SYNOPSIS -.B generate\-ipv6\-address -[ -.B \-p -] { -.B \-r -| -.I prefix -} [ -.I mac\-48 -] -.SH DESCRIPTION -.B Generate\-ipv6\-address -generates IPv6 addresses from a given prefix and either a given MAC-48 -address (an Ethernet hadrware address) or a randomly drawn host -number. -.SH OPTIONS -.TP -.B \-p -Generate a prefix rather than a node address. -.TP -.B \-r -Use a randomly generated RFC 4193 prefix. -.TP -.B \-s -Use a randomly generated subnet number rather than 0. This is only -useful with -.BR \-r , -or when given a /48 prefix. -.TP -.I prefix -Use the given prefix. /64 is implied, except when -.B \-s -is specified, in which case /48 is implied. -.TP -.I mac\-48 -Generate a host number from the given MAC\-48 address. If omitted, -the host number is drawn randomly (and the local/global bit is set to -zero). -.SH EXAMPLES -Generate a host number from a given prefix and MAC\-48 address: -.IP -$ ahcp\-generate\-address 2001:DB8:1234:5678:: 12:34:56:78:9a:bc -.PP -Generate a host number from a given prefix and a randomly chosen host number: -.IP -$ ahcp\-generate\-address 2001:DB8:1234:5678:: -.PP -Generate a random /48 prefix according to RFC 4193: -.IP -$ ahcp\-generate\-address \-p \-r -.PP -Generate a random /64 prefix according to RFC 4193: -.IP -$ generate\-ipv6\-address \-p \-r \-s -.PP -.SH SEE ALSO -.BR ahcpd (8). -.SH AUTHOR -Juliusz Chroboczek. - diff --git a/etc/keyserver/bottle.py b/etc/keyserver/bottle.py deleted file mode 100644 index bbf61ab..0000000 --- a/etc/keyserver/bottle.py +++ /dev/null @@ -1,3355 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -Bottle is a fast and simple micro-framework for small web applications. It -offers request dispatching (Routes) with url parameter support, templates, -a built-in HTTP Server and adapters for many third party WSGI/HTTP-server and -template engines - all in a single file and with no dependencies other than the -Python Standard Library. - -Homepage and documentation: http://bottlepy.org/ - -Copyright (c) 2012, Marcel Hellkamp. -License: MIT (see LICENSE for details) -""" - -from __future__ import with_statement - -__author__ = 'Marcel Hellkamp' -__version__ = '0.12-dev' -__license__ = 'MIT' - -# The gevent server adapter needs to patch some modules before they are imported -# This is why we parse the commandline parameters here but handle them later -if __name__ == '__main__': - from optparse import OptionParser - _cmd_parser = OptionParser(usage="usage: %prog [options] package.module:app") - _opt = _cmd_parser.add_option - _opt("--version", action="store_true", help="show version number.") - _opt("-b", "--bind", metavar="ADDRESS", help="bind socket to ADDRESS.") - _opt("-s", "--server", default='wsgiref', help="use SERVER as backend.") - _opt("-p", "--plugin", action="append", help="install additional plugin/s.") - _opt("--debug", action="store_true", help="start server in debug mode.") - _opt("--reload", action="store_true", help="auto-reload on file changes.") - _cmd_options, _cmd_args = _cmd_parser.parse_args() - if _cmd_options.server and _cmd_options.server.startswith('gevent'): - import gevent.monkey; gevent.monkey.patch_all() - -import base64, cgi, email.utils, functools, hmac, imp, itertools, mimetypes,\ - os, re, subprocess, sys, tempfile, threading, time, warnings - -from datetime import date as datedate, datetime, timedelta -from tempfile import TemporaryFile -from traceback import format_exc, print_exc - -try: from json import dumps as json_dumps, loads as json_lds -except ImportError: # pragma: no cover - try: from simplejson import dumps as json_dumps, loads as json_lds - except ImportError: - try: from django.utils.simplejson import dumps as json_dumps, loads as json_lds - except ImportError: - def json_dumps(data): - raise ImportError("JSON support requires Python 2.6 or simplejson.") - json_lds = json_dumps - - - -# We now try to fix 2.5/2.6/3.1/3.2 incompatibilities. -# It ain't pretty but it works... Sorry for the mess. - -py = sys.version_info -py3k = py >= (3, 0, 0) -py25 = py < (2, 6, 0) -py31 = (3, 1, 0) <= py < (3, 2, 0) - -# Workaround for the missing "as" keyword in py3k. -def _e(): return sys.exc_info()[1] - -# Workaround for the "print is a keyword/function" Python 2/3 dilemma -# and a fallback for mod_wsgi (resticts stdout/err attribute access) -try: - _stdout, _stderr = sys.stdout.write, sys.stderr.write -except IOError: - _stdout = lambda x: sys.stdout.write(x) - _stderr = lambda x: sys.stderr.write(x) - -# Lots of stdlib and builtin differences. -if py3k: - import http.client as httplib - import _thread as thread - from urllib.parse import urljoin, SplitResult as UrlSplitResult - from urllib.parse import urlencode, quote as urlquote, unquote as urlunquote - urlunquote = functools.partial(urlunquote, encoding='latin1') - from http.cookies import SimpleCookie - from collections import MutableMapping as DictMixin - import pickle - from io import BytesIO - basestring = str - unicode = str - json_loads = lambda s: json_lds(touni(s)) - callable = lambda x: hasattr(x, '__call__') - imap = map - def _raise(*a): raise a[0](a[1]).with_traceback(a[2]) -else: # 2.x - import httplib - import thread - from urlparse import urljoin, SplitResult as UrlSplitResult - from urllib import urlencode, quote as urlquote, unquote as urlunquote - from Cookie import SimpleCookie - from itertools import imap - import cPickle as pickle - from StringIO import StringIO as BytesIO - if py25: - msg = "Python 2.5 support may be dropped in future versions of Bottle." - warnings.warn(msg, DeprecationWarning) - from UserDict import DictMixin - def next(it): return it.next() - bytes = str - else: # 2.6, 2.7 - from collections import MutableMapping as DictMixin - json_loads = json_lds - eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '', 'exec')) - -# Some helpers for string/byte handling -def tob(s, enc='utf8'): - return s.encode(enc) if isinstance(s, unicode) else bytes(s) -def touni(s, enc='utf8', err='strict'): - return s.decode(enc, err) if isinstance(s, bytes) else unicode(s) -tonat = touni if py3k else tob - -# 3.2 fixes cgi.FieldStorage to accept bytes (which makes a lot of sense). -# 3.1 needs a workaround. -if py31: - from io import TextIOWrapper - class NCTextIOWrapper(TextIOWrapper): - def close(self): pass # Keep wrapped buffer open. - - -# A bug in functools causes it to break if the wrapper is an instance method -def update_wrapper(wrapper, wrapped, *a, **ka): - try: functools.update_wrapper(wrapper, wrapped, *a, **ka) - except AttributeError: pass - - - -# These helpers are used at module level and need to be defined first. -# And yes, I know PEP-8, but sometimes a lower-case classname makes more sense. - -def depr(message, hard=False): - warnings.warn(message, DeprecationWarning, stacklevel=3) - -def makelist(data): # This is just to handy - if isinstance(data, (tuple, list, set, dict)): return list(data) - elif data: return [data] - else: return [] - - -class DictProperty(object): - ''' Property that maps to a key in a local dict-like attribute. ''' - def __init__(self, attr, key=None, read_only=False): - self.attr, self.key, self.read_only = attr, key, read_only - - def __call__(self, func): - functools.update_wrapper(self, func, updated=[]) - self.getter, self.key = func, self.key or func.__name__ - return self - - def __get__(self, obj, cls): - if obj is None: return self - key, storage = self.key, getattr(obj, self.attr) - if key not in storage: storage[key] = self.getter(obj) - return storage[key] - - def __set__(self, obj, value): - if self.read_only: raise AttributeError("Read-Only property.") - getattr(obj, self.attr)[self.key] = value - - def __delete__(self, obj): - if self.read_only: raise AttributeError("Read-Only property.") - del getattr(obj, self.attr)[self.key] - - -class cached_property(object): - ''' A property that is only computed once per instance and then replaces - itself with an ordinary attribute. Deleting the attribute resets the - property. ''' - - def __init__(self, func): - self.__doc__ = getattr(func, '__doc__') - self.func = func - - def __get__(self, obj, cls): - if obj is None: return self - value = obj.__dict__[self.func.__name__] = self.func(obj) - return value - - -class lazy_attribute(object): - ''' A property that caches itself to the class object. ''' - def __init__(self, func): - functools.update_wrapper(self, func, updated=[]) - self.getter = func - - def __get__(self, obj, cls): - value = self.getter(cls) - setattr(cls, self.__name__, value) - return value - - - - - - -############################################################################### -# Exceptions and Events ######################################################## -############################################################################### - - -class BottleException(Exception): - """ A base class for exceptions used by bottle. """ - pass - - - - - - -############################################################################### -# Routing ###################################################################### -############################################################################### - - -class RouteError(BottleException): - """ This is a base class for all routing related exceptions """ - - -class RouteReset(BottleException): - """ If raised by a plugin or request handler, the route is reset and all - plugins are re-applied. """ - -class RouterUnknownModeError(RouteError): pass - - -class RouteSyntaxError(RouteError): - """ The route parser found something not supported by this router """ - - -class RouteBuildError(RouteError): - """ The route could not been built """ - - -def _re_flatten(p): - ''' Turn all capturing groups in a regular expression pattern into - non-capturing groups. ''' - if '(' not in p: return p - return re.sub(r'(\\*)(\(\?P<[^>]*>|\((?!\?))', - lambda m: m.group(0) if len(m.group(1)) % 2 else m.group(1) + '(?:', p) - - -class Router(object): - ''' A Router is an ordered collection of route->target pairs. It is used to - efficiently match WSGI requests against a number of routes and return - the first target that satisfies the request. The target may be anything, - usually a string, ID or callable object. A route consists of a path-rule - and a HTTP method. - - The path-rule is either a static path (e.g. `/contact`) or a dynamic - path that contains wildcards (e.g. `/wiki/`). The wildcard syntax - and details on the matching order are described in docs:`routing`. - ''' - - default_pattern = '[^/]+' - default_filter = 're' - - def __init__(self, strict=False): - self.rules = [] # All rules in order - self._groups = {} - self.builder = {} # Data structure for the url builder - self.static = {} # Search structure for static routes - self.dynamic = [] # Search structure for dynamic routes - #: If true, static routes are no longer checked first. - self.strict_order = strict - self.filters = { - 're': lambda conf: - (_re_flatten(conf or self.default_pattern), None, None), - 'int': lambda conf: (r'-?\d+', int, lambda x: str(int(x))), - 'float': lambda conf: (r'-?[\d.]+', float, lambda x: str(float(x))), - 'path': lambda conf: (r'.+?', None, None)} - - def add_filter(self, name, func): - ''' Add a filter. The provided function is called with the configuration - string as parameter and must return a (regexp, to_python, to_url) tuple. - The first element is a string, the last two are callables or None. ''' - self.filters[name] = func - - rule_syntax = re.compile('(\\\\*)'\ - '(?:(?::([a-zA-Z_][a-zA-Z_0-9]*)?()(?:#(.*?)#)?)'\ - '|(?:<([a-zA-Z_][a-zA-Z_0-9]*)?(?::([a-zA-Z_]*)'\ - '(?::((?:\\\\.|[^\\\\>]+)+)?)?)?>))') - - def _itertokens(self, rule): - offset, prefix = 0, '' - for match in self.rule_syntax.finditer(rule): - prefix += rule[offset:match.start()] - g = match.groups() - if len(g[0])%2: # Escaped wildcard - prefix += match.group(0)[len(g[0]):] - offset = match.end() - continue - if prefix: - yield prefix, None, None - name, filtr, conf = g[4:7] if g[2] is None else g[1:4] - yield name, filtr or 'default', conf or None - offset, prefix = match.end(), '' - if offset <= len(rule) or prefix: - yield prefix+rule[offset:], None, None - - def add(self, rule, method, target, name=None): - ''' Add a new rule or replace the target for an existing rule. ''' - anons = 0 # Number of anonymous wildcards found - keys = [] # Names of keys - pattern = '' # Regular expression pattern with named groups - filters = [] # Lists of wildcard input filters - builder = [] # Data structure for the URL builder - is_static = True - - for key, mode, conf in self._itertokens(rule): - if mode: - is_static = False - if mode == 'default': mode = self.default_filter - mask, in_filter, out_filter = self.filters[mode](conf) - if not key: - pattern += '(?:%s)' % mask - key = 'anon%d' % anons - anons += 1 - else: - pattern += '(?P<%s>%s)' % (key, mask) - keys.append(key) - if in_filter: filters.append((key, in_filter)) - builder.append((key, out_filter or str)) - elif key: - pattern += re.escape(key) - builder.append((None, key)) - - self.builder[rule] = builder - if name: self.builder[name] = builder - - if is_static and not self.strict_order: - group = self.static.setdefault(self.build(rule), {}) - group[method] = (target, None) - return - - try: - re_pattern = re.compile('^(%s)$' % pattern) - re_match = re_pattern.match - except re.error: - raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, _e())) - - if filters: - def getargs(path): - url_args = re_match(path).groupdict() - for name, wildcard_filter in filters: - try: - url_args[name] = wildcard_filter(url_args[name]) - except ValueError: - raise HTTPError(400, 'Path has wrong format.') - return url_args - elif re_pattern.groupindex: - def getargs(path): - return re_match(path).groupdict() - else: - getargs = None - - flatpat = _re_flatten(pattern) - if flatpat in self._groups: - # Info: Rule groups with previous rule - group = self._groups[flatpat] - if method in group: - if DEBUG: - msg = 'Route <%s %s> overwrites a previously defined route' - warnings.warn(msg % (method, rule), RuntimeWarning) - self._groups[flatpat][method] = (target, getargs) - return - - mdict = self._groups[flatpat] = {method: (target, getargs)} - - try: - combined = '%s|(^%s$)' % (self.dynamic[-1][0].pattern, flatpat) - self.dynamic[-1] = (re.compile(combined), self.dynamic[-1][1]) - self.dynamic[-1][1].append(mdict) - except (AssertionError, IndexError): # AssertionError: Too many groups - self.dynamic.append((re.compile('(^%s$)' % flatpat), [mdict])) - - def build(self, _name, *anons, **query): - ''' Build an URL by filling the wildcards in a rule. ''' - builder = self.builder.get(_name) - if not builder: raise RouteBuildError("No route with that name.", _name) - try: - for i, value in enumerate(anons): query['anon%d'%i] = value - url = ''.join([f(query.pop(n)) if n else f for (n,f) in builder]) - return url if not query else url+'?'+urlencode(query) - except KeyError: - raise RouteBuildError('Missing URL argument: %r' % _e().args[0]) - - def match(self, environ): - ''' Return a (target, url_agrs) tuple or raise HTTPError(400/404/405). ''' - path, targets, urlargs = environ['PATH_INFO'] or '/', None, {} - if path in self.static: - targets = self.static[path] - else: - for combined, rules in self.dynamic: - match = combined.match(path) - if not match: continue - targets = rules[match.lastindex - 1] - break - - if not targets: - raise HTTPError(404, "Not found: " + repr(environ['PATH_INFO'])) - method = environ['REQUEST_METHOD'].upper() - if method in targets: - target, getargs = targets[method] - elif method == 'HEAD' and 'GET' in targets: - target, getargs = targets['GET'] - elif 'ANY' in targets: - target, getargs = targets['ANY'] - else: - allowed = [verb for verb in targets if verb != 'ANY'] - if 'GET' in allowed and 'HEAD' not in allowed: - allowed.append('HEAD') - raise HTTPError(405, "Method not allowed.", Allow=",".join(allowed)) - - return target, getargs(path) if getargs else {} - - - - - - -class Route(object): - ''' This class wraps a route callback along with route specific metadata and - configuration and applies Plugins on demand. It is also responsible for - turing an URL path rule into a regular expression usable by the Router. - ''' - - def __init__(self, app, rule, method, callback, name=None, - plugins=None, skiplist=None, **config): - #: The application this route is installed to. - self.app = app - #: The path-rule string (e.g. ``/wiki/:page``). - self.rule = rule - #: The HTTP method as a string (e.g. ``GET``). - self.method = method - #: The original callback with no plugins applied. Useful for introspection. - self.callback = callback - #: The name of the route (if specified) or ``None``. - self.name = name or None - #: A list of route-specific plugins (see :meth:`Bottle.route`). - self.plugins = plugins or [] - #: A list of plugins to not apply to this route (see :meth:`Bottle.route`). - self.skiplist = skiplist or [] - #: Additional keyword arguments passed to the :meth:`Bottle.route` - #: decorator are stored in this dictionary. Used for route-specific - #: plugin configuration and meta-data. - self.config = ConfigDict(config) - - def __call__(self, *a, **ka): - depr("Some APIs changed to return Route() instances instead of"\ - " callables. Make sure to use the Route.call method and not to"\ - " call Route instances directly.") - return self.call(*a, **ka) - - @cached_property - def call(self): - ''' The route callback with all plugins applied. This property is - created on demand and then cached to speed up subsequent requests.''' - return self._make_callback() - - def reset(self): - ''' Forget any cached values. The next time :attr:`call` is accessed, - all plugins are re-applied. ''' - self.__dict__.pop('call', None) - - def prepare(self): - ''' Do all on-demand work immediately (useful for debugging).''' - self.call - - @property - def _context(self): - depr('Switch to Plugin API v2 and access the Route object directly.') - return dict(rule=self.rule, method=self.method, callback=self.callback, - name=self.name, app=self.app, config=self.config, - apply=self.plugins, skip=self.skiplist) - - def all_plugins(self): - ''' Yield all Plugins affecting this route. ''' - unique = set() - for p in reversed(self.app.plugins + self.plugins): - if True in self.skiplist: break - name = getattr(p, 'name', False) - if name and (name in self.skiplist or name in unique): continue - if p in self.skiplist or type(p) in self.skiplist: continue - if name: unique.add(name) - yield p - - def _make_callback(self): - callback = self.callback - for plugin in self.all_plugins(): - try: - if hasattr(plugin, 'apply'): - api = getattr(plugin, 'api', 1) - context = self if api > 1 else self._context - callback = plugin.apply(callback, context) - else: - callback = plugin(callback) - except RouteReset: # Try again with changed configuration. - return self._make_callback() - if not callback is self.callback: - update_wrapper(callback, self.callback) - return callback - - def __repr__(self): - return '<%s %r %r>' % (self.method, self.rule, self.callback) - - - - - - -############################################################################### -# Application Object ########################################################### -############################################################################### - - -class Bottle(object): - """ Each Bottle object represents a single, distinct web application and - consists of routes, callbacks, plugins, resources and configuration. - Instances are callable WSGI applications. - - :param catchall: If true (default), handle all exceptions. Turn off to - let debugging middleware handle exceptions. - """ - - def __init__(self, catchall=True, autojson=True): - #: If true, most exceptions are caught and returned as :exc:`HTTPError` - self.catchall = catchall - - #: A :class:`ResourceManager` for application files - self.resources = ResourceManager() - - #: A :class:`ConfigDict` for app specific configuration. - self.config = ConfigDict() - self.config.autojson = autojson - - self.routes = [] # List of installed :class:`Route` instances. - self.router = Router() # Maps requests to :class:`Route` instances. - self.error_handler = {} - - # Core plugins - self.plugins = [] # List of installed plugins. - self.hooks = HooksPlugin() - self.install(self.hooks) - if self.config.autojson: - self.install(JSONPlugin()) - self.install(TemplatePlugin()) - - - def mount(self, prefix, app, **options): - ''' Mount an application (:class:`Bottle` or plain WSGI) to a specific - URL prefix. Example:: - - root_app.mount('/admin/', admin_app) - - :param prefix: path prefix or `mount-point`. If it ends in a slash, - that slash is mandatory. - :param app: an instance of :class:`Bottle` or a WSGI application. - - All other parameters are passed to the underlying :meth:`route` call. - ''' - if isinstance(app, basestring): - depr('Parameter order of Bottle.mount() changed.', True) # 0.10 - - segments = [p for p in prefix.split('/') if p] - if not segments: raise ValueError('Empty path prefix.') - path_depth = len(segments) - - def mountpoint_wrapper(): - try: - request.path_shift(path_depth) - rs = HTTPResponse([]) - def start_response(status, headerlist, exc_info=None): - if exc_info: - try: - _raise(*exc_info) - finally: - exc_info = None - rs.status = status - for name, value in headerlist: rs.add_header(name, value) - return rs.body.append - body = app(request.environ, start_response) - if body and rs.body: body = itertools.chain(rs.body, body) - rs.body = body or rs.body - return rs - finally: - request.path_shift(-path_depth) - - options.setdefault('skip', True) - options.setdefault('method', 'ANY') - options.setdefault('mountpoint', {'prefix': prefix, 'target': app}) - options['callback'] = mountpoint_wrapper - - self.route('/%s/<:re:.*>' % '/'.join(segments), **options) - if not prefix.endswith('/'): - self.route('/' + '/'.join(segments), **options) - - def merge(self, routes): - ''' Merge the routes of another :class:`Bottle` application or a list of - :class:`Route` objects into this application. The routes keep their - 'owner', meaning that the :data:`Route.app` attribute is not - changed. ''' - if isinstance(routes, Bottle): - routes = routes.routes - for route in routes: - self.add_route(route) - - def install(self, plugin): - ''' Add a plugin to the list of plugins and prepare it for being - applied to all routes of this application. A plugin may be a simple - decorator or an object that implements the :class:`Plugin` API. - ''' - if hasattr(plugin, 'setup'): plugin.setup(self) - if not callable(plugin) and not hasattr(plugin, 'apply'): - raise TypeError("Plugins must be callable or implement .apply()") - self.plugins.append(plugin) - self.reset() - return plugin - - def uninstall(self, plugin): - ''' Uninstall plugins. Pass an instance to remove a specific plugin, a type - object to remove all plugins that match that type, a string to remove - all plugins with a matching ``name`` attribute or ``True`` to remove all - plugins. Return the list of removed plugins. ''' - removed, remove = [], plugin - for i, plugin in list(enumerate(self.plugins))[::-1]: - if remove is True or remove is plugin or remove is type(plugin) \ - or getattr(plugin, 'name', True) == remove: - removed.append(plugin) - del self.plugins[i] - if hasattr(plugin, 'close'): plugin.close() - if removed: self.reset() - return removed - - def run(self, **kwargs): - ''' Calls :func:`run` with the same parameters. ''' - run(self, **kwargs) - - def reset(self, route=None): - ''' Reset all routes (force plugins to be re-applied) and clear all - caches. If an ID or route object is given, only that specific route - is affected. ''' - if route is None: routes = self.routes - elif isinstance(route, Route): routes = [route] - else: routes = [self.routes[route]] - for route in routes: route.reset() - if DEBUG: - for route in routes: route.prepare() - self.hooks.trigger('app_reset') - - def close(self): - ''' Close the application and all installed plugins. ''' - for plugin in self.plugins: - if hasattr(plugin, 'close'): plugin.close() - self.stopped = True - - def match(self, environ): - """ Search for a matching route and return a (:class:`Route` , urlargs) - tuple. The second value is a dictionary with parameters extracted - from the URL. Raise :exc:`HTTPError` (404/405) on a non-match.""" - return self.router.match(environ) - - def get_url(self, routename, **kargs): - """ Return a string that matches a named route """ - scriptname = request.environ.get('SCRIPT_NAME', '').strip('/') + '/' - location = self.router.build(routename, **kargs).lstrip('/') - return urljoin(urljoin('/', scriptname), location) - - def add_route(self, route): - ''' Add a route object, but do not change the :data:`Route.app` - attribute.''' - self.routes.append(route) - self.router.add(route.rule, route.method, route, name=route.name) - if DEBUG: route.prepare() - - def route(self, path=None, method='GET', callback=None, name=None, - apply=None, skip=None, **config): - """ A decorator to bind a function to a request URL. Example:: - - @app.route('/hello/:name') - def hello(name): - return 'Hello %s' % name - - The ``:name`` part is a wildcard. See :class:`Router` for syntax - details. - - :param path: Request path or a list of paths to listen to. If no - path is specified, it is automatically generated from the - signature of the function. - :param method: HTTP method (`GET`, `POST`, `PUT`, ...) or a list of - methods to listen to. (default: `GET`) - :param callback: An optional shortcut to avoid the decorator - syntax. ``route(..., callback=func)`` equals ``route(...)(func)`` - :param name: The name for this route. (default: None) - :param apply: A decorator or plugin or a list of plugins. These are - applied to the route callback in addition to installed plugins. - :param skip: A list of plugins, plugin classes or names. Matching - plugins are not installed to this route. ``True`` skips all. - - Any additional keyword arguments are stored as route-specific - configuration and passed to plugins (see :meth:`Plugin.apply`). - """ - if callable(path): path, callback = None, path - plugins = makelist(apply) - skiplist = makelist(skip) - def decorator(callback): - # TODO: Documentation and tests - if isinstance(callback, basestring): callback = load(callback) - for rule in makelist(path) or yieldroutes(callback): - for verb in makelist(method): - verb = verb.upper() - route = Route(self, rule, verb, callback, name=name, - plugins=plugins, skiplist=skiplist, **config) - self.add_route(route) - return callback - return decorator(callback) if callback else decorator - - def get(self, path=None, method='GET', **options): - """ Equals :meth:`route`. """ - return self.route(path, method, **options) - - def post(self, path=None, method='POST', **options): - """ Equals :meth:`route` with a ``POST`` method parameter. """ - return self.route(path, method, **options) - - def put(self, path=None, method='PUT', **options): - """ Equals :meth:`route` with a ``PUT`` method parameter. """ - return self.route(path, method, **options) - - def delete(self, path=None, method='DELETE', **options): - """ Equals :meth:`route` with a ``DELETE`` method parameter. """ - return self.route(path, method, **options) - - def error(self, code=500): - """ Decorator: Register an output handler for a HTTP error code""" - def wrapper(handler): - self.error_handler[int(code)] = handler - return handler - return wrapper - - def hook(self, name): - """ Return a decorator that attaches a callback to a hook. Three hooks - are currently implemented: - - - before_request: Executed once before each request - - after_request: Executed once after each request - - app_reset: Called whenever :meth:`reset` is called. - """ - def wrapper(func): - self.hooks.add(name, func) - return func - return wrapper - - def handle(self, path, method='GET'): - """ (deprecated) Execute the first matching route callback and return - the result. :exc:`HTTPResponse` exceptions are caught and returned. - If :attr:`Bottle.catchall` is true, other exceptions are caught as - well and returned as :exc:`HTTPError` instances (500). - """ - depr("This method will change semantics in 0.10. Try to avoid it.") - if isinstance(path, dict): - return self._handle(path) - return self._handle({'PATH_INFO': path, 'REQUEST_METHOD': method.upper()}) - - def default_error_handler(self, res): - return tob(template(ERROR_PAGE_TEMPLATE, e=res)) - - def _handle(self, environ): - try: - environ['bottle.app'] = self - request.bind(environ) - response.bind() - route, args = self.router.match(environ) - environ['route.handle'] = route - environ['bottle.route'] = route - environ['route.url_args'] = args - return route.call(**args) - except HTTPResponse: - return _e() - except RouteReset: - route.reset() - return self._handle(environ) - except (KeyboardInterrupt, SystemExit, MemoryError): - raise - except Exception: - if not self.catchall: raise - stacktrace = format_exc() - environ['wsgi.errors'].write(stacktrace) - return HTTPError(500, "Internal Server Error", _e(), stacktrace) - - def _cast(self, out, peek=None): - """ Try to convert the parameter into something WSGI compatible and set - correct HTTP headers when possible. - Support: False, str, unicode, dict, HTTPResponse, HTTPError, file-like, - iterable of strings and iterable of unicodes - """ - - # Empty output is done here - if not out: - if 'Content-Length' not in response: - response['Content-Length'] = 0 - return [] - # Join lists of byte or unicode strings. Mixed lists are NOT supported - if isinstance(out, (tuple, list))\ - and isinstance(out[0], (bytes, unicode)): - out = out[0][0:0].join(out) # b'abc'[0:0] -> b'' - # Encode unicode strings - if isinstance(out, unicode): - out = out.encode(response.charset) - # Byte Strings are just returned - if isinstance(out, bytes): - if 'Content-Length' not in response: - response['Content-Length'] = len(out) - return [out] - # HTTPError or HTTPException (recursive, because they may wrap anything) - # TODO: Handle these explicitly in handle() or make them iterable. - if isinstance(out, HTTPError): - out.apply(response) - out = self.error_handler.get(out.status_code, self.default_error_handler)(out) - return self._cast(out) - if isinstance(out, HTTPResponse): - out.apply(response) - return self._cast(out.body) - - # File-like objects. - if hasattr(out, 'read'): - if 'wsgi.file_wrapper' in request.environ: - return request.environ['wsgi.file_wrapper'](out) - elif hasattr(out, 'close') or not hasattr(out, '__iter__'): - return WSGIFileWrapper(out) - - # Handle Iterables. We peek into them to detect their inner type. - try: - iout = iter(out) - first = next(iout) - while not first: - first = next(iout) - except StopIteration: - return self._cast('') - except HTTPResponse: - first = _e() - except (KeyboardInterrupt, SystemExit, MemoryError): - raise - except Exception: - if not self.catchall: raise - first = HTTPError(500, 'Unhandled exception', _e(), format_exc()) - - # These are the inner types allowed in iterator or generator objects. - if isinstance(first, HTTPResponse): - return self._cast(first) - elif isinstance(first, bytes): - new_iter = itertools.chain([first], iout) - elif isinstance(first, unicode): - encoder = lambda x: x.encode(response.charset) - new_iter = imap(encoder, itertools.chain([first], iout)) - else: - msg = 'Unsupported response type: %s' % type(first) - return self._cast(HTTPError(500, msg)) - if hasattr(out, 'close'): - new_iter = _closeiter(new_iter, out.close) - return new_iter - - def wsgi(self, environ, start_response): - """ The bottle WSGI-interface. """ - try: - out = self._cast(self._handle(environ)) - # rfc2616 section 4.3 - if response._status_code in (100, 101, 204, 304)\ - or environ['REQUEST_METHOD'] == 'HEAD': - if hasattr(out, 'close'): out.close() - out = [] - start_response(response._status_line, response.headerlist) - return out - except (KeyboardInterrupt, SystemExit, MemoryError): - raise - except Exception: - if not self.catchall: raise - err = '

Critical error while processing request: %s

' \ - % html_escape(environ.get('PATH_INFO', '/')) - if DEBUG: - err += '

Error:

\n
\n%s\n
\n' \ - '

Traceback:

\n
\n%s\n
\n' \ - % (html_escape(repr(_e())), html_escape(format_exc())) - environ['wsgi.errors'].write(err) - headers = [('Content-Type', 'text/html; charset=UTF-8')] - start_response('500 INTERNAL SERVER ERROR', headers, sys.exc_info()) - return [tob(err)] - - def __call__(self, environ, start_response): - ''' Each instance of :class:'Bottle' is a WSGI application. ''' - return self.wsgi(environ, start_response) - - - - - - -############################################################################### -# HTTP and WSGI Tools ########################################################## -############################################################################### - -class BaseRequest(object): - """ A wrapper for WSGI environment dictionaries that adds a lot of - convenient access methods and properties. Most of them are read-only. - - Adding new attributes to a request actually adds them to the environ - dictionary (as 'bottle.request.ext.'). This is the recommended - way to store and access request-specific data. - """ - - __slots__ = ('environ') - - #: Maximum size of memory buffer for :attr:`body` in bytes. - MEMFILE_MAX = 102400 - #: Maximum number pr GET or POST parameters per request - MAX_PARAMS = 100 - - def __init__(self, environ=None): - """ Wrap a WSGI environ dictionary. """ - #: The wrapped WSGI environ dictionary. This is the only real attribute. - #: All other attributes actually are read-only properties. - self.environ = {} if environ is None else environ - self.environ['bottle.request'] = self - - @DictProperty('environ', 'bottle.app', read_only=True) - def app(self): - ''' Bottle application handling this request. ''' - raise RuntimeError('This request is not connected to an application.') - - @DictProperty('environ', 'bottle.route', read_only=True) - def route(self): - """ The bottle :class:`Route` object that matches this request. """ - raise RuntimeError('This request is not connected to a route.') - - @DictProperty('environ', 'route.url_args', read_only=True) - def url_args(self): - """ The arguments extracted from the URL. """ - raise RuntimeError('This request is not connected to a route.') - - @property - def path(self): - ''' The value of ``PATH_INFO`` with exactly one prefixed slash (to fix - broken clients and avoid the "empty path" edge case). ''' - return '/' + self.environ.get('PATH_INFO','').lstrip('/') - - @property - def method(self): - ''' The ``REQUEST_METHOD`` value as an uppercase string. ''' - return self.environ.get('REQUEST_METHOD', 'GET').upper() - - @DictProperty('environ', 'bottle.request.headers', read_only=True) - def headers(self): - ''' A :class:`WSGIHeaderDict` that provides case-insensitive access to - HTTP request headers. ''' - return WSGIHeaderDict(self.environ) - - def get_header(self, name, default=None): - ''' Return the value of a request header, or a given default value. ''' - return self.headers.get(name, default) - - @DictProperty('environ', 'bottle.request.cookies', read_only=True) - def cookies(self): - """ Cookies parsed into a :class:`FormsDict`. Signed cookies are NOT - decoded. Use :meth:`get_cookie` if you expect signed cookies. """ - cookies = SimpleCookie(self.environ.get('HTTP_COOKIE','')).values() - if len(cookies) > self.MAX_PARAMS: - raise HTTPError(413, 'Too many cookies') - return FormsDict((c.key, c.value) for c in cookies) - - def get_cookie(self, key, default=None, secret=None): - """ Return the content of a cookie. To read a `Signed Cookie`, the - `secret` must match the one used to create the cookie (see - :meth:`BaseResponse.set_cookie`). If anything goes wrong (missing - cookie or wrong signature), return a default value. """ - value = self.cookies.get(key) - if secret and value: - dec = cookie_decode(value, secret) # (key, value) tuple or None - return dec[1] if dec and dec[0] == key else default - return value or default - - @DictProperty('environ', 'bottle.request.query', read_only=True) - def query(self): - ''' The :attr:`query_string` parsed into a :class:`FormsDict`. These - values are sometimes called "URL arguments" or "GET parameters", but - not to be confused with "URL wildcards" as they are provided by the - :class:`Router`. ''' - get = self.environ['bottle.get'] = FormsDict() - pairs = _parse_qsl(self.environ.get('QUERY_STRING', '')) - if len(pairs) > self.MAX_PARAMS: - raise HTTPError(413, 'Too many parameters') - for key, value in pairs: - get[key] = value - return get - - @DictProperty('environ', 'bottle.request.forms', read_only=True) - def forms(self): - """ Form values parsed from an `url-encoded` or `multipart/form-data` - encoded POST or PUT request body. The result is returned as a - :class:`FormsDict`. All keys and values are strings. File uploads - are stored separately in :attr:`files`. """ - forms = FormsDict() - for name, item in self.POST.allitems(): - if not isinstance(item, FileUpload): - forms[name] = item - return forms - - @DictProperty('environ', 'bottle.request.params', read_only=True) - def params(self): - """ A :class:`FormsDict` with the combined values of :attr:`query` and - :attr:`forms`. File uploads are stored in :attr:`files`. """ - params = FormsDict() - for key, value in self.query.allitems(): - params[key] = value - for key, value in self.forms.allitems(): - params[key] = value - return params - - @DictProperty('environ', 'bottle.request.files', read_only=True) - def files(self): - """ File uploads parsed from `multipart/form-data` encoded POST or PUT - request body. The values are instances of :class:`FileUpload`. - - """ - files = FormsDict() - for name, item in self.POST.allitems(): - if isinstance(item, FileUpload): - files[name] = item - return files - - @DictProperty('environ', 'bottle.request.json', read_only=True) - def json(self): - ''' If the ``Content-Type`` header is ``application/json``, this - property holds the parsed content of the request body. Only requests - smaller than :attr:`MEMFILE_MAX` are processed to avoid memory - exhaustion. ''' - if 'application/json' in self.environ.get('CONTENT_TYPE', ''): - return json_loads(self._get_body_string()) - return None - - @DictProperty('environ', 'bottle.request.body', read_only=True) - def _body(self): - maxread = max(0, self.content_length) - stream = self.environ['wsgi.input'] - body = BytesIO() if maxread < self.MEMFILE_MAX else TemporaryFile(mode='w+b') - while maxread > 0: - part = stream.read(min(maxread, self.MEMFILE_MAX)) - if not part: break - body.write(part) - maxread -= len(part) - self.environ['wsgi.input'] = body - body.seek(0) - return body - - def _get_body_string(self): - ''' read body until content-length or MEMFILE_MAX into a string. Raise - HTTPError(413) on requests that are to large. ''' - clen = self.content_length - if clen > self.MEMFILE_MAX: - raise HTTPError(413, 'Request to large') - if clen < 0: clen = self.MEMFILE_MAX + 1 - data = self.body.read(clen) - if len(data) > self.MEMFILE_MAX: # Fail fast - raise HTTPError(413, 'Request to large') - return data - - @property - def body(self): - """ The HTTP request body as a seek-able file-like object. Depending on - :attr:`MEMFILE_MAX`, this is either a temporary file or a - :class:`io.BytesIO` instance. Accessing this property for the first - time reads and replaces the ``wsgi.input`` environ variable. - Subsequent accesses just do a `seek(0)` on the file object. """ - self._body.seek(0) - return self._body - - #: An alias for :attr:`query`. - GET = query - - @DictProperty('environ', 'bottle.request.post', read_only=True) - def POST(self): - """ The values of :attr:`forms` and :attr:`files` combined into a single - :class:`FormsDict`. Values are either strings (form values) or - instances of :class:`cgi.FieldStorage` (file uploads). - """ - post = FormsDict() - # We default to application/x-www-form-urlencoded for everything that - # is not multipart and take the fast path (also: 3.1 workaround) - if not self.content_type.startswith('multipart/'): - pairs = _parse_qsl(tonat(self._get_body_string(), 'latin1')) - if len(pairs) > self.MAX_PARAMS: - raise HTTPError(413, 'Too many parameters') - for key, value in pairs: - post[key] = value - return post - - safe_env = {'QUERY_STRING':''} # Build a safe environment for cgi - for key in ('REQUEST_METHOD', 'CONTENT_TYPE', 'CONTENT_LENGTH'): - if key in self.environ: safe_env[key] = self.environ[key] - args = dict(fp=self.body, environ=safe_env, keep_blank_values=True) - if py31: - args['fp'] = NCTextIOWrapper(args['fp'], encoding='ISO-8859-1', - newline='\n') - elif py3k: - args['encoding'] = 'ISO-8859-1' - data = cgi.FieldStorage(**args) - data = data.list or [] - if len(data) > self.MAX_PARAMS: - raise HTTPError(413, 'Too many parameters') - for item in data: - if item.filename: - post[item.name] = FileUpload(item.file, item.name, - item.filename, item.headers) - else: - post[item.name] = item.value - return post - - @property - def COOKIES(self): - ''' Alias for :attr:`cookies` (deprecated). ''' - depr('BaseRequest.COOKIES was renamed to BaseRequest.cookies (lowercase).') - return self.cookies - - @property - def url(self): - """ The full request URI including hostname and scheme. If your app - lives behind a reverse proxy or load balancer and you get confusing - results, make sure that the ``X-Forwarded-Host`` header is set - correctly. """ - return self.urlparts.geturl() - - @DictProperty('environ', 'bottle.request.urlparts', read_only=True) - def urlparts(self): - ''' The :attr:`url` string as an :class:`urlparse.SplitResult` tuple. - The tuple contains (scheme, host, path, query_string and fragment), - but the fragment is always empty because it is not visible to the - server. ''' - env = self.environ - http = env.get('HTTP_X_FORWARDED_PROTO') or env.get('wsgi.url_scheme', 'http') - host = env.get('HTTP_X_FORWARDED_HOST') or env.get('HTTP_HOST') - if not host: - # HTTP 1.1 requires a Host-header. This is for HTTP/1.0 clients. - host = env.get('SERVER_NAME', '127.0.0.1') - port = env.get('SERVER_PORT') - if port and port != ('80' if http == 'http' else '443'): - host += ':' + port - path = urlquote(self.fullpath) - return UrlSplitResult(http, host, path, env.get('QUERY_STRING'), '') - - @property - def fullpath(self): - """ Request path including :attr:`script_name` (if present). """ - return urljoin(self.script_name, self.path.lstrip('/')) - - @property - def query_string(self): - """ The raw :attr:`query` part of the URL (everything in between ``?`` - and ``#``) as a string. """ - return self.environ.get('QUERY_STRING', '') - - @property - def script_name(self): - ''' The initial portion of the URL's `path` that was removed by a higher - level (server or routing middleware) before the application was - called. This script path is returned with leading and tailing - slashes. ''' - script_name = self.environ.get('SCRIPT_NAME', '').strip('/') - return '/' + script_name + '/' if script_name else '/' - - def path_shift(self, shift=1): - ''' Shift path segments from :attr:`path` to :attr:`script_name` and - vice versa. - - :param shift: The number of path segments to shift. May be negative - to change the shift direction. (default: 1) - ''' - script = self.environ.get('SCRIPT_NAME','/') - self['SCRIPT_NAME'], self['PATH_INFO'] = path_shift(script, self.path, shift) - - @property - def content_length(self): - ''' The request body length as an integer. The client is responsible to - set this header. Otherwise, the real length of the body is unknown - and -1 is returned. In this case, :attr:`body` will be empty. ''' - return int(self.environ.get('CONTENT_LENGTH') or -1) - - @property - def content_type(self): - ''' The Content-Type header as a lowercase-string (default: empty). ''' - return self.environ.get('CONTENT_TYPE', '').lower() - - @property - def is_xhr(self): - ''' True if the request was triggered by a XMLHttpRequest. This only - works with JavaScript libraries that support the `X-Requested-With` - header (most of the popular libraries do). ''' - requested_with = self.environ.get('HTTP_X_REQUESTED_WITH','') - return requested_with.lower() == 'xmlhttprequest' - - @property - def is_ajax(self): - ''' Alias for :attr:`is_xhr`. "Ajax" is not the right term. ''' - return self.is_xhr - - @property - def auth(self): - """ HTTP authentication data as a (user, password) tuple. This - implementation currently supports basic (not digest) authentication - only. If the authentication happened at a higher level (e.g. in the - front web-server or a middleware), the password field is None, but - the user field is looked up from the ``REMOTE_USER`` environ - variable. On any errors, None is returned. """ - basic = parse_auth(self.environ.get('HTTP_AUTHORIZATION','')) - if basic: return basic - ruser = self.environ.get('REMOTE_USER') - if ruser: return (ruser, None) - return None - - @property - def remote_route(self): - """ A list of all IPs that were involved in this request, starting with - the client IP and followed by zero or more proxies. This does only - work if all proxies support the ```X-Forwarded-For`` header. Note - that this information can be forged by malicious clients. """ - proxy = self.environ.get('HTTP_X_FORWARDED_FOR') - if proxy: return [ip.strip() for ip in proxy.split(',')] - remote = self.environ.get('REMOTE_ADDR') - return [remote] if remote else [] - - @property - def remote_addr(self): - """ The client IP as a string. Note that this information can be forged - by malicious clients. """ - route = self.remote_route - return route[0] if route else None - - def copy(self): - """ Return a new :class:`Request` with a shallow :attr:`environ` copy. """ - return Request(self.environ.copy()) - - def get(self, value, default=None): return self.environ.get(value, default) - def __getitem__(self, key): return self.environ[key] - def __delitem__(self, key): self[key] = ""; del(self.environ[key]) - def __iter__(self): return iter(self.environ) - def __len__(self): return len(self.environ) - def keys(self): return self.environ.keys() - def __setitem__(self, key, value): - """ Change an environ value and clear all caches that depend on it. """ - - if self.environ.get('bottle.request.readonly'): - raise KeyError('The environ dictionary is read-only.') - - self.environ[key] = value - todelete = () - - if key == 'wsgi.input': - todelete = ('body', 'forms', 'files', 'params', 'post', 'json') - elif key == 'QUERY_STRING': - todelete = ('query', 'params') - elif key.startswith('HTTP_'): - todelete = ('headers', 'cookies') - - for key in todelete: - self.environ.pop('bottle.request.'+key, None) - - def __repr__(self): - return '<%s: %s %s>' % (self.__class__.__name__, self.method, self.url) - - def __getattr__(self, name): - ''' Search in self.environ for additional user defined attributes. ''' - try: - var = self.environ['bottle.request.ext.%s'%name] - return var.__get__(self) if hasattr(var, '__get__') else var - except KeyError: - raise AttributeError('Attribute %r not defined.' % name) - - def __setattr__(self, name, value): - if name == 'environ': return object.__setattr__(self, name, value) - self.environ['bottle.request.ext.%s'%name] = value - - - - -def _hkey(s): - return s.title().replace('_','-') - - -class HeaderProperty(object): - def __init__(self, name, reader=None, writer=str, default=''): - self.name, self.default = name, default - self.reader, self.writer = reader, writer - self.__doc__ = 'Current value of the %r header.' % name.title() - - def __get__(self, obj, cls): - if obj is None: return self - value = obj.headers.get(self.name, self.default) - return self.reader(value) if self.reader else value - - def __set__(self, obj, value): - obj.headers[self.name] = self.writer(value) - - def __delete__(self, obj): - del obj.headers[self.name] - - -class BaseResponse(object): - """ Storage class for a response body as well as headers and cookies. - - This class does support dict-like case-insensitive item-access to - headers, but is NOT a dict. Most notably, iterating over a response - yields parts of the body and not the headers. - - :param body: The response body as one of the supported types. - :param status: Either an HTTP status code (e.g. 200) or a status line - including the reason phrase (e.g. '200 OK'). - :param headers: A dictionary or a list of name-value pairs. - - Additional keyword arguments are added to the list of headers. - Underscores in the header name are replaced with dashes. - """ - - default_status = 200 - default_content_type = 'text/html; charset=UTF-8' - - # Header blacklist for specific response codes - # (rfc2616 section 10.2.3 and 10.3.5) - bad_headers = { - 204: set(('Content-Type',)), - 304: set(('Allow', 'Content-Encoding', 'Content-Language', - 'Content-Length', 'Content-Range', 'Content-Type', - 'Content-Md5', 'Last-Modified'))} - - def __init__(self, body='', status=None, headers=None, **more_headers): - self._cookies = None - self._headers = {} - self.body = body - self.status = status or self.default_status - if headers: - if isinstance(headers, dict): - headers = headers.items() - for name, value in headers: - self.add_header(name, value) - if more_headers: - for name, value in more_headers.items(): - self.add_header(name, value) - - def copy(self): - ''' Returns a copy of self. ''' - # TODO - copy = Response() - copy.status = self.status - copy._headers = dict((k, v[:]) for (k, v) in self._headers.items()) - return copy - - def __iter__(self): - return iter(self.body) - - def close(self): - if hasattr(self.body, 'close'): - self.body.close() - - @property - def status_line(self): - ''' The HTTP status line as a string (e.g. ``404 Not Found``).''' - return self._status_line - - @property - def status_code(self): - ''' The HTTP status code as an integer (e.g. 404).''' - return self._status_code - - def _set_status(self, status): - if isinstance(status, int): - code, status = status, _HTTP_STATUS_LINES.get(status) - elif ' ' in status: - status = status.strip() - code = int(status.split()[0]) - else: - raise ValueError('String status line without a reason phrase.') - if not 100 <= code <= 999: raise ValueError('Status code out of range.') - self._status_code = code - self._status_line = str(status or ('%d Unknown' % code)) - - def _get_status(self): - return self._status_line - - status = property(_get_status, _set_status, None, - ''' A writeable property to change the HTTP response status. It accepts - either a numeric code (100-999) or a string with a custom reason - phrase (e.g. "404 Brain not found"). Both :data:`status_line` and - :data:`status_code` are updated accordingly. The return value is - always a status string. ''') - del _get_status, _set_status - - @property - def headers(self): - ''' An instance of :class:`HeaderDict`, a case-insensitive dict-like - view on the response headers. ''' - hdict = HeaderDict() - hdict.dict = self._headers - return hdict - - def __contains__(self, name): return _hkey(name) in self._headers - def __delitem__(self, name): del self._headers[_hkey(name)] - def __getitem__(self, name): return self._headers[_hkey(name)][-1] - def __setitem__(self, name, value): self._headers[_hkey(name)] = [str(value)] - - def get_header(self, name, default=None): - ''' Return the value of a previously defined header. If there is no - header with that name, return a default value. ''' - return self._headers.get(_hkey(name), [default])[-1] - - def set_header(self, name, value): - ''' Create a new response header, replacing any previously defined - headers with the same name. ''' - self._headers[_hkey(name)] = [str(value)] - - def add_header(self, name, value): - ''' Add an additional response header, not removing duplicates. ''' - self._headers.setdefault(_hkey(name), []).append(str(value)) - - def iter_headers(self): - ''' Yield (header, value) tuples, skipping headers that are not - allowed with the current response status code. ''' - return self.headerlist - - def wsgiheader(self): - depr('The wsgiheader method is deprecated. See headerlist.') #0.10 - return self.headerlist - - @property - def headerlist(self): - ''' WSGI conform list of (header, value) tuples. ''' - out = [] - headers = list(self._headers.items()) - if 'Content-Type' not in self._headers: - headers.append(('Content-Type', [self.default_content_type])) - if self._status_code in self.bad_headers: - bad_headers = self.bad_headers[self._status_code] - headers = [h for h in headers if h[0] not in bad_headers] - out += [(name, val) for name, vals in headers for val in vals] - if self._cookies: - for c in self._cookies.values(): - out.append(('Set-Cookie', c.OutputString())) - return out - - content_type = HeaderProperty('Content-Type') - content_length = HeaderProperty('Content-Length', reader=int) - - @property - def charset(self, default='UTF-8'): - """ Return the charset specified in the content-type header (default: utf8). """ - if 'charset=' in self.content_type: - return self.content_type.split('charset=')[-1].split(';')[0].strip() - return default - - @property - def COOKIES(self): - """ A dict-like SimpleCookie instance. This should not be used directly. - See :meth:`set_cookie`. """ - depr('The COOKIES dict is deprecated. Use `set_cookie()` instead.') # 0.10 - if not self._cookies: - self._cookies = SimpleCookie() - return self._cookies - - def set_cookie(self, name, value, secret=None, **options): - ''' Create a new cookie or replace an old one. If the `secret` parameter is - set, create a `Signed Cookie` (described below). - - :param name: the name of the cookie. - :param value: the value of the cookie. - :param secret: a signature key required for signed cookies. - - Additionally, this method accepts all RFC 2109 attributes that are - supported by :class:`cookie.Morsel`, including: - - :param max_age: maximum age in seconds. (default: None) - :param expires: a datetime object or UNIX timestamp. (default: None) - :param domain: the domain that is allowed to read the cookie. - (default: current domain) - :param path: limits the cookie to a given path (default: current path) - :param secure: limit the cookie to HTTPS connections (default: off). - :param httponly: prevents client-side javascript to read this cookie - (default: off, requires Python 2.6 or newer). - - If neither `expires` nor `max_age` is set (default), the cookie will - expire at the end of the browser session (as soon as the browser - window is closed). - - Signed cookies may store any pickle-able object and are - cryptographically signed to prevent manipulation. Keep in mind that - cookies are limited to 4kb in most browsers. - - Warning: Signed cookies are not encrypted (the client can still see - the content) and not copy-protected (the client can restore an old - cookie). The main intention is to make pickling and unpickling - save, not to store secret information at client side. - ''' - if not self._cookies: - self._cookies = SimpleCookie() - - if secret: - value = touni(cookie_encode((name, value), secret)) - elif not isinstance(value, basestring): - raise TypeError('Secret key missing for non-string Cookie.') - - if len(value) > 4096: raise ValueError('Cookie value to long.') - self._cookies[name] = value - - for key, value in options.items(): - if key == 'max_age': - if isinstance(value, timedelta): - value = value.seconds + value.days * 24 * 3600 - if key == 'expires': - if isinstance(value, (datedate, datetime)): - value = value.timetuple() - elif isinstance(value, (int, float)): - value = time.gmtime(value) - value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value) - self._cookies[name][key.replace('_', '-')] = value - - def delete_cookie(self, key, **kwargs): - ''' Delete a cookie. Be sure to use the same `domain` and `path` - settings as used to create the cookie. ''' - kwargs['max_age'] = -1 - kwargs['expires'] = 0 - self.set_cookie(key, '', **kwargs) - - def __repr__(self): - out = '' - for name, value in self.headerlist: - out += '%s: %s\n' % (name.title(), value.strip()) - return out - -#: Thread-local storage for :class:`LocalRequest` and :class:`LocalResponse` -#: attributes. -_lctx = threading.local() - -def local_property(name): - def fget(self): - try: - return getattr(_lctx, name) - except AttributeError: - raise RuntimeError("Request context not initialized.") - def fset(self, value): setattr(_lctx, name, value) - def fdel(self): delattr(_lctx, name) - return property(fget, fset, fdel, - 'Thread-local property stored in :data:`_lctx.%s`' % name) - - -class LocalRequest(BaseRequest): - ''' A thread-local subclass of :class:`BaseRequest` with a different - set of attribues for each thread. There is usually only one global - instance of this class (:data:`request`). If accessed during a - request/response cycle, this instance always refers to the *current* - request (even on a multithreaded server). ''' - bind = BaseRequest.__init__ - environ = local_property('request_environ') - - -class LocalResponse(BaseResponse): - ''' A thread-local subclass of :class:`BaseResponse` with a different - set of attribues for each thread. There is usually only one global - instance of this class (:data:`response`). Its attributes are used - to build the HTTP response at the end of the request/response cycle. - ''' - bind = BaseResponse.__init__ - _status_line = local_property('response_status_line') - _status_code = local_property('response_status_code') - _cookies = local_property('response_cookies') - _headers = local_property('response_headers') - body = local_property('response_body') - -Request = BaseRequest -Response = BaseResponse - -class HTTPResponse(Response, BottleException): - def __init__(self, body='', status=None, headers=None, - header=None, **more_headers): - if header or 'output' in more_headers: - depr('Call signature changed (for the better). See BaseResponse') - if header: more_headers.update(header) - if 'output' in more_headers: body = more_headers.pop('output') - super(HTTPResponse, self).__init__(body, status, headers, **more_headers) - - def apply(self, response): - response._status_code = self._status_code - response._status_line = self._status_line - response._headers = self._headers - response._cookies = self._cookies - response.body = self.body - - def _output(self, value=None): - depr('Use HTTPResponse.body instead of HTTPResponse.output') - if value is None: return self.body - self.body = value - - output = property(_output, _output, doc='Alias for .body') - -class HTTPError(HTTPResponse): - default_status = 500 - def __init__(self, status=None, body=None, exception=None, traceback=None, - **options): - self.exception = exception - self.traceback = traceback - super(HTTPError, self).__init__(body, status, **options) - - - - - -############################################################################### -# Plugins ###################################################################### -############################################################################### - -class PluginError(BottleException): pass - -class JSONPlugin(object): - name = 'json' - api = 2 - - def __init__(self, json_dumps=json_dumps): - self.json_dumps = json_dumps - - def apply(self, callback, route): - dumps = self.json_dumps - if not dumps: return callback - def wrapper(*a, **ka): - try: - rv = callback(*a, **ka) - except HTTPError: - rv = _e() - - if isinstance(rv, dict): - #Attempt to serialize, raises exception on failure - json_response = dumps(rv) - #Set content type only if serialization succesful - response.content_type = 'application/json' - return json_response - elif isinstance(rv, HTTPResponse) and isinstance(rv.body, dict): - rv.body = dumps(rv.body) - rv.content_type = 'application/json' - return rv - - return wrapper - - -class HooksPlugin(object): - name = 'hooks' - api = 2 - - _names = 'before_request', 'after_request', 'app_reset' - - def __init__(self): - self.hooks = dict((name, []) for name in self._names) - self.app = None - - def _empty(self): - return not (self.hooks['before_request'] or self.hooks['after_request']) - - def setup(self, app): - self.app = app - - def add(self, name, func): - ''' Attach a callback to a hook. ''' - was_empty = self._empty() - self.hooks.setdefault(name, []).append(func) - if self.app and was_empty and not self._empty(): self.app.reset() - - def remove(self, name, func): - ''' Remove a callback from a hook. ''' - was_empty = self._empty() - if name in self.hooks and func in self.hooks[name]: - self.hooks[name].remove(func) - if self.app and not was_empty and self._empty(): self.app.reset() - - def trigger(self, name, *a, **ka): - ''' Trigger a hook and return a list of results. ''' - hooks = self.hooks[name] - if ka.pop('reversed', False): hooks = hooks[::-1] - return [hook(*a, **ka) for hook in hooks] - - def apply(self, callback, route): - if self._empty(): return callback - def wrapper(*a, **ka): - self.trigger('before_request') - rv = callback(*a, **ka) - self.trigger('after_request', reversed=True) - return rv - return wrapper - - -class TemplatePlugin(object): - ''' This plugin applies the :func:`view` decorator to all routes with a - `template` config parameter. If the parameter is a tuple, the second - element must be a dict with additional options (e.g. `template_engine`) - or default variables for the template. ''' - name = 'template' - api = 2 - - def apply(self, callback, route): - conf = route.config.get('template') - if isinstance(conf, (tuple, list)) and len(conf) == 2: - return view(conf[0], **conf[1])(callback) - elif isinstance(conf, str): - return view(conf)(callback) - else: - return callback - - -#: Not a plugin, but part of the plugin API. TODO: Find a better place. -class _ImportRedirect(object): - def __init__(self, name, impmask): - ''' Create a virtual package that redirects imports (see PEP 302). ''' - self.name = name - self.impmask = impmask - self.module = sys.modules.setdefault(name, imp.new_module(name)) - self.module.__dict__.update({'__file__': __file__, '__path__': [], - '__all__': [], '__loader__': self}) - sys.meta_path.append(self) - - def find_module(self, fullname, path=None): - if '.' not in fullname: return - packname, modname = fullname.rsplit('.', 1) - if packname != self.name: return - return self - - def load_module(self, fullname): - if fullname in sys.modules: return sys.modules[fullname] - packname, modname = fullname.rsplit('.', 1) - realname = self.impmask % modname - __import__(realname) - module = sys.modules[fullname] = sys.modules[realname] - setattr(self.module, modname, module) - module.__loader__ = self - return module - - - - - - -############################################################################### -# Common Utilities ############################################################# -############################################################################### - - -class MultiDict(DictMixin): - """ This dict stores multiple values per key, but behaves exactly like a - normal dict in that it returns only the newest value for any given key. - There are special methods available to access the full list of values. - """ - - def __init__(self, *a, **k): - self.dict = dict((k, [v]) for (k, v) in dict(*a, **k).items()) - - def __len__(self): return len(self.dict) - def __iter__(self): return iter(self.dict) - def __contains__(self, key): return key in self.dict - def __delitem__(self, key): del self.dict[key] - def __getitem__(self, key): return self.dict[key][-1] - def __setitem__(self, key, value): self.append(key, value) - def keys(self): return self.dict.keys() - - if py3k: - def values(self): return (v[-1] for v in self.dict.values()) - def items(self): return ((k, v[-1]) for k, v in self.dict.items()) - def allitems(self): - return ((k, v) for k, vl in self.dict.items() for v in vl) - iterkeys = keys - itervalues = values - iteritems = items - iterallitems = allitems - - else: - def values(self): return [v[-1] for v in self.dict.values()] - def items(self): return [(k, v[-1]) for k, v in self.dict.items()] - def iterkeys(self): return self.dict.iterkeys() - def itervalues(self): return (v[-1] for v in self.dict.itervalues()) - def iteritems(self): - return ((k, v[-1]) for k, v in self.dict.iteritems()) - def iterallitems(self): - return ((k, v) for k, vl in self.dict.iteritems() for v in vl) - def allitems(self): - return [(k, v) for k, vl in self.dict.iteritems() for v in vl] - - def get(self, key, default=None, index=-1, type=None): - ''' Return the most recent value for a key. - - :param default: The default value to be returned if the key is not - present or the type conversion fails. - :param index: An index for the list of available values. - :param type: If defined, this callable is used to cast the value - into a specific type. Exception are suppressed and result in - the default value to be returned. - ''' - try: - val = self.dict[key][index] - return type(val) if type else val - except Exception: - pass - return default - - def append(self, key, value): - ''' Add a new value to the list of values for this key. ''' - self.dict.setdefault(key, []).append(value) - - def replace(self, key, value): - ''' Replace the list of values with a single value. ''' - self.dict[key] = [value] - - def getall(self, key): - ''' Return a (possibly empty) list of values for a key. ''' - return self.dict.get(key) or [] - - #: Aliases for WTForms to mimic other multi-dict APIs (Django) - getone = get - getlist = getall - - - -class FormsDict(MultiDict): - ''' This :class:`MultiDict` subclass is used to store request form data. - Additionally to the normal dict-like item access methods (which return - unmodified data as native strings), this container also supports - attribute-like access to its values. Attributes are automatically de- - or recoded to match :attr:`input_encoding` (default: 'utf8'). Missing - attributes default to an empty string. ''' - - #: Encoding used for attribute values. - input_encoding = 'utf8' - #: If true (default), unicode strings are first encoded with `latin1` - #: and then decoded to match :attr:`input_encoding`. - recode_unicode = True - - def _fix(self, s, encoding=None): - if isinstance(s, unicode) and self.recode_unicode: # Python 3 WSGI - s = s.encode('latin1') - if isinstance(s, bytes): # Python 2 WSGI - return s.decode(encoding or self.input_encoding) - return s - - def decode(self, encoding=None): - ''' Returns a copy with all keys and values de- or recoded to match - :attr:`input_encoding`. Some libraries (e.g. WTForms) want a - unicode dictionary. ''' - copy = FormsDict() - enc = copy.input_encoding = encoding or self.input_encoding - copy.recode_unicode = False - for key, value in self.allitems(): - copy.append(self._fix(key, enc), self._fix(value, enc)) - return copy - - def getunicode(self, name, default=None, encoding=None): - ''' Return the value as a unicode string, or the default. ''' - try: - return self._fix(self[name], encoding) - except (UnicodeError, KeyError): - return default - - def __getattr__(self, name, default=unicode()): - # Without this guard, pickle generates a cryptic TypeError: - if name.startswith('__') and name.endswith('__'): - return super(FormsDict, self).__getattr__(name) - return self.getunicode(name, default=default) - - -class HeaderDict(MultiDict): - """ A case-insensitive version of :class:`MultiDict` that defaults to - replace the old value instead of appending it. """ - - def __init__(self, *a, **ka): - self.dict = {} - if a or ka: self.update(*a, **ka) - - def __contains__(self, key): return _hkey(key) in self.dict - def __delitem__(self, key): del self.dict[_hkey(key)] - def __getitem__(self, key): return self.dict[_hkey(key)][-1] - def __setitem__(self, key, value): self.dict[_hkey(key)] = [str(value)] - def append(self, key, value): - self.dict.setdefault(_hkey(key), []).append(str(value)) - def replace(self, key, value): self.dict[_hkey(key)] = [str(value)] - def getall(self, key): return self.dict.get(_hkey(key)) or [] - def get(self, key, default=None, index=-1): - return MultiDict.get(self, _hkey(key), default, index) - def filter(self, names): - for name in [_hkey(n) for n in names]: - if name in self.dict: - del self.dict[name] - - -class WSGIHeaderDict(DictMixin): - ''' This dict-like class wraps a WSGI environ dict and provides convenient - access to HTTP_* fields. Keys and values are native strings - (2.x bytes or 3.x unicode) and keys are case-insensitive. If the WSGI - environment contains non-native string values, these are de- or encoded - using a lossless 'latin1' character set. - - The API will remain stable even on changes to the relevant PEPs. - Currently PEP 333, 444 and 3333 are supported. (PEP 444 is the only one - that uses non-native strings.) - ''' - #: List of keys that do not have a ``HTTP_`` prefix. - cgikeys = ('CONTENT_TYPE', 'CONTENT_LENGTH') - - def __init__(self, environ): - self.environ = environ - - def _ekey(self, key): - ''' Translate header field name to CGI/WSGI environ key. ''' - key = key.replace('-','_').upper() - if key in self.cgikeys: - return key - return 'HTTP_' + key - - def raw(self, key, default=None): - ''' Return the header value as is (may be bytes or unicode). ''' - return self.environ.get(self._ekey(key), default) - - def __getitem__(self, key): - return tonat(self.environ[self._ekey(key)], 'latin1') - - def __setitem__(self, key, value): - raise TypeError("%s is read-only." % self.__class__) - - def __delitem__(self, key): - raise TypeError("%s is read-only." % self.__class__) - - def __iter__(self): - for key in self.environ: - if key[:5] == 'HTTP_': - yield key[5:].replace('_', '-').title() - elif key in self.cgikeys: - yield key.replace('_', '-').title() - - def keys(self): return [x for x in self] - def __len__(self): return len(self.keys()) - def __contains__(self, key): return self._ekey(key) in self.environ - - -class ConfigDict(dict): - ''' A dict-subclass with some extras: You can access keys like attributes. - Uppercase attributes create new ConfigDicts and act as name-spaces. - Other missing attributes return None. Calling a ConfigDict updates its - values and returns itself. - - >>> cfg = ConfigDict() - >>> cfg.Namespace.value = 5 - >>> cfg.OtherNamespace(a=1, b=2) - >>> cfg - {'Namespace': {'value': 5}, 'OtherNamespace': {'a': 1, 'b': 2}} - ''' - - def __getattr__(self, key): - if key not in self and key[0].isupper(): - self[key] = ConfigDict() - return self.get(key) - - def __setattr__(self, key, value): - if hasattr(dict, key): - raise AttributeError('Read-only attribute.') - if key in self and self[key] and isinstance(self[key], ConfigDict): - raise AttributeError('Non-empty namespace attribute.') - self[key] = value - - def __delattr__(self, key): - if key in self: del self[key] - - def __call__(self, *a, **ka): - for key, value in dict(*a, **ka).items(): setattr(self, key, value) - return self - - -class AppStack(list): - """ A stack-like list. Calling it returns the head of the stack. """ - - def __call__(self): - """ Return the current default application. """ - return self[-1] - - def push(self, value=None): - """ Add a new :class:`Bottle` instance to the stack """ - if not isinstance(value, Bottle): - value = Bottle() - self.append(value) - return value - - -class WSGIFileWrapper(object): - - def __init__(self, fp, buffer_size=1024*64): - self.fp, self.buffer_size = fp, buffer_size - for attr in ('fileno', 'close', 'read', 'readlines', 'tell', 'seek'): - if hasattr(fp, attr): setattr(self, attr, getattr(fp, attr)) - - def __iter__(self): - buff, read = self.buffer_size, self.read - while True: - part = read(buff) - if not part: return - yield part - - -class _closeiter(object): - ''' This only exists to be able to attach a .close method to iterators that - do not support attribute assignment (most of itertools). ''' - - def __init__(self, iterator, close=None): - self.iterator = iterator - self.close_callbacks = makelist(close) - - def __iter__(self): - return iter(self.iterator) - - def close(self): - for func in self.close_callbacks: - func() - - -class ResourceManager(object): - ''' This class manages a list of search paths and helps to find and open - application-bound resources (files). - - :param base: default value for :meth:`add_path` calls. - :param opener: callable used to open resources. - :param cachemode: controls which lookups are cached. One of 'all', - 'found' or 'none'. - ''' - - def __init__(self, base='./', opener=open, cachemode='all'): - self.opener = open - self.base = base - self.cachemode = cachemode - - #: A list of search paths. See :meth:`add_path` for details. - self.path = [] - #: A cache for resolved paths. ``res.cache.clear()`` clears the cache. - self.cache = {} - - def add_path(self, path, base=None, index=None, create=False): - ''' Add a new path to the list of search paths. Return False if the - path does not exist. - - :param path: The new search path. Relative paths are turned into - an absolute and normalized form. If the path looks like a file - (not ending in `/`), the filename is stripped off. - :param base: Path used to absolutize relative search paths. - Defaults to :attr:`base` which defaults to ``os.getcwd()``. - :param index: Position within the list of search paths. Defaults - to last index (appends to the list). - - The `base` parameter makes it easy to reference files installed - along with a python module or package:: - - res.add_path('./resources/', __file__) - ''' - base = os.path.abspath(os.path.dirname(base or self.base)) - path = os.path.abspath(os.path.join(base, os.path.dirname(path))) - path += os.sep - if path in self.path: - self.path.remove(path) - if create and not os.path.isdir(path): - os.makedirs(path) - if index is None: - self.path.append(path) - else: - self.path.insert(index, path) - self.cache.clear() - return os.path.exists(path) - - def __iter__(self): - ''' Iterate over all existing files in all registered paths. ''' - search = self.path[:] - while search: - path = search.pop() - if not os.path.isdir(path): continue - for name in os.listdir(path): - full = os.path.join(path, name) - if os.path.isdir(full): search.append(full) - else: yield full - - def lookup(self, name): - ''' Search for a resource and return an absolute file path, or `None`. - - The :attr:`path` list is searched in order. The first match is - returend. Symlinks are followed. The result is cached to speed up - future lookups. ''' - if name not in self.cache or DEBUG: - for path in self.path: - fpath = os.path.join(path, name) - if os.path.isfile(fpath): - if self.cachemode in ('all', 'found'): - self.cache[name] = fpath - return fpath - if self.cachemode == 'all': - self.cache[name] = None - return self.cache[name] - - def open(self, name, mode='r', *args, **kwargs): - ''' Find a resource and return a file object, or raise IOError. ''' - fname = self.lookup(name) - if not fname: raise IOError("Resource %r not found." % name) - return self.opener(name, mode=mode, *args, **kwargs) - - -class FileUpload(object): - - def __init__(self, fileobj, name, filename, headers=None): - ''' Wrapper for file uploads. ''' - #: Open file(-like) object (BytesIO buffer or temporary file) - self.file = fileobj - #: Name of the upload form field - self.name = name - #: Raw filename as sent by the client (may contain unsafe characters) - self.raw_filename = filename - #: A :class:`HeaderDict` with additional headers (e.g. content-type) - self.headers = HeaderDict(headers) if headers else HeaderDict() - - content_type = HeaderProperty('Content-Type') - content_length = HeaderProperty('Content-Length', reader=int, default=-1) - - @cached_property - def filename(self): - ''' Name of the file on the client file system, but normalized to ensure - file system compatibility (lowercase, no whitespace, no path - separators, no unsafe characters, ASCII only). An empty filename - is returned as 'empty'. - ''' - from unicodedata import normalize #TODO: Module level import? - fname = self.raw_filename - if isinstance(fname, unicode): - fname = normalize('NFKD', fname).encode('ASCII', 'ignore') - fname = fname.decode('ASCII', 'ignore') - fname = os.path.basename(fname.replace('\\', os.path.sep)) - fname = re.sub(r'[^a-zA-Z0-9-_.\s]', '', fname).strip().lower() - fname = re.sub(r'[-\s]+', '-', fname.strip('.').strip()) - return fname or 'empty' - - def _copy_file(self, fp, chunk_size=2**16): - read, write, offset = self.file.read, fp.write, self.file.tell() - while 1: - buf = read(chunk_size) - if not buf: break - write(buf) - self.file.seek(offset) - - def save(self, destination, overwrite=False, chunk_size=2**16): - ''' Save file to disk or copy its content to an open file(-like) object. - If *destination* is a directory, :attr:`filename` is added to the - path. Existing files are not overwritten by default (IOError). - - :param destination: File path, directory or file(-like) object. - :param overwrite: If True, replace existing files. (default: False) - :param chunk_size: Bytes to read at a time. (default: 64kb) - ''' - if isinstance(destination, basestring): # Except file-likes here - if os.path.isdir(destination): - destination = os.path.join(destination, self.filename) - if not overwrite and os.path.exists(destination): - raise IOError('File exists.') - with open(destination, 'wb') as fp: - self._copy_file(fp, chunk_size) - else: - self._copy_file(destination, chunk_size) - - - - - - -############################################################################### -# Application Helper ########################################################### -############################################################################### - - -def abort(code=500, text='Unknown Error: Application stopped.'): - """ Aborts execution and causes a HTTP error. """ - raise HTTPError(code, text) - - -def redirect(url, code=None): - """ Aborts execution and causes a 303 or 302 redirect, depending on - the HTTP protocol version. """ - if code is None: - code = 303 if request.get('SERVER_PROTOCOL') == "HTTP/1.1" else 302 - location = urljoin(request.url, url) - raise HTTPResponse("", status=code, Location=location) - - -def _file_iter_range(fp, offset, bytes, maxread=1024*1024): - ''' Yield chunks from a range in a file. No chunk is bigger than maxread.''' - fp.seek(offset) - while bytes > 0: - part = fp.read(min(bytes, maxread)) - if not part: break - bytes -= len(part) - yield part - - -def static_file(filename, root, mimetype='auto', download=False): - """ Open a file in a safe way and return :exc:`HTTPResponse` with status - code 200, 305, 401 or 404. Set Content-Type, Content-Encoding, - Content-Length and Last-Modified header. Obey If-Modified-Since header - and HEAD requests. - """ - root = os.path.abspath(root) + os.sep - filename = os.path.abspath(os.path.join(root, filename.strip('/\\'))) - headers = dict() - - if not filename.startswith(root): - return HTTPError(403, "Access denied.") - if not os.path.exists(filename) or not os.path.isfile(filename): - return HTTPError(404, "File does not exist.") - if not os.access(filename, os.R_OK): - return HTTPError(403, "You do not have permission to access this file.") - - if mimetype == 'auto': - mimetype, encoding = mimetypes.guess_type(filename) - if mimetype: headers['Content-Type'] = mimetype - if encoding: headers['Content-Encoding'] = encoding - elif mimetype: - headers['Content-Type'] = mimetype - - if download: - download = os.path.basename(filename if download == True else download) - headers['Content-Disposition'] = 'attachment; filename="%s"' % download - - stats = os.stat(filename) - headers['Content-Length'] = clen = stats.st_size - lm = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(stats.st_mtime)) - headers['Last-Modified'] = lm - - ims = request.environ.get('HTTP_IF_MODIFIED_SINCE') - if ims: - ims = parse_date(ims.split(";")[0].strip()) - if ims is not None and ims >= int(stats.st_mtime): - headers['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime()) - return HTTPResponse(status=304, **headers) - - body = '' if request.method == 'HEAD' else open(filename, 'rb') - - headers["Accept-Ranges"] = "bytes" - ranges = request.environ.get('HTTP_RANGE') - if 'HTTP_RANGE' in request.environ: - ranges = list(parse_range_header(request.environ['HTTP_RANGE'], clen)) - if not ranges: - return HTTPError(416, "Requested Range Not Satisfiable") - offset, end = ranges[0] - headers["Content-Range"] = "bytes %d-%d/%d" % (offset, end-1, clen) - headers["Content-Length"] = str(end-offset) - if body: body = _file_iter_range(body, offset, end-offset) - return HTTPResponse(body, status=206, **headers) - return HTTPResponse(body, **headers) - - - - - - -############################################################################### -# HTTP Utilities and MISC (TODO) ############################################### -############################################################################### - - -def debug(mode=True): - """ Change the debug level. - There is only one debug level supported at the moment.""" - global DEBUG - if mode: warnings.simplefilter('default') - DEBUG = bool(mode) - - -def parse_date(ims): - """ Parse rfc1123, rfc850 and asctime timestamps and return UTC epoch. """ - try: - ts = email.utils.parsedate_tz(ims) - return time.mktime(ts[:8] + (0,)) - (ts[9] or 0) - time.timezone - except (TypeError, ValueError, IndexError, OverflowError): - return None - - -def parse_auth(header): - """ Parse rfc2617 HTTP authentication header string (basic) and return (user,pass) tuple or None""" - try: - method, data = header.split(None, 1) - if method.lower() == 'basic': - user, pwd = touni(base64.b64decode(tob(data))).split(':',1) - return user, pwd - except (KeyError, ValueError): - return None - -def parse_range_header(header, maxlen=0): - ''' Yield (start, end) ranges parsed from a HTTP Range header. Skip - unsatisfiable ranges. The end index is non-inclusive.''' - if not header or header[:6] != 'bytes=': return - ranges = [r.split('-', 1) for r in header[6:].split(',') if '-' in r] - for start, end in ranges: - try: - if not start: # bytes=-100 -> last 100 bytes - start, end = max(0, maxlen-int(end)), maxlen - elif not end: # bytes=100- -> all but the first 99 bytes - start, end = int(start), maxlen - else: # bytes=100-200 -> bytes 100-200 (inclusive) - start, end = int(start), min(int(end)+1, maxlen) - if 0 <= start < end <= maxlen: - yield start, end - except ValueError: - pass - -def _parse_qsl(qs): - r = [] - for pair in qs.replace(';','&').split('&'): - if not pair: continue - nv = pair.split('=', 1) - if len(nv) != 2: nv.append('') - key = urlunquote(nv[0].replace('+', ' ')) - value = urlunquote(nv[1].replace('+', ' ')) - r.append((key, value)) - return r - -def _lscmp(a, b): - ''' Compares two strings in a cryptographically safe way: - Runtime is not affected by length of common prefix. ''' - return not sum(0 if x==y else 1 for x, y in zip(a, b)) and len(a) == len(b) - - -def cookie_encode(data, key): - ''' Encode and sign a pickle-able object. Return a (byte) string ''' - msg = base64.b64encode(pickle.dumps(data, -1)) - sig = base64.b64encode(hmac.new(tob(key), msg).digest()) - return tob('!') + sig + tob('?') + msg - - -def cookie_decode(data, key): - ''' Verify and decode an encoded string. Return an object or None.''' - data = tob(data) - if cookie_is_encoded(data): - sig, msg = data.split(tob('?'), 1) - if _lscmp(sig[1:], base64.b64encode(hmac.new(tob(key), msg).digest())): - return pickle.loads(base64.b64decode(msg)) - return None - - -def cookie_is_encoded(data): - ''' Return True if the argument looks like a encoded cookie.''' - return bool(data.startswith(tob('!')) and tob('?') in data) - - -def html_escape(string): - ''' Escape HTML special characters ``&<>`` and quotes ``'"``. ''' - return string.replace('&','&').replace('<','<').replace('>','>')\ - .replace('"','"').replace("'",''') - - -def html_quote(string): - ''' Escape and quote a string to be used as an HTTP attribute.''' - return '"%s"' % html_escape(string).replace('\n','%#10;')\ - .replace('\r',' ').replace('\t',' ') - - -def yieldroutes(func): - """ Return a generator for routes that match the signature (name, args) - of the func parameter. This may yield more than one route if the function - takes optional keyword arguments. The output is best described by example:: - - a() -> '/a' - b(x, y) -> '/b/:x/:y' - c(x, y=5) -> '/c/:x' and '/c/:x/:y' - d(x=5, y=6) -> '/d' and '/d/:x' and '/d/:x/:y' - """ - import inspect # Expensive module. Only import if necessary. - path = '/' + func.__name__.replace('__','/').lstrip('/') - spec = inspect.getargspec(func) - argc = len(spec[0]) - len(spec[3] or []) - path += ('/:%s' * argc) % tuple(spec[0][:argc]) - yield path - for arg in spec[0][argc:]: - path += '/:%s' % arg - yield path - - -def path_shift(script_name, path_info, shift=1): - ''' Shift path fragments from PATH_INFO to SCRIPT_NAME and vice versa. - - :return: The modified paths. - :param script_name: The SCRIPT_NAME path. - :param script_name: The PATH_INFO path. - :param shift: The number of path fragments to shift. May be negative to - change the shift direction. (default: 1) - ''' - if shift == 0: return script_name, path_info - pathlist = path_info.strip('/').split('/') - scriptlist = script_name.strip('/').split('/') - if pathlist and pathlist[0] == '': pathlist = [] - if scriptlist and scriptlist[0] == '': scriptlist = [] - if shift > 0 and shift <= len(pathlist): - moved = pathlist[:shift] - scriptlist = scriptlist + moved - pathlist = pathlist[shift:] - elif shift < 0 and shift >= -len(scriptlist): - moved = scriptlist[shift:] - pathlist = moved + pathlist - scriptlist = scriptlist[:shift] - else: - empty = 'SCRIPT_NAME' if shift < 0 else 'PATH_INFO' - raise AssertionError("Cannot shift. Nothing left from %s" % empty) - new_script_name = '/' + '/'.join(scriptlist) - new_path_info = '/' + '/'.join(pathlist) - if path_info.endswith('/') and pathlist: new_path_info += '/' - return new_script_name, new_path_info - - -def auth_basic(check, realm="private", text="Access denied"): - ''' Callback decorator to require HTTP auth (basic). - TODO: Add route(check_auth=...) parameter. ''' - def decorator(func): - def wrapper(*a, **ka): - user, password = request.auth or (None, None) - if user is None or not check(user, password): - err = HTTPError(401, text) - err.add_header('WWW-Authenticate', 'Basic realm="%s"' % realm) - return err - return func(*a, **ka) - return wrapper - return decorator - - -# Shortcuts for common Bottle methods. -# They all refer to the current default application. - -def make_default_app_wrapper(name): - ''' Return a callable that relays calls to the current default app. ''' - @functools.wraps(getattr(Bottle, name)) - def wrapper(*a, **ka): - return getattr(app(), name)(*a, **ka) - return wrapper - -route = make_default_app_wrapper('route') -get = make_default_app_wrapper('get') -post = make_default_app_wrapper('post') -put = make_default_app_wrapper('put') -delete = make_default_app_wrapper('delete') -error = make_default_app_wrapper('error') -mount = make_default_app_wrapper('mount') -hook = make_default_app_wrapper('hook') -install = make_default_app_wrapper('install') -uninstall = make_default_app_wrapper('uninstall') -url = make_default_app_wrapper('get_url') - - - - - - - -############################################################################### -# Server Adapter ############################################################### -############################################################################### - - -class ServerAdapter(object): - quiet = False - def __init__(self, host='127.0.0.1', port=8080, **options): - self.options = options - self.host = host - self.port = int(port) - - def run(self, handler): # pragma: no cover - pass - - def __repr__(self): - args = ', '.join(['%s=%s'%(k,repr(v)) for k, v in self.options.items()]) - return "%s(%s)" % (self.__class__.__name__, args) - - -class CGIServer(ServerAdapter): - quiet = True - def run(self, handler): # pragma: no cover - from wsgiref.handlers import CGIHandler - def fixed_environ(environ, start_response): - environ.setdefault('PATH_INFO', '') - return handler(environ, start_response) - CGIHandler().run(fixed_environ) - - -class FlupFCGIServer(ServerAdapter): - def run(self, handler): # pragma: no cover - import flup.server.fcgi - self.options.setdefault('bindAddress', (self.host, self.port)) - flup.server.fcgi.WSGIServer(handler, **self.options).run() - - -class WSGIRefServer(ServerAdapter): - def run(self, handler): # pragma: no cover - from wsgiref.simple_server import make_server, WSGIRequestHandler - if self.quiet: - class QuietHandler(WSGIRequestHandler): - def log_request(*args, **kw): pass - self.options['handler_class'] = QuietHandler - srv = make_server(self.host, self.port, handler, **self.options) - srv.serve_forever() - - -class CherryPyServer(ServerAdapter): - def run(self, handler): # pragma: no cover - from cherrypy import wsgiserver - server = wsgiserver.CherryPyWSGIServer((self.host, self.port), handler) - try: - server.start() - finally: - server.stop() - - -class WaitressServer(ServerAdapter): - def run(self, handler): - from waitress import serve - serve(handler, host=self.host, port=self.port) - - -class PasteServer(ServerAdapter): - def run(self, handler): # pragma: no cover - from paste import httpserver - from paste.translogger import TransLogger - handler = TransLogger(handler, setup_console_handler=(not self.quiet)) - httpserver.serve(handler, host=self.host, port=str(self.port), - **self.options) - - -class MeinheldServer(ServerAdapter): - def run(self, handler): - from meinheld import server - server.listen((self.host, self.port)) - server.run(handler) - - -class FapwsServer(ServerAdapter): - """ Extremely fast webserver using libev. See http://www.fapws.org/ """ - def run(self, handler): # pragma: no cover - import fapws._evwsgi as evwsgi - from fapws import base, config - port = self.port - if float(config.SERVER_IDENT[-2:]) > 0.4: - # fapws3 silently changed its API in 0.5 - port = str(port) - evwsgi.start(self.host, port) - # fapws3 never releases the GIL. Complain upstream. I tried. No luck. - if 'BOTTLE_CHILD' in os.environ and not self.quiet: - _stderr("WARNING: Auto-reloading does not work with Fapws3.\n") - _stderr(" (Fapws3 breaks python thread support)\n") - evwsgi.set_base_module(base) - def app(environ, start_response): - environ['wsgi.multiprocess'] = False - return handler(environ, start_response) - evwsgi.wsgi_cb(('', app)) - evwsgi.run() - - -class TornadoServer(ServerAdapter): - """ The super hyped asynchronous server by facebook. Untested. """ - def run(self, handler): # pragma: no cover - import tornado.wsgi, tornado.httpserver, tornado.ioloop - container = tornado.wsgi.WSGIContainer(handler) - server = tornado.httpserver.HTTPServer(container) - server.listen(port=self.port,address=self.host) - tornado.ioloop.IOLoop.instance().start() - - -class AppEngineServer(ServerAdapter): - """ Adapter for Google App Engine. """ - quiet = True - def run(self, handler): - from google.appengine.ext.webapp import util - # A main() function in the handler script enables 'App Caching'. - # Lets makes sure it is there. This _really_ improves performance. - module = sys.modules.get('__main__') - if module and not hasattr(module, 'main'): - module.main = lambda: util.run_wsgi_app(handler) - util.run_wsgi_app(handler) - - -class TwistedServer(ServerAdapter): - """ Untested. """ - def run(self, handler): - from twisted.web import server, wsgi - from twisted.python.threadpool import ThreadPool - from twisted.internet import reactor - thread_pool = ThreadPool() - thread_pool.start() - reactor.addSystemEventTrigger('after', 'shutdown', thread_pool.stop) - factory = server.Site(wsgi.WSGIResource(reactor, thread_pool, handler)) - reactor.listenTCP(self.port, factory, interface=self.host) - reactor.run() - - -class DieselServer(ServerAdapter): - """ Untested. """ - def run(self, handler): - from diesel.protocols.wsgi import WSGIApplication - app = WSGIApplication(handler, port=self.port) - app.run() - - -class GeventServer(ServerAdapter): - """ Untested. Options: - - * `fast` (default: False) uses libevent's http server, but has some - issues: No streaming, no pipelining, no SSL. - * See gevent.wsgi.WSGIServer() documentation for more options. - """ - def run(self, handler): - from gevent import wsgi, pywsgi, local - if not isinstance(_lctx, local.local): - msg = "Bottle requires gevent.monkey.patch_all() (before import)" - raise RuntimeError(msg) - if not self.options.pop('fast', None): wsgi = pywsgi - self.options['log'] = None if self.quiet else 'default' - address = (self.host, self.port) - wsgi.WSGIServer(address, handler, **self.options).serve_forever() - - -class GunicornServer(ServerAdapter): - """ Untested. See http://gunicorn.org/configure.html for options. """ - def run(self, handler): - from gunicorn.app.base import Application - - config = {'bind': "%s:%d" % (self.host, int(self.port))} - config.update(self.options) - - class GunicornApplication(Application): - def init(self, parser, opts, args): - return config - - def load(self): - return handler - - GunicornApplication().run() - - -class EventletServer(ServerAdapter): - """ Untested """ - def run(self, handler): - from eventlet import wsgi, listen - try: - wsgi.server(listen((self.host, self.port)), handler, - log_output=(not self.quiet)) - except TypeError: - # Fallback, if we have old version of eventlet - wsgi.server(listen((self.host, self.port)), handler) - - -class RocketServer(ServerAdapter): - """ Untested. """ - def run(self, handler): - from rocket import Rocket - server = Rocket((self.host, self.port), 'wsgi', { 'wsgi_app' : handler }) - server.start() - - -class BjoernServer(ServerAdapter): - """ Fast server written in C: https://github.com/jonashaag/bjoern """ - def run(self, handler): - from bjoern import run - run(handler, self.host, self.port) - - -class AutoServer(ServerAdapter): - """ Untested. """ - adapters = [WaitressServer, PasteServer, TwistedServer, CherryPyServer, WSGIRefServer] - def run(self, handler): - for sa in self.adapters: - try: - return sa(self.host, self.port, **self.options).run(handler) - except ImportError: - pass - -server_names = { - 'cgi': CGIServer, - 'flup': FlupFCGIServer, - 'wsgiref': WSGIRefServer, - 'waitress': WaitressServer, - 'cherrypy': CherryPyServer, - 'paste': PasteServer, - 'fapws3': FapwsServer, - 'tornado': TornadoServer, - 'gae': AppEngineServer, - 'twisted': TwistedServer, - 'diesel': DieselServer, - 'meinheld': MeinheldServer, - 'gunicorn': GunicornServer, - 'eventlet': EventletServer, - 'gevent': GeventServer, - 'rocket': RocketServer, - 'bjoern' : BjoernServer, - 'auto': AutoServer, -} - - - - - - -############################################################################### -# Application Control ########################################################## -############################################################################### - - -def load(target, **namespace): - """ Import a module or fetch an object from a module. - - * ``package.module`` returns `module` as a module object. - * ``pack.mod:name`` returns the module variable `name` from `pack.mod`. - * ``pack.mod:func()`` calls `pack.mod.func()` and returns the result. - - The last form accepts not only function calls, but any type of - expression. Keyword arguments passed to this function are available as - local variables. Example: ``import_string('re:compile(x)', x='[a-z]')`` - """ - module, target = target.split(":", 1) if ':' in target else (target, None) - if module not in sys.modules: __import__(module) - if not target: return sys.modules[module] - if target.isalnum(): return getattr(sys.modules[module], target) - package_name = module.split('.')[0] - namespace[package_name] = sys.modules[package_name] - return eval('%s.%s' % (module, target), namespace) - - -def load_app(target): - """ Load a bottle application from a module and make sure that the import - does not affect the current default application, but returns a separate - application object. See :func:`load` for the target parameter. """ - global NORUN; NORUN, nr_old = True, NORUN - try: - tmp = default_app.push() # Create a new "default application" - rv = load(target) # Import the target module - return rv if callable(rv) else tmp - finally: - default_app.remove(tmp) # Remove the temporary added default application - NORUN = nr_old - -_debug = debug -def run(app=None, server='wsgiref', host='127.0.0.1', port=8080, - interval=1, reloader=False, quiet=False, plugins=None, - debug=False, **kargs): - """ Start a server instance. This method blocks until the server terminates. - - :param app: WSGI application or target string supported by - :func:`load_app`. (default: :func:`default_app`) - :param server: Server adapter to use. See :data:`server_names` keys - for valid names or pass a :class:`ServerAdapter` subclass. - (default: `wsgiref`) - :param host: Server address to bind to. Pass ``0.0.0.0`` to listens on - all interfaces including the external one. (default: 127.0.0.1) - :param port: Server port to bind to. Values below 1024 require root - privileges. (default: 8080) - :param reloader: Start auto-reloading server? (default: False) - :param interval: Auto-reloader interval in seconds (default: 1) - :param quiet: Suppress output to stdout and stderr? (default: False) - :param options: Options passed to the server adapter. - """ - if NORUN: return - if reloader and not os.environ.get('BOTTLE_CHILD'): - try: - lockfile = None - fd, lockfile = tempfile.mkstemp(prefix='bottle.', suffix='.lock') - os.close(fd) # We only need this file to exist. We never write to it - while os.path.exists(lockfile): - args = [sys.executable] + sys.argv - environ = os.environ.copy() - environ['BOTTLE_CHILD'] = 'true' - environ['BOTTLE_LOCKFILE'] = lockfile - p = subprocess.Popen(args, env=environ) - while p.poll() is None: # Busy wait... - os.utime(lockfile, None) # I am alive! - time.sleep(interval) - if p.poll() != 3: - if os.path.exists(lockfile): os.unlink(lockfile) - sys.exit(p.poll()) - except KeyboardInterrupt: - pass - finally: - if os.path.exists(lockfile): - os.unlink(lockfile) - return - - try: - _debug(debug) - app = app or default_app() - if isinstance(app, basestring): - app = load_app(app) - if not callable(app): - raise ValueError("Application is not callable: %r" % app) - - for plugin in plugins or []: - app.install(plugin) - - if server in server_names: - server = server_names.get(server) - if isinstance(server, basestring): - server = load(server) - if isinstance(server, type): - server = server(host=host, port=port, **kargs) - if not isinstance(server, ServerAdapter): - raise ValueError("Unknown or unsupported server: %r" % server) - - server.quiet = server.quiet or quiet - if not server.quiet: - _stderr("Bottle v%s server starting up (using %s)...\n" % (__version__, repr(server))) - _stderr("Listening on http://%s:%d/\n" % (server.host, server.port)) - _stderr("Hit Ctrl-C to quit.\n\n") - - if reloader: - lockfile = os.environ.get('BOTTLE_LOCKFILE') - bgcheck = FileCheckerThread(lockfile, interval) - with bgcheck: - server.run(app) - if bgcheck.status == 'reload': - sys.exit(3) - else: - server.run(app) - except KeyboardInterrupt: - pass - except (SystemExit, MemoryError): - raise - except: - if not reloader: raise - if not getattr(server, 'quiet', quiet): - print_exc() - time.sleep(interval) - sys.exit(3) - - - -class FileCheckerThread(threading.Thread): - ''' Interrupt main-thread as soon as a changed module file is detected, - the lockfile gets deleted or gets to old. ''' - - def __init__(self, lockfile, interval): - threading.Thread.__init__(self) - self.lockfile, self.interval = lockfile, interval - #: Is one of 'reload', 'error' or 'exit' - self.status = None - - def run(self): - exists = os.path.exists - mtime = lambda path: os.stat(path).st_mtime - files = dict() - - for module in list(sys.modules.values()): - path = getattr(module, '__file__', '') - if path[-4:] in ('.pyo', '.pyc'): path = path[:-1] - if path and exists(path): files[path] = mtime(path) - - while not self.status: - if not exists(self.lockfile)\ - or mtime(self.lockfile) < time.time() - self.interval - 5: - self.status = 'error' - thread.interrupt_main() - for path, lmtime in list(files.items()): - if not exists(path) or mtime(path) > lmtime: - self.status = 'reload' - thread.interrupt_main() - break - time.sleep(self.interval) - - def __enter__(self): - self.start() - - def __exit__(self, exc_type, exc_val, exc_tb): - if not self.status: self.status = 'exit' # silent exit - self.join() - return exc_type is not None and issubclass(exc_type, KeyboardInterrupt) - - - - - -############################################################################### -# Template Adapters ############################################################ -############################################################################### - - -class TemplateError(HTTPError): - def __init__(self, message): - HTTPError.__init__(self, 500, message) - - -class BaseTemplate(object): - """ Base class and minimal API for template adapters """ - extensions = ['tpl','html','thtml','stpl'] - settings = {} #used in prepare() - defaults = {} #used in render() - - def __init__(self, source=None, name=None, lookup=[], encoding='utf8', **settings): - """ Create a new template. - If the source parameter (str or buffer) is missing, the name argument - is used to guess a template filename. Subclasses can assume that - self.source and/or self.filename are set. Both are strings. - The lookup, encoding and settings parameters are stored as instance - variables. - The lookup parameter stores a list containing directory paths. - The encoding parameter should be used to decode byte strings or files. - The settings parameter contains a dict for engine-specific settings. - """ - self.name = name - self.source = source.read() if hasattr(source, 'read') else source - self.filename = source.filename if hasattr(source, 'filename') else None - self.lookup = [os.path.abspath(x) for x in lookup] - self.encoding = encoding - self.settings = self.settings.copy() # Copy from class variable - self.settings.update(settings) # Apply - if not self.source and self.name: - self.filename = self.search(self.name, self.lookup) - if not self.filename: - raise TemplateError('Template %s not found.' % repr(name)) - if not self.source and not self.filename: - raise TemplateError('No template specified.') - self.prepare(**self.settings) - - @classmethod - def search(cls, name, lookup=[]): - """ Search name in all directories specified in lookup. - First without, then with common extensions. Return first hit. """ - if not lookup: - depr('The template lookup path list should not be empty.') - lookup = ['.'] - - if os.path.isabs(name) and os.path.isfile(name): - depr('Absolute template path names are deprecated.') - return os.path.abspath(name) - - for spath in lookup: - spath = os.path.abspath(spath) + os.sep - fname = os.path.abspath(os.path.join(spath, name)) - if not fname.startswith(spath): continue - if os.path.isfile(fname): return fname - for ext in cls.extensions: - if os.path.isfile('%s.%s' % (fname, ext)): - return '%s.%s' % (fname, ext) - - @classmethod - def global_config(cls, key, *args): - ''' This reads or sets the global settings stored in class.settings. ''' - if args: - cls.settings = cls.settings.copy() # Make settings local to class - cls.settings[key] = args[0] - else: - return cls.settings[key] - - def prepare(self, **options): - """ Run preparations (parsing, caching, ...). - It should be possible to call this again to refresh a template or to - update settings. - """ - raise NotImplementedError - - def render(self, *args, **kwargs): - """ Render the template with the specified local variables and return - a single byte or unicode string. If it is a byte string, the encoding - must match self.encoding. This method must be thread-safe! - Local variables may be provided in dictionaries (args) - or directly, as keywords (kwargs). - """ - raise NotImplementedError - - -class MakoTemplate(BaseTemplate): - def prepare(self, **options): - from mako.template import Template - from mako.lookup import TemplateLookup - options.update({'input_encoding':self.encoding}) - options.setdefault('format_exceptions', bool(DEBUG)) - lookup = TemplateLookup(directories=self.lookup, **options) - if self.source: - self.tpl = Template(self.source, lookup=lookup, **options) - else: - self.tpl = Template(uri=self.name, filename=self.filename, lookup=lookup, **options) - - def render(self, *args, **kwargs): - for dictarg in args: kwargs.update(dictarg) - _defaults = self.defaults.copy() - _defaults.update(kwargs) - return self.tpl.render(**_defaults) - - -class CheetahTemplate(BaseTemplate): - def prepare(self, **options): - from Cheetah.Template import Template - self.context = threading.local() - self.context.vars = {} - options['searchList'] = [self.context.vars] - if self.source: - self.tpl = Template(source=self.source, **options) - else: - self.tpl = Template(file=self.filename, **options) - - def render(self, *args, **kwargs): - for dictarg in args: kwargs.update(dictarg) - self.context.vars.update(self.defaults) - self.context.vars.update(kwargs) - out = str(self.tpl) - self.context.vars.clear() - return out - - -class Jinja2Template(BaseTemplate): - def prepare(self, filters=None, tests=None, **kwargs): - from jinja2 import Environment, FunctionLoader - if 'prefix' in kwargs: # TODO: to be removed after a while - raise RuntimeError('The keyword argument `prefix` has been removed. ' - 'Use the full jinja2 environment name line_statement_prefix instead.') - self.env = Environment(loader=FunctionLoader(self.loader), **kwargs) - if filters: self.env.filters.update(filters) - if tests: self.env.tests.update(tests) - if self.source: - self.tpl = self.env.from_string(self.source) - else: - self.tpl = self.env.get_template(self.filename) - - def render(self, *args, **kwargs): - for dictarg in args: kwargs.update(dictarg) - _defaults = self.defaults.copy() - _defaults.update(kwargs) - return self.tpl.render(**_defaults) - - def loader(self, name): - fname = self.search(name, self.lookup) - if not fname: return - with open(fname, "rb") as f: - return f.read().decode(self.encoding) - - -class SimpleTemplate(BaseTemplate): - blocks = ('if', 'elif', 'else', 'try', 'except', 'finally', 'for', 'while', - 'with', 'def', 'class') - dedent_blocks = ('elif', 'else', 'except', 'finally') - - @lazy_attribute - def re_pytokens(cls): - ''' This matches comments and all kinds of quoted strings but does - NOT match comments (#...) within quoted strings. (trust me) ''' - return re.compile(r''' - (''(?!')|""(?!")|'{6}|"{6} # Empty strings (all 4 types) - |'(?:[^\\']|\\.)+?' # Single quotes (') - |"(?:[^\\"]|\\.)+?" # Double quotes (") - |'{3}(?:[^\\]|\\.|\n)+?'{3} # Triple-quoted strings (') - |"{3}(?:[^\\]|\\.|\n)+?"{3} # Triple-quoted strings (") - |\#.* # Comments - )''', re.VERBOSE) - - def prepare(self, escape_func=html_escape, noescape=False, **kwargs): - self.cache = {} - enc = self.encoding - self._str = lambda x: touni(x, enc) - self._escape = lambda x: escape_func(touni(x, enc)) - if noescape: - self._str, self._escape = self._escape, self._str - - @classmethod - def split_comment(cls, code): - """ Removes comments (#...) from python code. """ - if '#' not in code: return code - #: Remove comments only (leave quoted strings as they are) - subf = lambda m: '' if m.group(0)[0]=='#' else m.group(0) - return re.sub(cls.re_pytokens, subf, code) - - @cached_property - def co(self): - return compile(self.code, self.filename or '', 'exec') - - @cached_property - def code(self): - stack = [] # Current Code indentation - lineno = 0 # Current line of code - ptrbuffer = [] # Buffer for printable strings and token tuple instances - codebuffer = [] # Buffer for generated python code - multiline = dedent = oneline = False - template = self.source - if not template: - with open(self.filename, 'rb') as fp: - template = fp.read() - - def yield_tokens(line): - for i, part in enumerate(re.split(r'\{\{(.*?)\}\}', line)): - if i % 2: - if part.startswith('!'): yield 'RAW', part[1:] - else: yield 'CMD', part - else: yield 'TXT', part - - def flush(): # Flush the ptrbuffer - if not ptrbuffer: return - cline = '' - for line in ptrbuffer: - for token, value in line: - if token == 'TXT': cline += repr(value) - elif token == 'RAW': cline += '_str(%s)' % value - elif token == 'CMD': cline += '_escape(%s)' % value - cline += ', ' - cline = cline[:-2] + '\\\n' - cline = cline[:-2] - if cline[:-1].endswith('\\\\\\\\\\n'): - cline = cline[:-7] + cline[-1] # 'nobr\\\\\n' --> 'nobr' - cline = '_printlist([' + cline + '])' - del ptrbuffer[:] # Do this before calling code() again - code(cline) - - def code(stmt): - for line in stmt.splitlines(): - codebuffer.append(' ' * len(stack) + line.strip()) - - for line in template.splitlines(True): - lineno += 1 - line = touni(line, self.encoding) - sline = line.lstrip() - if lineno <= 2: - m = re.match(r"%\s*#.*coding[:=]\s*([-\w.]+)", sline) - if m: self.encoding = m.group(1) - if m: line = line.replace('coding','coding (removed)') - if sline and sline[0] == '%' and sline[:2] != '%%': - line = line.split('%',1)[1].lstrip() # Full line following the % - cline = self.split_comment(line).strip() - cmd = re.split(r'[^a-zA-Z0-9_]', cline)[0] - flush() # You are actually reading this? Good luck, it's a mess :) - if cmd in self.blocks or multiline: - cmd = multiline or cmd - dedent = cmd in self.dedent_blocks # "else:" - if dedent and not oneline and not multiline: - cmd = stack.pop() - code(line) - oneline = not cline.endswith(':') # "if 1: pass" - multiline = cmd if cline.endswith('\\') else False - if not oneline and not multiline: - stack.append(cmd) - elif cmd == 'end' and stack: - code('#end(%s) %s' % (stack.pop(), line.strip()[3:])) - elif cmd == 'include': - p = cline.split(None, 2)[1:] - if len(p) == 2: - code("_=_include(%s, _stdout, %s)" % (repr(p[0]), p[1])) - elif p: - code("_=_include(%s, _stdout)" % repr(p[0])) - else: # Empty %include -> reverse of %rebase - code("_printlist(_base)") - elif cmd == 'rebase': - p = cline.split(None, 2)[1:] - if len(p) == 2: - code("globals()['_rebase']=(%s, dict(%s))" % (repr(p[0]), p[1])) - elif p: - code("globals()['_rebase']=(%s, {})" % repr(p[0])) - else: - code(line) - else: # Line starting with text (not '%') or '%%' (escaped) - if line.strip().startswith('%%'): - line = line.replace('%%', '%', 1) - ptrbuffer.append(yield_tokens(line)) - flush() - return '\n'.join(codebuffer) + '\n' - - def subtemplate(self, _name, _stdout, *args, **kwargs): - for dictarg in args: kwargs.update(dictarg) - if _name not in self.cache: - self.cache[_name] = self.__class__(name=_name, lookup=self.lookup) - return self.cache[_name].execute(_stdout, kwargs) - - def execute(self, _stdout, *args, **kwargs): - for dictarg in args: kwargs.update(dictarg) - env = self.defaults.copy() - env.update({'_stdout': _stdout, '_printlist': _stdout.extend, - '_include': self.subtemplate, '_str': self._str, - '_escape': self._escape, 'get': env.get, - 'setdefault': env.setdefault, 'defined': env.__contains__}) - env.update(kwargs) - eval(self.co, env) - if '_rebase' in env: - subtpl, rargs = env['_rebase'] - rargs['_base'] = _stdout[:] #copy stdout - del _stdout[:] # clear stdout - return self.subtemplate(subtpl,_stdout,rargs) - return env - - def render(self, *args, **kwargs): - """ Render the template using keyword arguments as local variables. """ - for dictarg in args: kwargs.update(dictarg) - stdout = [] - self.execute(stdout, kwargs) - return ''.join(stdout) - - -def template(*args, **kwargs): - ''' - Get a rendered template as a string iterator. - You can use a name, a filename or a template string as first parameter. - Template rendering arguments can be passed as dictionaries - or directly (as keyword arguments). - ''' - tpl = args[0] if args else None - adapter = kwargs.pop('template_adapter', SimpleTemplate) - lookup = kwargs.pop('template_lookup', TEMPLATE_PATH) - tplid = (id(lookup), tpl) - if tplid not in TEMPLATES or DEBUG: - settings = kwargs.pop('template_settings', {}) - if isinstance(tpl, adapter): - TEMPLATES[tplid] = tpl - if settings: TEMPLATES[tplid].prepare(**settings) - elif "\n" in tpl or "{" in tpl or "%" in tpl or '$' in tpl: - TEMPLATES[tplid] = adapter(source=tpl, lookup=lookup, **settings) - else: - TEMPLATES[tplid] = adapter(name=tpl, lookup=lookup, **settings) - if not TEMPLATES[tplid]: - abort(500, 'Template (%s) not found' % tpl) - for dictarg in args[1:]: kwargs.update(dictarg) - return TEMPLATES[tplid].render(kwargs) - -mako_template = functools.partial(template, template_adapter=MakoTemplate) -cheetah_template = functools.partial(template, template_adapter=CheetahTemplate) -jinja2_template = functools.partial(template, template_adapter=Jinja2Template) - - -def view(tpl_name, **defaults): - ''' Decorator: renders a template for a handler. - The handler can control its behavior like that: - - - return a dict of template vars to fill out the template - - return something other than a dict and the view decorator will not - process the template, but return the handler result as is. - This includes returning a HTTPResponse(dict) to get, - for instance, JSON with autojson or other castfilters. - ''' - def decorator(func): - @functools.wraps(func) - def wrapper(*args, **kwargs): - result = func(*args, **kwargs) - if isinstance(result, (dict, DictMixin)): - tplvars = defaults.copy() - tplvars.update(result) - return template(tpl_name, **tplvars) - elif result is None: - return template(tpl_name, defaults) - return result - return wrapper - return decorator - -mako_view = functools.partial(view, template_adapter=MakoTemplate) -cheetah_view = functools.partial(view, template_adapter=CheetahTemplate) -jinja2_view = functools.partial(view, template_adapter=Jinja2Template) - - - - - - -############################################################################### -# Constants and Globals ######################################################## -############################################################################### - - -TEMPLATE_PATH = ['./', './views/'] -TEMPLATES = {} -DEBUG = False -NORUN = False # If set, run() does nothing. Used by load_app() - -#: A dict to map HTTP status codes (e.g. 404) to phrases (e.g. 'Not Found') -HTTP_CODES = httplib.responses -HTTP_CODES[418] = "I'm a teapot" # RFC 2324 -HTTP_CODES[428] = "Precondition Required" -HTTP_CODES[429] = "Too Many Requests" -HTTP_CODES[431] = "Request Header Fields Too Large" -HTTP_CODES[511] = "Network Authentication Required" -_HTTP_STATUS_LINES = dict((k, '%d %s'%(k,v)) for (k,v) in HTTP_CODES.items()) - -#: The default template used for error pages. Override with @error() -ERROR_PAGE_TEMPLATE = """ -%%try: - %%from %s import DEBUG, HTTP_CODES, request, touni - - - - Error: {{e.status}} - - - -

Error: {{e.status}}

-

Sorry, the requested URL {{repr(request.url)}} - caused an error:

-
{{e.body}}
- %%if DEBUG and e.exception: -

Exception:

-
{{repr(e.exception)}}
- %%end - %%if DEBUG and e.traceback: -

Traceback:

-
{{e.traceback}}
- %%end - - -%%except ImportError: - ImportError: Could not generate the error page. Please add bottle to - the import path. -%%end -""" % __name__ - -#: A thread-safe instance of :class:`LocalRequest`. If accessed from within a -#: request callback, this instance always refers to the *current* request -#: (even on a multithreaded server). -request = LocalRequest() - -#: A thread-safe instance of :class:`LocalResponse`. It is used to change the -#: HTTP response for the *current* request. -response = LocalResponse() - -#: A thread-safe namespace. Not used by Bottle. -local = threading.local() - -# Initialize app stack (create first empty Bottle app) -# BC: 0.6.4 and needed for run() -app = default_app = AppStack() -app.push() - -#: A virtual package that redirects import statements. -#: Example: ``import bottle.ext.sqlite`` actually imports `bottle_sqlite`. -ext = _ImportRedirect('bottle.ext' if __name__ == '__main__' else __name__+".ext", 'bottle_%s').module - -if __name__ == '__main__': - opt, args, parser = _cmd_options, _cmd_args, _cmd_parser - if opt.version: - _stdout('Bottle %s\n'%__version__) - sys.exit(0) - if not args: - parser.print_help() - _stderr('\nError: No application specified.\n') - sys.exit(1) - - sys.path.insert(0, '.') - sys.modules.setdefault('bottle', sys.modules['__main__']) - - host, port = (opt.bind or 'localhost'), 8080 - if ':' in host: - host, port = host.rsplit(':', 1) - - run(args[0], host=host, port=port, server=opt.server, - reloader=opt.reload, plugins=opt.plugin, debug=opt.debug) - - - - -# THE END diff --git a/etc/keyserver/bottle.pyc b/etc/keyserver/bottle.pyc deleted file mode 100644 index e2602ff..0000000 Binary files a/etc/keyserver/bottle.pyc and /dev/null differ diff --git a/etc/keyserver/server.py b/etc/keyserver/server.py deleted file mode 100644 index ba0d0f8..0000000 --- a/etc/keyserver/server.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/user/bin/env python2 -#-*- coding: utf8 -*- - -from bottle import * -import os -import re -import sys - -HOSTS = os.environ.get('LVPN_HOSTS') + '/' -LVPN = os.environ.get('LVPN') - -@post('/') -def submit_key(hostname): - """ Hostname es el nombre del fichero, el contendo son los datos enviados - vía POST """ - if not re.match(r'^[a-zA-Z0-9_\-]+', hostname): - # Contiene caracteres especiales como / o .. - return 'FILTER' - filename = HOSTS + hostname - - if os.path.exists(filename): - return 'FILE EXISTS' - - #Generamos el fichero - content = request.body.read() # Datos recibidos vía POST - f = open(filename, 'w') - f.write(content) - f.close() - - #Anunciamos la llave - os.system('%s announce %s' % (LVPN, hostname)) - - return 'OK' - -run(host='localhost', port=8080, debug=False) - diff --git a/etc/libnatpmp b/etc/libnatpmp deleted file mode 160000 index d5b8330..0000000 --- a/etc/libnatpmp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d5b833082ad62bc4e3d9e5ca01a3a8fd9f2fc2f6 diff --git a/etc/miniupnp b/etc/miniupnp deleted file mode 160000 index 3f1aaef..0000000 --- a/etc/miniupnp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3f1aaef49a3687513ac451bf01a78b1e5ba70cdc diff --git a/hosts/Almafuerte b/hosts/Almafuerte deleted file mode 100644 index f9640a3..0000000 --- a/hosts/Almafuerte +++ /dev/null @@ -1,21 +0,0 @@ -# Almafuerte -# rinoplastia@localhost.localdomain -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.15/32 -Subnet = 2001:1291:200:83ab:287b:d25b:a0d5:2620/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEArTHurSBqrTW5gox/8PkHy4dZQdn6bIbDPfpjfEAPK9ruIXt3FO79 -r22W2zPNAlNjEP5qDVBW5C8iVdTX2LWDa0jb6Hm0/ZaaTsP0f4ux2DmqAOPIjUc/ -UyoA+YIlAcWow235Lv4RjtBSBPN/ibg8a63J+LKF8YeecmQrzfrwaiir0YTQGsDo -S1gXBkbbdbvlYULY892oUg3TDqSXNyrUzMFfWLxN5qXG2M7o8kGXaJr9PZy07eQc -cJe4UGQDyqpT/uVNO3zxarHogmFyZmFxjmSfGrSh+5y4dTHz21Tmsw5+L3y7eGSQ -0thAKK+K43MHOT524CkKKEKuo6i8fwviakmzGFxR9wcBJsdkjlDPw1eapx25EvxN -uaP7JYrOC0T2U8jQaUl4+8aSNcbr3+z5P2DVRQhBE1ZbjzJt1JsP1DdyBrpk9Zda -IN4qv45EI8KMrL2QWoxSoPSqvqv+FAspG6uEkjQeCzSfSLJXtL/OHe+96ln+oj7n -+hObO2G8ZFnwYGIpRNZ5LXAunJ1SyApHSrYWj0ZFtpxV4JJF+JM6mtrQl6p+IEDE -XGhdgpx78N3HXY9e51aU9uRqDvvkhEt6tyjhPgA9aF/bmgJ3B9aqX/t0W7f6rsNR -0RBoNBI4e9rtgKqAoJ2NsZ2SdS0WYR2ZHrT0moV9XF/ZEM4UVZ+xPjECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/Azeroth b/hosts/Azeroth deleted file mode 100644 index 3995b18..0000000 --- a/hosts/Azeroth +++ /dev/null @@ -1,22 +0,0 @@ -# Azeroth -# diendenal@Azeroth - -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.56/32 -Subnet = 2001:1291:200:83ab:24fb:e060:25b7:55bc/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAu3LYNtDBLVxXgmAq/Ewz2P7zCCkDDqWyDrhpgAH+Yr7LDYHFsJwL -9qb96UR19jnwRjay7/Y4KM5bKKjHUbazypuDZYsoH99xNa05JNqryeMMB4QcwsaQ -iEGpkHaNQUp0iHnJFNHxJ70kH1K+b1Z2B6dIMCRACOP+M983ATEyoeQPjTM0D7r8 -IPU146ax59o18coXnS18ein4yWq35C05akLay4lf9ENW3iDPmS4D251xG8RBtKdK -uuCnjqYE48i2bipyO1TtUc2H66yMxVfuUVHolgO5t0buRsxVdAhzf74kBe5B/EAq -dctTYRWqemh4bJKFqJVpmwqUAUhCo/xSqFsKqSwBji5io0a+GGI1CqeFNH1lSNxZ -VuSp3mkZId+zFxX68V+bsyfvUHPrYEnNT/XRCPYVyshUABGjsy2D8gjcebdrepEI -J4jd1MgYKAi7wOb0wlh9SVol6NcixsXAOT6jgq9yFCeO61pEkeBr+EQuddtkKtkS -wXQ3JKueREyfRtgOb1Ag/h//m0bJKmq1Yhe/aTT0husj+5xZPyBzpVgn4fe5egUq -2FqOGMUbvMFIZM9TwF6IPM2JJRVL3zIEQWSHh246lyM45wP91XoIZtNNa2fdGcHz -6tkbAFquqrm8lTOD1C7qhnbqJolyfxN1lmYDug2iM8g02pXoobgOzIcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/BlackWood b/hosts/BlackWood deleted file mode 100644 index 3f9eb55..0000000 --- a/hosts/BlackWood +++ /dev/null @@ -1,16 +0,0 @@ -Address = 200.85.185.2 -Subnet = 192.168.9.167/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA0efQPkNBD6XiToqXJrnBpdwhr0hy2rlhQolJfPqc5R5/udUoPk1z -7vPzqNJpdUnGNdCnrEQ0tjnJPKsjVSk5yL0QiEuoC5iABgbIa+pn7rSfZEe/acCc -BeWsveT7w9iFKZBTIiBq0LES4w3SUHfySjHnGnV5uIvDrmoNwbyt2CAXwmelAJ3x -Ra21sLjVQ9iuOuooPufNVEFWc9TbpOspq77s+YzGSMAQ/rYc/7iNQ3g7DaizYRbq -9eMpWPeNAiXfBPjQ5EJPIwbTntU2OGrnZFINWouH6zCK2OU5Lg8ugVtKeQ6KhNs4 -KpZjKQWcvweMSN1HI150qemlxgZcHJvEOPUlsIdEI0lbuWNksUSs7MpsR9Clg5mZ -rPRRwqNiVhWk2WBcPMbAk7LQ2vrqK+kCq/fcLt2F/4O56jIQuylLBxTweT/Kg9Kg -r+gB9pFI3X9Mr1wO9vH0yTiOJoO9z3A14FYjLjJiMavVJ7fUp52HEJT7/+c8V/uN -+vhMCBPnpzIvIBV/Qea0of89QLB3sC1gduVj4tQ6mx/U1tsgZi10Mr3Cko8WVkii -YHM6DTUZC5oMk9qU93d3ZfeGHNrsXsLUZDYmwKbSkpdshKD7n0Jl43pcLCFBIIhl -y5iNFlba3AhsXB8Kqq+OgkF6DJ2PhQkZElbUEokUo4PQd00rvY+ahekCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/Debora b/hosts/Debora deleted file mode 100644 index 19205b5..0000000 --- a/hosts/Debora +++ /dev/null @@ -1,21 +0,0 @@ -# Debora -# root@Debora -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.246/32 -Subnet = 2001:1291:200:83ab:f40a:99bd:399e:38e8/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAyQuuPwem1Vymtravnz8+d86e03ibuChQjNeXyq0RdAxaOMH0goLN -wxDvahk0/vHwlZrsnY7gwzfQV6/geIRUaAyFtgyIy3nPRi5RJCwoFkZnriV02kMx -HT+hLrB1VskmXxCAxVtTE/l4DDogoDKt7FThaeu/BF0qixS6tJVFjwsAs2LCf4WW -U5t1+Y/aI9PUeViB8dVT7HF4HiL6GQn5WglK7hNC/A2kAfeCGLremKBUrWNjCX84 -Yt+g4R0fOu8Z3g3MxCfc4BomPVGcXWqySytKuUwuIFYBdU943H4AGrQoueFgAeBT -yJ4F8zW3pgQTiDCyc7RgTwJ7s6ZjyP0lDrjC11VySPrjwqCOuaasuD1oVk9bATxM -+lSdS37Xi8sEFIyNu5ckiJt7DLXA8hEK0NSUgQiQec9XG9GYASkmthdnEzIbKDL2 -3uQVqkTMOiBTJQEEy2fskoAhgJ096C2glMsfUrIQGDRATj31SGaCTTYfcU8wZDRH -MvRXCHhnHyykmMSetzsVdCFWWqzMepS31ogcBg29V8TvawZPU/ZtOqmBmND0ksvs -goHIiMZcQy415HFTLS/dhgZU/LLGvEHXU6VLo1lbFg5I+W+/4RMcWLnmftq8k+l+ -DdodhIowIEnRZkWe+kFKINYUqn2ZCHCcpFBEiaKJqXwxz6hwyin3mTkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/Elena_GNU b/hosts/Elena_GNU deleted file mode 100644 index 124fbfa..0000000 --- a/hosts/Elena_GNU +++ /dev/null @@ -1,21 +0,0 @@ -# Elena_GNU -# zorak@Elena-GNU -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.44/32 -Subnet = 2001:1291:200:83ab:6cf8:bbf4:d9ff:50c9/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA3V26mIflhG0KlIjxYvJYhIO1tWBeXJViDcORjH7C8Idb2SY9EjId -fXBj80hErepZnXKgdezM/A+dNfTz/mHBFoZw3z8XxCzDX+MPKQSzEHX8MuJY3p2P -px6fKxUi5auT5G/saoB2Pgqyz7j93oMb3S7olAzQQvI82C/UljaiWyfkTcV8D9ii -TyBHCigAhX/VQ2Mmlt+BMw8N0dglrmJ6XDQQO7FkPMNNL/3/ek2cwbsAJoky4p2l -VkF5n0/P0YIjeOQ9MAMgfV/8SLkcfnOvZdv0GPaH9zy5QxeTMXgey1mKAbseEQcm -Z7H3bhCTePQ8B2nXdoDqNrxAEVTps0LhnMyYw9bwilME77r3QBcdWS8HnfvpkCY/ -w3xwEzUxz0APquL/+8Rc4gXq7aW1lmF/j7kfYQKtAJXZ74JvUAUqF6aVCC1JgLbe -tmU213GFOA78vcORvtLJ2A7rhjqXS2OeC0FZ8WHHZzGru1m+58qekYuXv+h8Piwp -uM5Z1an3vyIRblAXDKuTAu2E9516rcq251BkvVdKF9aIILiXu+2WAj8i3FwKoKkl -rUSXsmH9WOszBaLuKIvNRznaE0LMD5qH9cvHsBygX/7cRu1DuDyECMr3WwNJjtqZ -9NyYqHv3zqWd9pxeO5Ziw65KQNFQ0A+SXhOAbcFn8VgnNLGPfEr7wjUCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/Eleusis b/hosts/Eleusis deleted file mode 100644 index b8dd6e1..0000000 --- a/hosts/Eleusis +++ /dev/null @@ -1,23 +0,0 @@ -# Eleusis -# Matías Lang -IndirectData = yes -Port = 657 -LocalDiscovery = yes -Subnet = 192.168.9.17/32 -Subnet = 2001:1291:200:83ab:e80b:a922:4c4a:9212/128 -#Address = 192.168.2.11 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA2ZIBpQqmCbQBwIacGwPouTAmvoMzTITKxAmfCNrnllN/hK5uTqzT -opdfPE5Gm9F6bg4JbB8RV4BwCI/YudLV10hJkaAr6bLXDEbi1XWg7p/tjhQeJuGL -AjBO9xNZCCYYPvl2U7Mg2vH8s4Sk5cvZWBsEvlmT4pkogXRCyr7JhZLHf1mgY376 -MVtxPL7Kitb5Q+l9K3dxaSmPGhzKyIJqEyT+J1vh4sY5IXV42QzSbWMU2Su4oBV3 -YJGotYEiPLrM30srXVGMOjw/CNUmehECVGntPzp9KeJjklxWN5AFSMGuSmmdDuMf -lDimzl/tll0lzuYomEL1BOOvPX6FidgNXVPKAiu5y2RcEOl7ncl3+xQAMaKoVJYA -QOl1fQlSmKNSbKh9W7/DhZc90Fno4F9JSi1w8R4swlZoZLWVh4OegPgMdYNbXqlT -207EXQ/2aX94Fa13WXSejDlTy0Fia9bKFIhckIljf0HMKDW8uwopYlEpQkKOJaQZ -uXUw2OfrGFZ0y/SK9Rj84F2zIc98MXFWkN+IpsPLvzH8dN/w+3lRmzFm51iVBJCp -bdtsIZEA2t++mLwSZVPtBX0+iY+GjlRIqo2Ocwl74Fp/Xuj4CWbv3GAiPXKwzXZo -8qxHxQN4fpYD8zefKjdIps0BmuHN4PLCpbVPvW/+AzjyuDYQd4eshMUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/ExZ b/hosts/ExZ deleted file mode 100644 index ba074b9..0000000 --- a/hosts/ExZ +++ /dev/null @@ -1,22 +0,0 @@ -# ExZ -# Oscar -IndirectData = yes -Port = 29763 -LocalDiscovery = yes -Subnet = 192.168.9.151/32 -Subnet = 2001:1291:200:83ab:70d8:bdd1:3618:56c3/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAuXMTLi81Qx+kZHti0QcNcoc/bu/Dm/ETVEI0hgLZJLSxjdFm3H3m -FoiB6GASGB292a9WOPmmidEtdDAnuPC8a+/KMKeCTbTgsKldZNP0AN8VRsHmKGsu -CLUDf+8N1xRmMftysO6urGDlQzjMo+RHjsXiPj2kbLN5bsI2RqnDfixftGZ8v8Rs -bBohOZnLlePrMX4a/5qKFXJ/bIQRP0U+i+RYYj2hUN9E64V4i4hgJ33qjRG4DHLK -Zd8iHyy32sqViG9Pnn/OQhlXmJ+4ONNuOOtDm4DKdQqUArLf4tK0M7W86aOWIzGR -Ag3iGcay+I2p+IziHcIoyqI0MvLe2zrVUQJU3MTSP2gxXXK07LsKrfe0qxv+eGw+ -Qb41ajNMosvfoN8ve/dOdA+f3gEdk6WWTfwyHalXlRzXERNuTgPF45cOE50ATffb -Plqz6yywaJo384KHQc3YfZbPgT7+8K5bM4WDD4QFSpoP2JhnYytthOy11JHMdTHS -wrpRUWZCdffFTlU9DZBXsI9vy8Vy+ud1wy0RjfXo8HA1/2hgff7X52XdC2gCbjUT -Ai9WcVnCpJbtdLelJ1hae6Zmon7uXExT8VOMASX3QZTbTRbj+6eHmeNV7aoeFCX1 -jgyx+X9D9x8AlRa4yqTRgT2ivM5AOmuIij2R91vQ1DWj1bpqLflfWBUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/ExodicaWorld b/hosts/ExodicaWorld deleted file mode 100644 index 3160e8d..0000000 --- a/hosts/ExodicaWorld +++ /dev/null @@ -1,39 +0,0 @@ -# ______ ___ _ __ __ __ -# / ____/ ______ ____/ (_)________ _ | | / /___ _____/ /___/ / -# / __/ | |/_/ __ \/ __ / / ___/ __ `/ | | /| / / __ \/ ___/ / __ / -# / /____> -# El nodo no utliza Avahi ni mDNS debido a que no funciona correctamente en OpenWRT -# Para visualizar correctamente el contenido web ejecutar como root: -# echo '2001:1291:200:83ab:146d:5e02:789a:4ec7 LasPircas.lan' >> /etc/hosts -# y acceder vía http://LasPircas.lan -# -IndirectData = yes -Port = 655 -LocalDiscovery = yes -# IPv4 desactivado por obsoleto -#Subnet = 192.168.9.119/32 - -Subnet = 2001:1291:200:83ab:146d:5e02:789a:4ec7/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAtt81bA/mZCbuRLXdxElPhDbQTEUzuJ98x1iQP0nqa1GEydXkqq+f -HyuMQKqs2lLE0hoSCEYZ6MDowq6jlNz15mrcXwDiZCLtupuUaze2+9HfAwNUonGX -VKvl4iiELreWhsL6hLql/2nrPORCaqVE7Z0LJ1V50yxNoCygESSiu5xkrgEwjv0S -/S3a8FlUk8VQyt/9yJfG9cAk0ZYZjCBFOM0hZqal7lFJoLl455yVHBf0AWBD0ohR -SJwIvhDpCi6Bdu7wGDcRrGiYBQWQVbrx/vWyj4aIdNepapAr5v2K1qSeRnZg2PQV -ii+AKcNhfzYAF1dnIidCE48F5OXwAwDCilemSbIxFB5lvEgpZgeWL+zyO9XbCeyi -Gzj7rdavvp50fPZ7H0mOo8TnzAEq9Rngg8Ixwmv7d8tKHNIWYT/CkzbOd3aSGWHh -TLJrwTXs1JNf0+cQVuHLR6AEoMcQidexuc2mEUwoUmynLueqRF/iSITLk1AGd4Be -tr4g8rWy7HChGP0s7FRg0Af5V8r6A0HYd5CAAsQf5DFhvZYvjRM9KofrMdIIUBw3 -VZ+3fMAd9P+Mj2BMPV8xGBXNopmh4M5F6OIu8DBncKCvZ4wPBY/9hSZ9SnPHScLK -U5+L7VH8lztgSOScsRCMPyyOuHmN+TcvaWc0VvkgY3eW3+CtJQK6gCcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/NodoPirron b/hosts/NodoPirron deleted file mode 100644 index cc08c36..0000000 --- a/hosts/NodoPirron +++ /dev/null @@ -1,23 +0,0 @@ -# NodoPirron -# matias@Pirron -IndirectData = yes -Port = 655 -LocalDiscovery = yes -# IPv4 desactivado por defecto para evitar problemas de red -#Subnet = 192.168.9.94/32 -Subnet = 2001:1291:200:83ab:145c:90a3:6351:5a91/128 -Address = matiaslang.me - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA4e/8yXaGsgjuzTCGFz7QCzSaEpDeGpEQoI0Jw9uby+0EhUYw13Hk -zJsWWok/IggH4jn7P7ZCOuEtNwbBnyL/NvgdZxBALLhk1UTE2Rmmsp7ptXeKTerT -yE7B99Nqv4ltZBlRxNAEn2d++yqmvPzS8IpI2XeF+dwwADGmPTYZ0iyHJIcQuCYw -jLET6Pd4rNZK9RgODvgLc9YCkql2Q9Rbcqmq93yb6lmSRRM0Pgyw0vk/bhPUM4QJ -oC0kHSjPaVG4m4HZf8Tf27gxFZA/j3ZsVlgNQVdmEtn9gckgwU5Mz8cL9456PTNT -6fsS1+Yca1AF60fyFXak71asDSH8kt9w/T2la0pIaQb1tl5tNfWDZjXr2vJr3LsH -MCXYPAgvMiA9jGhPhmHCuGIOz/4A9TaQibvcrEhWyBasYT1QnqOhh2vUbrPRZrm0 -g+KyI88oVzJ3/KEoFNsn/g2AqPLhEZGkJR8S0kOfOdMvxmc1mqGuusbsG5avfzwz -4KSXQYbST2wLBvsvXmjIjzHZkhxykLUEfaPvJPfr2xlPXYKzVlq2tPvl2efQeQqt -HcJK5H8k+0aVGNpTVCFNoUlC/HSx+P+qRllv2nrNx4b813GtjY4M3P8ackP8D9d1 -C5PxEehPgivvi5hV9f7oJyOVDvv2sjrKTSyCUIbyrtEy5enE5JJ8UzcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/PuntoRojo1 b/hosts/PuntoRojo1 deleted file mode 100644 index 89cbae7..0000000 --- a/hosts/PuntoRojo1 +++ /dev/null @@ -1,18 +0,0 @@ -Address = 190.147.43.23 -Subnet = 192.168.9.49/32 -Subnet = 10.0.0.0/8 -Subnet = 172.16.1.0/24 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA+dGQ1TQHBkFzwkuiPdIUZvvZh6979QFy/6Bn05LNzuMHxZKLfqKO -fv63tOjjqqTly7Q1ZX2iRzYZsaAjBXFWDvsdzTOTsuoLXDCtS+raD8fV7Us7f9mb -G+jYMhikMpyBXAmro1DJe58VmQjrJF9LQU4YpC7ed08DBZKP9CWkZJZNxEIFYMEl -tVLKAEk4l9sSchykGN8aKKYIca22Gs/4gUqpN5H36Hak5QTzSOdps6wlWvDfLp9z -IhnR8Ac2GVLXnYp50+mC+saZeVLY/3LdqvcoQvQZGyP2l3Wf35yJom6Kl77wuVJM -tK4o7qPCeK8QTQ6+zCvYWGiedlR3dUH4pmBL4yTkBg/omx4qMOzNZJQitJNdloG8 -P1uFIX0YIGKZMPlSsDxI4VfVXPRYTnhVDnG/XOI239K/LBwzm00AnUyc9I6J5zhG -KmTyZWvOwW7BjRBb3ybtY5dUQ2hDeRVv0PkyVbpiHXNhUyPd304NKjwl10IkECfT -ju/JgqtEA5hOr2UlhXnTOQM38HckZHa8ZpOgS0SO01zEWRXh1j565wVp44Aljx02 -e1mJ3dNdt4Ehp3KsrJqpUI9nDF8848wT3C7YatmiNi92vtFWsO0CZdffI2YC3AOw -U3h2M1EuiLdDf0brfHc3rFEXlCzUYH4B46Dl3zR1v1b3sFIIce9fQH8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/Sarmiento b/hosts/Sarmiento deleted file mode 100644 index 0efae83..0000000 --- a/hosts/Sarmiento +++ /dev/null @@ -1,21 +0,0 @@ -# Sarmiento -# franco@Sarmiento -IndirectData = yes -Port = 30449 -LocalDiscovery = yes -Subnet = 192.168.9.232/32 -Subnet = 2001:1291:200:83ab:b47a:16a2:f084:99a1/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA4w7mPcIaGU5pjM7EEZgDEoAlZjcc60gUrYRAhArpTEY2ZOfsLkev -gpJMh2jvtaEHVV8VGoy4BE7jGjcYxJ/xC+DFOfefdBCeQWWItemncj3i9VHPojc7 -QkPeDtljMDfyid0BJcOMcfxJkAnEt0ph85J90s3TkBRqeF+Ee6e9T5Dg6w2SZUk2 -KaaVpN9q19PHRhV3GoZqS304hojS4hBGPCQCP3GSA9hhYgU5ZHScA+VwMkHAFZJu -hlucwfNrrx3qniVyliF3i2qG6R+pJ5xQi0glX/FJ54urTnQqgAJB0bOIhXCcGjp1 -yGir/vI/kgrfoGF7ngFhh8zjbQ9Fsk0KDcXrt14+CLL2SPQmTJ7GW/U2c//mbkKv -63Atn6oymibREAVBkJvp/Q5MP5dIkXgrFBQLFD/9WOZRvvGl/f5dLjqEDMaqleUj -cxYCuoachk+3pkQbsC+7QCqWFg03kEoa0O+Xijxzk242Cfqpe+gn5t4KRvx+UJoh -PTkOQPwlH0TPOkM2QpERguM/o2zBZ1vXOHB1XkmxRywVlYDnf7URYiiSYbrG8PeX -74U8BqK/MJGcFjCE7mY65UxjoK8Fj5D161je8K3aYIvMlGvCE4ynFhtPr3eJIKJN -8pkcBvxTaOo3nUgPbnl8UF30XFLXBxIQEoFBGrwxNcb3dLEHcl0IkCMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/VillaDalmine b/hosts/VillaDalmine deleted file mode 100644 index 2f3d1af..0000000 --- a/hosts/VillaDalmine +++ /dev/null @@ -1,21 +0,0 @@ -# VillaDalmine -# Rino Rondan -Address = mail.restauradordeleyes.com.ar -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.202/32 -Subnet = 2001:1291:200:83ab:24b0:27ea:136e:17e0/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAuy7y0fge3Nm18wFZgrILaNENhMZS3IE1Y7OUP172qJT5F9VmyFzF -/Njq/KhnVguPCfwvRBcCOLcMjTg9TpGuBJBelqNsKxmBLtS+3QZ2RfGiZvyhM7hr -+kTUj5Orv8dacH0u0seE7KxhQ4TBIowhQl3BRG9aE23NLbfovvBxjO0fokKUW8Yi -QX0WN/2RvncNxA+hmZzdr4gdwi0vKkXssLlOFbhKqnZAzWKVeYioJLyFZALh9J20 -sJEFMFvcuOxFBRntDbtY0udXjinJkT6CqfkxVAZbYOl2ldkFvUvecn3ocL2tHKNu -3V8MDX7NM6YLFA5T2HUX2FGiABnojPMCnJRPH0lvCpvIYdgUwFA8Hi2ybPj/s4jG -wHEOzKYoGU29eq1D1eR9lTFf+1aLIrKRytws2BeOKpJnzrhYOvwLNAP/BZrG5Kns -WkhZFpZYEqzatFygPvizqR9O7n6F6BHtNFAvO5diDOSeRMK1Mng1JBhZCWIQ+c07 -aEpeM97rXxyfcMgaT7KsuN9vZCTPnr7O6ZPXTxjf4qwaOcWQubqCSUNzNl/tXSu5 -A+iZKw+3T6OiuNy98Q5e03VfI+Z41paVUF+bCFHrhs6qAqnuwX5x3AwhcCI0pDgo -vs/QA7uOGg9rLC3zecH0Z5bdbgql2KbZMM3ltZNU9Aijk9BddDyVg8cCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/WTF b/hosts/WTF deleted file mode 100644 index 8f603d0..0000000 --- a/hosts/WTF +++ /dev/null @@ -1,16 +0,0 @@ -Address = facu.mooo.com -Subnet = 192.168.9.99/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA2bm9CWB6QscswPsVnxNd8W9u6mOdnhpjSuI0n6O3RaqaZelWZ57S -tWtVkNQlVCX9Zl8zZgmY5+5FFhpXhgFFubiIN9emCquZe6MKSC9JZV1jGOaKqMjg -PWxiYlsvn1z7RcgYtfw6QHbfVt8krUGcHRiZ10Q8M8AVYWZC3jtKl8TnBLa/uZwf -Q3pCIxy0mu4NWFy3SA+2MlIB39aRSpluXwty9rY8LR94678+keJ5pzYQmRDudfKJ -D/Yh9VDcyeESGtH+cW2YsBCyIP3IrIZhXDiS557dk6LZdzV1T1GYHpIZJVN0O6Ya -zZvDOv/VFYOVW9vCsGhrHWhP2pDiqH3AQgRb6HaapGH5KrWEG7K3DcdkrDDb50MM -BAww44YYEhsxuSc2ztNhQnaLvFHod8GKtWxGWWH1BnMFxVGbCLuLO6PEyD8kiBab -LzSu2eBWwXmkMwqiPLpR6HBZL2mkId//BWCVmSxxqAmkaYAPb1yZjSGDELiH0rDE -zap1pgZ3i0eU8wKcV/rpvv62+4G8TnVH6+E03t7cHitv71MeIVB3QMKIa9B9ewgY -cDCFAkBAE4yFjyBtUom7O2pxh96eO53O5J9+uRKTa2OvE4xIulDmYcIQIQJPza7X -KRM4Cxb+wjeesZfNOPtBGqW3ZiRID2Sp7zRcKuD39CnydyiwD3ybQlcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/almendro b/hosts/almendro deleted file mode 100644 index 938dc0f..0000000 --- a/hosts/almendro +++ /dev/null @@ -1,16 +0,0 @@ -# almendro@riseup.net -Address = cubo-x.com.ar -Subnet = 192.168.9.34/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAwpHFQDtj+IIt2rTTMx2RQFE2DqaXortJ8f0WT2AcM/1v4DrLI+Nz -ulxxuZMkAlvKAAEhm+wJKTNJ13YStscyZZJmyIzBxh+1FmiRj5w3VBJ+3U3nAxrC -yA3Tm1mDp1SWaWG4GgynGHMVuqxbs1NNo4qxJE1YgZT1YoCzb05sWNcOUbts3hMN -6vnw8MmStsEeONUXfAFmFczXjGsTluP0ItlYaW1Z48HVtc9bpnzkmxVF8YLeVhz3 -t6KWp5FZ23SAiNgGFTm4oJuRd0Cm4BdX1/6E6voT1928mCHxVrCDOBXDjuz3yngv -3intxbxYRL1DX6t0dK4LsM9E5coOi7C3gVJch+bUpKOLVMmiw7WUDBT7rLKK2jVd -MWmW8BKcsNzif/2DrPHkqcvneIKw1onJF2CNxiArF3QrbtpS3l9w3qziE3Oci3q/ -Guq1FYw6AP0YhH/5Er0xC9B2phM5KmUUqFMTM9KDJMs3s3lS7DMQz1ZxerOECvwh -NOzKZDtpmWYcNKQz4dHik1ymQCGJnStscuN1AVjahiBXmfVEaBMUEuMKln+H2YdX -SARaoOu/hcKdUjJZePCJiWqcIrBLRi/Bor7xQWhz4Kabzu7vrknB+1cT0QBq8NPv -9WvPLODkH9yRoCw03d2Wzi2gZwmwyCNdLJlyoi0Xikn9dEmI8yIAJNsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/amaretto b/hosts/amaretto deleted file mode 100644 index 5805c0d..0000000 --- a/hosts/amaretto +++ /dev/null @@ -1,16 +0,0 @@ -# OSiRiS -Subnet = 192.168.9.219/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA5/2Zt4jSt9xFKnUltVx1K/zq5auxW3SwrpF5POrkEP4YXhlyqTHn -RYQV5XzfZKviBgBfhbH98gCA0SmlXJZWjXDEByst6FwQYyu+g4cczj3SnmtFf+t3 -ap4EKKQB9qS+8PD3Uhre29gCeO/mpmv5zjQmDaLNLcp3FkS1cGKnLu+zWxQC3zDz -4E1WteZzVG8oLB2IRbdGJgl1yRq7//yj2VyynJTzougFgDtEDR7U7KkT6kGqQqvv -5Utxs6kA3P7Bj9Y3IQ0nV5QibA8oUlbSuZXF1pRwOMo1IECGY2a6V5YcwkEh2M30 -lUq5pxPFLGkzk6rRdiEoS1imB2Xfeq43hBJ9mAxZ/NzmWnPlau/LXgidkx81AGfC -vkw/U0bqiv04Betm7Zz1v0PEpfntTcxQGKsUy04N3NOpYfW1pXBZEuXGuijfSceY -oPPqsYXFlnB4ox25u5aQYq7TBXq6/Z/zwQu5Vsmry9/MbgAomiZzNP8WFpRbT1NB -Do5Norzs1xfE3Td/mi/pEsDUv7/fKPq46okXs/Tukqte62w7y9DZsjzro0T+F7ny -T+pRuRw3c7+/9V4RCRlUQl/4/66QiKe/EhmcSdgH7g5i5k11FdppHQ/jgukXtNGs -XVCnYlXJjlFWf3h1XjG7LeIO83Y9iq22j78zbejG7P7Amnbiz/MyNTMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/amigo b/hosts/amigo deleted file mode 100644 index 655e132..0000000 --- a/hosts/amigo +++ /dev/null @@ -1,21 +0,0 @@ -# amigo -# amigo@Aspire-1690 -IndirectData = yes -Port = 65500 -LocalDiscovery = yes -Subnet = 192.168.9.137/32 -Subnet = 2001:1291:200:83ab:581a:ec3b:71e8:4cb7/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAoNsA6G301vr0EmpXAVYHu4U63y16ATyrGDZQ1C5IQSghvv2S2bZu -RzatFP0GlUHcXYbjj355+ARor1u9ziZviPijJkOLCvu+cRsbW7GRBtCL+lMySBqc -wPi6iDfZZJIO3Xe3T9ELdbFdAjHh8Snh6DZ8y2FphcdhD+X5W9O5W4dh+12BqzM4 -8v32Qe0ISDLthg5qDh6ELGt5z6iiIYZZ6mVJaW3THDJdbYGY75FMO8oLdcK7I6Zy -gpLSSQoZ5/srCTrMvziYUhk6SFCZd0ureSS3nShHRmvLuLMFC1XRxCz8Zwe18Hr6 -pF3MLa4Ve2tLxLavrEg/dftowSGwxBiouAai1M/JD7jJNq7vDmYsRg2KUg3ykqFl -Oy3+eE2D4MR5NMN5MEM3+Z/lMaQpZ4BaK5sPEWDy1zGE5jk97xXOxeMcNu5jWu+E -CzeVzGHKnOx88PVCCHux3mQDHQotLPOuJFDEGacZErQ5A0udintEZFlMZEulrDpy -39P1QZ2cgnVXr8nvzkibJf6UgX10udPhqGHZEkjnytO+48Fk9fpBOm1Huz3ahNG2 -yUqyRLqYXOR5KCnH8RNShcMprbyYq4XGvLcte1PNTOeH2x8w+IqMVDaohoORTadE -tWEv4g18EFaG15u4NYjmWceuiUH2SCDoEzwq1Qbn81EDuDysGwtf+eUCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/anastasia b/hosts/anastasia deleted file mode 100644 index 7ae9360..0000000 --- a/hosts/anastasia +++ /dev/null @@ -1,16 +0,0 @@ -# anastasia -Address = anastasia.bazza.com.ar -Subnet = 192.168.9.32/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA7H7fWEMVF+GqkBoZgauce6grJJ6J+v7iucryvPMBLq+78bHoREOG -8nlIDj9ZhDGWAHL/kxzfpTLNcxdtMfAn2xPZ/BAqVMYMUxr7rtWJP8704wdBH2JL -P/tpqxA+KU625U5K4ULtdRD3Nwc+8Bc8G91oRX67A4TlTa8R3Z59xG50Y349yE82 -W3VOa2ITzSBfJbInIpx1do6pRZ1errX38QGKCix+gd4DQZNOWfo4rUslwjNQNtNx -X94fnI8mbjF6rsmqaFVbUgMdidxz1Pan7OGjg9SE7O0hCTJe14p5PQQVl1kfnEg8 -L08F/SAqyyv2cTg8w7gjC1aGmZdpZetL6aUW3wvgqe6GWRKR8ldf4V5ncxaLZj7r -R5Q08GgzkBKez9aWKXEo6xyranY3R19zm1/u18cGKldCPztB+cN2VGARW1JYn4HC -TZAHYhhVoLLcSR9ILP0YyyaMCiHsUE9pPTJflemZYqU33wOh77G6W3JNbL8P44FH -RQwojjFJmiJPfSCCOKI3F0/+7SUyr1UvPBGk73JpgyEKeg4md6JcHmJB03k+gy7S -Jee7QVLE30cRVaGmr3XeHqqBQ313Er1UBETPPxP7izn9LWzcTo8Yg41ebZl/15Cu -8NnWeweQmyoBLG9VX1oGVjKD85O9pUvlYeyxVX4BRbhPMGC8YiVWf90CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/andromeda b/hosts/andromeda deleted file mode 100644 index d248698..0000000 --- a/hosts/andromeda +++ /dev/null @@ -1,20 +0,0 @@ -# andromeda -# Fernando Mumbach or -Port = 655 -Subnet = 192.168.9.84/32 -Subnet = 2001:1291:200:83ab:6099:e7e3:989c:71ef/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA9ofsG4Q7mQOHCbmzCfSCL+2wXi1+0zZFeQtRftbu/L/DXqN6Nsiu -UkDP7wd3XxUULRivz7NVgVMFONHC6m8i4OO55d/5Tx8gnhtcUe5DR+cOwc99EjXW -wQoT+HlPpIbi8km2qDLgIPyp/EAwABaH8CK5okhtYQFh24uYnqtSH8Mj7gCdk5EL -AeGx6hihLWBbEiG7byfE49LJ91LdXOtj6Oe69LpqBIngqPjNYKjnOFXHcu1BHJRR -O/FWLiQcg7xfSTEUgwhl2hlbaMyg94n4gbEBt30XHUyRnvBeUd1WQw7rdnHr4Rqv -Byecc3jYnMMX8uUY0ppbbIrvixH5DdsFkBGXMKfkAA+HFsxXW7ze6a6L9MiysqUb -8UR6/hGTSEsIW5o+m7dXtTVJZhFoLEVq9WiN+UFKDL4KVTYc7ppPbdmAvK1G/D1B -D8BCKZafuaCx9UOSGENUm3t7gnm0K+GQmJWxWUWZSPY8sYAnOqn0MadkcewiftiA -XAP1J7lSrt81rFR9TdAiZPjWqyWRRlTI6C674weCEOB/qiJvfGvuSll7xqqhVHfd -DQxMVJ1SW+tUYEKPFOiz/sseOVR9byOLVQRL77VeAwoZLw2RzMGAnCzCGyi9z9UF -KeS7/pIbSlfK7Vmw3hSH20dFLclS6S6u653BBBFxA0ExqWJaBQQ6/ZUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/apolo b/hosts/apolo deleted file mode 100644 index 2b30a18..0000000 --- a/hosts/apolo +++ /dev/null @@ -1,15 +0,0 @@ -Address = 204.232.186.107 -Subnet = 192.168.9.61/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA0AIlnjhSwtvxuoJrYv6/axJd3Ck/a4bjD55o5noGXcMeywY0drQY -ODnOVjbdvElHUarkGrQFzMn7/qAUT5/Ib01vL0QveFymX1DbX9YFyUWQmj1wLgWU -COo8pXMIJu0ICovRcoWfq3BJHBvj1OJKK4ppu/ugIt0mS+E79R8Fh8vjPJPUVAV4 -QCikLT6UvNbna5T6IIalNNcxBi2X53LlZ4Yb3FYIBCqdrJnA4GRUPDrMzYs3iWdh -Pbu8aLFoZ4roriB8iyzsw5O7Cfz/qh/uKcsrYgzgcKGkwS0soZfsu2d4yyG6Xd6y -ffYdg42iuaiODgcvOem8q3NUolsO9pzVwFHZ+sTy7Ivr5Bha8kH4aPspZgNvai43 -YDRbW/93u3ZszdY/QiyV9TdHORsR2R6Gy7R0v+eBxQSEJbeIhSe+hto//UjvuCfU -84Ua2+83JTEZGwkUbQGCbxf40p5/V3vLUDskUUYqhxvo0fBJH9gh5P2UlNHQBfBW -/ztoms18JW6GfRoRLG0RENTd5EynhAl+3X0259jEu8yXtV7w29JhIoMWDqrerO2Q -6dTzYFWDzwXKeANHuueEGuu5srQ4KsxPCv4gVnkjh4QBj/9/VQnzP1HPuSdFoJHw -JEuXeT+wdZuhfUTnWZy7LnY7vCGNqTbbyp3y0x5rW1d9YTinx1rgT2MCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/arpon b/hosts/arpon deleted file mode 100644 index 64aae81..0000000 --- a/hosts/arpon +++ /dev/null @@ -1,15 +0,0 @@ -Address = arpon.hopto.org -Subnet = 192.168.9.124/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA4pEJLcAvPEvX/l+NGFg5TYz91EhfUFSqFm08WOU4xlrP9/9flQbl -d2B+Ujrc9J6Y2Y8IEBYuzqjXaC4/ix3vnupQ9fFs1grjSLeWVTYU4f5m2WBVfq7B -0T86P8vXiu67ypR5etCNugpMMqmCpzyLm8zM3X4SjjrYuUyvcTmhz3EOjMJXHiOx -TS0dxCclJXQ5cNjVPzmIVDAx6CSC7mKXOOtppJq6Y24bdoBh6zXwbnf+wyvWAQng -wb1y1syHniq5Qxs2D4UU7kYJ4LIV4btp8IRmLf/Kzydpyn1/36AmNDtlNYoY2fyW -v0YygRlk8p9D5eX1ZrW40BRBvU2QXkb3v+HPwKwbgxkY9n0Btu/pedR6EtwFH5ZS -8lT42TM1fzjbFNkojYMC9JPOiKSYXQbeQYmG+YXuHY3N6sZKbBNm6yh0yORbG3Z4 -JwXoZtdlHER70Mo4TQhEPZZsMNgze6ku/DXq6Jv9jqWBnpvPSTDjp2EESFBi3O3X -7qF5t5knl1432EWJr48zQWQzWKpq6xXs5WBbAmF/y7wY0RePjfnJoJGuAPioJcLY -shsWwquPo+tvYjoFnFCLQgg7Y8DSnpB2i+N1QZ3OFmfH5H5tA6UMo0zPYbcb/h+h -q0Z2J07Vf+Zr9P3+XbZIeRm9eQ/UsPAZUoXrqMAhaJLWvPvc5QowWHcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/atlantis b/hosts/atlantis deleted file mode 100644 index 9f4a9b5..0000000 --- a/hosts/atlantis +++ /dev/null @@ -1,16 +0,0 @@ -# Renateitor -Address = atlantis.myvnc.com -Subnet = 192.168.9.16/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAxhRuL6Md46AUECWWJ1hLd8WhSR9YJmkXskWGih6ir9G5XI4R8sTD -nn9M3uc22fmkhUIXpvW4JSQ88Tr+SCYVyY32zR0QmuffVFcZ9DWX+3VP+FsWcJcO -gHk25il7bU735c8VY1toZUh0xtZBj0OSg8CLTlrtepkFvO8fVtbgTbsiFng+giSq -Sfc8ymNlXcFCRACYFSCqH73lrWrfrjAeuyca0nSGfcdjGE/ulcClmGOxKgDuJnfF -QhFgsHO1XMpL6Q1iXR67kGvwsAfotH79iK1BIpAdpXTSJmH9ZIVrYX+Qj6d3wLu6 -rf8CvJPBtfnD8rRUu2E6ppo2EFfMMjU5CX0hOy86T9SMIYu1dg3EPhiXRmjYaHUT -INLBoczaG+Z+0TnqnFhpUkJO9uvEb4cxaFOEhLGagnyhGzUzf3ZoL2EiSYb+o53O -S56i74oRsI4wnxFJl7Ve26RCiSRF+59XNFZkT7rOuO9LjY9TULwjg/0F13CtQfyT -Z4PxbbXb5fXEvuzQamzqKXbdtvEV0fmiOvIe4hFzfRr++jEoopfeAs4iR+jr8ynf -3KYE1xXl4KX3Z/bdnt+y7ZpOUblNr/Gr/fhXfjiqtduNZJvq6MONkq5dbEfH3oDs -ESZ3AaGxlo5803D2SdnvCrwttGcjjWPh0w+3bvxxdTGzA7VGz4F/sJcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/atom b/hosts/atom deleted file mode 100644 index 7671fd8..0000000 --- a/hosts/atom +++ /dev/null @@ -1,15 +0,0 @@ -Address = 186.137.191.69 -Subnet = 192.168.9.195/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAu2q3nxwH+WAO211aQHURetA3wclp4CBPzSevQuBsSEPgI4RqRV77 -zTmr4S4UZB8wQMG8r0mMxIxDPYLO3RYBj2rS8a2OpQM69HyIBf3R0HDb4+x6iG3p -SgEi7E3+qGj1654jmZt3rYU9WmTKnWCdnpqM+lZmdA0G+/AL5asKS7i+nWSzVv3b -ofaVk6FsRzfA94Grfxxi6BCpLwNwdZyqFC/zH4vfDC39fFUYaLblrvarLbvs/gZy -+ttdkyxS91jM63B30uCgM0gH1M0HwHH8b3tohwPcLkBNRfzeP1W1/ng45VidCiY4 -3TCJ6f/F8tLvT2bFyw0kT2aiSFIAHZs09tnipV31ZHWl5GHx6ve2LEhMLjuWdfYw -4rE4av0mrf0nic+evQ3bOZ0iSTj9dQWfolhkB0OzaIDPwMkTU+AhgWZUxwIRHZ0R -SYhx/XxVv3fMwEDdu5KcLV2r+glaEYAeDs5dJ27yq37Fwj3zTW6k1dEzV8ERcGlY -2WMBeXBpDupdWZty4VM3dNugeER2RugwOqAM3BEC92e6Gx/izTTMW9yt5lmHiFBM -k4We8BRiYWwK4Fb6EY/Lp5M7sFvu95cDuYo+MZampHKBT8bqFZ4a4AKHD2EmiwMr -P/02hR7MY1xsx+EvHeh47WmKCcIJPz0p2oRtV6ByYyD1e/1HjjHIMy8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/barney2 b/hosts/barney2 deleted file mode 100644 index 610a6ec..0000000 --- a/hosts/barney2 +++ /dev/null @@ -1,18 +0,0 @@ -# Aza -Address = 190.139.150.197 -Subnet = 192.168.9.45/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA0bOLR0+cPV45ccGfhZJUGYOTFN83ZQZfHeVWyN4abfj0ht0ZeW1H -SBhfXOXEqmVSucMjCxY9T/L6BhELFcqD6So8VPFTkCgUwv7Ud+la0i/kXoXL51Tp -x5d4Ch1724nCPLmPbZFmSf9V7zviqENkZw3K6R5PAdSkAV18XdcGvpy3xGTpGeWQ -Ozkvx3bKuKXCOf6c7ocWyV5tNvfNSjUmjLLmTkOoygE05Dk0cY/37h7rQC8hoEw3 -yZsB3UQabwPw4P2kGGpWpu/5PyzKs7PAYKdtzl/jF/SmU+JevNyzgf98zOHX733V -ArhRFCJUQs3gBnZnKMDQE9jUd7QwE0MmE28d0NjVLCQ9EsuQVdHncncSsNFds4hJ -ngLfSD/Uk6L9czIX9YB9nhMt8YQHc8ggr57VKJ33svB4rZUFY5hRaSA80bJfCPrk -VkEEQLaY50dhbyB5fhWnSi15/R1HJ1vM6FetlAa6OPQGmiHWKwtm+Np4BgBNZdLr -QElx9KfvXnbIWfF9lr0Hb1o4BwUjd7xCYlUghkOf8gK8WEHU1IeTM6FEfpqIASws -ukbb7095PNrT9UnO4KET2rfFaYh3lczl1dzdqcQxD/zcWrJeA9ZWs/RornJRxDno -+e+CX69GJ4RdDg6ALtO8PUr5Ct6Ygg8WEWPuJShHbciQJ69wTMLwnjUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/beagleBone_black b/hosts/beagleBone_black deleted file mode 100644 index d8786f6..0000000 --- a/hosts/beagleBone_black +++ /dev/null @@ -1,20 +0,0 @@ -# beagleBone_black -# root@beagleBone-black -IndirectData = yes -Port = 28035 -LocalDiscovery = yes -Subnet = 192.168.9.211/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAv4a+U3RugBDaRirBsJ5azrKcGhBn+wAjXPfuvLiBIzZW7LtGuiiB -GgLwNS1H2RzgGojwzMtyFe692+BQfDRCMFSFXQpEyW21eUmrgOGCa+E0i8Z+YhLo -rpv85xdJ4PtAr0CSuvWPwa/NaI8wUsO0J3/M4bHKXxVwJwniDCHTadJYorplpKjC -PWNxbroagJ+fXfaocPCyAQa74xNu+B7E/QoGMTjpF/ZzZbJ6I34lzstCoFHu77FQ -q3QeSsuqPCAspye9CHMy5ufYdaCT7zHGJu+D7yO8YPiAOlz6P9TUzwP3acpyP5vy -Q5lgj6dhPplj+RQuC4tRVtr2v/SwfQVFJ5ipdOvF7387ukNEvWp2Kxlrs99xGont -fKIPTw0tPaOMEhOTiyiMXoucXoOoat2zH0fcn/LIPwdCpXluGbLObl2yoOrfojgE -OtGUW+c6nRaAghbWO0PaWhsu45mC01uendAsFDqJy9bk6DjkaI6v8a062aOcSQim -csHzemV/xV47EXo3Y/1Iq58Tv5B1IYh9TcUtR2og1pUcAinuCoWr5NvISYGGSQch -5QUQDvolT421r2RCJKK/CKwcBF+XzRWOPlPjvmhN5rQTgH7RRudGILH4ACpdn8Hq -N3rrf1j13GrPSxkQi7eIH1eyJOnAG4NwMHM7WSGYDlh5fMbcGKeYrb8CAwEAAQ== ------END RSA PUBLIC KEY----- \ No newline at end of file diff --git a/hosts/bender b/hosts/bender deleted file mode 100644 index a52ee9c..0000000 --- a/hosts/bender +++ /dev/null @@ -1,19 +0,0 @@ -# bender -# aza@bender -Port = 655 -Subnet = 192.168.9.125/32 -Subnet = 2001:1291:200:83ab:902e:7c49:282f:1b17/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAyqJVwdmdWVD+Ry/iJoZclNdVs3itnCUBFtB7RpKBThZVqNObAzDy -smwxZ0A9ovaVeTjYpdtUZD/+UPsSO034P5jN3E41kthqivStf5DHY6dq1A7gyweO -n5U4on7AP91KS+1E6pN0WjNuaD+hMRJqT2hgphov60a0/aqn9q4JyP00BKQqMWpO -3nNGhSGVZCApBHtoW0pBxm+pfeOpkxv/GTdcINUVvrkiJxSd82cahtN7UVPP3cRy -KmkxBjQwq1L/KU5zS6+rFuWWVc7K7pU5dsOu3XsUr3TauH7LKjiu1k6mRPTNQzgs -KdqtrBl0RDIm44ZkjwnKmf0YUJGHdKxj05htbmYTTYG4k1m6X9O3dTmWC1F6lmWS -DcdAAnrJuKNy2p93/2TMMOMPen5U1OnzZZ57ecZKcZaftyE1cg2/NZ3nrjALPI1F -4SF323JGC+8dR1Sw7fNZqxMAXtXv3JqPBmxO58IXabEhDsJdkYvSwCfwMDNltc9N -Fr6Au8gMKNYXAHanH4ueyLRxL3HP0e1LrwySBZKuyCTSopUPv2n/ISoMvv/qxlZr -CtI0g826IWmntOPE+pwOAznxOIchasD5jFj0u7xyeixOjAPbSKtqglkUCh9X+mvk -aY0L+jHvrf1v9zdnt3NS54MGYBknxvZYhLp4B6Ldiw4FcXISEdhje/8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/berreta b/hosts/berreta deleted file mode 100644 index 4b17ae4..0000000 --- a/hosts/berreta +++ /dev/null @@ -1,17 +0,0 @@ -# mpj -Address = maquinarodante.com.ar -Subnet = 192.168.9.2/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAu2ZRQQXz5J5l5g3JGjEclWmoIV+fpEBklJ9cx8AFdKuxfRYIeN+z -hxHNnUENVbD+imEPI+jPtYGsh4iP9ysIXqIPGoOLYDXKnDSYYbup6VNEvtOztUB2 -DrTShcvXcKz1nDtG6u/oT+SKiHrkrJdLNaPFYZ2BYP4GJJy/c80HgjYwuhZ3mN0M -Qo+1MMzurFHmEvT9MUXiAmEwKCaLh3QJJ5XZxT5hck4PsjVVkEN3TmB9Fqf4u6fW -eZOPl+lYCshkcYGz2Vh4sMfk0/PxHvMJg9iFKt/9WqRIcmsbn3v1Pnql3TwYlzCs -4bnN+KF069hKNnI6M5G6eFvp2TkXnGtqG5a1OqfABoFE5GlmCW7DOizOn2xuwkJE -LMkSSFj36a0LPrVV1VitFLlkAnfC4p0TGL/dYPGpqEBIWKD+/RcNiAeeB90X1t27 -CbBuUP7N02XBPbsjyQT6tSSsA33JpeJWHebVjiwNQyXr//9kgKYLS9AbkgqyDlgJ -StvJoKXuycNPs9ljGnVVtz3/ccqX7n7jgOWhHUrq7/bn8ZuigMWVmUd/cIpO9f/c -ZLt2o1TBtb7M4jpGCAhhT/j5eNCzTqY8aw8hOBLDfZICwWo0Jw8MmFKuZTACrS9A -tbG8JrsabS8h7JllNkszALefJQUJCLchA9Ss5Pn8EbPWXMh3CxvxvjkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/brendanvps b/hosts/brendanvps deleted file mode 100644 index 8eb5c91..0000000 --- a/hosts/brendanvps +++ /dev/null @@ -1,17 +0,0 @@ -# Brendan -Address = tiddles.me -Subnet = 192.168.9.149/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAuQ/94qgaILR6wm5bhOlYwLR84qe8SdKjbKityZPHo1dG8JMGBWIF -nKQInhBQcsGT4+Pv2nZgY8m8/rrkPZE9O8LkNbQaA05IsF/si5xvRyCukuYEoizk -BLOpoPqEXQzGTaIey1ScdvTy8UN8rnmrdpHgDl+1/TnjjJm6TS+Qk8bD/rcOVfn0 -utsY+XHstmkno9gSrZTt12v0SMQiUzh3mIOH2LLwALhGDkg3FzsjYc6xB2d5KVQi -hxDYRdW0i3/7Su1ub9tBM4rq3VrVfqMVIfRYx20xUYruv7JIE0Di+wdpoxLcu3mU -IPosMjBDlQTVwwYG3fcuIahlD2VzBaiM4Wm1kbjk3NkIsUWUh+WtL71xiaVMFcUM -WK+vZ4N5TMgQeIRM6gvLjeLqpJl+ReBIk1dKpEG1GgCvFrWlZC9zdDCzAgDJW+oW -ahPfkv3TQ8fsfg3RXQQ5VP7zHKfmnG1opOfkqYkB+3dfe8mfgVG8+sawir5seHw9 -isAVlKNushcUdmN+TxBvw+x5t7usj3gY7yuj3k/HJWBKkrH5dzbxUbOPy2lQzSs8 -5DK+4VKCG0UwIfR4wivDNaHUSnaYP0LlHmMMGy2lGaiw1HNdzdDVc5jlaq0AbRJu -1Ev453IQo4bU1DSrulVv4gvQ+CHwPnUb/DdhvRTiNRcUr94mXJ+I5KMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/britta b/hosts/britta deleted file mode 100644 index a083bee..0000000 --- a/hosts/britta +++ /dev/null @@ -1,17 +0,0 @@ -# E1NS -Address = eins.dyndns-free.com -Subnet = 192.168.9.242/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA5U62gitpPXzd1LQVzZXwfExuRBJ62xQZi+0pWx3tzLHiQn/XTmXb -w/8V9hQu1HfNKM+IpLYv46UTPVHtTCuWbYtO6F/LsHaOErisy4NcNKYYSoXXnAsg -hm9WZ6NJeN3XZrubt03c5welRG5H4oExAgGTVyqgjFVMxgopcgSRl6KX3OjQYAB/ -ikHFGRVu6FM6tW2n4PElkYg45Wd5C20JSzP4ST8jKla9fNkQ3merWLTMGc1Gr2U0 -jC5jBCY6Cvsp4vaWs2NX9iWqMAHw0TqMLcfDQjmnCxTE9RQyqlsDcvTCMjERvBfc -hKQjygAfhHSijlZXqNofmKTiHQtxHWERF90+Eu8osfuou6SB5GLv39SPR7M7ysuF -Sc9tcg/zw0+jUcrUp7unOqkPjCOMrYP0pQECRLAbhuFc3o4QRng45Yi4ECcMM6yj -FZtGuJ3x2Ax4mkX0udXeV+3GwBzEyUazEGQhhWgVfPQ8E9Vm02avTbuikZJFbT+U -2R+1Ev5cm53QaD88ILY3tPfue35hUQAKQg0IewtpHzF3u0PGEEgLj4bZfBGP4lYO -OkKIxcL0qFKUw0M/ft6XUOkocZhM1+irP/9M2/29wqpk1fazMekqOIZpUYTfrFmR -MLHVtKxNlec3O2BImtwk7CbRNthuGBXsAJSUAZPGuL/36PIpkXee2o0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/bunker b/hosts/bunker deleted file mode 100644 index 9c753e8..0000000 --- a/hosts/bunker +++ /dev/null @@ -1,20 +0,0 @@ -# bunker -IndirectData = yes -Port = 29037 -LocalDiscovery = yes -Subnet = 192.168.9.217/32 -Subnet = 2001:1291:200:83ab:242a:9044:7f8b:2c2f/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAp/FvWkh7GWYtUTme5Kn/lk8bOy8Ck7Cti8kMgw4JsF03krFYxEKJ -vsq4RhWh4tHTu1IMQ+Wxr7RvD4zXwMre8ryJuOgXO7fXt81pkhKsAIrDU0Y9PbxT -/b91Q/aNV78mxHpHqw/T18UIhnrz4VqegiNempaFSKhqgbYYZgQJhMsm7TYedz23 -6ueKCtppiIXtMy0/pQb9UolBJS9Rf6ehQaiLXiH/n6nlX6gMMXBNnexU5VKe0X02 -9CXZTkfrZloxGKEkR4QlltmDzabNjB6TZCyiR7ujYPuFJGUKXWRPi/qDNAdcjk7C -yKkPeYif7JGz/EvIEzD6NrIRtb2eS+IppuVkZLHGHLk8XlpiJBzzpKwl0k5WyZCh -eMIW9n3ReJkuSqfYar8ocL89SrlL6x8aPpEukR40JhZszefs2ZKLILzXasa0cnUK -VGw7oulkq9iqG6GeM9IYvaMtmVuUJIs+q2zvfEd+RW56fQQDpLsoIDf9dVA5Ieod -iH64nZxGgEQPmZXJSPO+LujlykcFvaTOXpDaVJ8LA/m6PmLvjisrlpyFB+rjvz1Z -B8kuexzOjM0jpKvBG5nKyzFKsPEbsp1RjzdPUMZlhib9bRrxmUqeNy+EBHxwduUj -asFM1bM1dmvEiwiovQoDB67/7MgQYWkgbHiH4RwDF2wuyTX7ZojQoAkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/c3p0 b/hosts/c3p0 deleted file mode 100644 index 40a32a8..0000000 --- a/hosts/c3p0 +++ /dev/null @@ -1,17 +0,0 @@ -# root@c3p0 -Address = c3p0.com.ar -Subnet = 192.168.9.126/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAtrhw9BzRKRRmu2CSgPqmHl261MT0eYJmbNEqJYDSPV8mRzjBDovz -6YhcNTPM8eKV/9X3/jvhYN5zGASpA2JzqlBZWQVXnzmO/Z/VmsbN9mX/d/8SYNyS -7iFEMc+c1puqBRtKnWlaRFgYKPxvP+UfmwNGtuiSVcXiSYl2j+5zqUyFfDippAQ9 -2xGBjT0LsSPtdXOguK40cDihkOcA7+lRjUrMP+HDFDsSZurj2RiQbIjKS9CmwGMU -Ku4/PRTSbEsOVHcYgZ1DAnUJNoVjRgE4sL1/YQ/XgnXNdgFPzjsb5UtqWIROZ2B3 -eRVQPSE5zf5WKvKeMHI61E7tVLXVgAgZWM0/191ViiLSUT54klMJ+YqPb7T7jfcS -qZsAw85ea3+MsLW14tb6mD9Gr9sYETDKkTI4/XDpabskNI/09rPqd+ZcuN5KQgUi -zhAtB+Y99UEyo6G4lE/LF9m/yM3D9PInCtZThctjZ8upx6YK8QCvSr5zk3F5Ct5N -ENDIOv17DRpYRQ9lO/8u1EaHFrpF376UukPKrWpo/2/fJTGDr4HIfqVl6sPcNY4y -64zxu+CR/TfC3afHSFeJ6K69eSiecasJQIkExl7PIq+BKs8QmMpAtRw9yInjyZQb -cQFjMKiPBLgVl2p0BYnDyGV79eDGZVSasZ+kTYJqdluvRGgikLL9a88CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/caipiroska b/hosts/caipiroska deleted file mode 100644 index c99f61a..0000000 --- a/hosts/caipiroska +++ /dev/null @@ -1,19 +0,0 @@ -# caipiroska -# root@caipiroska -Port = 655 -Subnet = 192.168.9.221/32 -Subnet = 2001:1291:200:83ab:d0da:c1f9:b049:9a38/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAv49esjM6oASUia9bfJJOoIxDUTVMUqhRIujPNoYhUkRnY91UAeIs -ScY8mnYsnfOlwPXFpN5ApbJA7LdbAiGTosFRhdfCeXuecFgUwXAGSt5joPQamsXq -kDGugB7SUtC40fUB4r00zvbsiHiUPP3VvEcwxzviqJ1xxH1kEjd7bcMDdLgJG0qj -rKlvhJx3kUsr2pAhrq8tc9NpAa6Q9Kt/fiGwxEjnDztviEjrO6lRMNkknq5PFRif -cAQwEgHaMiv9UoAkbjQQIDYFt1qqhkQYkyRRUgb+90VUsztMZHS93k5SCGw8ljbN -gjkUShti+PfRS9U3K/J3G1Oc2F4NtJG9QRJTO2DEryila1Y0LYJVoa88DSfucK9m -TXSubDLJ5mSqtWpLda+yLHugczWrql3BIC3BDdM9dTZkGeoRHalqBQ8vk4hshWjS -ksNC31q/sSLgNYgs2WpIcbEGn3hysaOgSe+3FoUFgYiYLRQTsvVgz7ea1v+0yaRi -xGEcnm7VfKo46mjWLMRsrbfkkZORy9+n/qF4CMV4SsGppm450+F4ESOIK9hCKSk5 -7/9fQmbwx/dyPkX8GEibKXLrtQBjRPZJBNCdGNbe1OL4ANclckABRdItdmN74zPa -nNTknagDw8spAcIpx5b9k64zLxbSWrLWOJD8gdT2OwmDfYdUNg//CQcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/carioca b/hosts/carioca deleted file mode 100644 index d1cb379..0000000 --- a/hosts/carioca +++ /dev/null @@ -1,16 +0,0 @@ -Address = carioca.lamer.la -Subnet = 192.168.9.4/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAzQnAdBlunlp3hzQ9YrZ9Kxz57S84UD5jXf8ChXpKxB27G/W1RTEa -9/pjL5MSHufwCjdGvYo8txlwgf8nOFx3u0aiZjZ4uumpRkkLPpHBMDZH9IT0Xrqg -xaJkNYusc9NXQ95DV9s0OuYk3D81RLug0NJzJDpUhbtlBq05bK3pfsdxqitW4PDk -ucgW1IM6NwG/wNmAecYshpddtDyMSNYGtllwHeUqSLsTSiYPOEbq9bszHc+LINV+ -Ay51iGmkobw3R2BGi2dw82wA80gXrtvJ48yA6G5BxDTDAjA+9RK4x0vyc65GpeYU -TOKVGr/hDelhPBJFhT5EX7BbUe7Rt3N2wROnHfXokxRb9PnXsjKmO/yWBnaINzbh -9Lt2jYUYhpRc+eleYHKTIAuheqwf5O6BUSQoDU0TvqPbwIKCpLVpwbKxeDfQj+B9 -rP4qPcVDEf7z0G8xy4XWrhJ4LQ4W8aJdabOsNeLqsXJ7O8/BClmDIX/v9w9z1qwY -ypDqeys76bNLaq/jGe87MK8qix4ZT0pvdr1XKnCcKNut3ZZQpzY8RK70qyxVJaQP -AjSnT3mSqIBWaN4Sl67uJWOlbJ2Qce329kqFggvI9KGr6dUsDS6YcjZ3EQcYdNjF -RstEBcDk5JD1cXszGR/rhY4awew7x3zdfyVqZfVyhvprNPlxqODdN/kCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/cexsi b/hosts/cexsi deleted file mode 100644 index 1d9c157..0000000 --- a/hosts/cexsi +++ /dev/null @@ -1,25 +0,0 @@ - - -# cexsi -# fermuch@cexsi -Address = 93.188.165.7 -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.26/32 -Subnet = 2001:1291:200:83ab:54db:8c28:f974:df46/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAsTf9tT18xn1NbqWHtKlyrSqwEMDsDCoKNyJNEZ5jrcAsv92JX5UR -7bHdoUl6tBSHJylBPDLF1vl5Bw6zyzqO1g4K3zPtGSn4VU3jRzYk/65/UgdM4MLV -3yht+miOBzc3EEUK0K+3nYNO7hj/C8bBN0nsMBnojtZlD8nMQoPy82EpyQflwuGu -yIPixaK5k+3joMksd8U8VL+Xcgrw1uyE68DUrbHJMcZ1PlC3g96MaTrwoJIfldIg -IH68kSlueVqPxIPNT44V4f5qZTwfJ7QxWjuLGEMEBSUvwR+OAIBPxl1aQhC4DEJ9 -NQ2k6TrFmfuRv724/WSpDOsNh6dRoDFqpHrZ3goU80/KZ20miPcF3u9fMcgcJ+FJ -1jKTYqqgreaXNJp1K+7dm4bHZOHfUUwjcBsWE6uLE3Yy1+FjpCybHOm2dwkKwDwW -LvCRDvY0jYS8leTiLpdXgpeNpAWv14cKC9tY/igKyEzPYXZFFYcba6dFLsb9DBrt -C+lVifdDq04wXj6GWx7PjbM6mmsrypMrrNqlxuFmg0BGNw6o/HIvRGDkw+RqYhNM -8DtZCalpDqYnm2GhylgTMrIi6YmQFgW7mFPivzPXr32Jr0yzqoa2K446ofnrUqov -yt82IlVcduBThpdgfV20OuxsuniuWGDvX5g1M4+WVyA6u6uA9VeBnRsCAwEAAQ== ------END RSA PUBLIC KEY----- - - diff --git a/hosts/chiquero b/hosts/chiquero deleted file mode 100644 index ed77113..0000000 --- a/hosts/chiquero +++ /dev/null @@ -1,21 +0,0 @@ -# chiquero -# reycaifan@chiquero -IndirectData = yes -Port = 21562 -LocalDiscovery = yes -Subnet = 192.168.9.143/32 -Subnet = 2001:1291:200:83ab:f0ba:bf41:7ff7:f23d/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA2U7LFvFBPjl5iEWSlHTeb+KkTrZIYPaF1JbnifTlbaYWZ5Tm6Uxd -gSxw8r1ZSQt9bC1l7DIj19b2ZL8YvQB2kpJXZn1MuO/UfpB9u9kyx8jBIcUP6k16 -NysAsiff80c1IA72Ctu5D0IYnzT521A5ux7tcJXDIu2/GWnHF5kILJLlhq6oIhk+ -1rxStTH9vz7DM9LBe6PPMV4bA+RRkIj6ZUA0TTEQ4nma+eVdjKPWoB+v0M4HTL7Y -tWSRyfzxRarPBmVyLnyXHSp9VZ13eUxvDf6G62A5NvpTcBIpLARSOOcrUTX6jdES -HRH10QbYGaPTyBMVHI3ZVZiqiX2s7wyydRZUA9QV0WimM1n7aJHUdCpbupbncxKv -hjgZ19wd59ydNn/x8mVuFNCNp/iivbY91PqLKUWp87qVZOGGh6neSdBYwBr7V6a1 -MrR7LE0u5IvMCCESPYmz49wk4RWKAtFMz5BnyPfHf8u3ob3OdGnLtcHTprd5N8r8 -xGyzpjQHzIjju8Q/IGeZtEx+B0TijMDSDL8C+HSt+Jq9FIIhdCpjcDM0RfoJQei/ -iU91QU5c4H0SZdjqxvsl+0hJ32eMlh56aOKmLU5WSqRp4zWysD31GWL3OP4tX3oo -qTv02oeyV6TbTUZFbMsjzuBNCKikFvCWSRWDILshOctrTO9v882w++kCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/ciego b/hosts/ciego deleted file mode 100644 index d682795..0000000 --- a/hosts/ciego +++ /dev/null @@ -1,16 +0,0 @@ -Address = akant.dyndns.org -Subnet = 192.168.9.18/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAylVqAY3vBF7RgsHo/3SXQBEJtA/t2Apbb6cjsLUg6kQJsclOoS0R -BpAYfuz104ZL+cZrLjSiRFN3K064j0JtaFqD3mJ99V7/rldS5Fpe0AqkawupSf/c -ZpFujRxKnoUFQ0fTgMZQZOinx9RmxqxpuwhFdmunSDbwFJ/7+JmZa0f2dkPrId9R -+mg3wVEDYW8qc5DS8qHjS062PNxJkv92dOY43Ir0g37yByHCWpI8biHSiavY3JOH -qqzk9AZT3wdX+oQ1LTDMdoMMyVm+GjtxHhd67+MzPYmAznKfwSYa1VFacTs53Fln -G9/l3bmues5UmJL6VE7vynXVgz1ZgRfmRlxpjmig9Rv/lG57dZMBtKXcG1Hizn5y -w3Jr7iIdLMJZ+ckZC2Eu2ksymciaGp5X4t2XrJXZ93YbWArQ46CbedMo1z7eMNC5 -ojUoJemMNyR26PL8a5wqAeDvwJTswbWJrFuOgQodOsiMoqhLWwx9wwh8uMQgntTP -V4nsIzVuZl5ARJXxNw7X5HhoqkqNs0D7lboMQXyFXMOXhirRqYYnrlxGCc6UGGQR -DbEz3mNJhsqOkpYr/B3p8Q5FxSTDucWbQ5z2eH61YmruXLF4belCZC9nCwYABdvC -zVwJZhKY95EfThjI+LUXwGrxfilb00mYNZmP7wY3aoNhwkBdi7VyWcsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/clementina b/hosts/clementina deleted file mode 100644 index eb91360..0000000 --- a/hosts/clementina +++ /dev/null @@ -1,19 +0,0 @@ -# clementina -Address = clementina.cooplibertad.com.ar -Port = 655 -Subnet = 192.168.9.153/32 -Subnet = 2001:1291:200:83ab:a0ee:77b0:7389:6cfd/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA3r20X17WdPBoGrCizKCHyOk7psItpnF2q5GgqW8m96XdeS9XWNKw -QHUegi9gk9JoA0E0tuM2mI8fZ/FDf/bBBrI3zKlSg6r0Dma/8lE+AwEcj8N5ZoXq -pP9Zk10wF72xlSLSOlrhHLElxA8V29uySRxHlYqQ7SsdS8eUC/uYO5xsWW0Sja1y -nPjkpdWknTPgZD1But6ArwF81+DF5YhJPWAgwiqDvmNsz8UW8vcvkVEpixHgBp5T -5/MalRjx2OdPqahNHQfJU8LpL65DolCALBjRGeJT/gv2+JW4YYEyN/4D8zldFXZ8 -rwxeMmtC3x77DFhhgHy2/QPA51BOp2lJ8A0EmbOEL75KbC+Vz5Lm08Cku2/1u+di -XmUR70EbrwFnX4v/jegFdEWCG+2XwHnqsENpZx2UXtSpf9S89It8iSy66RTsUP5B -kywoQUsFcTsN3rY8EJTnqeXWp0JSnBHPPMWw0quKaOPMns3D3HUJ/n7z8utAYYYV -UPhsGBkepL7YJANZcKfreoBOUKFdqONgIEyoQCdbkEyOJ0OdwakVb+DYXkrO0Xvq -R7Hw5gZNvG9fha5n4kGFUEGpxToSam047RV8pShvke4D94p8/kVQpmYdUW0Nv5OT -lRpMhanCG3efNbjwaO5JqtrnCgN53Dn2OvTmjCotJwu4nENfBtwdXs8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/conan b/hosts/conan deleted file mode 100644 index 9f98cf3..0000000 --- a/hosts/conan +++ /dev/null @@ -1,16 +0,0 @@ -Address = 186.109.86.90 -Subnet = 192.168.9.122/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA/V0ijfCswuPKg/2msU9JO+ba+5xu3UqOFptI3RTwBTqqmPGIV6dy -Ycdi5CIv6f918L1eY2i1qo0GTYccB1xvcxM7iapbY2xE7k4ymZ8RcEMjMDyENW+0 -PryC14YfRf/zESKMID2W7ZNLmg7cg76JIK2zJiptTCuNG0nYayEdf+4Sr79ef0wb -l2Ffu3pzp7gD/oyVfiQtrQM2uXuNyWiuim7i1zOysWs6fSzG3W+3/L7tQ4RLfipQ -nHkLx1AitOHigSiRYFTmQhJlxmF08xX5u7pxdS43oM/IL8eTHq+jEU1vHeqLl/BU -JToefCNgVsyzsehR290F4GnoRXd05FsFdnBbuevkeAOtMaYBz0/3PmZehykxKgiJ -wQ20a+iHdfVXV9Isw46dfiHZrqNOMBrGU7OHC7+kmnpFINWfo1+TDW/9hv0dpgCc -F9FPDOdv9LcLxDb20LUMTb43WYHLv55yCii6cCkJZqcF49rmYJsiSzLAtMKFdxkk -UCYATo7Wms7sXR09ZXWokuc+Xabsfoo0qDkg3/MCpD3c98PadMfHnseYllfJ0rCX -5Wn3UuJl5BY6FUSwwjmesgE7sSlODRWqqxwlH1miQv0JVfavzHmeUU5UtuR6QEls -Cpn0J6YzAL6X+iyCz/dlkci4teQIDRdYzshA8dV8CL0+Dl3eDJ2s1bsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/cooperativa_libertad b/hosts/cooperativa_libertad deleted file mode 100644 index 7c3807f..0000000 --- a/hosts/cooperativa_libertad +++ /dev/null @@ -1,18 +0,0 @@ -#cooperativa_libertad -Address = 190.189.236.41 -Subnet = 192.168.9.159/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1HNbuzAtKg8g3z6uo66gg3nwgW+dKs/MTkBU1hCa9GKPBSZXAiEq -bFGFftJbufBdz/9+Mzahq5Ze5q/rkN05VpKtHLX4L/mmaI4d9UsIxe7W5AgyF/8T -tAd9Vq2u71rzQDN5b9GdTZjgicHJZP3hsgFBkIuaDHuLhfeP+9HAqqMn1wiOWpjG -zy3hECQYYTia5tOMlPFug14AEwJJ6e+/7RBjTDqzpFYvR8tvpUJjO93MflsjeqV6 -sWpmxAzXtPAKlLGlNq9PZn6l6L+ckMSC5tv6B6bBa8oLMZcdNVJ+XJw0F21oeODB -Vr3PrPQyr+m7j9NYjJMddRmDi5na+go63sjtul04q67ZJWb074Xu4O5ngLu/zTEI -fZHCO1HdLz+ttQyeCcf+JkR98PTYD4CqztKyuTkKCM4gimIkDepEfctBxr7qKzqY -92vfySSJJFZC/tYne7p3jPcs52AkgTjDshZgXcHDvroE+brhEhKBZoMTbdyDt8dE -4vS8GFyyw1s2zatFRR6T74sGekPnnLyK9BmSW83jEpfAjScvNILY+WEPSqED8vyI -pleyG6p00ReWqqLSpnL/WvKEWWUP7cgr5ppyfcTS/zkomkqEnjloLpNSTUGGrHth -d2xP9bf6fMrTj2Fu9NGexl4CXH87j2i/oux7YwADxrW+2vKcZ8uSB7MCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/d0h b/hosts/d0h deleted file mode 100644 index 5b4b279..0000000 --- a/hosts/d0h +++ /dev/null @@ -1,18 +0,0 @@ -Address = 190.174.174.13 -Subnet = 192.168.9.239/32 -Address = 190.174.174.13 -Subnet = 192.168.9.248/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAwSfUD8Vah7Yhndw9v4Kf+Z1v0q0XMr9t/eqTcr3JYzJ+ytjqPg7o -GHRplBT77rtPrxa1BiUmguZThtG2j1XKnwSjMr5OnefodHrb0IM+UT1/KBJOM5AJ -FDXIU4aU6OamDZBmcYWCEbt8zw1xZDL+kNseKYLQWnM8u4IHyVi1yqe4fQFvmMc3 -TruoiPOj9LG0ZR70qROJsFzwFUfxEYGnymC+OUb40GxPYjXY+nCN+TVmo+/p2FvS -RLDaoUP0Dx0ECamIdWAyrWgJz+V72qL9FFuRrjrbsKpfRMJwn/JV8cpHKNWIikDo -PMxS+yUVLHzMc6Mfr7nAJmmT5H20rSbhrbUmtPKWbfjyus5AyHXuGecAPNkn+RNH -1XoEkF2+KlaCmDOVEzcva5i6CaKHh9mBWG2t9jLVUvtFuh/nYxleFl7L3rjeX+1O -ZgddvgyCIjML5T6u8nXb15e/Ad7MYEl28lAj6SyBacaYDPaZBKsAA1G+cx7BHor4 -q44dgLjH8O5gYjgzrEC480fnRTZumkMqnQASQcih+1FrldqY+cFYOcdyjYu0O/mG -1YHfQkAuXbj4/b6xgs98RHkGQ03y98TU/0dZX/CXcVAtXWgJKU+Rld1KPoEei3HL -pPMqhubkPHGuqEM4nbNALyWVeASchqUY3ghjnHgURsfp6Yz1vZP6QPMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/diablo b/hosts/diablo deleted file mode 100644 index 03ae0c8..0000000 --- a/hosts/diablo +++ /dev/null @@ -1,15 +0,0 @@ -Address = mangara.com.ar -Subnet = 192.168.9.30/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1YUtyfGXZIB/Tp7ZVy+M0SZ4JvYZsKeq9ZlIHDFD6f8UICYkgxXP -R4RMK+AaeBnzhjRwKbTsfLD0bIze6vNI13jEJWrkiXWJfoWraZJd+HvICyRQCo0m -7H/cZz4njvfXnGJzBZ2pO+3uoDOb8RXfN1sfGFn1l5v5+GVYhvL0+D9rJL3MwNtP -FGaJG6LUOnipGQDlt655KgHTpdb82QkCId7R0hoFkoaY+UAxOVvp1ydQXADmxhLF -RvwulA3Wy4nnXeM0C1RU6i2AjrbX74uj+MbWWV3g4jQZAlUX9EPAj5HrJW8AG+3D -CooZSMXB2QzvRQ1ry2h8reuLCjk2dUs9QLQTvg/RyldMUoqmYA7j1r511g15KnR6 -ac1K6waUeu+HgiezH42LdEzTmxICXun+DINXlbmVZuCOHyqobKF108LKF0pkjmHS -ilu0voWrzWM6QvcIhkQz2lJ/eYxhRm0vTugdiYp6g7ReG/GBXf1inwSQMhfVQ953 -O4It8/AUI2XqB7lz4PLnJdznuCDI/bqjKzoevL3cE1/QNFXEf/UgdtjS31sUtAEv -jRgtBa+H94TkArIWWMQpN1eeD0mwc6VE5l2pER8k8MeBIwc+2f59wiDA6ooU3+2f -ywyrpyzD1PwXaC+pbbl8nBWUxO+6xEpp2yHL+m7TGXPpGozxq4hSXSECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/dvm b/hosts/dvm deleted file mode 100644 index 861b0ac..0000000 --- a/hosts/dvm +++ /dev/null @@ -1,19 +0,0 @@ -Address = hq.local -Address = hq.duvium.com - -Subnet = 192.168.9.134/32 -Subnet = 2001:1291:200:83ab:fcbe:75cf:74fb:608/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEApVAhvYPfJ8uLxUMmS0ChF3ONU6PhGfhqqhhQbVaBSyj86vdlOaL/ -HiVKWWGi9WxIehaAaZ0klNgizbxhJ2trtX6F6Hixtg51M5KmJRo660Oqgkmf7HKQ -uxXPBLekAK2lo558DL+EifpF6b/C8uI2OFPzCnq8aGx5RwJ3KO4AhGI0OlQNeWyj -dWYB044EpRoyWqHPA10+DayluCEGiapDlgxpQ4FrJguayfuV5j99gI3rUpLp2At4 -94ELvLeLFm3oec2/LIfV3ufvvQjjXfmz3PK41qh+3flQZr0iHDMfGDXVN+USGCHs -luEGh7ZGiODas0cE9zvkSevsqdw+HRIN0/+zxEZJYJA/+F/BQ2QlYFj6Wbs+TPne -ulUvefdzNjkA7xshTGerlgNenK1Qe95Gvn65QOt8+WPIYkGbSNc2iddySw7DRM6N -wON+a17Gh48CgApXefIyT1esfrlFkdkGbsT+V5UsWxHQO38gzPYshzRB58G4Ac0S -uAhzNLVhVMafHfcEco0kwjEKLIrWXH3JiQiCozbEhGYuDuMBjHn+FKxaPVjt94Zd -5nhMVg1OIZQIKsaMXG6U/yPSEFeuRXoMHdLbwAAgPSRvnL2Sgin5aqPvvlZwUd2d -P+XB2FZcdgp9ySmGpGKywdc6F0GzSjo5tWLs5EbJD75ec6/5HgtyI0kCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/dzup b/hosts/dzup deleted file mode 100644 index b6e55f7..0000000 --- a/hosts/dzup +++ /dev/null @@ -1,16 +0,0 @@ -# dzup -Subnet = 192.168.9.11/32 -Address = nahual.u3mx.com ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAw6HUkhWtHaxYcebq8S7/EsstkBpr1l+BhLSVY+eREW4L5TE0E3Q6 -1AWJSaJsgPGQEDvkEYzfIy5B8iAUDauvgCDmyVaUl9JHNUVg92KASruSxZBcBB+w -FNFflWADa93nqZTCJv/G+3gmZrhSUTtORWwVU1R+diy5XyoWapZFktsv0UbrJXZ1 -sMxgdQ8gfcHAcKhVL1z/7yIbt9eh2WF8F8ehH7O2gKEFSrukVSyEpYkRmMuk/Llr -LPXwAFQmwXmHGYzVgyV0lUnvr2C5QoEWVxJRoarCzifbWMn8KGtD4bSicngwnzgF -qbn+yd8tVsVmCNwkgW0MS7/sa9mRDwrR3G/iL59ZMGpkaiU+h1lfWcnbMtdcSGeN -7+jX7vGVlXLludsLKL3vgdlE4YB2oekmrrKqnW0Xap0fVU9X5YtGK+SQUaTnNHHV -gjjL0tHBTVss7LsfS6orjNVnVuquhgVW/QS1OQ7urAKDdvrXeDwv2G0x/DP8Sgdk -hAQmeO6eAdrSIo9oPenUQcbXsq1EKUQ6VjNu4SxfyRwM7Vwcuf3lIsdN/ciA/EZP -25LoKxfYTssH0thBlCrPquUN/bG7T9vIJTS68sIuGkFjXJZUSZQRY0QIlq4HwLN+ -QXs58spYMqUDgYiqc+47Gy4316+JP0LYAz+ZgC5FTAGOCml45dfPiXcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/ealing b/hosts/ealing deleted file mode 100644 index 293947d..0000000 --- a/hosts/ealing +++ /dev/null @@ -1,18 +0,0 @@ -# ealing.nicolascorrarello.com.ar <> -Address = ealing.nicolascorrarello.com.ar -Subnet = 192.168.9.115/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAzRfS1kTUcvNC6IsUVYuM1WBEeBMyaosOnqAt+cR9OfAMhPmRdLUq -Mqkl/MMHVoc5IORXQIZMzvP/QCI2ZklfkP5TvP2jLzlH/8Km6B3y1x7KGwHB1fJH -s1wr/kWJy82nUQpRt7ddKOnAYop/7qlJ455/+K+VkPLxRdIcqrXBqPPN0E8XDw1d -cU4FcTnd7CnyGPF0d6g6rpjpwmj7tB0mrDL+O5gKfsLIYoafV+EOEYWZzcMeYLSM -mU2nSH8eJ9OIQOUrqPSBM22z9yGmXP8/UayeAJhBir+2vekVxQq+jQmQltDkJawG -1b3ECX46Ov2QlQqFiDi3EpxNO6eS5sBWsD3RHvtZWwAz3LrE8US5eXj7blvBIJXE -nwBDw4bA4YI6sRfbes0jWsGvQqeVENlSVUJWAtANlrwRiD8/6USFgNYFdwbPL1Ot -QoYEziHxL46e+DJvRDkFDiw5BBOJgZsQRq317CoS5EY34/aU3iJiURSQTMqWeCtr -Mm1Y9BL6HKOeZ3zZPBpqQgKojaUfRHAMnJk/o/rBPaRu4BMKYvLwhCcmae8XSkhy -aFBY9DYf6iv+J2qeJJByVKFCDZGFnNr25qyr4QdSa1ye9YcZrMfode0B0BHaLhmS -pIqdk6BzojthCCV5VYxUG91EnrnWPZOrgBt08GnHjAf2F7n6H3vkLasCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/edoras b/hosts/edoras deleted file mode 100644 index 038c5cd..0000000 --- a/hosts/edoras +++ /dev/null @@ -1,16 +0,0 @@ -# ted -Address = wwwi.com.ar -Subnet = 192.168.9.24/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAszUZLZ6NJwCeJXjjCyEuy2aGZO/1LBgbxXV49ytUTrRs36hu7DUS -FU2iUynAz2S8/egJbJldw7EurSUqScIw1WUKfV77J78sH/3Q/gljJwRJxfP/0m3R -4RvLyKzrRTScXCMjeeQ2H7THwGdJrmtEc9h0lg1jnvc7QxXdB8ufRrI1/TFsy+5u -6nP9m/F5dJBBNEs4r2UsjBaJaUKP1VjevwSL3NYDdbhRKS8DOh+z+FobEXLsYD8L -8E95ZrqdZq81Q3YcIBjftv11Tgp9Z77e6s3ShLAaL+85D1qTIYWe/+hiLVAnWJvm -tj0P/Ym9i/zufufhXfg1LQ3fRMoz3/NjR6nr+b4w67Jv30/ISzXXjYip80Oqq8Vr -X1BG48RdTf2gqC+35ymvQyjAZQ5R8gpz9re4uP997cN6yJAveZesR0M/c3vqJJ4R -upgz6l2qje6f26wYApA3NInTPBiAPJrJNCyZA8E9v7Tlfxeeq1RlSPjnZmlmQhxG -Z1gBvSh0bPVNhpk9Zz7bQzezC+J3w2SU1GDHor8xsrYywWcorwt/T++qHdySyHkj -f9rT9kO+jUTz9VuO4+Jml+yQxRd9DRIU+bMDhmnbNXuyjC/LNmm5sDLnG532QNzR -tPmqF29Jiww5mOrprK6zBVAGqWzeU1RulOPZ4Ar+lQoSNY40A7e6OOMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/elaine b/hosts/elaine deleted file mode 100644 index 86c7ab2..0000000 --- a/hosts/elaine +++ /dev/null @@ -1,21 +0,0 @@ -# elaine -# matt@elaine -Address = voxb.org -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.14/32 -Subnet = 2001:1291:200:83ab:405e:e2c1:5278:b6a/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAtXr4VSUXWYRvhvuXABnKqTvmkSKmsyaQPPMaVqHSceDoeApkgLYb -RpOeXqmXiTjPMjeCgu1jX5PFP6DRLJmMWzzPwviuzc74oPO9dLJsR4XZPRTUFMko -slu7mpu3XRmBiPhGaXnTNDBE7n3lBZumxAAnhroG2u9UZNYtBt/M+rcUK0gk1hXb -bAshl5xg0oGHSPhMPopycbupCfVsPti1nYF9ZLX505ux+IHoEIaRquPJFQNU7WcF -rKv9yt7dvvdTC5wWFWhmFtVEF7LmgmY+O1/g9IiHYYuzJz8CQWdo4gI5/543l/1+ -1uc6Y/dsQQuPkEbuob9UQuCHmL0u8xFkJblUDoaOX1p8T2zlGzEmCmBX8mcqL2l1 -MykJOkf0DFVJnge+XWf25k+iYfbEg66OxuvnuwJ0eMVRZ9c8XgDY3BXLPUdti9qH -LyNLPfdHfvwO3rckwmP3arG2Guzk2aDDX25MrIclUrfd/3s6abresIyWkR9BitUT -qnHM3cCchqczYxd0h7/F0K5JuZOpjMqk5eSyJgFjv6S+KLkqOFrBOemQDaS5rYhf -F76nasHIqrhsq5RFoADw4KqxiJchUYV9VKSKvojEapGoaRZj95z/USN32i1dwpfR -EdwGZhq9gsewQf3cO7ajvV638ableB5cipYQvTVVNwS3evOMDtLH6y8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/eos b/hosts/eos deleted file mode 100644 index 513f79f..0000000 --- a/hosts/eos +++ /dev/null @@ -1,21 +0,0 @@ -# eos -# geo@eos -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.166/32 -Subnet = 2001:1291:200:83ab:4839:5b25:a6af:d09b/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAxwk4Cq2klWR7NfVbrI8eeIDVPGHxOICEj2tAQ6WF7dIhFQdwRNLT -9KD+upTI9L4jyIC8cBJNe0Y5cGfBKvbfGQgYlVE9I04ksAjYoI/0kp/7yswD7P4q -0+pTyjLudthkQt9vlfsKvGFH8TH/wsCjFLMoJh4V8PLRtoGIpR1HcRYdLhaLZnwG -YLoVYsb4dmxFcN7CbHQlI4Nh1VPM03tAH/AFYQkcVlZvYEbcehWp4GL0Q2etWkYL -DPLTBKJAjhdTC+2cVhYTdqbWIpArLWn2bSLaGYcW0Q3KyN5kEn16t8r0QtpQjL3o -wQ/G3nirCfe5x55xGx07xztvvhkPDqmJl7EI6kzl2jzQp9Pq25ye9nImgISbdqPI -hKELRsC/q76rgD/BThqudRi3AmL6bjgylXABk4o2Hdmf0g7pXX/CPdITLrk1o6pa -+ZiEDaQ8r44xSNQCjNrULVHjiQeB0AFVg2H3RKa8uuGSNOnirmE+LPClf2u2H2/X -JlZBUGVkHfPbr3o4R6JkpdJQrBadeUyYZb9O/Jnb99X+KbhH0cJagD7E6C308q0q -/GBG0g1CBh7HZkSSirFFBn7qq6358Chg1mImfpN5xLLGAJ01zYZ43G283pEvhXHB -RCALjaFr9Lb6S1zlNWSko6IxUzqE0JT2mIYXBvr6qiiBo9k8X4WYgbkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/etherarch b/hosts/etherarch deleted file mode 100644 index 7450791..0000000 --- a/hosts/etherarch +++ /dev/null @@ -1,23 +0,0 @@ -# ETHERARCH - LVPN - -# etherarch -# aza -IndirectData = yes -Port = 24842 -LocalDiscovery = yes -Subnet = 192.168.9.108/32 -Subnet = 2001:1291:200:83ab:cc98:c6:4678:1b79/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEApbNX7Z479XluGsGbUFxEHwGgAvgHnozeObKbUgrFmgunzcA8Xjxw -KwsKhC10xCZDdSxzk/tsEDJJPm2lqZmRjbat2SACSoqe2SAYM/fTO3r25ydYYxFq -ioAVo2aE+WtTl3YWQVpw8MWLN0t0jCD1KKXWQ6ArJVpUYrzB83WfDGZW438jjbmj -VixBlHOJgWej3BNHQdbp6zZveHUggzvC27wo7p7BQIYhMe1NicPsDM6lh06as6SD -hPluqkM901G1tVmTGxoVj26oYw5K9RuORVUAyPGN6d79tiNgjHXoFItNmlM7WWbg -jqRttxSNGVA3z6A9zXCxhrz7J6tI6Uj1lfQlojt51obiNQ0xNR5YYSoSuHU+aNno -FWJ7toQrh+jxlyhnKKm7L3VSJSj+lK2U5MGJvrtYelXNevnpvtr5yoUw4zShbraC -L3vnCP2OvQKifDJwqtyQ6003yL2w4oEtTTj+Uu4XmOApaC/jAkZOXVXBOalFoX5g -FiQ3JU91rhDQ4pFTwMPoiPN1IgIqoc07f6oeHc4Hiw0mWXnHvqEaWDTR54l0SkLX -ip/QXuu0yXZ45szkWRqIAUPNmizOgA5rIvlN+IpXLWs2/NShsmIxFoUkaoRaM8ik -UMJwZcTKUPdoJI/uxyPDRQuFV6dkQbVDiXUeMShS0V6W86UrCUZ1VPkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/exodica b/hosts/exodica deleted file mode 100644 index 941ef12..0000000 --- a/hosts/exodica +++ /dev/null @@ -1,43 +0,0 @@ -# ______ ___ -# / ____/ ______ ____/ (_)________ _ -# / __/ | |/_/ __ \/ __ / / ___/ __ `/ -# / /____> -IndirectData = yes -Port = 20961 -LocalDiscovery = yes -Subnet = 192.168.9.227/32 -Subnet = 2001:1291:200:83ab:18d0:2402:9d39:fd96/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAq1wjy0SPm9/YZGyNqw4jz5phmUCYfWAJwXBoOWUFWjNVLL8d3h4c -GALAHF8PB+E6aTzQXF0YlLxCoHfXMk1SNaYcJm+1e/scElHBg7+NDrVL2GrLiIwF -MmRUtvtsNijBhuSyTRttxieziVTWqYRGe1hvyvn2tLejN20zltlIsuJ9SIx1lUxe -wr+S9E9pvRi9hRsLZGs0ZBTLMZ32CuhVi6WZhgMZOCwTjiAjy/IROjjdsFOyTce6 -21th3MNLyTY4VZM78oySkuZZWCFucqnC+0d9Ot1CSSKCjqr/dvBIa6b7Ntts+XA1 -Nn4c/2qPXjyN/4JHMGpeVQeeVtFpS84teRuToPv4KatVR/s1Kx1vAd396BYWZQV0 -mDN8Nz4kQmKi9+YKUFQsUE3ADa5XNhOdTcys3/GHHfjF4QXGpfdrkne0v9dY4c8W -bVo+SVXrGC05+0V+TXliJWZR7k/+z0/sqO/DcqTXVwY340Hr2dgZBFSznM1ICBB8 -IduwLwtKOO4ZEhAcxsekPZxoYbxPTXTMG1y5KlVijwZMl5jo98KpCre5e+a360sZ -9DXKLu4I6yOeqWPP9ndTXV4tbufdli5wzoGXso7ZBtwGx5PGdpcdU3ineMqupdVj -0PXN7R8jrv5QjqLWizV4OIrJXFzV8tC7RTKB6mxPHmp8puoWuqLfWRkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/hexodica b/hosts/hexodica deleted file mode 100644 index bcae7ce..0000000 --- a/hosts/hexodica +++ /dev/null @@ -1,18 +0,0 @@ -# Hexodica -Address = home.exodica.com.ar -Subnet = 192.168.9.205/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA6GGlaAFIsMPbCmOKzQXqdhpyHvKvwpm0BwqnJcwu5FtYGSS3mChk -D3VL315yW1P3oA2y+wVJc0a0/2wRDBj09kyj+fxdgfDJt4ZJZhIsmjbCOyyuqflx -tYoxnkCKOdTCJ7WnyC79xN/qJZ51xdJm1/AN9Cpzz9oWlFTFaGBkN+qQjNnLiIUe -hEE0dqxCQ4vwGREyPrj5UT/u4irjdBnQyQjXDbP69OJvYE8wECb0kuWGOFGpVrvd -IUkcRk4eIq2J5QnWC32v1raBjHhHZQtaDT+WuXL7LUG9VAv5LaJmlRDw5wjAYEYN -xKK8AP9MTueYPS1gMNJrAJ486JcZMElkqOdbJkFC3DUtW9Ae+DIf6efBGWCg+cMo -NtJhsgvzk/LpZ24PMY7XStVCnF6kXaS62xrgW2L20mtNO2C1o9zyv+5W0PO5YLux -WIxQSnTSNqjzDEhL41tSVuB6W5hjXBVloMaX0ZR6RFVEB3JpqawwQra4HpO4DhHx -6BFQfRt0NE2qZu4kXHQRA7uuNtKcn1PJHhK3GVc7kFMOSk8Qi47mDnfBcrRzujyM -FP2RYN+2Vvc6I5IcZpHBSc4xLh8xmc2XK8tvh6kI8tLYmqj0vmnc7dZ/gG2rujck -7QrtJHBribfeuj7g8mW0oJbLfg8MNMVOWVaa32fOrHyWgiZR47Ti4AUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/hilarious b/hosts/hilarious deleted file mode 100644 index 3d09cfb..0000000 --- a/hosts/hilarious +++ /dev/null @@ -1,15 +0,0 @@ -Address = 186.50.129.221 -Subnet = 192.168.9.36/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAwfMIpEDxv9/CesxL+PT+NX32E8DNtlES1oFUHyNopgj0gCsMGeHt -Qtjsvnusf2J3dpjmiEMw4jccHKfTqWgBJBqx1pqjxyiaC/yxpGVtgEG1JFt9abie -Yt+aoie/eONmTzTJY6GLFpFoXPYy8XfkH5jVPyzIUt7XSm4uB/wICbH0/VNU+AyG -xYVtAKdxSA1q2Ryf9W6hW1XDv0XYWG/7aKGBRjxVbCos6sx3HDgpM4FP1KX9InCr -BIgbB7E2DrmLNZRTTi1jwtguUVi1HBynVKgcAarqbrHZRGBZFr0pD+ZuhB1/fGMm -TIh+4cRWYWlL5l5Cb7+y7+LRLR46eSW09hWZAQESzarxq3mQW+hD0jeC/dk4Hqwz -Ym8Nx9ong7mFejiqqrs4rpV5er1i7YUsvXZ3s3olOeNyB4C0/EAb2gz0RqQuWy0W -J5LBnHHWH4x9B67kHpYxAkkUNcKnyudoSnbxq7dEXoEOEkzESxWOaTduUQsEuS1e -N/7OqQ1Vt6FaUYp1nb3awzXnVpqk96wMe/+7LWkomdq6auytNJJmnwpgnPG6IA+z -cBb4EDjHbFkQAxNdYaw9+Beir0SSiqHa5DgEWCUxxxVoYLgRW0XcU9zgbj3W7uiu -jQhEkwIYmhLD0mzbwzbQNb/i+i/DCndFllTaFDpwv3Lm0Asjqb1oXeMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/i2x b/hosts/i2x deleted file mode 100644 index 1928d29..0000000 --- a/hosts/i2x +++ /dev/null @@ -1,16 +0,0 @@ -Address = 190.144.32.186 -Subnet = 192.168.9.22/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1HQn7HKn5SOKVYhhcMsVdgVCQWjHG/iwopTJzpjC5H5s4MCRWOlS -6I4KJyNKeQLJNY6+03XsdfVo0uzRbKkwGSlEqHVj/3Yb/2JeOsf3gSyyyGFSRv7M -VG5eVUGgSG74kLvz0H1i4BIvjqruijiv2nhLiAfFJ4bHpdcnKQSHHnf0435kMacq -pPhmgXk+WCMUeuuzxAk6z2Rhl8RAqsV2olVAw4ZLzTiYP/eexobdOF/shfR5VZZZ -2WDXISYqLzuGmBzw97Z9TLsX6b42JFYa5g6CjGFhDVcl58F8edW+eWPr2JNL4z3s -80+bB3i5PoBDq1drv7xmx8Vqw79ujeaZmADJYEHXDrLU120BbLutaW8ZocqSOQ2s -nqGi47m8uLO1fK2+yb1gtKCHNK2qMZQy+hlClfqOR2xtThpk0Rc/febk8qxAYayD -8teZmGyn+ggnXq7RTKBAQOsSJZ61Jk8TbtMX9OX2J+Wyyp8oV981dMxrGinC9Abv -7sAgMCX8qG9xesYMgYh2exOUIkphLSkw1CY59X/64FF+YP/FBME0mGFG+DXkQoaB -diTtA43Hyo2/L/WOoqACbEee1YBFi66TnMC7o2yiS33Zc39X2brsB1WMB3Qk+/4e -oN1Tv5Btt+ZF4sagBNNdVXlLDMeKc3RYOKiB1sTk+E4F+h9Z1ZQ5IecCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/jack b/hosts/jack deleted file mode 100644 index 95e1b93..0000000 --- a/hosts/jack +++ /dev/null @@ -1,16 +0,0 @@ -# GuerreroMDQ -Address = 190.247.123.93 -Subnet = 192.168.9.6/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA3DvFqY+gjXhSGOF3SsMQsGdaxiIHuLyyxMMgzEPIOA2ALl/oG3Zo -TqJNAOGJm7mJQdoCsTPIfevgmaXKhYHeYbj/1x71QOweYd1KV3eMuEB+NRBls+jm -e6gb+U2pg8vA5vi2RceSuDKS+3k7Ftj6zMbpMZ5qz+c1i64JpBCxnk+Id1mzbPbs -8TB+vUUZ3kYwAoLaMfLr9UJktmO0g03ix80YtEB6q8mJdR+gUJyc7WcHCO92KfvG -m3nGF7Qby7K+Jd3sCShOQ+fWSextIjEsotWcN+/gF3JHwrCTywrr1HMzzaFxEpGu -s96JXCtDoVpd1DuPa8lJfDb0ESgUj4V2x88mEm4YEo6tp2sA7gEFDZvzX37K2yBE -EQFsDPyDu84z+n613a/6EMg9pxND1m+erMmin9NScOPHejRQEqWTTXwbzPq/da6a -8JkslsL8tmUxRT//lmhgBT/cdLfemIv2aXZ8oN9LA3EG6fn8LX47HELUSneSE73T -b9fxUP6xfm9C2vX476WBIzqhrMNyY/EWxAIGdiJcvyQQxL9msv59yc18HCZ5avOh -Yc5Gxv13fZaRUaqDPynhC+y3akHq/nsJQomhgf0p4Ujl63zYbAtgYgwqx1+o/5dT -DOQ/mDAT5lvPTW2HzFpYP+OYgvokI1BTSqeJXTFiSFET/GMCN2D9jOECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/jara b/hosts/jara deleted file mode 100644 index c9a8e47..0000000 --- a/hosts/jara +++ /dev/null @@ -1,15 +0,0 @@ -Address = jara.deestelado.org -Subnet = 192.168.9.5/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAvjY71HGIiLLz7DW8Vd6HBd1Gj7kMHGXbt9Kb5YkocaoA02Gyixsj -CFIrUpwtzm5BBQ0jfQ/TDAx4p87uKphzW+SLdIr3ypRxtiKVG0MDRMDl0QcOZRpH -xLiJ/QYzltqpsgotWqogCy8GGKnFJ0lv9n+7Z/hrJjEqPCiPtCVVPMiUCPgu4V0Y -1DNgEAvlqBZSBAFr8XXDMPnUyFU4BjZqA/qxAXalshYTWNOsHtlDXJAwPIF60dE/ -w5dJtSyCxaLmbzOrQ/m8Q1vCQnakOcUveIjDcbur/Na/gYnyFEUswCyJy79n42T9 -MX0NgEFzE8TtUmyCnJ/ELC8JaNAmvzKZW4XarHD1QlmwnH+eard0svTaiuMYben8 -z8crPmPyu8vFywYB0f46EB4fTeSgpOUuA8wxMKvaaJHx5j/rtZwKgDVnFRwdI8Hk -n8AsS4eE2OrTYXV4behEjPwDgEGrRZyDZ4ABePWINrQp/z0OJKGNbn0cgoF9oo01 -IXzNqwrhLAu3LE/R/kYuKeJYGvpUeiCh1gck86DcM5o2Y7t7F8CI8tWKMeG4lggK -/RmuzfIwUJTj5JIMrM+bk1y0WTth3Ls632YmhnvEvgUybBEjThXTRMajvRuuhCHm -pwVNoMkohgfr9NJx9fK9vyjNyuv0tY2N5z3kUHUasItGEej419epFM0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/jarvis b/hosts/jarvis deleted file mode 100644 index 69f00b7..0000000 --- a/hosts/jarvis +++ /dev/null @@ -1,19 +0,0 @@ -# jarvis -# icarious@jarvis -Port = 655 -Subnet = 192.168.9.69/32 -Subnet = 2001:1291:200:83ab:78ce:3216:5d2d:1659/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAsF2kV2+zyu1N+Kc/BTWQqwBQQfP56oSntmQvJ++rpgGRvbpQSSLW -dfRN8/gXCmToKBDlgspXLbzZ9vCm22BRMxjyAD374BRFQFvAJQ/NA2LyTG1kXVAN -r/6kLqSUv/ifnS8skds+41tgSaPy3YcYGBa0MAULYZoB8x1cT/AacrLh8x4/QhB1 -wlyH0QUYkXd0Vh2gBa6Xcz7oEkvPbZpRqP3ssFY0sfXWjohJBGgOwQUMdlPUw+7T -DcFkJCEgfcm3NXY1BHrHN/nbi8sm1IQBUkNuxWZOucnhtsPgqlYFqZ2MoNEe1tM2 -uVnezlWEf4RV6++/mBDOcICcXn7VlV+xiZnIwVh4VanbTad2djfaiFnBunt4xS7p -l4kKJN8KlOom0+eK8g1xE4vW3UodZGj7dWsz1TTVylBDbIVTKmZewkWd/VyIEXzg -AY38ecDv6xL2bSSBsx1TnNzkmEEa+JbQ6BB9AYZt8qWT42Uj8kEj96A2dQFruJx3 -I7anG9LA7uUpQ2lgBCph1tarjyqBvdZXi0KUV3xGAVFPyphITU7EOtkBMyODqKMd -2NGp6BHQHMjXl1HBIvMJR3EqzwkQV/wjFBggj+KwEH3eqxS8kwhJw6cRC8aXUl9p -FpDyFiYb9v9jvh+KpipFJDlbe1i9tmiehUDDiYoGRwtDRzZALC/OWt0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/kagada b/hosts/kagada deleted file mode 100644 index c187d5f..0000000 --- a/hosts/kagada +++ /dev/null @@ -1,19 +0,0 @@ -# kagada -# root@kagada -Port = 655 -Subnet = 192.168.9.121/32 -Subnet = 2001:1291:200:83ab:c42f:f4bf:b48c:c264/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAwKyjFFY4KF3pGbiqccbX+8IFbSQ7g6ZRca9NyOlVwaRPG2eazh+5 -6uSEYSY0HX1OprvOXG6EZX0qMe5/z3cMBABX7qJvC7eXOYJXTyGcmLF1aeW8wG3D -rSy87Gn++N1KOpkJoUeMrjlT+/8gHTqU9dNSKVDlayRbBQXKt1+JJVqCreahP5Sr -H3N2o17tIjQSxWQpIh4mkyVyhhMZWGaswisgMH9tn6pCQlAKPv1F/hsXd+lta7C9 -GBzocmVZbbe8tZcrZQDNZpxsQI3Rp96VAVCDZIltxuXCf/rjQOj0/YiSFgFkS/DG -rF6gVa+6m5CzvGMmzjNs7VNNJAnuNENBkURCoDOTI2XrkdFitjhxcdHkT+sYsJmY -93L/wtT/fr7OI0tC9o5dGikWO2UH7Ijsa0e+ydr+LWrw8M+rYjAJRyP2bdSc4exl -/s082L9KFUG/JN8DQNKoylhnU7cjx67JbQuoRU7pj/y0km2bvKEoIhwtngMW0kIm -6nNLGYJHMlwX0YDap0ov+wwXek+iyYe7iz9ZKaU9Q7ij4DWZtqabuhtD0xfTqQnm -qHlyoNsZ9OJPCUkFxdwW+e1VnVwKwy1o2Yh4iNJS2+l2KeSVSxp2+QtNPRG+8dr+ -rrWXHOkAcOiotHQoX0bio/DSC37xPJwZi/OGGQkm6RpeyYXuwpwzkOUCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/karlitoxz b/hosts/karlitoxz deleted file mode 100644 index 6b2c11b..0000000 --- a/hosts/karlitoxz +++ /dev/null @@ -1,2 +0,0 @@ -Address = 190.216.2.98 -Subnet = 192.168.9.102/32 diff --git a/hosts/kaus b/hosts/kaus deleted file mode 100644 index 35240c2..0000000 --- a/hosts/kaus +++ /dev/null @@ -1,18 +0,0 @@ -# kaus -Subnet = 192.168.9.190/32 -Subnet = 2001:1291:200:83ab:fc67:a8c2:34a0:94ad/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA3lhRLIb9Vq7lX8X5uYrv2fm6gxKqBPAkZyxOj8WyEMt4eP9N3RMd -L2WwHDki4vM5zgziRMlHVO3NzTt+jiXsGmBRCCu1pe6Pbq/Svub+cVBBRNZ9wsPs -hlwKITegmW7h6wd0XkpN8bc5nGNaege1EU046OHLPo+YOYm37Bw2JprVQ5WHFKgE -yJepcH678Sea8mAecCbtxhF6MawqMpobh8HjgWrCBTfR4z3ZKI6IEMhLBibIbys5 -hQXTScIyvgyMctJ5mf/5+z+xqol/z52ixkoGqicuXq8ok3OTK2D3uf2p0o0fvKQL -uihIbik9pmhJbh7pGSrQJOyWC8uY2B8ZzgrwcnQR1XNwqDp+2SqVWbc+Xgnxkoog -fchgM2Ck/knY2R676kdBK40+Ql49jkggjpcqbal9iVCy2zO/HI8jlBVFpzFyzTt+ -w3R326HZysb7r9Cx7YJ1jE1Gh08VbhCMwg2QGR6ImWUhsA7JLyKXRxUhKwleJajv -IvjomMytGO36QSm7RI2oHPhUr7TZnFtpv6Y3+SbNBQzNSPkIfzf6W0OMpv3SPwtz -JxVq6t5sVboFZJ47TdCH8NdF8d/pS7Hna0VcJJyzpPLLegRpx5KC9OU+ugmQ6pi1 -9xzipuKM3vY1h0qFgWvyEzxlBdszwEod5UEWFM8QOc6Wz3ACEDkZHgUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/kelvin b/hosts/kelvin deleted file mode 100644 index 760ca8d..0000000 --- a/hosts/kelvin +++ /dev/null @@ -1,17 +0,0 @@ -Address = boedo.nicolascorrarello.com.ar -Subnet = 192.168.9.206/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAv6q5eakRx/HUnxVnKy/xfb49cj3mftSFPL132oDEsWkoKSZwCJ/q -hmtLtNBXhNU54dAad/y0dDaYTR4+L2zDH4nJapMMI3p1rpFgLPN+lW3dnqXztvyl -Bhs/aSv2ZnlYLjd1oCQws44CFdnEO/SkLfXmfgjIK9c5THsh3kQczIPNcVZmz8SZ -Gut61ehiLXP3CnjO9zzz6/9g5AR7sb0CtYzrOrZ+flau1IxTCjqdxUXbN3GmrZes -NZ5V1cJX2qwth42D9ID4NZdvd/pAhAsPnrV7HQtCngFFqMuGeUj5xaiNI9v9NuSU -P1lakvF9cOVANeVfcqfziIsysMSe/biR8SbR7YOnvhMUMfyFI35G2voV5ZWhwT+K -9VFTQ0d1xRMvMG20ljCP8KAGVic6eYwJyjU4Jr2qIOSiFld7mDASXMiK5GvFQ0Ap -/3jMUVh7M7Ro5Y87kqxQlNxSxECTM6olT2O4eFznNH1TF+gZ8uweaMMbvZK45gxZ -YkIMfyMBDNAL0EmG+PIzuK/nzui4oAMfwnFTgGDKiYKRaXd/3F+XNr0E/izv7LL4 -ADiQih+KT99QisaNZgoQM0oVG0X4YcH3qXzRWp3gJmXxs+/tb4JvpqTJ9YH6Chir -BD+4IQ4BNhFFCCaVeCH1yp+Q3N0tKjLZbrFzlL6v7+T6iBWqiiRg0gsCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/lancelot b/hosts/lancelot deleted file mode 100644 index 06467db..0000000 --- a/hosts/lancelot +++ /dev/null @@ -1,30 +0,0 @@ -Address = rooteala.servebeer.com -Subnet = 192.168.9.100/32 - ------BEGIN OLD PUBLIC KEY----- -MIICCgKCAgEAtv2l43qJwKxD06gAjMa/jq8RA79CmFOEhcQ5DOUCb/ytHEKtuC+i -mIi918p17yNghhTF1LDJ51asvKdyBsz7otSq84WFJLClccKbBKX9zPEEJn4t0xba -QwNigA1qSf382NvdB83DegYZN5NuqzKiFZhdQJDUsD44OIunFtjDiBLhhil2mWp2 -ZVy14vhJITNk3eAg9IXZJ5WlvCEEX1ZJ5cgqbV6GxAVgmQNxytnziYpe0mrI61Kw -vs3M3VEWidMBu37b9hDI2+WCQAIAl/WhxmUAiZRpC0mNWtLn2IAaMXgXSxg/HdOU -8lgb5N5UBi56GWiBo+55jiuljrDTbwjBFMlXmxV2roXH5YkXZarJld33HFgpGJU/ -/AD6XQWL5DBop0uZrekDN86H7CXZyKihvrjia8nDLHg33fZ8cd7xEB+tcuBofxmH -EyLei1aLxtXNkkCeRGZiNTWj7vFtQ9Lel1HzTbUJbB+gy28KvTMXGJSBy72+UzXa -/kDeCUzCFUsXh7wzyQohQfMGfug/yNIJWY7GO+9T9JvmlMQ4uQiIhdI6xivOo88X -vX7S0XB82toAMzo1pyxjRYH19DUFYu7tDsZA60fqwRnkFggXryCqwWia/moS/YGA -aXcE4S8DYuCMBPEBRulAyy54h/sBuNyw1H87j5StxDY/Wcsczwst4BMCAwEAAQ== ------END OLD PUBLIC KEY----- - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1+Od0fgrASVnN5G21lmkCG/dYY8o5MEQHmYH27hfhqLGXcvTUnFc -PHpO74OjGAnAP4HhZAuKPqR6JvbbjdyVQwEyoXshrHtBrjXQReq1RVF85K40wSOw -oFHJT/orve7Oc8N5yG+hd4nmy9BS2rfPevOsAFuRXGx6oad2EZIKJ887cLLOe3Bo -ANbyJBsR9Bx3iyoNFAMM84Xr7tfADe5o4/ofFbqbJ3EyVFe+B5J5qQzN4pG4IbNA -bxOpneS8C+/BsrR6w5hJtJJmTdGAIQMSs1Q3fRukGPKpv0WjGkpDbd2K5rEHAyuj -69shen33a24UOSQPBU1wlnPeAeVfq1+q6oiAUBgbaXG07Y5ATdQ/pCoWB3Zv2EKy -UgAdtbefCdtRF0+0+jlK25aLrF6el5zzZ4EZZEKUSpPeQc04FBgQKOL4abn93Guo -NUJGrKeEx5hUZJ54eNy7N3e4PbXrZpp8DukRImkSc3/7hgM821qVfNQInWBng746 -2U5/7ry5dhUA/ea9cWJjf2imgHn76Kz2LoUKa/2KLmzxx9i8iV9Vu5lBElf0Q04R -MVFkNyqlaU8YME3JmwNGvs2HRfZTKJhWnFSl4yieGU8mBIlRaVJfifGf3IlYW83X -iClZ7NQjynNbXdYhxCTY+c2dtHqOCVTeZ184mzFYKWJl6jVRSvW7z/kCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/lechuck b/hosts/lechuck deleted file mode 100644 index 37dd2b7..0000000 --- a/hosts/lechuck +++ /dev/null @@ -1,21 +0,0 @@ -# lechuck -# Matías MI -Address = spiria.me -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.119/32 -Subnet = 2001:1291:200:83ab:7c37:d94b:cc78:112a/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA0Y5GtD6jvDniYSM+fKiq/rPGfwqxpYqhx+CKxGbjRwKJh8tfbPdd -JZsTNtK/CprGHNKonDran/7hNW6UglG+cxsyo56eNtfvOAGXW4Wt5/bENdQ/cRai -TZlukXB6cAYUp0iOey6F1mQtcuzqSXcro2wikIakra+QA/9yYJHw2toCoNATM1xg -1vT053MgkkI+t6GgJh0g5QFcTxV0LDGqXKfW/lEdJrtju5vhUGz+hETeLFGwHDP8 -1pTiQTC+2Ao14CdauH40jy6wzvOyhLqec3lCkTQjs+13tWD722Y2lNY7UP3C1qtg -GqFzzYdy4e/3qe37Od7LOg0/DJWJb6uFlrRm6NMnD9Bb8Kq55cCfyavelxIQpDFc -MNmdBUh5rGmk0rKGjc0ATaJmhh+k9by+oKkoW7WvqLeqUOp42B5Alfp5yTgjypne -kg/Sf6Rw2RC4jfgduPuVd+T5dkHN8QBxhTvGhvxDvg2AnxZFpAwjOEsJcySvjdY9 -CM9lhOHOUBJ8kefHEkA4r08bkXjEBtZ/vTjeG4QpheCTV0lGUKkuVff3zzc2TgKW -lUxRVgEigjt6FO0U+AJaFMjOHwUPjMqa2onRJvWmXj7VNDyENyCpEIQwSfe08rGB -5k+9dt8hwqqPQEtjr+nhYO5StjFrlc9z+O3WXhcRBMp+fjtbLRxVqGMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/libertatia b/hosts/libertatia deleted file mode 100644 index a57ef8e..0000000 --- a/hosts/libertatia +++ /dev/null @@ -1,16 +0,0 @@ -Subnet = 192.168.9.165/32 -Subnet = 2001:1291:200:83ab:28a0:d05d:4681:c611/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAqqQdkbtUPblaxfheZ7Ilnkh8wKGCx3kT2Y55gOOgd9sFDUnYlpz+ -KRLurIP0E3NxNdQyWe54e5mYiJDoRJVvxnis6sIFPO4X1z0HpeheTd62LDUSKO6R -+GG3TlxlQihUyviV5OHtUiApKEHE8XQVXH4AqmIKdxOz8vta8drRrFegGkpRUjqP -swN78Czeln3LCeRAixQNwmFoSCqqCPf097bslqgVRMxeM1mgZc/d7ZFLzuf4czKg -E4PFlKW/fcfD30ESKv+dMjkEtoCCYbSQaByS0yNSJZH4qVeYxxJWxjjx46bvJyFn -JU0PSSUF99TeCmCMFINzrrlok0wqF/yw/QRa7Uqkeh9wqGj/ZBqoBmctg0aEHUUt -/ackzlWv4/lm1xbjPb4/mJSlQGU9CwIq3tUK+NFjSCYzJX+nMvD5OowU2n9tQBgB -/jwLs2GHuP+jX4wYAgV6QkmqgWHB31TgyYTEZxNcmw9XdhTrZIbmjfVvafuyhoxN -V3rSHFGqiHbQcKZX50umVYVYo515q4PJXsWGnoxBh6McgXl/2H15k5oIfkG350yd -+nA7ABqswV8ZMFe9hlt0WoVXMWAGHDpkFNRKTwfxX6Vx5LP55aX0hDP4B9CVaua5 -kNpuwv4B8eNGH76A09gY7WjyiqxXqbhBcoWmx6EJMmCPtvYeoo9bQlUCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/mapi b/hosts/mapi deleted file mode 100644 index 8107790..0000000 --- a/hosts/mapi +++ /dev/null @@ -1,21 +0,0 @@ -# mapi -# fermuch@mapi -Address = 173.230.130.244 -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.209/32 -Subnet = 2001:1291:200:83ab:442d:3ed3:1d92:321c/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAvjyUWJuRAXhs1xqZo7sS79oZnMKrZXv8A0ZDnl1/ru+oLv4Upl68 -AIeIMc5uLMlbzalnupdjNLbfMK8usxDg1FSpvzgxG7scMUTC5KI5/WCx3/t5erME -Q853L2B8kYkd5U5qF0YRZQHGGh1J2Ty6lbtbNj4MQMMQx/na0LlGqnvDf5wRTLAE -npwQOiz7oCYRtN09iwTV/a+5CCUAlwW4c5s5V/BvlUKwnGBuOr5g6Ha48rB2i5zR -AIpu3RERXC/oQ/KkrzTlZC1ZOrJOb82GIP8P2eiw8cgJAfr9FX+RVjtvqR9xV3ck -vy3uXyxrl0nSzBdRGKgm1bgU6xq/JS4Pbn7yvTr4Fg9ascWIGeeJiqYWRy6vYMWD -U9UwSdy6nliRceC72D30TPSM1zXkBvSwhy2LsY2keaubuKrAUa1BETyTIL//QaWq -qVBbt/eFakExPb3lq7wyYmw7DhFiMgwAzUzUJww7EKQUF/Vp8Lb3AcA553VmCvLA -nWuSBBPwaYaZ8DykGHdBRKA+0r1b0KIop9bugIx49vfa05xduQWGoNofCrXS2b94 -Tjaj830zDfmPA4kCh/HDdGJWn2GyqKeMDEwQCkAhp++uCoPszdrwDR/TlRbu9pID -1lHrl7DI7tpU8gtGqG3rrZ5zWLLzwf6jEIZJzJCu7Wrf+iAF8xn/9KMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/marcopolo b/hosts/marcopolo deleted file mode 100644 index dea6287..0000000 --- a/hosts/marcopolo +++ /dev/null @@ -1,15 +0,0 @@ -Address = 200.81.38.227 -Subnet = 192.168.9.8/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAlc4gk7QUDDv2nFJ2mCkLDVfrR4D2kOuwBT62aWdO7sPde9RIRXva -e1b/b8x2F5F5Mh73P7ySq1ukUVIAxVW6xWCFnEa7yjLc6qtzrU51s1Cc5iVVqEjC -F9LLHaV5Q4qKY9svedQi0vfSQEkoJ2IZFLng26FgGYCBsw1VzxSg6eHW15exJtX+ -AcN7zJsPq46ohkeNTulqN4ebNULX8/Xjrsit2hDlV/e0LlMlgZin/1aPCAODxTlg -mry7uGB+9nQNjvubsDjk3nYmpyVIoOM49d7u+G6h572aWAPTJ0dH/vapLT4AM3mp -Ap/VVdPkxxuUB78TpcKx0xac+P2VAaPmQeYrvx/4LvmPI5d2UZ3ilvYasCPNYOki -d6xvdOxHlr5zMwF33ZA0TfWDv18HtfW6kqCm4HGtv3hd5h8WT4x3LBqAwn+xlVpv -sJC6Mp808AlvZYEMrf7t7StkN8d4q39JB4F9vcP6PR23vy0/nqvDsaNEMqP7sZ3h -Ikkm/rn++SZlb9mwcPj9t/1zNZjBz+xmwv8s3Pb+6O47VaoCqFinDiV2XxvtsMCb -AjrQ0BytMwm/isd+/8AS3DRhgByUak09FOCkgMiY6mcLkayakggC/mpXZJ2DcItT -+2X+/LKD8K0aPMvhzEXlec5dJtOnvAvAnFJOHxd/aYycNkiDp8OlGwcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/maxpower b/hosts/maxpower deleted file mode 100644 index ea676dd..0000000 --- a/hosts/maxpower +++ /dev/null @@ -1,15 +0,0 @@ -Subnet = 192.168.9.224/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAqxd68D379k1PkriZlDz9KyfHl5qQAZwrR1huhYkGv4nCf8FYzNWY -nkS72NkIAVLE0WPAUW8yc8O3821tQ3Hczyw4apmIysGQHwWexPTKmsPiU5X2qfhY -B2DZqZku98R0H9s1OiYR4otK/2IYmG/XzWTE/BpLqFxBGytSYf/RyzWik0UmN7ky -M+yyPwqrYa054TfKhTrWJLjw8RtlkSWJ8TI+b4KLCtMTLDF1e4LeGTKQynGsP/6B -ZRJvAWCHSaUh+yFrtTJ9jkTy29dGaXLb7kW3m7B4ZJB9qt1N6WAeG8un8JL9uoll -urlP1jwmoDxq1VpNLn23T8jxy6MiZ1/3Xi8Tr086NWkNbiYm+UAffcoU3TnHXBLN -UUjSpuwSmgaoVNV/zTkPshGjOPoCkAuAx7V2nZnGfcmXKvG0Ca+NmmCEnjWsfxl9 -2ux+Mwp+PBFTss7ppgjcInMNwn+AxJLj+q9qJLdz/tf4xBXpfiaOi+OEPw8YMZez -+0lWnEeZVFlGPS6HUKRD6DWhyfIfUH9Dw55dvpuScQoFjSfujNPv7DKdO6lV4xTn -bCj+e2Z1ZDUlFEmV91zLS5u0Vqc3SksL8lj8df3iI+BxrXLBO2LB6O2xNQUuabtc -Pv0i77N/ez3EazPFaHAfnVlHnR2Ef7DyHv5AtwIMDGqCX6IpefC/hR0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/medieval b/hosts/medieval deleted file mode 100644 index ce34a03..0000000 --- a/hosts/medieval +++ /dev/null @@ -1,18 +0,0 @@ -# mpj -Address = lainventoria.com.ar -Subnet = 192.168.9.107/32 -Port = 1863 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1tRkg12eTgflNfArd/vw2QSr5XlIx5opWuJ5d0cAiU7oVNFFZzGF -Se78iJcT532yDCV2E2NAtZ3W+ShNCMN68LUvy3//r3RM0JCcy2nFmzkCVDJ/cFzK -gsb+g/hx511fC+4PvgOT1MpYnjkNbvOVwELYkjFTu3TOVL5UoUPJ2wggOnjBjL+l -H0JLkuhXfgGlGPJOYu5ZtveeHkBqr37xN0VuCi2bwhcTR3x5W7c5C/r3gIGRUvYN -3h9XCzGQCVGfA0vrbK0rDGorwBVV8PKsEQe5AsEkv3p3dyNZZRy+FfdR5l9WrgHQ -TWk5NLDwPDBcN5oS7J2GRmwnB0JyZIY8k2TidHUlbSO+WtXLKqAN9AmyYkV7akOD -oUuLWGTzz3uDRtfK3VIs4mVFvjgAnaPyltCI6YGJ7b9byxyZe9FvF/jrdb4jSGor -0qbDR+qRb9bE1XauOWVaRfdnButHwX56HS01/GVccxnDIxunJNDFmID1DhcotINT -3gBanksqXwx+KqF4RqthefmOwTbkkGeb84yO5SV/Ses6Qc0aSs/GWjqrUeiY3nyU -3+YmyFJrXi19Gz5YRKYN8k9rD+hLuOcu7ZF6yKCrBbYmFAUiGay71At/nbc2tKI/ -UJjEqfrPbkg+1dLvcfXFrby2dnRFoMi8FcDIGQb8bog64OxiTDyJd50CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/morgana b/hosts/morgana deleted file mode 100644 index d8fb925..0000000 --- a/hosts/morgana +++ /dev/null @@ -1,16 +0,0 @@ -Address = morgana.servebeer.com -Subnet = 192.168.9.155/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA6SmPUCeh7TyLZowP9DlbazDXPTeVVjgZ284WQTRwQDrE/1Mb11pn -nGp1KdxQ76xzLO5GaDEVWNn9NxY3CnZWbLTlZqiTYZyuQGtNLBVX13V29OuyodIN -0i8JUH8cWw5VYXDR3Bz4vsd+hb+9q7o3FtXCpc0NFw3GPA5LRc6QM//qyIeAVGyX -6cmHpxcGE1TsyrwDN/vJJtOVAJWmbt5KvroXnSlDSCec/TIt0K3P1bbw1pE14e2W -4H7vOCfJlnx5XuwDT2+35pWoUbDjdTS4z+PL5HNI1r/bm5OuP5cfI7JPA0VF00Qi -r2eIXYVXYR/zAy2uspXtbV+Hbzz/Ze3MQyfKrwjs3BY9HGBFnvB4aEakAA6IA2qe -Ka2DpMffngqqj0Jj6C9B1rE1VhaEne+qpylgh3u++ItOV8+BPZmmYQLYDvUhCX1i -rna+WFZ9MJTHVvhsmS2njuuk1Y6CUuyQttxYL6ahBeTt5X/XtkpNS3+WVs4zJpwD -4orz6kkGKKNsTxAIOS2tgVv9DcRJzzsCATyxBPXCbYRZJGW5yoIxs71WyhLrRsjz -eB4Xdgnh35GruNDYBu4cYFzbWPJdc23Ww/c5HGEL3QIH3LOYP+mlXTpwEYWTSIhj -eAoSZFEjZ9/CZUtmuFl6GKDLSF/eea06OUz/JIUm+0ABEYsHsKd4oJcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/nbtrimwork b/hosts/nbtrimwork deleted file mode 100644 index b49455c..0000000 --- a/hosts/nbtrimwork +++ /dev/null @@ -1,18 +0,0 @@ -# <> -Address = nbtrimwork.com -Subnet = 192.168.9.229/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA4aV4Qdz4h2JWTEX6uxNXTILB6p5iaewEObexE3KWFYH6pDLAo/ZN -KH4cDVkqo86uFegsazhGKdDztJn4cOIn/s04oiT0GG6GLbsgbrgbpN1cj3OUvg5h -uEGNPf24FKTFoGgfN6eKVFNjpod9r1Dxpwc2DoNa/M7xLSYIL8HXfsvzz3tsJqHr -IyjJdpoa7wZLkDHNknhYL6/YM9cwribFLXILB21uU9f7/PxoLub9F37BJWNg/uy9 -ni0meI5nML7EwEwzV257jc+wI7dQH9VJCDF0ziU+Pn7R8aeo/a4CuJIrcttYoAk+ -lefE3sIUjoSDBpA4A7dGrmvbu3AppsrRhpPunCPUusoG6lo9fTFxcrcwewVIXKRs -PaD7rCEUWEJm8UJKrJYW9hKc0u2d1nPolf+aoYjyV43oCrh1xLKUK6qNNeiYAQdp -CX5bJn17+AbBBBwqhACwmAP9VIML/yVnczA6rhQCNrsT9P/dxe9LB1EAjhPmwAhm -kXzhI7cCMpvqdVnKnmYDu+uj6cn6Mbkh2beMXk3kFczvLU4uHMMGRm0Tf4GKtMkT -sn0mZkUKmB/z21oVVp6S/bzc+PJu4lfn0sIjvjXTh9+TEMaayYpiuHAnYUNGRFIz -RJR64U5ZFNCMRasE+c7DbgioJUe0s+4WclwuR2Qeo1tG04HTyYL9ZBcCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/net b/hosts/net deleted file mode 100644 index e215e10..0000000 --- a/hosts/net +++ /dev/null @@ -1,21 +0,0 @@ -# net -# net@net-LT40 -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.129/32 -Subnet = 2001:1291:200:83ab:40ab:f6ca:a048:bc20/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAwJlGCx4hK/lJ9JECnLTXWeYZRuwRc8TN1ZT44LQH+b8GTlsUFC/t -/Zz82QbSKMdCrP0JuJHnx5drnFctU1e2QJYCGwByGBRxHtM3ertVF3TdVu5isS0F -v5uoJZo6RvWCBbfBWBbzx/OEb57gvXIQVYmXH/sY5rQldpID9u/uuAtuGWD7OyqM -eQ1u6F9Ftet2ZBd2YtIXAGf407RDK/KH9HNDMGVk3pDWqOGvyEHreIbzYHVYBKPo -PcfbcywxDemN4/BI6l4Vu7fW9HiUavsTNyLzgPk/S7uO1qpRKpI1E1IxTPPKSeVV -RNx9Hra1z54fbDQF7JopLO+imst2sp837SlUFN3/NqQGtyJIsyoTZs9GxxtLjTXg -HolOcZhoyvrTRwSTOdF49uFLtlI6+CMs10igsie3bAn/BiUCE6/i9rtlpNm1NLxr -9KvoTpREcjSobCSongwI9hxe4AG4uLY0IiYlcohZ7Fncm30CwbWk4RP+SwVpLjrx -hWE35Sk2P0sOLhYvxow+fyG1AsvwzlRCNV39t3dt4FA+iJjY7fxE2TyadcsNgLwJ -MNbGsMBQcaoUd1VU+CCojRpqQivJjNchWzU29g4VcckTxuDS22/O0ZXFnJEU/79C -iK5EbCeefzUVdAiLwCUZNkMr0+X1SqCNtD/CZus/WY9WX4uoiZpXqL8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/netdojo b/hosts/netdojo deleted file mode 100644 index 6566e7e..0000000 --- a/hosts/netdojo +++ /dev/null @@ -1,53 +0,0 @@ -# dojonet -# server@eden -Port = 50352 -Address = quanticapc.no-ip.org -Subnet = 192.168.9.228/32 -Subnet = 2001:1291:200:83ab:ecbb:1107:abb2:c485/128 - ------BEGIN RSA PUBLIC KEY----- -MIIICgKCCAEA6LXAWrQwaV3xFUG7p5n/TguvCDM1q6G0HA3S5TWt/51bO6D/KVYC -lX6FzHRgdv4LIJizj50Gje++mvvbnOAaTR8g9HpvutPPPTp0EyKOGSCBfrUh6rs1 -KsKcI49EvfRaSVT3uu4XNV3MjGaJoQQxDI2UnJz43CEsMiTowGhVWcUPHKvzJcJU -o1dLmAc8ZfQyleNb9hJFfa75OkGEjgEYqiVAOHP+YFZddjLvX0qm8mWnNxfjeDlG -egBa1+x9qhR0m3EFsbz3qNnNaBuFtx0CwGu4ev3yd8UPR4I1c7i0oBtDIRbKvVCA -8khlqAGxx+WIApeb4CWxxscxgvXrcX5t57CRz1uv/B1AVRub9dxG2hBdDq7LE6E7 -7X0eMRK2YlX5IuxJYSPXrsxnIPaSdTMunO4I5W8umCpQC3KBZf70UwTMjzRdfdHU -K+1fVQ6CFHiaDshzVl4W3bN+x9wKzgMdD2mqtFcOPmHaESDbUkXStHEBQ58IqE2E -Ox6CXsjbky2TQO4skMeFVDdHk8zos1dc1soGrgaZD7O+99Jzh8p/omOVhQHXGfTi -HeGnElKUPMVOYvTFzyX/M+EuBfZQpvVNa3Qma9Nc6ySWM5AoHpSwnlVzbpDt02RO -5F46rG6pzeILdCECzN2A9U23S0D7sf7eoQgJ6cIISNw+b0e6lYfb09+2WjibH2X2 -ZWGqzBKWUj+I6mLMkzw4JyyopY2wH9PDvJVXybbecg7CS8zfs7oP04EsD+FQShv0 -wIOPqxiU7id8h3pqXVCcBLgAxFop9u/VfyWAh90IDdjVuHEqjZ+3UxS50HDAqYWo -OACwpdRGR7PRRVAOizDnax8usXGemeORwT1eIOLX7VL1gcr6nQAqJoEzkEsO7vSx -PkdLcVWP+/HYGtjzf0rUo604Y99MwfYQAPJ/OA93DM4LBnV5fcE50txRZuUIkSO9 -u31ShbKQu+iPq92mUwPFEiGgysJdkoJfu1oNGTCrkp378m7KUyFyQAvrEGgvoAJ3 -MNAiyZYNY7tWZ0RQ3z9cCyEMQaO19oRjXoE63ip8ww+4Hf0PASRWtFoV8zlICB5p -WWuJqe3dx+pEqr9P+Js1kjn/JCBvGqoRceUhqGRl0jwg041ndYiNVFyr84wRjGZw -+Y0gfgADsTjcVpGi1e4Xhq5nGE9BDQdcB6FNQnmBnD5MmrxazhVUUCXUR3lcBhqF -SLwUQwpYT0ybzLVXBmh2th5E97UXIV3JT6dGh0nGGndkf/n3ZdtwMKAQSEqfM+4P -tGP454Tpvs+qz9lLLEZQIRZpzT3M8XzylxSDaZoLwxucjK7S+ObDj12EXOgV0umu -wSVqWQ7L6CLBM0ZX33hCh3X62frs9opypbK3UHJuUursZQppnn4oVg91p3TzIGJ7 -ZgZYhXihk++ur+DoL/xo9BARGwDlkIvp+updh8RuRthj1cqWrCwMAXpCwnGhCsAn -r6n/qJEtzDQx2hsKwc83PUsNxtpfxpHYcyApyfyEGTQ9j/gLFk2SBrQtkSdDHg+f -Q/GdVt1u4Q4Ck7M5qw5zI/qWnelibdH/Z5MBn/mmyHGvCRoyDWWV1/3Lr0NF1HoL -5S3gxsXSInOMxfOIalXs1GP+OI/b539m7Q6pQgBiEqeR6x+5YjnrE0ytF4aPk6/K -/7JRBVzFjElAsDPEqBVcpctdZARCQ+2yW6EQB+P9zNZL4ebHBof7V6TjH0EK6RxL -InB0VwfKVJ4n/l2/isV51oUI9tADIPlKd30SwR9m1oOulVt41EH3hSFo+qpquZjP -B40HQQxSWQXPhskaVOXmuSruEt2bSOp/SUF/b5UmxUdLD4YwWXEc4HdrMo5eY8+z -rmGKi4vOO27Vl682gS+a5mXYJNQ9r5722xjhzbduWuTv13YXPE3xn3A6ziDh2jY9 -cTbnf4X8G/RZC0lKupX2HKjllkzEakTZEmgMZHzWqeMt25e5IFDBHDTuCWALW7we -mIdWdw4k7Z9fUu4pfpGv+Gho5gb+FXqeoZWaO3N0d7vZlw0K6BZ0EZfKFNYpDdYV -jsW9LjSCYxId3ChvM7oww+hj2aZGGYPdBKN8W71YezLXwB6BHunOZgYnXQuWS2iE -Z8AVKH2DwGr/6pomR01Ra9UPgLFbiX0OahrN9xcQfgO5nEWCkCeY+1zGpfPBf810 -p0Z80G/AXDlDY/t5ViwXFdfrVW7FUR9tvnpUO9TTTi33vThBcXomqFhyHHHpjjkg -kukznmLp4sXH8Yb5Wa8iSJ4PZIXuOj8WiUHz5bGBdgtGD8SrMMxXub1r0CyYYU1s -vPBDaikU54CBp2KqBeDT80D6vrN9cMVwHT6fsBawVbCfBnw/oTMIDfcKl9iaYRsI -ubjH8SLw/G44nIpbiXVFZmwYK9Qz4+26Sp9MJPrgjGiRc+1hxprixorQGqnnJ5FA -2q036KkM99hnpHpNdRxQICmVtu70ZTAX9bGgiTn/luxf5KoVe2WY6PJ3ayk8etfA -nKj6YS3FncSqyPOlvpeNrR0W3wqlvO9hKisQSnTflVMK02hzBk/l7v1H+yEFEgSg -Ql6+wvUNHdBwOaDvDrKYJO+1bUSKREk5mBepUCqrPh+AM+I+oraAxIdstJOyuDCu -OaxOmC7TBkO0q1TFjbOLjh4piigMEuoAshiUwBZqlRYyr9/WZ7omgqGpQYtNmGxd -fxWqzmvJTUgAHcxuY54uV0RhjLa2w5lU/s27tELHISkYyFH1ZPRbaZUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/nexus-viejo b/hosts/nexus-viejo deleted file mode 100644 index 11adf71..0000000 --- a/hosts/nexus-viejo +++ /dev/null @@ -1,21 +0,0 @@ -# nexus -# hollman@nexus -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.39/32 -Subnet = 2001:1291:200:83ab:7826:4072:1a3a:ef1e/128 -Address = proyectos.algolibre.com - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA9hTDYEPuFIjPwktgGCvyvGEqZKL4LCBcS7FoZ6Znw2PXm5ePuU5z -ZUPJQa9zcfQihVb/+Tm2TKThAI1vecYqRMARWve8pa8IEzc8b7Dx5pSCdx5U1b45 -vkjmGIXbGeo26s5HGHnKj8Dppqqiklo+6vocMFwHCuKINGUj7fT4kYG9KiYXqgnX -/89rpQ5OJss1nNXnKaSm4ErktMMavT+o/A5QO0hXlht1mKh0yMhQ6fpLzp4mdQ5O -qAcDa7omS0rbKxuLPuNZ43CU6prx2F5O2qG/QF9A0rJUun9HK1IIqchaeu5Uk4F7 -uOBCcxJTbF/jEtGTlGSEJ4fjVZodXB6BDOIC0slOAdgcziyDV+6R2W/ZMobCYIoP -z94S4DLpZBnsU+QmnBukZQK4IHGLxpbEPk7jroGayU6RszCtexwNQK/QgocFcHzy -rdX09Gip+glNWjXpMvqtzlv/pK7+S5LElPDsiHezB3ldNHeb4DCRHju2336VoQy2 -nO3+9lRy7FmJ+cBCaqbKOhvKRvk6APaXJi7rj5BULx7VdVIbofs4Ug6NRu9zGf28 -a9+kv3qPFF3Sh48R/AE1oXMYi6oZiG7GlsHwMDfmcSD8WqR46mdILQaxJ7fKkMcZ -1t3zVpn4AOtEw88nbqiMaGtKN836aopLnbeb32pB3SEbtMxkjKtyEZMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/noanoa b/hosts/noanoa deleted file mode 100644 index 55513cd..0000000 --- a/hosts/noanoa +++ /dev/null @@ -1,18 +0,0 @@ -# noanoa -# fauno -Subnet = 192.168.9.203/32 -Subnet = 2001:1291:200:83ab:3096:fa90:4df6:7a11/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA8GdZTnwbTappcdfg9Eg5eGlyZPVU4obb/MLunbKCG7zi45w1zs0D -jp/KkQVwzMNvXGBcRJtfSJRBbeoilUSKVQ+iJM40qBAWNshBSaqyc7re2Nl9gW4u -Gerzi+Thgbxytm4Pb9/CaELdoB4QF6iOTaFTAdT8XBukll34SX+GBNGVPf6bFqMx -gxE3dSbjwSrVy2hMU2Cds5WXrK4CRFGURi2UU3qxXTdS/QEl5Wflzbzf0HkCdl7k -5RLwdVH+jSfMuJ0E5b+0Fgww3GGMhPhrY1e552UeGbajZn/H+6VrRsUs2BmlfoJf -fikvwDBZ6OIPF48oVx1AQ0WCkCYaoQ2s3q6+DAUBFv+qvEKfd+fkE2WE70flizeh -5yOy3W+ChvAYCSblu0jZmCDySnVO1c6akvAEjjvNFLQ05/OCNYSUHe+Avc106ev7 -mMsIQhw9HKOZjD336bujFdudVYFkYB0fqLvII1upGqSpgO5qLdaBPEV23uvqzuCu -x9gk2jVAXaYTkC2naqnl7ZtUHgC32Q3i5z8gLFsoZE+ch07LZ3QtsWDe3a1OWg+1 -c3O8djMSCPX90p3uhL8y/qE6VdM6gKw0T4G7Yz3l9R8mO65xRTWxrwwWM9Uagc4k -UtvPNPl7DKke7Z0I+t9TFmi4wHYexiKj3kwYKStrf+2FsRPR0AzYQgsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/orion b/hosts/orion deleted file mode 100644 index ef19ebb..0000000 --- a/hosts/orion +++ /dev/null @@ -1,21 +0,0 @@ -# orion -# root@orion -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.9/32 -Subnet = 2001:1291:200:83ab:1cd3:4f3e:a2d4:e55e/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA3CCKLl9GvsvYuvNHGinkw9LVOX8cRYZBKRAbfaYKKJSZJyev4x/E -NsQqVObiPcRK8GZNkSmCFX2Bam/fYzlDjwE4SR2Ob7uk9IBaYLki/gkvbwn2lNwJ -DS9RU59FFAlzzVrgWbFqSvg7NQDqyVR/kpAWYKlxauWg32dAdpxDyO7+4+TRWB/d -kt2KUq/iosW0pIFXz6A2QYKHyeW5zEAbZQY5MkbiNqtBEW8gxMb0N1I8706eYQY7 -4pKWGgz3Y1QzN9/0uk/IjEtOGGyRo2UflMAeFVm9K+AjOl4QYO1BbJfUODdFXNsP -RAUWOcXuaPHa1E4EF05/PG4uqoYH/ocXJgFb+YLi/MyQIHM8BDh8TwFgZczCEglF -HhiiERSBIdWhismoY7Qa9jAE27VTZZA8ECX8ekB8pMh+TW2bmH2RX5bWPpOuUSdK -QqspTehJo3mie8vLwxiMVeDKTIR9/FcHOg/sLWKMRe4CwoJFUxcK+LqsNNOZnRWa -ADLxrzmD94sIEUWGQXLTaCdj/OvzeJHQXv0YPOHTTDpXjI4yqc/bPtQpDy1CTpUK -GcgbLs+Sxv34MVT5Kbe23QYWeiI4A74n4tBpVZM3ADUiW0te4aJtc2bBtkmjPoD+ -ty6NOCVWHLRTUPVwlfPGyS/ctnBZug5P2hSAj+a8r083Vdb06VodLMMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/ovruni b/hosts/ovruni deleted file mode 100644 index 283a592..0000000 --- a/hosts/ovruni +++ /dev/null @@ -1,21 +0,0 @@ -# ovruni -# Omar Vega Ramos -IndirectData = yes -Port = 31559 -LocalDiscovery = yes -Subnet = 192.168.9.87/32 -Subnet = 2001:1291:200:83ab:786f:427d:d923:a8c/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAum4Ee5pfMGJxlVLVERtSLwJaSZjgeQ8/0/iTnigRL1H1ToPCA6/Q -zehg9VniwMprL6gB+bdkGSkEu6RUvE+giDEKM9MLlmalZ/ZbJRf/O8xZFgTkkV5G -8h7Ao5DIeXbUqd16j8Oy5qD9N3c3cHfFVX/o49qiKZKBwCmlGQQXVnIsZSQHoe4I -aKGjcKgl9EfkwfFhsQnIIIm0NUs/ztfPyvjB2ppjAhiMQHKla30AcPEcNHE1NtI2 -M+ccqK10Fgu6BvsJqfQJK1w9mX1YDsndpx+U4KLhAWIgydQ3Rmwvl+BfrcR1W9KN -1WuBe5HPm0PaGd8N//zqEWWlX7W+Pi/O2NK477rFH0LKgQXCyWYoL57xZU0wENHO -HvkKAIKOYkks6wod5oMjuahwxhdO++eGBbRPZoqQJg66xtvhdnQsN9IHqpspDNAN -u98g4JOILuqqUNNoKjoICmzUrEDbGt5sNLuZXsokwJdKWr6oBWUYBzjJYtgy6bMi -TKXQlW10wUpN/DUEBwc1rbtZzJGalp96ZX/azosmZMnfUhNhXelgWf1Xs57RByfe -sQUvCbk3fZLi3BBijL3HHPriI+jSRphpCgQeRYjG0TlnkYom5eiXcYHfqaaAN32g -zeI+0rtAJ8xtiUX7uqE40sXcGLo7kdIHoxd6udOYpjRn0QJaUHxMwcsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/parabola b/hosts/parabola deleted file mode 100644 index eba346c..0000000 --- a/hosts/parabola +++ /dev/null @@ -1,20 +0,0 @@ -# parabola -# fauno -Address = projects.parabolagnulinux.org -Port = 655 -Subnet = 192.168.9.147/32 -Subnet = 2001:1291:200:83ab:c827:b8db:4ff3:14fa/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAxAe2cnsWxCPN+zJlEaGClfzkGX7dID+GPjib5ewHVxFsR2alZCrt -ir1QmYk/+HJGgvQ2PY75jT54Han/j0RaGUXrQvmzT3xsdwal5cbLWDpSMtWBGs+/ -UcIDAHUMqGFQvK7VjZl+uiLgzL1uHc0NV11Zgdr6NRB6eOrnuc8UZsGd8IdjKECJ -SWd8alvNHdCXyTaFSIO9ru8SS1+Z2TWI1/RleJOuKghR4SnDjWOHCE4DMrI+qiBm -FPV7VBr6fNGPLNj4YTeZUE7FVtFUXLUi4QPJptJ3ebIqKqUz5rkBi0lM8Y8NZ/hG -hBeATryXk6UIpw+9ywmzKu5VvKDDHLgKAcozpNR+5jlPBtKo3fk+o6sxD7aVh+/R -hz6BVOIEPYI9ZxOIK+hWxSDhG0kCU1xXV7ym3pNpq5xyOSjv/XI+5o/PDpBpFMn2 -Q+/saKhWmr5NzLncE8xyTMAuHFGEPiC63JtRvTJNP/BrsU0rWkyCr1Gi6AA2DbIH -/7wmQCKqMbeEjbMXcJ3rldA5zcF4Q7PFpz7HH7K7C1QcW660R1Mz1vrHMvDEC7Cc -zWSUSZJZe1A7Kl1XqUPeAvp4rdbTBTpSWKiQPdY8+o1UCPwwFZ2+adznHLynJeMz -6RxfqmcB6vUh3U5+Ldxy3cJFhO5KD6z6xnG7CAyciiOX8chrWJosNCECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/parabola_nu b/hosts/parabola_nu deleted file mode 100644 index 8e9944c..0000000 --- a/hosts/parabola_nu +++ /dev/null @@ -1,21 +0,0 @@ -# parabola_nu -# root -Address = parabola.nu -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.27/32 -Subnet = 2001:1291:200:83ab:9451:92d7:dbbf:f882/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA6VXLllT7RL9jFUz770dqomKQHnEbdoKzuYBKX+n7QateYK3z9yWm -asbgsjjCbbY0+g2f8KQXrp4HzO/qxCrag8Saf9abzIHcsK9+tKv3X/cRQ9RHTwy/ -1dpUrKTSgUUSbXJtztvub9gn2lrPfda9kBVKGBemS3IXzf+0fmYSCXz8uS5UbUVz -OtDYDxRoLRDJDYjRBS1N6NAEZy+9x5fwcNwecla41TlJ5n4gVeF3I+bwxQNqd+e3 -oCNTq6TRe+uNC1Bz6T59dplR/AP+Q3hp1vGQUkYc26NUillBG9k5GXdGW2jCz7GV -UE1rwjj+gm93D7YdKbsY3AyI2q1sk5puPykBn/AHJ4XjbPxVz7LLkJnGi8weyeAR -Phq1Y0ms3w0sfOCArTlYSm7JTPPczR2P+spOZgKuWJAbWwNBwWYibakuMw+CThCj -ZinDRheitpJCuIUXuHJb8VUOTyPvJYlla6gCzddLyRKCYPUORMnNG4SNnq097aGk -w/KF6QWk6kEuzwjKZfLLwPzraFK2OOMT8zjklFLpp0jxAAqDmRI+qcXAQ/ruAxSd -8cJUGDZpLN9Rhi1GtPgI9JoMRffpgfAc3g9ab6A2JtrENXxQulC3GJOM6zJ5r8pZ -vEP5KTapp5MClv1MPGgq4drCl/pcqhuXBUQUZjzjItN2m3KGy17audMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/pauloat b/hosts/pauloat deleted file mode 100644 index 4c7073d..0000000 --- a/hosts/pauloat +++ /dev/null @@ -1,17 +0,0 @@ -# pauloat - -Address = http://pauloat.mooo.com/ -Subnet = 192.168.9.214/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAqyoqcySJjf8HIclyt4EoxnS6uXfEsQeMnjgzk3bc4CKR9bKTXu71 -5iSYO3oVykx74F5Dry/uc4FWKatDPdcTAU4/b6QMQ2CPVn2AK1rk5IZKOdybQmdF -gNNCjzS9om7tsu+ZzmGmu33+eeUTq9tXbDDrukxE+HKwuwTOy9iwX7oG8gWqh0Ne -uKrV+rkCzXqDNb0xcStJj0SmZJYyofkTs0lshWzNLTaRAWXq/Ycp6Mr+P1PJ/Tw5 -Fx16/3DWGDlUfRoO8ZpDRogaKtp7aSmGF4jP7+p7/qxOjbVbzO/99b5FLI0eHnrY -pdlOPO2FshjhZDwvUMKtQ0SG+xNW5l3z2RonApdgFyNBkr4oglggnssL4pGpWhZZ -BUHJV4/egE6M8uDiOXK5i0wapcTNwlD8uGETcGeoesrS3NWnNLrFXVJE4xs7A0wD -wOA0NyXl0byEH+xkb7fWw9mWJGVVMIvR5jz6uMniD5jwqvEj/uawEdlZjXinoFYc -Bg3i0UdrrF4W+LRYLxqqaKK1cSkV8jZ0LbtnpzKHiMn0Pt+uAepJTY9TUqKENiwi -iD1z5mArHh4vGDVhfHZDQk3Jhz0AYYAoXUgY2seIgtdttqQ232yet6wFeFF+Dmre -JZQhCIVeIwyOUunlBdPtZFhJkex5veWybh2Gi25QdnfPVpB1WyeHZY0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/pc_bureau b/hosts/pc_bureau deleted file mode 100644 index fed3356..0000000 --- a/hosts/pc_bureau +++ /dev/null @@ -1,21 +0,0 @@ -# pc_bureau -# pc@pc-bureau -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.29/32 -Subnet = 2001:1291:200:83ab:20fe:a4a5:dd2a:fc4c/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA0sBRItwEACevHE+GloTbWV+Q8Qkn+cA0dGeh7E292aO5iXd7r7rK -8idY7yHsxbt46qwtcZDaNvTwQr3geoGn2OhGQUIQFvLwu5/FbIXeI2vUaG80ZV3b -7EXDL8v+RQPV+n/MCYdihtJJNT9jZbFmlRa5+U1XxXkpaLTP7OwB8C0IvvdNyh67 -ZTxUgc2MA8kLBr/7sSwuJYkbvbKKRrHYbfgq7a9o9IErjdqSuDXVxTor3/TN2mEr -8eeRXyxSisW2kpIcyMzmMMw3kBkZjjJ7fXf6cLUGeZEdGEa7xroM9i2yAegNPOuE -Bj4cQa29JgjCoihzOypTwV0I5ga3qtOvinqqOAQf3T8obPCb97KuE1/1vwzAZVLU -Ep9Gqi6d8qONpoV1BkFaN5jrugCWINFPII35O8fBiW/ANAZksejM7DWs4NqZ5U1d -nyaTzcXg8Q/hhgzjFeZwYmYKNcEp3yeRw0MIX58jt3ZdbbLeIVYT25DYM+2AzDsG -4z6bS8IxS/0g9Kqv5VJGJzFKP7iKBh1ZgPJxRM48TJBI2sCNoLy/CQsEcPpfTuFh -5zrtyE6lIB7llR1wFaJfZb5Lnrd2hHrQ4Kb2zWHGo2Qj3W+kGYbWvTmH4Fksu8X+ -5BHSN0Ijeni9KgG1EESpGmFwjflTayuAA6sCdS3514rfm4i4WxA9vmsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/perceval b/hosts/perceval deleted file mode 100644 index 01eec7d..0000000 --- a/hosts/perceval +++ /dev/null @@ -1,26 +0,0 @@ -Address = 186.23.103.63 -Subnet = 192.168.9.113/32 -Address = 186.23.103.63 -Subnet = 192.168.9.113/32 -Address = 186.23.103.63 -Subnet = 192.168.9.113/32 -Address = 186.23.103.63 -Subnet = 192.168.9.113/32 -Address = 186.23.103.63 -Subnet = 192.168.9.113/32 -Address = 186.23.103.63 -Subnet = 192.168.9.113/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1mcrgZQVLs/nF1T7ZygH/2UVqnxqGDktzl+VQFz4OSLg7O0z8LHi -D7lJTEMf/jCaX16jPnUTzryJAq6+zZXjluvwMEse/6ASWPmEzVD/csBZhw04hD0q -O8KU5KDXvCYiyFdfJ3aRHkjpcc0w1mVevqdXeO5xdEKx+0xXQ1o+mQw3FugHBvan -z/X/R0wsldCKLOYUXXL346za8IAiY/KjrPMrjX9OtDJwu7dte8EgOQA7O3h0zWAb -3LcqmibuYPZHIVLoVnNpCJObFchJTTx0jO0aThTqr2t6D2/2eKK8hdepiT83UNUE -69oZeQ2tEm0gXwDUXoKvByz4lNkG9ylgIaoXPuFHod2AYHIREImeHE/howIabmkd -NHhf6OaYOiwbnWCUTK9rxnliAs1nISu8O35atFzO2aH4uuKI5c1Yt2YOw6TZJowj -XiDV+4gFqOyXW9LnpNWz0KhOpL6l73vrZvhQym/1qerGjCfBNQdt9r1SmiEZxVw3 -oKPGrhK8I76kI9bfEmJWr/Uh5PInu/eezIOzIGFwlAWrzyKOY7vhjQosucjVDhk3 -sQjeTzEmu5pI0vnGy9DFLRk1Gv5KhvLq6O1cAD6J0M9Si0AbD+8kCVKc+6zi8z2L -BG1QXl3lDdRpsGu6ACFYkM5ZcTSuqozNTjl9m/c73o8j9EDpvt/aPfMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/pixie b/hosts/pixie deleted file mode 100644 index 8aa0fa4..0000000 --- a/hosts/pixie +++ /dev/null @@ -1,15 +0,0 @@ -# <> -Subnet = 192.168.9.47/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAyeF5wd3HvFb8d7T83ZwvsA5F8YTt1C2VDjrY+nzwafv4Zarwr8hT -AvYcAWXbgkGY7/yS0pZOaoDbBEqIM610jGuZQCGMVGbvzUSbP2Q0qI+1IFih81Ro -qxUTkQHcNiKR9Tal9H+OMuqaZPb/P+4hfpvHi4Ei16zLFaR8AWlELKwz7zIttTzf -dPPuTkTerG4if0ZJ/w2WWVkMPdtFI5fqGmr8woiIwnCqkjIFtAbN/w58XhCUO/kO -wFDrkImXqORgUY/QVou78HpItfCtGM7+6h7FgA3w87R4Ipst93dlJ0TPcnZxhO8Z -dtUQ5znsW1MKGNVJBTZNr73fLkl4jzXlrgho+qDSIS1Vcnet/3Wod098Xm/T8fSP -eJTLii+H2OOlbPSO315BqVs6Ra38eqHOdZ+3YvYPpE/gfh6EVr6l6sZXmNIUboDT -t5CIDBOmXMjQlDW4TcG8uHVtOLjTw6QZ+7gRSl+EzuoXbY6U6t1rbh6DoE3weeY6 -DebffumaWtopkXGxlCEVyceA5OvldzxFWnivYBLu/XUNj0KHdT4e5GVtYDX0RlKE -kd4o+gWJdnVm2hv4eVgDYUws2ScW0DWPZ7/bJCurW+/BB3QLYZ1A3uwjGGVRBUgT -jQ7mLoA/I6Sy0fL3v6E4AaCNlUl0e4fn0UAQSSmEq7MCZYqx0T95BNcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/ponape b/hosts/ponape deleted file mode 100644 index 58a974b..0000000 --- a/hosts/ponape +++ /dev/null @@ -1,21 +0,0 @@ -Address = naven.local -Address = 10.4.23.246 -Address = kiwwwi.com.ar -Address = 7ihuiypnohfb5yp3.onion - -Subnet = 192.168.9.3/32 -Subnet = 2001:1291:200:83ab:249a:2ef4:9cad:1d9e/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAySojYrK2MP7sf2GhNvZQKnCij+mRUDbHrmBgh8RZkZT0fCttJ4rZ -B95PcG1dQK/o7wKxrqo0kJolBeKZ/JgMVNYrA3w+e1xSITgFBOzxnR0p4OkFQYzj -aq8yhWu2s919PoctDjCFYP/qyGOMRD+NSsuSVGS+L68QDuu9FZYe10uWkexlGTek -P6XIYUeQPo0SOGfxd1w1LwnnZ06R1hTM6yvzlnZUa8WzBH7KlQc545xi1ZIXI4YB -VXohsNjGgBZuII25Gn+rH5PPEuRQiCuwvjc18kmzY1s2+ooUddndXaUuSKvh3yxf -Aze9ZYStkMKUFbKBgny7SYseNJJitzeMAviwzpZbG68uzcLyrHXCC0ZIY3fh2Pyv -za5rLGX+tsO+Rxx9re2XANHCylaPiQEprnYmIg+dLxIqJZ6XAwuGw1jJ5LqaZ8Ja -7u0bjDzDm8QmFK0dAgP4gjA47c+FbVY72xwR9eueHgjXf91vTQgtv0aBLFDhilaP -TLtrErUapwmI/THsgKGxJIir0IwN2Cb9FNhUGxacTyKv9iMAPx+a8dcoYj2dpmkF -XRbbAtIhiQXAH32Yq+MD6cXSNBF83E39Hjh5xvMHj/nfPedul6zYO9u23mNZ/xyb -89MlJ3PjqI3W2u+m6rhu2uiUPDs0sj2Ax8u680zD1jURe48Fibg3d9sCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/probox b/hosts/probox deleted file mode 100644 index 87a8d5b..0000000 --- a/hosts/probox +++ /dev/null @@ -1,21 +0,0 @@ -# probox -# root@probox -Address = probox.historiador.nom.es -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.132/32 -Subnet = 2001:1291:200:83ab:c846:45b6:9475:9ec2/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEArgAhSeA9gyj1Ek0x7yIaunGFjfcztb4ExB5QT6+emaoI+CkpZfqt -PE9cMvt8AhI9YYrgUmUj9iXyIFy3Te+A+Hxa4NcVidtSmzDBDG8g9k5QnIDV4POM -NAT3YjFBovjPtWSPSZ9r622NpqTgbldbh1rlm0hXknrNtWfEC0KlWhwoHlrw4WJv -pXBPNqi+p1v9Z78J+jM1FOowUiWVa0Xjjm6GxuC7CaQRdgspPunumwVN4NoCTy81 -RInlLu6IgFA2oVh8K6Qz8gJGtIQ0TLHIWXmMBaIZrKhkW1XGVuRbXQ1hzf8KeULF -SBMnOaC9uBHV0sFTnc5lZPdN/UYxYowPP5n2wkuGRH/Dg8RcW4cz7XSfSHuiS2Dg -HcdYwAICKCR7Cvq3gQARsNV4dLnirifx0O6Qq4cRE4kYUrPL7Ga0VRnI9fuGuLBh -pTC9772Ewdhj3eanWUTzQ/oGOy1KJBpo036LmGU6ju2FxHsHEIna5nlrKKpDX9lG -4k87qWhpMMLJySeMqn49jdjs/nONHcvSt8kpS5+BvPqhPEEpChIN6NyIrmVf/Prw -64S1OeWHAzA4C4OhUF5JBzJugjd4Rg2geIx1O01JjpBiBNfUsBSodebhNpArYpKl -rDRymzfyv0x/tjWmg7RNcRV8os4F+M6Y8KGf2eaRx5agy5Q/AuCBC5kCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/projo1 b/hosts/projo1 deleted file mode 100644 index 9a2ed45..0000000 --- a/hosts/projo1 +++ /dev/null @@ -1,20 +0,0 @@ -# projo1 -# otharwa -Address = work.navebinario.com -Port = 655 -Subnet = 192.168.9.204/32 -Subnet = 2001:1291:200:83ab:ac6e:4339:a281:a36c/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAuwqTze4kiDSnTTn8EpCUkgQ7/Lvu6AAz436j6yWxFcvLv0I1vYXv -QHUYnLpJ6ZUdwAQS7hEsrHAR/Orln1WwQDpurK2bf452jfQwx7RVxiQPho66Tv04 -lYvPKty/jFFhjrhg8+5A+b9bF+z//GuuK2/rzsaiKqSAM4IVMqR/6CZQn45DbZQL -MDuZKLoF14Hc3E3+XnjVbL/RJpO9lLDuouWl/LfES72XXY7XenHGAafV6k1eP37z -FJyO+dcuTVTWP8OTNFdR59HWMHshhqyL6h7ALA6tvJHNvDhmZiXkwoyer0kRe6+5 -9Z320jH25PBsZ0TsOF+ojvXeca0ibpwwZJpgfGWKxbYij8pGff0lx78OY8THeMN8 -iOuTRjL1ODhlwFh/4G3AbjUYNUM6dBJ8H5FKQ9oc8lCgHi+eVvO8eIdS8V4B3s6K -0/ht5ohUDVt0VO6kkuSg3ytzW7U6v6rLV+KTCPS+QXy1WS/2IdS6xdwMLf9J2cdp -VOMWaK24xsm1ewThViEPSbMhWpBYzDoAgtheifAiX09uvgmCKTJZtZR8J/ApSLf5 -6Pyun442lFB1Y+SgpQyR3EfM18E6tkGoeeFEHl9BaPetc4KJV6VOPe4asC9gXr30 -EwjsaDuir4vdBVo71hSJemyu/VgubGbx7MSCh/Lpw2/CsCU9RNcdjTsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/pvnoidentificado b/hosts/pvnoidentificado deleted file mode 100644 index 086b903..0000000 --- a/hosts/pvnoidentificado +++ /dev/null @@ -1,19 +0,0 @@ -# Web del proyecto LibreVPN http://librevpn.org.ar/ -# nodo pvnoidentificado -# otharwa -Address = home.navebinario.com -Subnet = 192.168.9.235/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAtuD2kvab4IiBWHdzoDuU9Yzw4bQ9/QBwMACTp04eOX5aibT0ykD2 -E239HbGRzPjEu2qG6MPLdnbMUre4wjpCvWvLD7oQupZwMmF/anqYlseJXdyDe9nE -/nE+uNq9dxtF29RSeOSe0T5fApIpVROwKQEW/bxr4Yf4e7eoLKBHdeZ+LOTPaFyK -4Gx/k9q94OB/ZfaoAaYrBCE0OvqmaK8cE02ia+TLeO4s65BZ7qtz+0GyMWowHMjG -jMrVwZraB+glTfDJyUKF30VIJRoRY9UIPL0IuI2rc2AVAUCoHsuOIrXzfGzlquKk -lusopAdzFkqgGAcnNs7wuVNCLBZ/n9FbLtVcNgnhBH4GPzjMNH0jNgHQ4P0HPJu1 -4aVWFkemdUhtZOxYxmZIuFFKG9jS3FBnwkmJCH63VzmumkCxjJhwbWzt4QECJsOR -ukT12bRbDAtzHDSg5VHLdf5/F7GyRp7axhZLj/Hh0G4XNxghib1zpjWEv23GE7Mu -7ZHulUkO1OWJ5b1GGchhM9Qbc1xTPTT0kqwyV27j8xrYJMa/G/6XKdCVg6s0c/NH -eeoevDEHnCe6/43eoYzh1C5UQpbwX+09WnF9tS8K+tkX9FkBuj7yktwL2aLO+8Cq -uWFzXHbregKgFjUUIGj64viaAygmVH1/vfJXkCyB0X1pbKilZi1JTXMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/raspberry_pi b/hosts/raspberry_pi deleted file mode 100644 index e0603a8..0000000 --- a/hosts/raspberry_pi +++ /dev/null @@ -1,21 +0,0 @@ -# raspberry_pi -# root@raspberry-pi -IndirectData = yes -Port = 20057 -LocalDiscovery = yes -Subnet = 192.168.9.67/32 -Subnet = 2001:1291:200:83ab:dc9d:547d:d064:3fa6/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1OUpWl5CD+HUvWTzcynU+ax5rP1asMspDgXg1wnaX/HoSYbXzhPe -jIWKUTHNuubGGihbIcpVJt56L11Z4i/Orgzl5DhwdVjDBYP36BVWDGG6dvj6Ex9Y -hThgsb9z6Sbm5HgSjYnyYCGadGAqH6e17+TqZk6zn1ng4OboDaTPjSuVSMOJ+Ku3 -0EbKWxTyB9D8HxWhddnU5sLXjNJ7lLXhw9WNOk7xCOoCc38KtYMSMlLaKFtbwNRq -/pRbyEmcSfyDYv/nEkfWWG3mZk490bIwcgZeolSiH54J5AQ+QwcxSO7yNUxMmz33 -FnRqQIKuOCtz8VI/PO92p2BZ0noNaZKJlACsEvrb6PNrGLyUNT52hyX1FxHVlR97 -GqWuCsflWvjxLiXxq89Z0ObxoEcAlCF4h3auWUnB5hjIL8hxhyJh984nQb8a9tmj -HgndAm5AwsD642enpET42sFFMEnkTDfHVWW7TckqfQn2V0x6ttvPXBjvv3Go2Qti -y/sXp7DnjlRRfiUgoxyZnl0fcaGhJCq2+dPeyq25lVrzn8Lp8s5bNGGCuvSQR7bO -uYYClSQjk4G08WfHQ5peaxdS0J1PEiaZRXDl+CdEAfrdSBWQ6J0JxkVCHxiQIvZN -wqkxzYBny2s01NM60JSIaX4eJObQ0KWbbO6AyW/c3oFi1RFyKajoDl0CAwEAAQ== ------END RSA PUBLIC KEY----- \ No newline at end of file diff --git a/hosts/rasputin b/hosts/rasputin deleted file mode 100644 index f9af226..0000000 --- a/hosts/rasputin +++ /dev/null @@ -1,10 +0,0 @@ -Subnet = 192.168.9.32/32 -Address = bazza.com.ar ------BEGIN RSA PUBLIC KEY----- -MIIBCgKCAQEAyIBieH8RcJUxJQ2nbBb6RhA4ZShWFVdf8rXE19+iO0zsDZ3ggvS6 -fM6bbJSGegOoIF38RmETfxeJzEW4KJEwa7sewT8r74dDuqq56p+zPV/JTM7njKvz -fhXLpQcnl+p1A3fLzvG73lyQVOgvk3QGTBUOUqRRVJG8nu5TTqQLRRL0gnvrm/Rn -8vTaE6r3GX8/Dq61fVEPEoBKm/zgPrPhzRq/OdOHmWjKH4jj/Jm/F8LrjQwdiXVG -Mzamrm+SbXdaCnFPzz+5q0HmgttveGsgHU7TYfC3YKd+vlmxEaxJUtcT6PFgx88n -6R3R8/btXVRQ5aGoYOeC3ArMGLYV4PPcbwIDAQAB ------END RSA PUBLIC KEY----- diff --git a/hosts/redondo b/hosts/redondo deleted file mode 100644 index 8941049..0000000 --- a/hosts/redondo +++ /dev/null @@ -1,21 +0,0 @@ -# redondo -# root@redondo -IndirectData = yes -Port = 25227 -LocalDiscovery = yes -Subnet = 192.168.9.80/32 -Subnet = 2001:1291:200:83ab:2ca6:78eb:48d0:9b37/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAygvUE9Oa+WnL3skBbWUdpw8XV4+BnJH8zxZCkAulqsFi77y01qzY -FsnBJXB8UwyJwt0+bP2arRbfI51tzLSGhb75HFhkIG/LUzpK6uFdbAxMmkmVZlzp -x55NsN0RkYE0YQGBUgx7Ne6YcHE1o8i9mvcb1NpPEPmk39+QrPyiH1iBkJnN6k4k -QohrFsg76LIGIJ1XIx/lk7WlRmbXr4OpLjBwZi5jmgCbpPHvcoionXcizoOHix9v -UneAIwMAMxYb8rYAyMz4cImRAvmuxDFCzlqU77kZp3M8dqlAmquN3VPFBVBCsKxs -FDubqM3nm+8OT4SQJPNXkfxmzWmj1QIGnz3DvbPBGaUzmdQmhcKgM2eGcz6Xd6/G -NoCH8xIQvfNkbojdNwvjQYI/gqIeZiMs3r+O5XnNk6nOMTgUs6oqO5VKRMoL6eUP -uIIbrSZjMLffowxGx/ghyvPbsQsGcYWiPgiq6StaFsvgp47PWHMEs+oRCa+DyKur -OY+cg31tQrDnuwIruO3NtqrVeF8xUaBre4zc6Bg20Y4vR0HB/Bi1FpEHlZ7M/llO -wqx9ZLuXmALE246XFMe6d5CAQxi+a7zFXlDWwykETk+jXPHcXCDPZ/zWyzSdJNbU -rAYrLzmZ5Bk68hnzWbDm2gv1+TNjij1m1zV20luhN+sxHQB18Cw7a4UCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/relogi b/hosts/relogi deleted file mode 100644 index 2d9cdef..0000000 --- a/hosts/relogi +++ /dev/null @@ -1,19 +0,0 @@ -# relogi -# Fernando Mumbach -Port = 655 -Subnet = 192.168.9.41/32 -Subnet = 2001:1291:200:83ab:34bd:82bf:81c4:79fc/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAzMKpGG5X/UJ/N5WmuXjYQL9pexoib00Ot6eUyb13FPGliA7LRMhc -hLvAiKEIv8xzoPKKO45DGmXH5AoVugB/kyWWBgzh2rJnAJxRBt8a66H+fQ8ZsIWj -spVR0eeCdwr4vFIJuB6nvFyUz5lahYZQBeSSEjJc8cWmCXUe/k4Ph/x8LG0mF19S -2CZ6qxQYoSO8I50iYR2f4GqhIVXru8Px8gKL99X7tujdOunFBLb2xru1evgBm8Y7 -SsSCdnO5D7ygQxs4aY+oPC0qTokzPD7L1ThLq30otmxYDu9D60fjdyqHzn1yaIst -l5Zk2T4MEoCzAXidCjc4bFUtHFqU1ToPIrzELfGXtVVXB4gIZkFk1nohO5Cj75aZ -7KVliXTSzx8OqVyywTPdRABMx1kru5nna0TrqnOizSo1+MEPE5WUPCbM8mr4TJH7 -ayy2q9sO26JEZPivAvb0EsFuuWUm0P8t+QOyGhX/J6XnHJ99XuUYgtIQxGya9aCU -QUglFsyudb2hBrSh8Sabw572ku1lnUD1sGfPFjRKn1liKRFhtezk90YTQaRrPpjg -uoYzATWOXXghBG2SNGMPjB1j/qDMeA2A5rtz97wggYa6HN/y9NuqXl3o82ga2UgJ -any1CUW384pPvsAt3TG9o8xpu1RCY0SPbbQxCL3yhwuMoQwuBhaxg8cCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/restaurador b/hosts/restaurador deleted file mode 100644 index edd48cd..0000000 --- a/hosts/restaurador +++ /dev/null @@ -1,20 +0,0 @@ -# restaurador -# Rino Rondan -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.110/32 -Subnet = 2001:1291:200:83ab:ccf0:4b9b:9802:4b58/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAyemRD5NUWedMv1g/fqdwuZgeJ1jb7jVOJu86Ub/bk9hHM19AWzND -HGHpz57pZ73MsZjwWB+r0jdrrrQ7YNcEGy/FxMHVsLqt27+zLSyKod87kIi8xmPQ -iojC6Zfzhine4RhwCvfS+QGzSBRyEC6NnUdlgeOZgyYmaxfp2OvE1UXAxoe6ewoo -+/HV9kX0nNP8jtOTN6WSPtbtQUarvXO9b4VDslqRdOfxZqs8lyjFd2ZH1ia8j/45 -CRJ41SdD/9tAwZGsumVjcdAyFnyVpPLjv2qQzT8fXoSXvCwh2Fu02Xq35PsMLhwQ -y5qDseBTZmS/6tlOOesqbjFJyH1DjikHLK1LLnBDbFNG6VKTC1/u4jdwjqzF1/RI -OUz3kYPZ3QzYDMtnY/H/Dk9REcmptX64T7uCDQWOMA5sRyr/RrxJBmCecCVZqX+p -WNp2yx7yliYIrMuVpfk9WwVTGZMYnmichSZVnFF6sBCmHa6PF680oARGQ7EN1c// -bgfcfzxLo7Qxo4fgKX2wrzU6uWZpseRQjbytfAujH+iJAiA1SmoA6RwtylH/kInf -8tZLN3yPl1cgAzfie8rp0K7RmH76VvDrm9b9V7alYOmDLlQQ7dpr4ipOtRnnTOzD -fPnGyTRhmNgj2562+B+M+iK0UqYDg9aDmh26zpcVmGGYkx9a3pCatM0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/retro b/hosts/retro deleted file mode 100644 index 2163033..0000000 --- a/hosts/retro +++ /dev/null @@ -1,17 +0,0 @@ -# hellekin -Address = retro.hopto.org -Subnet = 192.168.9.127/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA4w+AsBTf66IEepuHVLBnCtghPrbbUnN3Ns5ex/CaZfskUuPoDXlM -OQVU7Jf5ViD4BCoxDWyeoRjTBaHcsitRzVF3N6sfeuEJ9lyKd4G5y8CRyXSPOFqY -g1AIF2xOmAUExyAkrFu0FdnUiKrkjvR+bJvV5j1L/i1BU7zGEvgRxgyk+9OU6jUT -f86GoOD8wLokvQ3JF3UhwmKYWXA1nFcU5GCZrTdo9cmHKZeliP71DWRyehgnv95u -nfGh1rROU1GEJcjkPAEiBzf1qQcok54czKPZO5tJlFb6OES1yVcuxy2I3T1Xebsr -tb+ZAW0CM770N7gQKQ2vIIUW0RcAeS0UKGaL5CLphUHIGYU8OM7/LOrPbGl3qvF8 -7JRiHlhTtdkHGhR/9NMZRKXptvHrOjvniPTvppDcNP+MaGE7KxjHkoXBJI1aYg5f -7k51Kpv+Tviivd18wQKzvVHFxNU5eKUhvXhJvQF/XYiGrqSVKgSbgp4BBlFTfprU -I4bWrm3BAJsSlQHyKC+6D6ZNzjmh6YxpncZ551YsqIpYEXgEQ5NqumUQfzOKnMSP -2DGyf8mW9JRGxL4zf6wJsX4mAyoo9fAyZOD8SGajtj8OrK0myFF5eK/b7F37mDVK -18fR2TgVSP71uubSAsQRU7YWaEdaYN/Y+zze5NsSvRe40D1TJAz7hC0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/rigel b/hosts/rigel deleted file mode 100644 index b70724e..0000000 --- a/hosts/rigel +++ /dev/null @@ -1,15 +0,0 @@ -Address = shider.no-ip.org -Subnet = 192.168.9.178/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAuTnFytdlOvInm3FaAbBAw+9TxDTW9+JmYJ1I4v3Uuxvm1P58KPA2 -uMrzq/Y1gBtr2USDFfnVpKGYZMJU07+X1AHRv22LNHjx7NZNhJM2OWZv8MerBnL+ -2QMBHh7ARRFtiPNgza+GhcrEtO3Zw8bNu20cpGiuyWOfka8N7xeLQnmwMGnSJTbB -ZUDE21pvBsfFeUz5/sHzO8nzKpIfZPXp1fX8WktUs7HZJrwKO/9rHlNb/h5Od8NX -x8EAV2neSq2DumkOwQ2Ykxvh9m5U/ftOcV5PpnPg3LvSKwvBM1uET8VC7n1z6Uls -AcP21PSxnEZ218A7mEqh+Dcf9wlDLKeoaZDAA79A9UK7n5k6fUgREW6p7+Lpap71 -Uz9SzI+3tBPoykDeH1IP3VTRZw97pLIun+IB8/WUTugRHHRFTyObdIFND4rKAI1F -4K6YGuF+C4jFFnei2IrAkW0IxeR8ou9IQvoj2/gfXnmxupksEo1dGubmaTpmzB9Z -xqlnNHXkQVpEAy/8vKqygWRRCqD+wTLFntLOh1wNTZ1MW/tCVTIG94XOLpgSNnvj -0JdabF4J/Au4CgXM4pvmMgSHerbuTBVzsrZWqgl42TxeLPTavzHrcZcrL5pNHCg4 -plWYtLQl5jGYU2vsTxxKP20iM8IE/z3CL81fVba6W2wc2DglXutERqECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/robotica b/hosts/robotica deleted file mode 100644 index 5b9d349..0000000 --- a/hosts/robotica +++ /dev/null @@ -1,16 +0,0 @@ -# robotica.local -Address = eduardo.bazza.com.ar -Subnet = 192.168.9.31/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA12YB1FrAmxy/r3gh/kpR4bhvtMeLK8qTTZ3DqY6K1zQYWjVahODY -qogpUhno+LmJcemdbsZLvqd1/2dumUvBrahvDVWGXo3vMp8UH0rXQG2dGms/+Awm -SxCfu8jNdpI4OLTm/T0A0kPPfGNVsggCr19TQ+XimsCe/YBG4pZ5Bp5UqUuY7lB+ -kZc8duYwA4bCnOqT6GcVwuxocv+nrGO0xzmXwXFOq+SkjOVv1kta3hF5vDntPTuT -MXxgmNf4Bw+1Ej83QKtZMt3szAqOVL+YXCCjEHSXyCrAfxtMpOLHJF4dxGfQJw4+ -D0Ja4Lnwseob9/PFbetZkl6Pd84S94mW9vd0VvhyzLG8p2YN7ZKp2xIfjzoABPb0 -eB7EPg9YXLvN/ZT/EKQNIpxWC2AlJa/njp009ek0mLvsMBu2nYUVElyIIbPU/Efq -S5LBRcJEjhc3KiTElw8xhKrMK6NyZcJBSknZmB9riBK++k6z1jL4mq3Y6ia+HI86 -PXmKsXXeMZ4vFvoH3fEXKyIwzJokLC6FHJIOpZh7LlUj/NkKBuKbjqN7K3kyaWhT -Gyk6to1GDfJP3twaPQIIvr/u0cntqSHBLgiMPTsdu81cFbmSjvqEJsBYqPzGlH3f -IyiabB6tuP2lL0YgiDMT3pdLSRKgu0G5kh+b5TT4ZBZUoAhqobqD7kkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/scarlet b/hosts/scarlet deleted file mode 100644 index e298ecd..0000000 --- a/hosts/scarlet +++ /dev/null @@ -1,16 +0,0 @@ -# Fernando Toledo -Address = bbs.docksud.com.ar -Subnet = 192.168.9.161/32 ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEArmlnq96oX72SpjQ7n/VpNSzP3J+HJmY/yE3Gf2fnbnlBy2rrjtkH -b1oczvdpMmkIyflFcesnF0LMyXXCUfK5dGg68l1MZ0f2qHuM6C3GShhnAzs1MWNH -e81UiRNfbdDkE0Xbu0k5pnp+L1v5SuJL3ATCGjHKuFEHExDIHxPxbhlQWvrF+FDr -Vc4d+9tr5t4zUqPg2Ck53/ml35/xqWzkPAWmThx5VGbA5SoVsOuoQN4GvOiMDuIM -vd1DeM6nIMMzIKf8sgyN7SjhQzkTcH0ZxA9xX1Q5m15pvL5GSRG6be/PLfoQa17e -f+KCA6FZwbAm2Q/rprnkXD4aQ2v9C82KaMzXQdcVBC8nWaIgbY2Hb3mW+5yYCnAW -SFdInvYbzUXfSnKd2QCpJgANUM8L8PVELHKgkmCbz8cIe/M2qfNuxBuWKEFUJyH2 -ZxjGAT+Hqv/6TDw7NWqjREQ4yHDLzxTqBN2sl8pqimmS1o/qkfYDgDHi4LgdU134 -YtkIKshYBxGLQkBdJ+NE083YS3AwENQKX68B9WhRdJoku7eF10bf8YVHCXCcU4tu -jm14DuSCZUUVttqLAHTUAiomtk10FgiuWHnbyFrK5+nrIESGi7/kVVRJE8MAJGDd -76vn5sQ/Gw0osVwqfQG2++22BSiCV16Dk5RIMDz5wPo0LgBQR/5JQv0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/sh4r3m4n b/hosts/sh4r3m4n deleted file mode 100644 index 5713103..0000000 --- a/hosts/sh4r3m4n +++ /dev/null @@ -1,20 +0,0 @@ -# Matías Lang -# Responde a criptonauta.local -Subnet = 192.168.9.13/32 -Subnet = 2001:1291:200:83ab:145c:90a3:6351:1204/128 -Address = matiaslang.me -Port = 656 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1rTIv1lhkueT0t7Xo96spytRSZuDO11kQuQChkei5xZgxDLKVQlJ -WtTCWmlCHhVvIKFzLx5YnUk+p6OwiZPiHpvra57jLU6qF5lqgNqo7SVkZ1H/1aER -kAZZpoLxof4JA2wmfYCj92MGQ7aBJl2/aj8jbQzyNyvAIgeqVpQP3UOMeQaP1VER -xF58K7OvBENBS8Bhx794IVNEsKCzoYGWeLsZ6uqbVGdk/F0Pe4Wa/k6BwA2eOTnj -hl7bbwpVSVNpRO9la8ldLOfZ8If6kMqyxWYroHf0d5xAB10spK2ixVOmJMb9vAkZ -XoQTvSnqH+600h0Bdk2H8rlON4bi4lzupSJZg8vBmADNiOcqj3vxFHrKwJnm67z0 -i6TzxA7PivGracH0/ktxB+yPjcBKEBvDaznCzq05oM2Rh+zbncJDdaAewBhD6Q/F -kujB8QX+GLMN6k/VUBO+sbESLdF+TOffiUoMufvwTybaF5UsPYfT73mszSL7fOkU -J/az9yM2rK9VfzN0b5y5+hmGATM5n1nbQfpb5ynL4FG6p6i82sJAjgzRx4g6KJ4u -SwZIZ0XaY393nEdo2+jY7Sytjt2FD+2VaU0zOBDhjgq6S7KXDXJOulRRkT0urqMn -C/pN0WAbKxiO9N4pvcn7naxYdDQrLU+7Sb2VvvTCy712rPQ5VjPH8pcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/smeagol b/hosts/smeagol deleted file mode 100644 index 74aaf39..0000000 --- a/hosts/smeagol +++ /dev/null @@ -1,16 +0,0 @@ -Address = www.deagol.com.ar -Subnet = 192.168.9.48/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAt0lnKBKucZBszS+GERotaa7fXqV17+R7VhSUbi+8S9FSJs5wJEa0 -NNJxxQBqS3lgVLqZScJ3p3BZ2Wy5d9QMKIa/2SL7tKUL5wVVGNeZgczW6EUempWF -2ZTM+gAFB7qCqLWnnkiuuiw6ghziSCOztJubBbK77iTXb6dF2Te45eDTw3nDO35Q -xlxZO2oG2dAQJUDOnodMHqs6HvPQb8mCcZhdRhNZ/vLPMYV5FlVs0ZMxEcPJKu4o -LO+gV5AEE/95lBLr8nGVWgy9iN7tu/TWKU4CzWKnKilx9NJFZVEYf3WXXEVxVhPx -iwUwUv8SM8ROyvEoHZvCCC+bd7FFHU2lcLJ/Y+mUEGgp85WPi6lGFJaPQudBrycH -CywM2TpXI5hP0Il66rqW8UFm1KFGToC8j2s5VLNyAU78msI4fi25NLvx8vqFOTR9 -E45u2v5LgFtLHO3jXv6n2GOzqOVHUwgkkCrWPnyMFI0B6XkR7SwaknQtmoFKUsI4 -54HAQVd2jTPmhDJ2cg2fTxMcZVPXXl9T1PgxhmOr0gzHCH624hn4go034A+JuMfL -lOtpV5UTjQ/l/ntMfHcVy3PtSbhnl8++puWVcGIfG4D7hpXidlsiaUMAgvCIyGLv -5iOhP4rnAAShOubve916bfv3WUfxv8ex9paBnwGeBt43IjYept7XDS0CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/spiria b/hosts/spiria deleted file mode 100644 index 3fbbe5e..0000000 --- a/hosts/spiria +++ /dev/null @@ -1,20 +0,0 @@ -# spiria -IndirectData = yes -Port = 21124 -LocalDiscovery = yes -Subnet = 192.168.9.244/32 -Subnet = 2001:1291:200:83ab:d825:343a:f15f:86e9/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA5I3ygAoQqCN/2ROdRdcQZugkv7j/I7gjolThg0ptDBnSayqTWt+5 -hSwwa7H1bgo3MW8iiPzSaoqH1iOffiWZ6gSQeRVhe4qOD5ewqhVZn0ifTtfKGTx7 -L3unBh4Jt3vzlJ2KBXJDGqtvl53BffVJEIrVyYuBVCez5j5lfC7hWRyuyDJafdSb -gD3RmnIXl15TKZSu6f2wCE2VdEuxUEDcGfz3vb8MfoHbS7N75sLNaWocqnRY7f0R -fTaTCwxXl3cIcCjPzc3rggH2QFO5/IBQ4ti/PvbTYLbUh5LBZc8haa8XmFQNnWWS -4YIi5GxypBximTDGNbD5CDMvJ/kLYlqc9u0UzDgajgxJM8c41TZNgA4ywW2mrGTw -uCZeCN5A5B/ywfgb1K9qQLGxIPbFDfiaTml5mefbEo3raUJRRqvIv71aWykfS/A6 -QYOBNihX6/lRUWr7UFlmeyWaf/3HltXUPdNKfhigjrk+gt03JwhwmgE2WUqxKPES -mTgE56vgzM9O+/C/Zn6ZBHG1gi6YSP9yjy7RLy8WVznqdmzu6RyduCveHs+lvTHw -GkwW7Pr0dJ3r3+SgU67xb0hIzD/v7U3evhTBfkhrklgLdJ6FxU1hSiTJp66XhqyF -Mf73PT8Abtz/A2b3MOmxFHxGnHSzeCI7vqiXSCXADFosb7e8WL/TsQMCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/susa b/hosts/susa deleted file mode 100644 index f63bffc..0000000 --- a/hosts/susa +++ /dev/null @@ -1,18 +0,0 @@ -Address = susa.local - -Subnet = 192.168.9.183/32 -Subnet = 2001:1291:200:83ab:f877:3997:2834:f8cc/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAzDrmhbFKz+DoAYQVCbQZFy7GIr8stbBuc97mMsG4ac3bLV+1U2Vr -hXCb2uuvajrkt7PpU+jcUMr4JAza4rW0VyBkuXuhrnvrmU/+gOVqEyD313nLRaQr -EfCKNq/PItyumRgusv0XDsSL+Stsi4nbSrCHwP/NmU8bqLbUK6cwFW64XI8cYG9w -FoCWEHIsOwUL5OxNrIM6IPEP89ztfVOtS2qsjRULfz3xOTGKhRcFui9pZtOq5sgY -rpQ2PaEbgMcAl1pJ1dCQXrL5UIlfe6Dp0yJXwmpQklQrg+0eYS0LzZkEX7XeYZie -BIfQDXPjxPUccQXAwKEjknHri0i2E+yjTBOgip74m0PsgREDBGYpId+V2K4tdxG9 -7Tzi4j4XEdladMNiidGVzxgaDtfuirEnffLPFdRtrABh8fo2Cy65lYuMLO7Q2O5C -qmmLf3SYskK4i8dyC3kOuOfU3qSzHJV02gfLgrla2zUQ9/t8FQ7q2HtqbL1U2hNm -sSIe1hfPkj2W4BtW8uoFXNx1EFYxAJwOsK6/8+vvCTgg5sZMsIeAZIFUDGsnGsef -78sqj7eGRgsACsdavAubiDDL2yP5liYvG/DUk9e054n3QRdyEG5qpOLTSn/U8AAh -c7Xmuau6QXYEPM1PlaIIFDnK4YLTGEJ4uoRVl7iceV7xyzs6lNwo8FkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/tardis b/hosts/tardis deleted file mode 100644 index a29e4c8..0000000 --- a/hosts/tardis +++ /dev/null @@ -1,16 +0,0 @@ -Address = 200.114.177.171 -Subnet = 192.168.9.158/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAyGG8vBzP17f6LVDul1ASAulTbr86pll1j72jIlW1cFcuibDnyuZt -7je6jOGG0WI9q8qCHQby61Owe6ZCM9/YCfuITbJ/YYSblyXkm2mzqhXilbvtD2ni -ejQZXHG7Tdwh15yUbCow19es+F4jD0BqwGHwCIjfEqZ+N4o0sU1/826c8ia7WuIj -GTv69ANlBkeGs1k62mx9Sldos9iud4f7QQKtaQtdY7O/cwNClHMcw9QuZF5lOPWS -VlklK4ugaR0ceGCQW4Oq1qtYOLE2ymyqxeaAf4S1BRhQIr07qzBmt9TdDG5nKzhB -7b1KetNybi0zPxYb6vN49hajMPPJm41oJYfSRsfDg/8WPVRtjC+XeX3o34Sd7MhC -5Iwabbxl0nB/oSeMsQVWwSklvnreDNIuN6sAI8VKVqA6BQ7SunTN7xhFdMVy0E/F -dMv7w3nG2+PniCB7iAXggjsnXBGcQVQRwAcLgW04zkArajxgCXg+RZuvGWlot5ZY -WAKCJt0T1eURskRv8vUum1dCB/3oY5nNhZNcsBZHL5c4gRGcS/oin468e8OAw92L -7Hpmt8Z6a4Jz35C7+tVIbV3IR0AhRlWVQj9OkW0LVgZSCrKN878fjG49Abz+GhPY -xX4n0FIPCzdK2FGmBjms2mPp/4HVt45IWnbJOWy37+N+WLzqMsT0VTECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/tes b/hosts/tes deleted file mode 100644 index d8071af..0000000 --- a/hosts/tes +++ /dev/null @@ -1,21 +0,0 @@ -# tes -# Te -IndirectData = yes -Port = 24960 -LocalDiscovery = yes -Subnet = 192.168.9.72/32 -Subnet = 2001:1291:200:83ab:f808:d90c:515b:1126/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA9Nq6O9TKdmyIVTru1oFS8Fuct7/7MGaMn6bE1EjkohNCnLD5mK52 -KrhChllR/DqYXw3budfg6km+oYixroXY7AGC2YPBsufYfVtA3WXc9DhJMa9JOmQv -ffvfZFzGS/KSWoFZF5WnoqS6zIPn9S9L0MkR5RwlY7DPiAt+vmIxVjHuPu2sx+zc -UTYD92EYpEViplMwEL3YNAoDTdQNQtqOqHpeyASr7UI11S41HJCcNn3Hx27LzRKa -CySCfFZKPHG6lp4ezd/hfArno1YSNJ/J7S80xaCADWp2dmUn79QaoSiVv/PRGoOJ -OjTyCPuB1/A7i9D5vSUPB0epPnFC7AZvEoIQ/Wc7rhj2TooMQo/5enf1jdMir9Nr -qP4PoRkWr0GIssgvoVUu9hD8DXT13Nt8rfmGysOUXi03NE4mNgGKS6C45L0pypyZ -uK0Y/qVM7+th8D2fdV5cpCOSjfQHNz5OClTg5ApR4b1kES/5MpTZNYLsn3aKRTE5 -/Piehn9YHGEl7ld+dnxBKwa1lgNqwn6EHbXTd2Piyg2zwpAKyFgHH4D47ginxKNS -Jr3Me/NgknCGGnYK0k0HTs0u013S38D8rnVkmJqwiaARLku6gk2wLoUT2z7KZIkg -QhH0w1n8O0rBKst9htFPLCSK1tndxZeghDpIp737TO/aY4l3Vd4OoOECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/tesla b/hosts/tesla deleted file mode 100644 index 731f100..0000000 --- a/hosts/tesla +++ /dev/null @@ -1,18 +0,0 @@ -# tesla -Subnet = 192.168.9.185/32 -Subnet = 2001:1291:200:83ab:a03c:cff3:24eb:a13b/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAybCU2eM+4R0IookS/riJkrTQmCh0HIMRWSEbmk3BECztWzOIvjH7 -WJwIxqbh2GpSq/0pmcQpWeWbYftB/s7sBOzHw4ashTyP4X15u8e+nia7m1/xgef+ -DCv/22Jl21MNpsEZR3kRNzVT2qaCAhXXPvsCT2XfpqyYwW0DU6Cozl5Y1NG16qX5 -Ra4QdLzXAmDdTC5Jtr/XJeSkZhI25CcEncfMNUUCumE3cwntrsfFHzE29aVV/AUS -Pkzb8wfFfggh+jyOJjZoVDEykPozZvY+VfhlVIUKBQMiGxYQhTkvqOtkpTQQW867 -gMsVt6vOiB+eVNkIdQ/IO9NMBk04XgKf8MDwLAM+pvyYhxvHxzXKCeag/ZFEjyY1 -NhZiHbiEojIgy1rRJc0nyAsqHbHMJ/cbXLVcU1bee8WsKihjNBcugf6FMsv79beI -7v6SI3pPROpoatLO4RSRPXTZGGXFHYUG6clZmiHIl8bAQMDyzlz4ACnlidEPHN4A -8ucEVXbxVqb0X0h743YQoB8DT3V1XEHuDMuj//LXpkbleQLe8X1iOdt0ipkcW+Y2 -domQcOIBgFTB5fShMDiCufxqbda+znlnRF8L34D3Rz3OuCsoBe/3MziJRoRkkMh6 -kpf36P3CbzmeXIFh89v2zRh7Md9+x9aPjo25+QdoocwJ+Qq2VzedpZUCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/thecourtshiproomwhereallthedreamscometrue b/hosts/thecourtshiproomwhereallthedreamscometrue deleted file mode 100644 index abffd10..0000000 --- a/hosts/thecourtshiproomwhereallthedreamscometrue +++ /dev/null @@ -1,22 +0,0 @@ -# thecourtshiproomwhereallthedreamscometrue -# root@Computer -IndirectData = yes -Port = 21522 -LocalDiscovery = yes -Subnet = 192.168.9.231/32 -Subnet = 2001:1291:200:83ab:8897:5955:fa44:232a/128 -Address = thecourtshiproomwhereallthedreamscometrue.com.ar - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA6OoImMaVXjFQZhpz4TruEgfOhalqRrPiveyRkR4b1boJ4acLV3Ud -I50FEblKNZ8mViK991Nh/7p61pOg3A0pt7EtGdlIBlB3f9lwbIPfS0Owu01sy0G7 -xZy40tpv0O30/v2+pO1imuO57mDQW8ixxQ9nExqtco9Qg+voUC07pvT8gDmIZRJU -/Kcd8WJ4P8hVN/Y5wLV84JPZ+OFKaNpkWylqZBSXsSlH4EZKUMkwQub/XOgZTeTe -jnsSn52L90wJOjxtNiw7NbyH8NKHzPYIFpJcApeSLIXDRPq7M1onrT/t9RX7ckQy -AB0beHKXbdYMgN3weerx5rrabLDTyXHbIbx0AWVn7ED8ak4kdA/bFerV1lfwKxal -Wifr6QNXZNYqBejZWBTy1N+ekV6aA0i5eIG1OewGHm/a/8MhlPhFMF79awu+h4Cg -hgaxzD48tD6pQuGg18WL36eIRghfqgXGa5K+QiO4eq7daCG14xpEjwug0k7vyMUl -gpF8Yr4s0PYTNjqBSF6DDiecGdBgDkBMD3ZJqeOVvX94euQMXG1L8U7IaFoPcUn8 -1cmq0svsCD3eRkofgMe1xkQx1B4GJ1sZ7+/1638i/CSC/aFfkNernph4FwN+bDi4 -5vSWmy569Ysvt+GPYKpp1A6/sNhwzrAYCUDKTWFpdbwlAD8dnwXju9kCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/threepwood b/hosts/threepwood deleted file mode 100644 index 88a75ca..0000000 --- a/hosts/threepwood +++ /dev/null @@ -1,19 +0,0 @@ -# fauno -Address = 5.39.12.1 -Subnet = 192.168.9.170/32 -Subnet = 2001:1291:200:83ab:98c6:70d9:93c5:32be/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA5OunOqcUfzQ8Z+XVyKDsAYRjNP9ZuF8jiJC+yDxn7NHXkx4l8XmZ -kp8IFtYmFTd2+C/meIWlwlpohVgUSJCoOJ2tKSykmvf2kNqFOVMaCsEoKx94KsVr -KfDyUhItUlpALGf2cUt5eC+vLrL/xchdcLUOCVLjfZYw/9xetQcjv/IelXZxw6B/ -Dx014iWHpcBac1Av68CJfjIo0Zff31kxbmcp2R0WPsnGD2EJEShGbSiDjUXvn97L -UaFSSYJpQW1ocqkPdgwBynm/f3cguMzclm48xKg5rb8n5iqqIMoYhYsh8psKLBu8 -wwNBaZZfqnlgEVR8Cj+mRiDaCLbFDh7y+WcFH/v3fV4hJkGZa6JEbR4UqCm7VD4t -0UWTeQ8RLPmzn+6ntuO23wHVv9xh1uQ5NWy4QHM8SxWs9K0bh62FpY1ckLSpXl8g -t1rOWeYNHqECFixx313glLnaVM4ukFWI+dBIlYTNgl6JRwREbjMtb8GxRmP37wlE -AfbhW5Kb/3gO/rcM3cMtV8mJGLsv1b+tVuLdITS38S0qy8gkQBx/BcxP9LShSK04 -c4N/N3jSf8f9ajU3WifBuoFQGNObI2fE9fJF3t+vU+e6JMNpirdhfRMtaQ4J/lhB -tPvJ73YNT+X5zqUPz58W80RvJdDKBb3a06YUuoDFnDUOrsR/s217P/sCAwEAAQ== ------END RSA PUBLIC KEY----- - diff --git a/hosts/uchi b/hosts/uchi deleted file mode 100644 index a7d43ac..0000000 --- a/hosts/uchi +++ /dev/null @@ -1,17 +0,0 @@ -Subnet = 192.168.9.66/32 - -Subnet = 2001:1291:200:83ab:54da:8514:bc20:e532/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAqQrKMnrLRYB6P+axxOtsgGnZEgw9pQTWy5xSzk7//wK1nfXHPBdA -P7uAWPXUmXi/RnYVr8cDyILIRS6NRK9AtnnlAvwo6aD5YnKH1h2h1gTQpdRv8LeS -0nqsk1f/Ey3JZN2wd/mnmX+/7YU9QTO0De+BQpEJZno2gU3lwKkmh4Ns3GM3BAuc -ul3gq411Wu+wSLE7E49ZEAPPr4xCGz04uvR/R3XkUkcUOKwPr/WUbpqERy8SCUoQ -ZvNsT8ZtgB/xa7XeesKE3JiULgn6prOI0ed1Cgj5w2NePO1YqXaQ7RydSJtfT7Ro -8gquQQYX6j6HP/2tJJ3poGp7CBYOXPIl7mxZc0QyExyrzunKPf9KkrXeHRCnHdlq -bA7VWY+LzUCF4Jzq2CuaXMZ+JZ8gYnYvi9n0Epn2Au/QCah9bfqGGVUMOYSi7Zfp -R2h1LW5pjT8q27iT4CZ9BmuBgPncTk8VbqonuDCYMkC611kMnY1Sf9UB6wdEtU/r -HgJZPS5e+5XRWHLXKjq782l0p3pJjnzVLkRX1GzkACGXyex58U6hGKQmpAwhhwDH -llzQu5kvvCMVtjRHhZ+k0qW0Qkm4rjdupF/5ITFm3HwSbfVpmGigWehiTUFQXgH4 -Y38I7WbH6Kavxd+A1tk0o0jiDl0JC5rt3CWwdZNcWqsxvOm76kSXGCsCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/victoria b/hosts/victoria deleted file mode 100644 index d20e2f3..0000000 --- a/hosts/victoria +++ /dev/null @@ -1,20 +0,0 @@ -# victoria -# secret@victoria -Port = 655 -Subnet = 192.168.9.28/32 -Subnet = 2001:1291:200:83ab:d006:e242:5aeb:256/128 -Address = bazza.com.ar - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAvR82q/S3ItsuLIvOpMofDyNAJt9BThkS8p1dRYcfXluP7GEba5oc -8H3LlJ/qrjXE5ggtH+mp7ZGncOZdPNZyvVzaIER9uF2VD5qxM161brOX1k8E3pKv -5Vuo5p3lHSG04QFIejhjdAOyyBX5eB+hqfh1YSDcokG7zDqERCBtas8hd+ejqCJU -uLJrB6pkel1D6ZkOpa2g56qfTeDD8qAXEuAqZYqCJB6bKOVUNA/kRE3ne8leGreq -1vq/0fw6YtgnXE+HTBe/yD83l2zJmjYoHKyml247jxa+58EBUsIDEwF9yQjSzOrS -lg3kwgKjQQTG+ug3SHtE6DzTgRZrAKMhE+8AC31crpgcAb1HEnoovRweC0x6h+e+ -RCeac8C5Q8tgX0a0qlgeFK0UTgPIITWSzuDO2im0SnFeQfZU1UqjoCy6JVrTfJ7r -gGRXdiVnmrOjklb2wwty6GDfJPIvEGs4NtMEknlLdX+v2Xn2JGMchPvO6+4Bj7lW -fcOw+pAX+XVvntXeVcPfPBjA1KwUTfDO8Hzw6JNCmTo22QI/YMFkkB91UxapH1az -/GqgPzTfRbkm4ITV7gpc6XxtDDpZR3Xrq4dGhemVcZCmmRNQZLnbkdsTL/LIdjPD -oDotL515Z6mkUO/f6D+Bf/D6D22efxR5Gw7mRewFmPTHCXW+ThEGX0sCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/vodka b/hosts/vodka deleted file mode 100644 index af2d62d..0000000 --- a/hosts/vodka +++ /dev/null @@ -1,20 +0,0 @@ -# vodka -# osiux@osiux.com -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.92/32 -Subnet = 2001:1291:200:83ab:40ea:18e7:ceca:1320/128 -Address = vodka.osiux.com ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAv9JCQuQUBJpipG2pQt0CaX/pXnkJO6VpxjaihqqXFnL1o6u4/xG0 -zms8DAtDHeKN1UcIyPQnBv3T2glh08SH0ijfqdY6nQpgrUAYu7mAwKjMA7imvK50 -g8OTKVw7gohmqp8eq59eO0zoaBxw5koPwfHBpZYESJXKnMOM9JzyTvvbeOJCGvOp -P3uZwjMBWQ+2nH5L2o/cwOIYnnWq1yyr8gr3iYONmuU7vKb++wzpgo6N7f7bCuNg -oqfbsQEB6jUS2rjCNj0fUZ/Qc4RIcOZEJH/iXzgBNj89UibONM+shoimA24kMeR1 -38BFxC95qTAUtpTYIFZHwOFFd7t+4NdZPCkdF0CMNkYbisvuq06lmkbrGfaoRbEb -KLlGtFDN6le33jZzBle5eQCpTqVfFxGGN8iKG8mx9iE4iazFpKzfaMfXn75p0Aar -BppFxVJXvII6C9hseO3FZ01f4BmzZTV4MChzaR8zsKB4kIFqdCiBGe8CKWO8S5pJ -H23HMK2wzcRkfxpNoPsY/UKpI6Ix8n9hh/6V6pOAgJfE5nPli7SmAfwEur+Td7NG -aSIoSPnosUBovKzqILgdumXr7hDppQTPeMvPeisFdGUE1TfSK/3M2x8J9EpGE9Fg -lQzXuGVu5Pk7WqclgDx18MHXiqj8dX2145GEMxgi5ONoLTRiPUcwAw8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/x0r b/hosts/x0r deleted file mode 100644 index 5669a82..0000000 --- a/hosts/x0r +++ /dev/null @@ -1,16 +0,0 @@ -Address = 190.174.174.13 -Subnet = 192.168.9.247/32 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA5+IB0QG5n+rilSXVe9o2GCPU0tw5Fl7K5Jjg5dU3Mcz5yVZhtdtn -e2rhoIfDErAdBnEgJICuiwjnQYPZQR01sa4VlrlY9ypjg1AoC3KUpbzHGaScEvFt -Z2Lj0o9ADNtAsX2no5ZGyDBrnL6rryabRUGyRVTba7wMrax/qYBXSRDpH/8W/OQ4 -4zyJw/pG2qYd4eP/mt0FkWfZn6BaE7Z2eMiH8uop0imyHUBbTyivhsirwHflvQbU -KxLjbUc5eyrWMEduvhxaJblcVE4Jm/KdgeTtP9iPdCfHrsx3GrvQ/ALt/HMpYRmk -ctThLN6zokOAvmE3GQezmZ+vj8xPDvasUD7DvKS5uzf/lKfdeDi2hpvhC7dsmajz -ZBDCbDmRyxwelJtXY4ABO6tMk1AOk3E6p7OeOeaarkiBxzMPJQjB4bZF8RRvfBGk -zMSVDYVoI6gHDbHswIpQBimveyGpgGms+tXAMqgFCkZTfK/h2xjNaAaoU8P1Ur+7 -CGEG1XLGRcmkONJ8kqf9/lyLSfIyv1Z75Guvba8p3aWCgoxNfnWKSzhEtX1I80tO -13UCZ3YwSfLBf8rROohbbGkyz9Eflfi1KnM4OvSA3uwF5KxpzrS184cWnn420FP8 -/lYSPHjqOscMyFHF3nuGgs62ZSt1GC5i4IcPhfJqNBZ3DtuZ1DCTXAECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/yap b/hosts/yap deleted file mode 100644 index 95a0d9b..0000000 --- a/hosts/yap +++ /dev/null @@ -1,20 +0,0 @@ -# yap -# fauno@yap -Port = 6550 -LocalDiscovery = yes -Subnet = 192.168.9.160/32 -Subnet = 2001:1291:200:83ab:fcde:aac:b015:43c8/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEApRS976q+yNU4wJqcjIz3KXJ+0dF/lQUpBNj/Rub0QdY03dm02+fS -KTpAuQdWcxxx502JBfZqwCOKXUB1U2f3Z9dKy578iNwxaZ1psvCDNMwUYzY1LZ83 -XoGW1mHdbCZbLaDHDV0B3fhv1tPvEABe4ZPYlFT0p0FVnQGMmChaJW5/X9KrGAyI -sUpJjKdP0xtYJCZecLoYYTgNBSuAIGSP2YJNvDfUbUimjeL21si2o1ebRs9FhwaH -ntGu82AI2hNM98QJApX+HU3/K8h2KC/gNI9lKObq+rg5XJAFBg4DhXIRXrXdz59W -A1OzURempiNQtUvDCwyW9DCZw0jQPeks3FaqeSRwcIVNU6lDiz5L3A/dOcHYcdEp -0ZjivA7lggKxJBWl+4MYizUH6HhpRVvN/xepHf44l/rYzJWneqb5nfsxkbjX71vF -iTVStXj+HFw9ImiWN13zLrxiyY8RDfNyc6DKkrWnbwoZUUCOxrHt0Z6JGVvr9wZq -JYupWcT04yIlWMGFOaM3pB8xfEQudj+DfsSMq/6gM3B14N/lphE/ic5ONXZBvEq2 -KzKVssgnoZ4t6+AYBHMyFUMXTI0xkb3Bf70z9u08XB+dr1VJcZdzE0ufR3q3NIBN -XrbFH2NaDxJ1ORgE6PA7WvbdrgvXEUUA1fvYy6WnsRvZJWf4wA3hFTUCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/zocacola b/hosts/zocacola deleted file mode 100644 index 7d4c886..0000000 --- a/hosts/zocacola +++ /dev/null @@ -1,21 +0,0 @@ -# zocacola -# tomas -IndirectData = yes -Port = 655 -LocalDiscovery = yes -Subnet = 192.168.9.163/32 -Subnet = 2001:1291:200:83ab:d8a2:387d:edba:54d2/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAvHpbxT51XQWsPaMqOKA+jYHkqeblIjJzBwTwpATE3sVxExiALMeI -Ncs/Tq+XQyj0gzKvM2tduxL+Wi1AIOimjwGwyjmRAhtBTE7DqvtYO/V6ZKuWGBZF -hGFAXCXpzzToJfYU0y9MzAjCzj2/ZILtkjzwvzGLlt+RquoD8QBcG1bzRUlpDTf6 -Or6k+jtnNBxx/+LoiGqTzWZliL6Gn3xPfAYQ4txwKrHmEFPcmnCo7IL1azUdTVW6 -FGfXdyisikCYij1pML4XfSYZnt/XT6muf2phQqaA2S4b33id3iifjmK8dLrYwBWS -64Sx4+d4pD7KG+95CNts0EAtK30HoCJlUp61u4CUmeJ0BHoyOvQQVYGahiCxEAkY -46AFm0hQZ2U/4pZOFbFA4NGo9idjna5zpmKgfynr0vwheLdG9rHlLQnDicjo1E4z -s7oFbJCA5NNesQJpkZxh83WhRslT1g/xW00r7u1xD/u5hYejIqlU8GH9AbbjeCvE -1C1X6jPeuUBZXwKw1Ll38TrQMeqDzIDVwQEkj8qMfPHcyD46e45p5u6QFvLIm8un -r5yVkvrsODHLj3ll1uHgpSlJl/em6NRAAfv7bLCR51ZkGGaD8Q5D/BQGAFCzg9Ot -4fkrz+sDtnRGwBSgwVw3S+ZNcMcutDsUEbAdnQ8rLaS65XGwvYQOK/sCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/hosts/zorak b/hosts/zorak deleted file mode 100644 index 9cd9d2d..0000000 --- a/hosts/zorak +++ /dev/null @@ -1,19 +0,0 @@ -# zorak -# root@zorak-X101CH -Port = 655 -Subnet = 192.168.9.171/32 -Subnet = 2001:1291:200:83ab:ec3c:88e3:549d:2c51/128 - ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAy/1nvf3nJK1po7CgDKwn4FGe8HVt5DGn0W7PdspS0NVI2f02N+tu -AYdGD8A2rlfPCEfFr/a0TxFEB7nqUajsz82cVXjSVofFbw1KKNmW7V9Z0PlVQepT -SbTMvjqf69MBnhY79vamtBvf+svzdxMT8PvqAFwUFOHfR3Ji83N3ioqM43RrmeQ1 -+fLTCWkbNumHRDwsxoO1ifuahfRA6wjrxTkSr3xAok5LJcGUVV13O4oS7uZO8GE1 -+lf85pDnvuFhazIPnNBm+Lwk77jNprOgClF/8dFHJJyC2MMoYce/7GF5WQX+gZjC -wwKRR0oalgtrafGxTADdUyX/Z1dvploI+eF/J3PC0O076MUuI+LC6Rom8lWzi5kZ -flfl/GGvWaW4Hd/9MWvMDOu4SMsvhtpxrmkB5y8XtdvhtspPiH9Uzh8g2o9ZLyV6 -In0SPRNO+KgR7TSV+tNzfep/IyLfUKjMKg7HDtYSztGhucvro3Jz0tVHIgIW8X19 -f+wJzydbSlZugm07unY58GcZ9FqsY8PquRouOfAu1CGwwLyEQvIfrOTVGlYimdt1 -aB2XDZmIMdm9w7oklHiqKtK0tAihOZNAnm+rzuqMHQNZOG+Qm7a97SzdMZrhy0Y5 -ygKvkvFWzJORLfkVxwXK60UIzyzVVwviUSPgsqUU4y0/8G5HL21f9CUCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/lib/common b/lib/common index 63a406a..dea26d0 100644 --- a/lib/common +++ b/lib/common @@ -2,9 +2,8 @@ # # lib/common # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,8 +18,6 @@ # You should have received a copy of the GNU Affero General # Public License along with this program. If not, see # . -# -# # Terminar ante el menor error set -e @@ -51,7 +48,7 @@ trap_exit() { trap 'trap_exit' TERM HUP QUIT INT ERR -. "${LVPN_LIBDIR}/msg" +. "${RAP_LIBDIR}/msg" self="$(basename $0)" @@ -66,7 +63,7 @@ add_to_file(){ # $1 nombre del nodo get_node_dir() { node="$(get_node_name "$1")" - dir="${LVPN_DIR}/nodos/${node}" + dir="${RAP_DIR}/nodos/${node}" if [ ! -d "${dir}" ] || [ ! -f "${dir}/tinc.conf" ]; then fatal_error "El nodo no existe o es inválido" @@ -89,18 +86,18 @@ get_node_file() { } # Limpia el hostname, convierte todo lo no alfanumérico a _ -# Ver tincd.conf(5) +# @see tincd.conf(5) get_node_name() { echo "$1" | sed -e "s/[^a-z0-9_]/_/gi" } get_host_file() { node="$(get_node_name "${1}")" - test -f "${LVPN_HOSTS}/${node}" || \ + test -f "${RAP_HOSTS}/${node}" || \ error "El archivo host de %s no existe" "$node" || \ return 1 - echo "${LVPN_HOSTS}/${node}" + echo "${RAP_HOSTS}/${node}" } # Obtiene un evento válido @@ -110,92 +107,14 @@ get_event() { # Obtener un script get_script() { - script_dir="${LVPN_LIBDIR}/skel/scripts" + script_dir="${RAP_SKELDIR}/scripts" test -f "${script_dir}/$1" && echo "${script_dir}/$1" } -# Encontrar el tipo de init que se va a usar para tinc -# Devuelve "tipo ubicacion" -# Ver lib/lvpn-install -find_init_system() { - if [ -f /etc/debian_version ]; then - echo "deb /etc/tinc/nets.boot" - elif [ -f /etc/os-release ]; then - echo "systemd /etc/systemd/system/multi-user.target.wants/tincd@${NETWORK}.service" - else - echo "unknown unknown" - fi -} - -# Obtiene la id del responsable del nodo -get_id() { - if [ -n "$(git config --get user.name)" ]; then - echo "# $(git config --get user.name) <$(git config --get user.email)>" - else - echo "# $USER@$HOSTNAME" - fi -} - -# Encuentra una IP libre entre los archivos de host -get_ipv4() { -# Las subnets encontradas - local subnets=/tmp/$$.subnets - local ip="" - local fourth=0 - local tries=0 - -# Armar la lista de IPs - grep -i "subnet\s*=" ${LVPN_HOSTS}/* | cut -d'=' -f2 | sort > ${subnets} - -# Fallar si hay 250 nodos... - if [ $(wc -l ${subnets} | cut -d' ' -f1 2>/dev/null) -ge 250 ]; then -# No detecta si hay varios rangos en uso pero por ahora sirve - error "Este rango está agotado" - return 1 - fi - -# Hasta que encontremos una IP libre elegir el cuarto octeto al azar - until [ -n "${ip}" ]; do - let fourth=${RANDOM}%250 - local tmpip="${LVPN_SUBNET%.*}.${fourth}/32" - -# Está en la lista? - if ! grep -q "${tmpip}" "${subnets}"; then - ip="${tmpip}" - fi - -# Aumentar la cantidad de intentos -# Por alguna razon let devuelve 1 - let tries++ || true - - if [ ${tries} -ge 250 ]; then - error "No hay IPs libres" - return 1 - fi - done - - echo "${ip}" -} - -# Genera una dirección IPv6 /128 -get_ipv6() { -# Compatibilidad para versión standalone - arch=$(uname -m) - - # probar los posibles nombres de generate-ipv6-address y no devolver - # nada si no hay - for gia in {${arch}-,}generate-ipv6-address; do - if type ${gia} &>/dev/null; then - echo "$(${gia} ${LVPN_SUBNET6%/*})/128" - return - fi - done -} - if $root ; then # Salir si no se es root y no existe sudo, sino usarlo - if [ ! -w / ]; then + if ! test -w /; then if ! type sudo &>/dev/null; then fatal_error "Correr como root" else diff --git a/lib/lvpn-add-host b/lib/exec/add-host similarity index 62% rename from lib/lvpn-add-host rename to lib/exec/add-host index 0c86ecf..106b48f 100755 --- a/lib/lvpn-add-host +++ b/lib/exec/add-host @@ -1,10 +1,9 @@ #!/usr/bin/env bash # -# lib/lvpn-add-host +# lib/exec/add-host # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,20 +18,17 @@ # You should have received a copy of the GNU Affero General # Public License along with this program. If not, see # . -# -# -# Agrega valores connectto a un nodo -. "${LVPN_LIBDIR}"/common +. "${RAP_LIBDIR}"/common UPDATE=false FORCE=false while getopts "ufhd" arg; do - case $arg in - u) UPDATE=true; FORCE=true ;; - f) FORCE=true ;; - h) help ${self} ; exit 0;; - esac + case $arg in + u) UPDATE=true; FORCE=true ;; + f) FORCE=true ;; + h) help ${self} ; exit 0;; + esac done let OPTIND--; shift ${OPTIND} @@ -46,22 +42,22 @@ ${UPDATE} && hosts=($(shopt -s nullglob; echo "${nodedir}"/hosts/* | sed "s,${no # Recorrer todos los host que se pasaron for _host in "${hosts[@]}"; do # Generar el archivo y encontrarlo, saltear si no existe - _hostfile="$(get_host_file "${_host}")" - _hostdest="${nodedir}/hosts/${_host}" + _hostfile="$(get_host_file "${_host}")" + _hostdest="${nodedir}/hosts/${_host}" - if [ ! -f "${_hostfile}" ]; then - error "El archivo host de %s no existe, salteando..." ${_host} - continue - fi + if test ! -f "${_hostfile}"; then + error "El archivo host de %s no existe, salteando..." ${_host} + continue + fi # Saltear si no el host existe y no estamos forzando o actualizando - if [ -f "${_hostdest}" ]; then - ${FORCE} || continue - fi + if test -f "${_hostdest}"; then + ${FORCE} || continue + fi - msg "Copiando el archivo host de %s" ${_host} -# copiar el archivo al directorio del nodo - cat "${_hostfile}" >"${nodedir}/hosts/${_host}" + msg "Copiando el archivo host de %s" ${_host} + # Copiar el contenido del archivo + cat "${_hostfile}" > "${nodedir}/hosts/${_host}" done exit $? diff --git a/lib/lvpn-connectto b/lib/exec/connectto similarity index 78% rename from lib/lvpn-connectto rename to lib/exec/connectto index cb16731..696f6cf 100755 --- a/lib/lvpn-connectto +++ b/lib/exec/connectto @@ -1,10 +1,9 @@ #!/usr/bin/env bash # -# lib/lvpn-connectto +# lib/exec/connectto # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,16 +18,13 @@ # You should have received a copy of the GNU Affero General # Public License along with this program. If not, see # . -# -# -# Agrega valores connectto a un nodo -. "${LVPN_LIBDIR}"/common +. "${RAP_LIBDIR}"/common while getopts "dh" arg; do - case $arg in - h) help ${self} ; exit 0;; - esac + case $arg in + h) help ${self} ; exit 0;; + esac done let OPTIND--; shift ${OPTIND} @@ -38,11 +34,11 @@ hosts=("$@") nodedir="$(get_node_dir ${node})" # Salir si hosts está vacío -if [[ ${#hosts[@]} -eq 0 ]]; then exit; fi +if test ${#hosts[@]} -eq 0; then exit; fi # Agregar los nodos -${LVPN} add-host ${node} "${hosts[@]}" || \ - fatal_error "No se pudieron agregar los archivos de host" +${RAP} add-host ${node} "${hosts[@]}" || \ + fatal_error "No se pudieron agregar los archivos de host" # Recorrer todos los host que se pasaron for _connectto in "${hosts[@]}"; do diff --git a/lib/exec/init b/lib/exec/init new file mode 100755 index 0000000..5637a49 --- /dev/null +++ b/lib/exec/init @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +# +# lib/exec/init +# +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation; either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General +# Public License along with this program. If not, see +# . +# +# +# Crea un nuevo nodo + +. "${RAP_LIBDIR}"/common + +requires tincd + +# Opciones +# ConnectTo +connectto="" +# Address +address="" +# Port +port="" +# Instalar +install=false +# Modo verborrágico por defecto +verbose=true +force=false + +# Procesar los flags (ver doc) +while getopts 'dvhifp:l:a:c:' arg; do + case $arg in + h) help $self; exit 0 ;; + q) verbose=false ;; + i) install=true;; + f) force=true ;; + p) port="$OPTARG" ;; + l) localnet="${localnet} $OPTARG" ;; + a) address="${address} $OPTARG" ;; + c) connectto="$connectto $OPTARG" ;; + esac +done ; +let OPTIND--; shift $OPTIND + +# Obtener el nombre del host +nodename="$(get_node_name "${1:-$HOSTNAME}")" + +if test -z "${nodename}" ; then + fatal_error "Se necesita un nombre de nodo" +fi + +# Podríamos usar get_node_dir pero chequea si ya existe, cosa que no +nodedir="${RAP_DIR}/nodos/${nodename}" +nodefile="${nodedir}/hosts/${nodename}" +conffile="${nodedir}/tinc.conf" + +# Con -f se eliminan los archivos anteriores pero se guarda una copia +if $force; then + rm -rf "${nodefile}~" "${nodedir}~" + mv "${nodefile}"{,~} + mv "${nodedir}"{,~} +fi + +$verbose && msg "Creando %s..." "*${nodename}*" +if test -f "${nodefile}" ; then + fatal_error "El nodo ya existe! Utilice -f para re-crearlo" +fi + +$verbose && msg "Creando %s..." "*${nodedir}*" +if test -d "${nodedir}" ; then + fatal_error "El directorio del nodo ya existe" +fi + +# Crea los directorios de hosts y scripts +mkdir -p "${nodedir}"/{hosts,scripts} || fatal_error "No se pudo crear el directorio" + +$verbose && msg "Generando %s..." "*${nodefile}*" + +if test ! -z "${address}" ; then + for _a in ${address}; do + add_to_file "${nodefile}" "Address = ${_a}" + done +else + $verbose && warning "El nodo no tiene una dirección pública, se configura como nodo privado" +# Cuando no tenemos una dirección pública probablemente estemos detrás +# de un firewall, esto le indica a los demás nodos que no traten de +# conectarse directamente sino que nos envíen paquetes a través de un +# nodo al que estemos conectadxs. + add_to_file "${nodefile}" "IndirectData = yes" + + PORT=$(until test ${r:-0} -gt 20000; do r=${RANDOM}; done; echo $r) + $verbose && msg "Utilizando puerto al azar %s" "*${PORT}*" +fi + +add_to_file "${nodefile}" "Port = ${port:-${PORT}}" +# descubrir nodos en la misma LAN +add_to_file "${nodefile}" "LocalDiscovery = yes" + +$verbose && msg "Generando %s..." "*${conffile}*" +add_to_file "${conffile}" "Name = ${nodename}" +add_to_file "${conffile}" "Mode = switch" +add_to_file "${conffile}" "GraphDumpFile = /tmp/${NETWORK}.dot" + +# Copiar los scripts de inicio +$verbose && msg "Copiando el resto de archivos..." +install -Dm 750 "${RAP_SKELDIR}/run-script" "${nodedir}/run-script" + +for s in up down ; do + install -Dm 750 "${RAP_SKELDIR}"/tinc-${s} "${nodedir}"/tinc-${s} +done + +$verbose && msg "Añadiendo hosts..." +if test -n "${connectto}" ; then + ${RAP} connectto ${nodename} ${connectto} +fi + +$verbose && msg "Generando llaves..." +echo -e "\n" | tincd -c "${nodedir}" --generate-keys=${KEYSIZE} + +# Sólo guardar el host si podemos escribir en hosts +if test -w "${RAP_HOSTS}"; then + $verbose && msg "Guardando el archivo de host con los demás nodos" + cp -f "${nodefile}" "${RAP_HOSTS}" +fi + +# Instalar el terminar +$install && ${RAP} install ${nodename} + +msg "El nodo se ha creado con éxito" + +exit 0 diff --git a/lib/lvpn-install b/lib/exec/install similarity index 58% rename from lib/lvpn-install rename to lib/exec/install index 51e8a96..1fafc52 100755 --- a/lib/lvpn-install +++ b/lib/exec/install @@ -1,10 +1,9 @@ #!/usr/bin/env bash # -# lib/lvpn-install +# lib/exec/install # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,16 +18,11 @@ # You should have received a copy of the GNU Affero General # Public License along with this program. If not, see # . -# -# -# Sincroniza los nodos de un nodo remoto o local -# Necesita acceso SSH, pensado para sincronizar nodos en un router con *WRT -# No usamos rsync porque no existe # Este script necesita root (ver common) root=true -. "${LVPN_LIBDIR}"/common +. "${RAP_LIBDIR}"/common # Por las dudas, no acepta TINC vacío o de una sola letra ("/") test "${#TINC}" -lt 2 && fatal_error "La variable TINC está vacía" @@ -55,6 +49,7 @@ ${sudo} mkdir -p "${TINC}" ${sudo} rsync -a --no-owner \ --no-group \ --exclude="*.backup" \ + --exclude="*~" \ ${VERBOSE} ${DELETE} ${DRYRUN} \ "${nodedir}/" "${TINC}/" @@ -73,51 +68,20 @@ ${sudo} find "${TINC}/scripts" -type f -exec chmod 755 {} \; ${sudo} chmod 600 "${TINC}/rsa_key.priv" # Habilitar tinc en el sistema -find_init_system | while read init_system init_file; do - case $init_system in - deb) - grep -q ${NETWORK} "${init_file}" || \ - $sudo sh -c "echo ${NETWORK} >>${init_file}" - -# Habilitar el log y cambiar a un usuario sin privilegios - grep -q "^EXTRA=" /etc/default/tinc || \ - $sudo sh -c "echo 'EXTRA=\"${TINCD_FLAGS}\"' >>/etc/default/tinc" - ;; - systemd) -# Instalar el .service desde el skel - sed "s/{{TINCD_FLAGS}}/${TINCD_FLAGS}/g" \ - ${LVPN_LIBDIR}/skel/tincd@.service | \ - ${sudo} tee ${init_file} >/dev/null - ;; - unknown) - warning "Tu sistema de inicio de tinc es desconocido, tenés que habilitar el demonio a mano o reportar un bug :)" ;; - esac -done - -# Agregar avahi en nsswitch.conf -if [ -f /lib/libnss_mdns.so.2 ]; then - grep -q "mdns" /etc/nsswitch.conf || \ - $sudo sed -e "s/^hosts:.*$/#&\nhosts: files mdns_minimal [NOTFOUND=return] dns mdns/" \ - -i /etc/nsswitch.conf -else - tip "Es necesario instalar nss-mdns para poder resolver nombres .local" -fi +${sudo} systemctl enable --now tinc@${NETWORK}.service # Instalar logrotate test -d /etc/logrotate.d && \ - ${sudo} cp ${LVPN_LIBDIR}/skel/logrotate.conf /etc/logrotate.d/tincd.conf + ${sudo} cp ${RAP_SKELDIR}/logrotate.conf /etc/logrotate.d/tincd.conf # Instalar el script de reconexión de tincd test -d /etc/NetworkManager/dispatcher.d && \ - ${sudo} cp ${LVPN_LIBDIR}/skel/50_tincd /etc/NetworkManager/dispatcher.d/ + ${sudo} cp ${RAP_SKELDIR}/50_tincd /etc/NetworkManager/dispatcher.d/ # Recargar los cambios en la configuración if pgrep tincd &>/dev/null; then msg "Recargando tincd..." - ${sudo} ${LVPN_LIBDIR}/skel/50_tincd ${NETWORK} up + ${sudo} ${RAP_SKELDIR}/50_tincd ${NETWORK} up fi -$sudo which avahi-daemon &>/dev/null || \ - tip "Se recomienda instalar avahi-daemon" - exit $? diff --git a/lib/lvpn-install-script b/lib/exec/install-script similarity index 82% rename from lib/lvpn-install-script rename to lib/exec/install-script index 4a2d833..0fcf499 100755 --- a/lib/lvpn-install-script +++ b/lib/exec/install-script @@ -1,10 +1,9 @@ #!/usr/bin/env bash # -# lib/lvpn-add-subnet +# lib/exec/install-script # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -38,7 +37,7 @@ list_events() { # Mostrar los scripts disponibles list_scripts() { - ls ${LVPN_LIBDIR}/skel/scripts + ls ${LVPN_SKELDIR}/scripts } VERBOSE="" @@ -69,16 +68,12 @@ for _state in up down; do # No pisar los tinc-{up,down} con run-script if test "${event}" != "tinc" ; then # Copiar una versión moderna de run-script - cp ${VERBOSE} --force "${LVPN_LIBDIR}/skel/run-script" \ - "${node_dir}/" + cp ${VERBOSE} --force "${LVPN_SKELDIR}/run-script" "${node_dir}/" # Y vincularla al evento-estado, de esta forma tenemos una sola copia # siempre actualizada. ln --force --symbolic run-script "${node_dir}/${event}-${_state}" fi - done # Instalar el script para el evento -mkdir -p "${node_dir}/scripts" -cp ${VERBOSE} -f "${script}" "${node_dir}/scripts/${event}-${script##*/}" -chmod +x "${node_dir}/scripts/${event}-${script##*/}" +install -dm 750 "${script}" "${node_dir}/scripts/${event}-${script##*/}" diff --git a/lib/lvpn-unknown-peers b/lib/exec/unknown-peers similarity index 63% rename from lib/lvpn-unknown-peers rename to lib/exec/unknown-peers index 861e72d..9c4c188 100755 --- a/lib/lvpn-unknown-peers +++ b/lib/exec/unknown-peers @@ -1,10 +1,9 @@ #!/usr/bin/env bash # -# lib/lvpn-unknown-peers +# lib/exec/unknown-peers # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -28,21 +27,20 @@ requires sort uniq grep tr while getopts "dhc" arg; do - case $arg in - h) help ${self} ; exit 0;; - c) count="-c" ;; - esac + case $arg in + h) help ${self} ; exit 0;; + c) count="-c" ;; + esac done let OPTIND--; shift ${OPTIND} log="${1:-/var/log/tinc.${NETWORK}.log}" -if [ ! -f "${log}" ]; then - fatal_error "El archivo de log no existe. Tip: hay que iniciar tinc con --logfile" +if ! test -f "${log}"; then + fatal_error "El archivo de log no existe. Tip: Hay que iniciar tinc con --logfile" fi -test ! -z "${count}" && msg "Pares desconocidos" -grep "Peer .* had unknown identity " ${log} 2>/dev/null | \ - grep -o "([^)]\+)" | sort | tr -d "[()]" | uniq ${count} - +test ! -z "${count}" && msg "Pares desconocidos: ${count}" +grep "Peer .* had unknown identity " ${log} 2>/dev/null \ + | grep -o "([^)]\+)" | sort | tr -d "[()]" | uniq ${count} exit $? diff --git a/lib/lvpn-add-subnet b/lib/lvpn-add-subnet deleted file mode 100755 index 4f24076..0000000 --- a/lib/lvpn-add-subnet +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-add-subnet -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Agrega una subnet - -. "${LVPN_LIBDIR}"/common - -VERBOSE=false -GENERATE=false -IPV4=false -IPV6=true -while getopts "dhvg46" arg; do - case $arg in - h) help ${self} ; exit 0;; - v) VERBOSE=true ;; - g) GENERATE=true ;; - 4) IPV4=true ; IPV6=false ;; - 6) IPV6=true ; IPV4=false ;; - esac -done -let OPTIND--; shift ${OPTIND} - -# Obtener el nombre del nodo o adivinarlo -node="$(get_node_name "${1:-${HOSTNAME}}")" ; shift || true -# Si no estamos generando una subnet, buscarla en el argumento -${GENERATE} || subnet="$1" ; shift || true -hostfile="$(get_host_file "${node}")" - -test -f "${hostfile}" || fatal_error "No se encuentra el archivo del nodo %s" ${node} -test -n "${subnet}" || GENERATE=true - -# Generar IPs -${GENERATE} && ${IPV4} && subnet="$(get_ipv4)" -${GENERATE} && ${IPV6} && subnet="$(get_ipv6)" - -# Volver a probar por las dudas -test -n "${subnet}" || fatal_error "No se pudo generar la IP" - -${VERBOSE} && ${GENERATE} && ${IPV4} && msg "Generada IPv4 %s" "${subnet}" -${VERBOSE} && ${GENERATE} && ${IPV6} && msg "Generada IPv6 %s" "${subnet}" - -# Agregar la subnet al archivo justo encima de la llave -sed -e "s,^-----BEGIN RSA PUBLIC KEY-----$,Subnet = ${subnet}\n\n&," \ - -i "${hostfile}" || \ - warning "No se pudo agregar %s al archivo %s" \ - "${subnet}" \ - "${hostfile}" - -tip 'Correr `lvpn add-host -u %s` para actualizar el archivo de host' "${node}" diff --git a/lib/lvpn-announce b/lib/lvpn-announce deleted file mode 100755 index f22ecac..0000000 --- a/lib/lvpn-announce +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-announce -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Anuncia o desanuncia la llave del nodo en la red local - -. "${LVPN_LIBDIR}"/common - -PERMANENT=false -BEADLE=false -STOP=false -PIDFILE=${PIDFILE:-/tmp/${NETWORK}-announce.pid} -SERVICE=${SERVICE:-/etc/avahi/services/${NETWORK}.service} - -touch "${PIDFILE}" 2>/dev/null || \ -fatal_error "No se puede escribir el archivo de pid: %s" "${PIDFILE}" - -while getopts "dhpbs" arg; do - case $arg in - h) help ${self} ; exit 0;; - p) PERMANENT=true ;; - b) BEADLE=true ;; - s) STOP=true ;; - esac -done -let OPTIND--; shift ${OPTIND} - -# Dejar de anunciar -${STOP} && ${PERMANENT} && ${sudo} rm "${SERVICE}" "${PIDFILE}" && exit -${STOP} && kill $(cat "${PIDFILE}") 2>/dev/null && rm "${PIDFILE}" && exit - -node="$(get_node_name "$1")"; shift -nodefile="${LVPN_HOSTS}/${node}" - -if ${BEADLE} ; then - nodefile="${LVPN_BEADLE}/${node}" -fi - -test -f "${nodefile}" || fatal_error "No existe ese nodo" - -nodeport="$(grep "^\s*Port" "${nodefile}" | \ - cut -d'=' -f2 | \ - tr -d ' ')" - -# Publicar la llave como txt-record en base64 -# Es necesario invertirla porque avahi-browse muestra los txt-record invertidos - -if ${PERMANENT} ; then - - touch "${SERVICE}" 2>/dev/null || - fatal_error "No se puede escribir el archivo %s" "${SERVICE}" - - cat >"${SERVICE}" < - - - ${node}@${NETWORK} - - _${NETWORK}._udp - ${nodeport:-${PORT}} - $(base64 "${nodefile}" | \ - tac | \ - sed -e 's/^//' \ - -e 's/$/<\/txt-record>/') - - -EOF - -else - -# Anunciar como usuario y pasar a segundo plano - avahi-publish -s "${node}@${NETWORK}" \ - _${NETWORK}._udp \ - ${nodeport:-${PORT}} \ - $(base64 "${nodefile}" | tac | tr "\n" ' ') \ - 1>/dev/null 2>&1 & - echo $! >"${PIDFILE}" -fi - -exit $? diff --git a/lib/lvpn-avahi-anuncio b/lib/lvpn-avahi-anuncio deleted file mode 100755 index b9e62de..0000000 --- a/lib/lvpn-avahi-anuncio +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-avahi-anuncio -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Anuncia o desanuncia la llave del nodo en la red local - - -. "${LVPN_LIBDIR}"/common - -PIDFILE=${PIDFILE:-/tmp/${NETWORK}-announce.pid} -SERVICE=${SERVICE:-/etc/avahi/services/${2}.service} -SERVICE="${2}.service" - -node="$(get_node_name "$1")" - -touch "${PIDFILE}" 2>/dev/null || \ -fatal_error "No se puede escribir el archivo de pid: %s" "${PIDFILE}" - - touch "${SERVICE}" 2>/dev/null || - fatal_error "No se puede escribir el archivo %s" "${SERVICE}" - - cat >"${SERVICE}" < - - - ${1} ${node}@${NETWORK} - - _${NETWORK}._$3 - ${nodeport:-$4} - $(cat $5 | base64 | \ - tac | \ - sed -e 's/^//' \ - -e 's/$/<\/txt-record>/') - - -EOF - - -exit $? diff --git a/lib/lvpn-avatar b/lib/lvpn-avatar deleted file mode 100755 index 9001796..0000000 --- a/lib/lvpn-avatar +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-avatar -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Anuncia o desanuncia la llave del nodo en la red local - -. "${LVPN_LIBDIR}"/common - -PERMANENT=false -STOP=false -PIDFILE=${PIDFILE:-/tmp/${NETWORK}-announce.pid} -SERVICE=${SERVICE:-/etc/avahi/services/${NETWORK}.service} - -touch "${PIDFILE}" 2>/dev/null || \ -fatal_error "No se puede escribir el archivo de pid: %s" "${PIDFILE}" - -while getopts "dhpbs" arg; do - case $arg in - h) help ${self} ; exit 0;; - p) PERMANENT=true ;; - b) BEADLE=true ;; - s) STOP=true ;; - esac -done -let OPTIND--; shift ${OPTIND} - -# Dejar de anunciar -${STOP} && ${PERMANENT} && ${sudo} rm "${SERVICE}" "${PIDFILE}" && exit -${STOP} && kill $(cat "${PIDFILE}") 2>/dev/null && rm "${PIDFILE}" && exit - -node="$(get_node_name "$1")"; shift -nodefile="${LVPN_HOSTS}/${node}" - -if ${BEADLE} ; then - nodefile="${LVPN_BEADLE}/${node}" -fi - -test -f "${nodefile}" || fatal_warning "No existe ese nodo" - -nodeport="$(grep "^\s*Port" "${nodefile}" | \ - cut -d'=' -f2 | \ - tr -d ' ')" - -# Publicar la llave como txt-record en base64 -# Es necesario invertirla porque avahi-browse muestra los txt-record invertidos - -if ${PERMANENT} ; then - - touch "${SERVICE}" 2>/dev/null || - fatal_error "No se puede escribir el archivo %s" "${SERVICE}" - - cat >"${SERVICE}" < - - - ${node}@${NETWORK} - - _${NETWORK}._udp - ${nodeport:-${PORT}} - $(base64 "${nodefile}" | \ - tac | \ - sed -e 's/^//' \ - -e 's/$/<\/txt-record>/') - - -EOF - -else - -# Anunciar como usuario y pasar a segundo plano - avahi-publish -s "${node}@${NETWORK}" \ - _${NETWORK}._udp \ - ${nodeport:-${PORT}} \ - $(base64 "${nodefile}" | tac | tr "\n" ' ') \ - 1>/dev/null 2>&1 & - echo $! >"${PIDFILE}" -fi - -exit $? diff --git a/lib/lvpn-d3 b/lib/lvpn-d3 deleted file mode 100755 index fb90a90..0000000 --- a/lib/lvpn-d3 +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-d3 -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Exporta los nodos y enlaces en JSON para D3 TODO -#convertir a un exportador genérico set -e - -. "${LVPN_LIBDIR}"/common - -requires tail ps sudo killall wc cut nl sed mktemp - -while getopts "dh" arg; do - case $arg in - h) help ${self} ; exit 0;; - esac -done -let OPTIND--; shift ${OPTIND} - -tmpfile="$(mktemp /tmp/$self-XXXX.log)" - -# Monitorear el log -tail -f -n1 /var/log/tinc.${NETWORK}.log > ${tmpfile} & -tailpid=$(ps -o pid -C tail --no-header) - -# Limpia la cache de nodos y pide la lista de nodos y enlaces -for _signal in WINCH USR2; do - sudo killall -SIG${_signal} tincd 2>/dev/null -done - -# Esperar la lista -count=0 -while [ $(wc -l ${tmpfile} | cut -d " " -f1) -lt 5 ]; do - let count++ || true - test ${count} -gt 20 && fatal_error "No se pudo leer el log: %s" "/var/log/tinc.${NETWORK}.log" - - sleep 1s -done - -# Matar el tail -kill ${tailpid} - -# Grep ": $node at" limpiar, ordenar y numerar (para los indices) -# Salida: index:nodo -nodes=($(grep -o ": \+[^ ]\+ at" ${tmpfile} | \ - grep -o " [^ ]\+ " | \ - tr -d " " | \ - sort -u | \ - nl -v0 -s:)) - -# Grep "$node to $othernode at" y limpiar -links=($(grep -o "[^ ]\+ to [^ ]\+ at" ${tmpfile} | \ - sed -e "s/ to /:/" -e "s/ at$//" | \ - sort -u)) - -# Extrae el indice de index:name -get_index() { - needle=$1 - echo "${nodes[@]}" | grep -o "[0-9]\+:${needle}" | cut -d":" -f1 -} - -# Array de nodos -json='{"nodes":[' -for _n in ${nodes[@]}; do - json+='{"index":'${_n%%:*}',"name":"'${_n#*:}'"},' -done - -# Array de enlaces -# TODO es bastante lento -json+='],"links":[' -for _l in ${links[@]}; do - json+='{"source":'$(get_index ${_l%%:*})',"target":'$(get_index ${_l#*:})'},' -done -json+=']}' - -# Limpiar comas extra -echo $json | sed "s/},]/}]/g" - -rm ${tmpfile} - -exit $? diff --git a/lib/lvpn-discover b/lib/lvpn-discover deleted file mode 100755 index a194164..0000000 --- a/lib/lvpn-discover +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-discover -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Descubre nodos en la red local y opcionalmente los agrega a connectto -#set -x - -. "${LVPN_LIBDIR}"/common - -requires avahi-browse base64 - -TMPDIR="$(mktemp -d /tmp/${NETWORK}-discover-XXXX)" - -# Opciones -CONNECTTO=false -FORCE=false -ALL=false -ADD=false -NODES="" -NODE="" -while getopts "dhc:fi:a:b:A" arg; do - case $arg in - h) help ${self} ; exit 0;; - c) CONNECTTO=true; ADD=true; NODE=${OPTARG} ;; - f) FORCE=true ;; - i) IFACE+="${OPTARG} " ;; - b) ALL=true; NODE_ACEPT=true; CONNECTTO=true; ADD=true; NODE="${OPTARG}" ;; - a) ADD=true ; NODE=${OPTARG};; - A) ALL=true ;; - esac -done -let OPTIND--; shift ${OPTIND} - -# WTF - estoy arreglando esto aunque no se que carajo hace -- fauno -${NODE_ACEPT} && NODE_ACEPT=$1 - -test -n "${NODE}" && NODEDIR="$(get_node_dir "${NODE}")" - -# Si estamos agregando el host pero no tenemos permisos de escritura en -# hosts/, pedimos sudo -if ${ADD} && test ! -w "${LVPN_HOSTS}" ; then - root=true - . "${LVPN_LIBDIR}"/common -fi - -# Encontrar todas las llaves en _lvpn._udp -# TODO hacer terminate opcional y mantenerlo como un daemon? -avahi-browse --terminate \ - --ignore-local \ - --parsable \ - --resolve \ - _${NETWORK}._udp | grep "^=" | \ -grep "$NODE_ACEPT" |\ - while read _s; do -# Interfaz descubierta - _iface="$(echo "$_s" | cut -d';' -f2)" - -# No considerar esta llave si está anunciada dentro de la VPN - if [ "${_iface}" = "${NETWORK}" ]; then - ${ALL} || continue - fi - -# Cuando se filtra por interfaz, saltear las que no se especificaron - if [ ! -z "${IFACE}" ]; then - echo "${IFACE}" | grep -q "${_iface}" || continue - fi - -# Encontrar el nombre del nodo sin @lvpn - _node="$(echo "${_s}" | cut -d';' -f4 | sed "s/064${NETWORK}//")" - -# No volver a procesar un nodo - echo "${NODES}" | grep -q "${_node}" && continue - -# Generar el archivo de host del nodo descubierto - echo "${_s}" | cut -d';' -f10 | sed 's/[ "]//g' | \ - base64 -d >"${TMPDIR}/${_node}" 2>/dev/null - -# Si estamos agregando - if ${ADD}; then - msg "Obteniendo host %s" "${_node}" - -# Comprobar si ya tenemos la llave o vamos a confiar en la LAN - _host_file="$(get_host_file "${_node}")" - if [ $? -ne 0 ] || ${FORCE} ; then - msg "Agregando %s" "${_node}" - cat "${TMPDIR}/${_node}" | ${sudo} tee "${LVPN_HOSTS}/${_node}" - fi - -# CONNECTTO incluye ADD -# TODO hacer esto todo junto requiere cambiar while read por otra cosa -# o tomar los nodos del directorio temporal - ${CONNECTTO} || ${LVPN} add-host "${NODE}" "${_node}" - ${CONNECTTO} && ${LVPN} connectto "${NODE}" "${_node}" - else -# Informar el nombre del nodo - echo "$_node" - fi - -# Llevar el registro de nodos descubiertos - NODES+="${_node} " - done - -rm -rf "${TMPDIR}" -exit 0 diff --git a/lib/lvpn-init b/lib/lvpn-init deleted file mode 100755 index eb36f3d..0000000 --- a/lib/lvpn-init +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-init -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Crea un nuevo nodo - -. "${LVPN_LIBDIR}"/common - -requires tincd - -# Opciones -# ConnectTo -connectto="" -# Address -address="" -# Port -port="" -# Subnets extra (-s) -subnets="" -# Instalar -install=false -# Habilitar subnet-up (-r) -subnetup=false -# Modo verborrágico por defecto -verbose=true -force=false -# Soporte para android -android=false - -# Procesar los flags (ver doc) -while getopts 'dvhirfp:a:c:s:l:A' arg; do - case $arg in - h) help $self; exit 0 ;; - q) verbose=false ;; - r) subnetup=true ;; - i) install=true;; - f) force=true ;; - p) port="$OPTARG" ;; - l) localnet="${localnet} $OPTARG" ;; - a) address="${address} $OPTARG" ;; - c) connectto="$connectto $OPTARG" ;; - s) subnets="$subnets $OPTARG" ;; - A) android=true ;; - esac -done ; -let OPTIND--; shift $OPTIND - -# Obtener el nombre del host -nodename="$(get_node_name "${1:-$HOSTNAME}")" - -if [ -z "${nodename}" ]; then - fatal_error "Se necesita un nombre de nodo" -fi - -# Podríamos usar get_node_dir pero chequea si ya existe, cosa que no -nodedir="${LVPN_DIR}/nodos/${nodename}" -nodefile="${nodedir}/hosts/${nodename}" -conffile="${nodedir}/tinc.conf" - -# Con -f se eliminan los archivos anteriores -if $force; then - rm -r "${nodefile}" "${nodedir}" || true -fi - -$verbose && msg "Creando %s..." "*${nodename}*" -if [ -f "${nodefile}" ]; then - fatal_error "El nodo ya existe! Utilice -f para re-crearlo" -fi - -$verbose && msg "Creando %s..." "*${nodedir}*" -if [ -d "${nodedir}" ]; then - fatal_error "El directorio del nodo ya existe" -fi - -# Crea los directorios de hosts y scripts -mkdir -p ${nodedir}/{hosts,scripts} || fatal_error "No se pudo crear el directorio" - -$verbose && msg "Generando %s..." "*${nodefile}*" -add_to_file "${nodefile}" "# ${nodename}" -get_id >>"${nodefile}" - -if [ ! -z "${address}" ]; then - for _a in ${address}; do - add_to_file "${nodefile}" "Address = ${_a}" - done -else - $verbose && warning "El nodo no tiene una dirección pública, se configura como cliente" -# Cuando no tenemos una dirección pública probablemente estemos detrás -# de un firewall, esto le indica a los demás nodos que no traten de -# conectarse directamente sino que nos envíen paquetes a través de un -# nodo al que estemos conectados. - add_to_file "${nodefile}" "IndirectData = yes" - - PORT=$(until test ${r:-0} -gt 20000; do r=${RANDOM}; done; echo $r) - $verbose && msg "Utilizando puerto al azar %s" "*${PORT}*" -fi - -add_to_file "${nodefile}" "Port = ${port:-${PORT}}" - -# descubrir nodos en la misma LAN -add_to_file "${nodefile}" "LocalDiscovery = yes" - -# Tinc para android necesita especificar la shell con la que se corren los -# scripts -${android} && add_to_file "${nodefile}" "ScriptsInterpreter = /system/bin/sh" -# Y además el dispositivo tun -${android} && add_to_file "${nodefile}" "Device = /dev/tun" - -if [ ! -z "${LVPN_SUBNET}" ]; then - $verbose && msg "Determinando la IPv4 del nodo..." - if [ -z "${localnet}" ] ; then - localnet="${localnet} $(get_ipv4)" - - if [ $? -ne 0 ]; then - fatal_error "No se pudo determinar una IPv4 para este nodo" - fi - fi -fi - -$verbose && msg "Generando IPv6..." -localnet="${localnet} $(get_ipv6)" - -$verbose && msg "Añadiendo subredes..." -for _subnet in ${localnet} ${subnets}; do - add_to_file "${nodefile}" "Subnet = ${_subnet}" -done - -# Si se anuncia otra subnet, el nodo actua como router, pero se pierden -# servicios como avahi -if [ -z "${subnets}" ]; then - mode="switch" -else - mode="router" -fi -$verbose && msg "Este nodo es un %s" "*${mode}*" - -$verbose && msg "Generando %s..." "*${conffile}*" -add_to_file "${conffile}" "Name = ${nodename}" -add_to_file "${conffile}" "Mode = ${mode}" -add_to_file "${conffile}" "GraphDumpFile = /tmp/${NETWORK}.dot" - -$verbose && msg "Añadiendo hosts..." -if [ -n "${connectto}" ]; then - ${LVPN} connectto ${nodename} ${connectto} -fi - -# Copiar los scripts de inicio -$verbose && msg "Copiando el resto de archivos..." -if ${android} ; then -# El sistema por defecto de Android es muy limitado, si no tiene busybox no hay -# prácticamente nada - cp "${LVPN_LIBDIR}"/skel/android/tinc-up "${nodedir}" -# Hardcodear la primera subnet sin notación cidr - sed -e "s/{{LVPN_SUBNET}}/${localnet%%/*}/g" \ - -i "${nodedir}/tinc-up" -else - cp "${LVPN_LIBDIR}"/skel/tinc-{up,down} "${nodedir}" - sed -e "s,{{LVPN_SUBNET}},${LVPN_SUBNET},g" \ - -e "s,{{LVPN_SUBNET6}},${LVPN_SUBNET6},g" \ - -i "${nodedir}/tinc-up" -fi - -if ${subnetup} ; then - cp "${LVPN_LIBDIR}"/skel/subnet-{up,down} "${nodedir}" -fi - -$verbose && msg "Generando llaves..." -echo -e "\n" | tincd -c "${nodedir}" --generate-keys=${KEYSIZE} - -# Sólo guardar el host si podemos escribir en hosts -if test -w "${LVPN_HOSTS}"; then - $verbose && msg "Guardando el archivo de host con los demás nodos" - cp "${nodefile}" "${LVPN_HOSTS}" -fi - -cp --force "${LVPN_LIBDIR}/skel/run-script" "${nodedir}/" - -$install && ${LVPN} install ${nodename} - -msg "El nodo se ha creado con éxito" -msg "*Importante*: " -msg "* Envíe el archivo que representa su nodo a vpn@hackcoop.com.ar (%s), o" "*${nodefile}*" -msg "* Comparta su nodo en la red local con \`lvpn announce\`" -msg "* Agregue %s al repositorio git y publíquelo." "*${nodefile}*" - -exit 0 diff --git a/lib/lvpn-install-mail-server b/lib/lvpn-install-mail-server deleted file mode 100755 index 2662f86..0000000 --- a/lib/lvpn-install-mail-server +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-install-mailserver -# -# Copyright (c) 2011-2014 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Instala un servidor smtp - -. "${LVPN_LIBDIR}"/common - -requires postmap postfix - -FORCE=false -PF_DIR=/etc/postfix -while getopts "hdfp:" arg; do - case $arg in - f) FORCE=true ;; - p) PF_DIR="${OPTARG}" ;; - h) help ${self} ; exit 0;; - esac -done -let OPTIND--; shift ${OPTIND} - -node="$(get_node_name "$1")"; shift -nodedir="$(get_node_dir ${node})" - -test -d /etc/postfix/ || - fatal_error "Postfix no está instalado" || - true - -if ! ${FORCE}; then -test -f /etc/postfix/main.cf && - fatal_error "Postfix ya está configurado, si querés pisar la configuración usá -f" || - true -fi - -files=(postfix/main.cf postfix/transport) - -for file in ${files[@]}; do - full_file="${LVPN_CONTRIB}/${file}" - - installed_file="${PF_DIR}/${file##*/}" - - # fallar si no se encuentra el archivo - test -f "${full_file}" || - fatal_error "No existe el archivo %s" "${full_file}" - - # setear las variables - sed -e "s/{{node}}/${node}/g" \ - "${LVPN_CONTRIB}/${file}" | - ${sudo} tee "${installed_file}" &>/dev/null -done - -# crear la base de datos de transportes -${sudo} postmap "${PF_DIR}/transport" - -# en debian los alias van dentro de /etc -if test ! -f "${PF_DIR}/aliases"; then - test -f /etc/aliases && ${sudo} ln -s ../aliases "${PF_DIR}/aliases" - test -f /etc/aliases.db && ${sudo} ln -s ../aliases.db "${PF_DIR}/aliases.db" -fi - -${sudo} newaliases - -msg "Servidor de correo instalado con éxito, iniciá o recargá postfix" - -exit $? diff --git a/lib/lvpn-keyserver b/lib/lvpn-keyserver deleted file mode 100755 index b4030a5..0000000 --- a/lib/lvpn-keyserver +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# -# lib/lvpn-keyserver -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -python "$(dirname $LVPN)/etc/keyserver/server.py" diff --git a/lib/lvpn-push b/lib/lvpn-push deleted file mode 100755 index 843adb0..0000000 --- a/lib/lvpn-push +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# -# lib/lvpn-push -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Sincroniza los nodos de un nodo remoto o local -# Necesita acceso SSH, pensado para sincronizar nodos en un router con *WRT -# No usamos rsync porque no existe - -. "${LVPN_LIBDIR}"/common - -requires ssh scp - -while getopts "dh" arg; do - case $arg in - h) help ${self} ; exit 0;; - esac -done -let OPTIND--; shift ${OPTIND} - -# Setear las opciones -node="$(get_node_name "$1")"; shift -host="$1"; shift -dir="$1"; shift - -nodedir="$(get_node_dir ${node})" - -# Crear el directorio -ssh ${host} mkdir -p "${dir:-${TINC}}/" -# Usamos un scp normal porque probablemente no haya rsync del otro lado -# scp normalmente pisa todos los archivos -scp -r "${nodedir}" ${host}:"${dir:-${TINC}}/" - -exit $? diff --git a/lib/lvpn-send-email b/lib/lvpn-send-email deleted file mode 100755 index 360e9fd..0000000 --- a/lib/lvpn-send-email +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# -# lib/lvpn-send-email -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Envia el archivo de host del nodo a los nodos en connectto - -. "${LVPN_LIBDIR}"/common - -# export SENDMAIL=msmtp -SENDMAIL=${SENDMAIL:-sendmail} - -requires ${SENDMAIL} - -while getopts "dhs:m:f:t:"; do - case $arg in - h) help ${self} ; exit 0;; - s) subject="${OPTARG}" ;; - m) message="${OPTARG}" ;; - f) from="${OPTARG}" ;; - t) to="${OPTARG}" ;; - esac -done -let OPTIND--; shift $OPTIND - -node="$(get_node_name "$1")" -nodefile="$(get_node_file ${node})" - -subject="${subject:-"[LibreVPN] Adjuntando nodo ${node}"}" -message="${message:-"Hola! Te adjunto mi nodo ${node}"}" -from="${from:-"$(get_id | tr -d "#")"}" -to="${to:-"vpn@hackcoop.com.ar"}" - -# Crea el mail y lo envía a sendmail -cat <(echo "Subject: ${subject}") \ - <(echo "From: ${from}") \ - <(echo -e "To: ${to}\n") \ - <(echo -e "${message}\n\n") \ - ${nodefile} | \ - ${SENDMAIL} -f ${from} -t - -exit $? diff --git a/lib/lvpn-update-skel b/lib/lvpn-update-skel deleted file mode 100755 index 60d079b..0000000 --- a/lib/lvpn-update-skel +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash -# -# lib/lvpn-update-skel -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Actualiza el skel - -. "${LVPN_LIBDIR}"/common - -VERBOSE=false -while getopts "dhv" arg; do - case $arg in - h) help ${self} ; exit 0;; - v) VERBOSE=true ;; - esac -done -let OPTIND--; shift ${OPTIND} - -# Para cada nodo -for _node in "$@"; do -# Limpiar los nombres - _node="$(get_node_name "${_node}")" - _d="$(date +%Y.%m.%d)" - - ${VERBOSE} && msg "Actualizando archivos del nodo %s" ${_node} - -# Obtener el directorio local - nodedir="$(get_node_dir ${_node})" - -# Por cada archivo del skel - for _destfile in ${nodedir}/*; do -# Generar el skel local - _skelfile="${LVPN_LIBDIR}/skel/${_destfile##*/}" - -# Saltearse los archivos que no existan - test -f "${_skelfile}" || continue - - ${VERBOSE} && msg "Archivo: %s" "${_destfile}" - -# Guardar un backup - mv "${_destfile}" "${_destfile}.${_d}.backup" - -# Aplicar el "template" -# TODO encontrar un mustache liviano - sed -e "s,{{LVPN_SUBNET}},${LVPN_SUBNET},g" \ - -e "s,{{LVPN_SUBNET6}},${LVPN_SUBNET6},g" "${_skelfile}" >"${_destfile}" - - done - - ${VERBOSE} && \ - msg "Backups guardados en %s" "$(pushd "${nodedir}" &>/dev/null; echo *.${_d}.backup; popd &>/dev/null)" - -done - -exit $? diff --git a/lib/msg b/lib/msg index 614d769..d818d5f 100644 --- a/lib/msg +++ b/lib/msg @@ -2,9 +2,8 @@ # # lib/msg # -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -74,7 +73,7 @@ readonly ALL_OFF BOLD BLUE GREEN RED YELLOW # end makepkg # color por defecto -DC="${!DEF_COLOR:-${GREEN}}" +DC="${GREEN}" # La base para todos los mensajes, se imprime en stderr _msg() { @@ -107,11 +106,11 @@ fatal_error() { # Sugerir algo tip() { msg="$(gettext "$1")"; shift - _msg "${BOLD}${BLUE}$(gettext "Tip:")${ALL_OFF} ${DEF_COLOR}${msg}" "$@" + _msg "${BOLD}${BLUE}$(gettext "Tip:")${ALL_OFF} ${DC}${msg}" "$@" } # Muestra el manual # $1 el comando para obtener la ayuda help() { - man $1 || man ${LVPN_DIR}/doc/es/$1.1 + man ${RAP_DIR}/doc/es/$1.1 } diff --git a/lib/skel/tinc-up b/lib/skel/tinc-up deleted file mode 100755 index a1379da..0000000 --- a/lib/skel/tinc-up +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -# Estas IPs las genera lib/lvpn-update-skel -LVPN_SUBNET6="{{LVPN_SUBNET6}}" -LVPN_SUBNET="{{LVPN_SUBNET}}" -HOST_FILE="/etc/tinc/${NETNAME}/hosts/${NAME}" - -# Tomar la IP desde el archivo de configuración y descartar el prefijo -get_ip() { - grep "Subnet" "${HOST_FILE}" | \ - grep -m 1 "${1}" | cut -d"=" -f2 | cut -d"/" -f"1" | tr -d " " -} - -# Obtener las IPs del archivo de conf y agregar los prefijos de subnet -# originales -LVPN_SUBNET6="$(get_ip "${LVPN_SUBNET6%%::*}:.*/128")/${LVPN_SUBNET6##*/}" -LVPN_SUBNET="$(get_ip "${LVPN_SUBNET%%.*}\..*/32")/${LVPN_SUBNET##*/}" - -# No aceptar IPv6 desde otro lado -sysctl -w net.ipv6.conf.${INTERFACE}.accept_ra=0 - -# Soporte para cosas deprecadas: IPv4 e ifconfig -if which ip &>/dev/null; then - test ! -z "${LVPN_SUBNET6}" && ip address add ${LVPN_SUBNET6} dev ${INTERFACE} - test ! -z "${LVPN_SUBNET}" && ip address add ${LVPN_SUBNET} dev ${INTERFACE} - - ip link set ${INTERFACE} up -else - test ! -z "${LVPN_SUBNET6}" && ifconfig ${INTERFACE} ${LVPN_SUBNET6} - test ! -z "${LVPN_SUBNET}" && ifconfig ${INTERFACE} ${LVPN_SUBNET} - - ifconfig ${INTERFACE} up -fi - -. /etc/tinc/${NETNAME}/run-script diff --git a/lvpn b/lvpn deleted file mode 100755 index b06cf22..0000000 --- a/lvpn +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash -# -# lvpn -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Versión autónoma -# Wrapper para correr los comandos al estilo `git comando parametros` -# Hay que crearlos en libdir/lvpn-comando - -# ENV -# Tomar las variables de entorno (por ejemplo de un archivo de configuración -# o de la shell) o usar directorios locales -TINC="${TINC:-"/etc/tinc/lvpn"}" -NETWORK="$(basename "${TINC}")" -LVPN="$(readlink -f $0)" - -LVPN_DIR="${LVPN_DIR:-$(dirname "$LVPN")}" -LVPN_CONTRIB="${LVPN_CONTRIB:-"${LVPN_DIR}/contrib"}" -LVPN_LIBDIR="${LVPN_LIBDIR:-${LVPN_DIR}/lib}" -LVPN_HOSTS="${LVPN_HOSTS:-${LVPN_DIR}/hosts}" -LVPN_BEADLE="${LVPN_HOSTS:-${LVPN_DIR}/beadle}" -KEYSIZE=${KEYSIZE:-4096} -# Flags para -TINCD_FLAGS="${TINCD_FLAGS:-"--logfile -U nobody"}" -PORT=${PORT:-655} - -# Subnets -LVPN_SUBNET="${LVPN_SUBNET:-"192.168.9.0/24"}" -LVPN_SUBNET6="${LVPN_SUBNET6:-"2001:1291:200:83ab::/64"}" - -# Para gettext -TEXTDOMAINDIR=${TEXTDOMAINDIR:-"/usr/share/locale"} -TEXTDOMAIN="$(basename "${LVPN}")" - -export TINC NETWORK LVPN \ - LVPN_DIR LVPN_CONTRIB LVPN_LIBDIR LVPN_HOSTS \ - KEYSIZE TEXTDOMAINDIR TEXTDOMAIN \ - LVPN_SUBNET LVPN_SUBNET6 TINCD_FLAGS PORT - -export PATH="${LVPN_DIR}/bin:$PATH" - -. "${LVPN_LIBDIR}/common" - -list_commands() { - pushd "${LVPN_LIBDIR}" &>/dev/null - - printf '%s\n' lvpn-* | sed "s/^lvpn-//" - - popd &>/dev/null -} - -while getopts "hc" arg; do - case $arg in - h) help lvpn ; exit 0;; - c) list_commands ; exit 0;; - esac -done -let OPTIND--; shift ${OPTIND} - -test -z "$1" && help lvpn && exit 0 - -# El comando -command=$1; shift - -# Chequear si el comando existe -if [ ! -x "${LVPN_LIBDIR}/lvpn-${command}" ]; then - fatal_error "%s no existe, tal vez te gustaría implementarlo :D" ${command} -fi - -# Correr el comando -exec ${LVPN_LIBDIR}/lvpn-${command} "$@" - -exit $? diff --git a/lvpn.in b/lvpn.in deleted file mode 100755 index ea13dad..0000000 --- a/lvpn.in +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash -# -# lvpn.in -# -# Copyright (c) 2011-2013 LibreVPN -# -# See AUTHORS for a list of contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation; either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Affero General -# Public License along with this program. If not, see -# . -# -# -# Versión autogenerada -# Wrapper para correr los comandos al estilo `git comando parametros` -# Hay que crearlos en libdir/lvpn-comando - -# ENV -# Tomar las variables de entorno (por ejemplo de un archivo de configuración -# o de la shell) o usar directorios locales -TINC="${TINC:-"@TINC@"}" -NETWORK="${NETWORK:-"@NETWORK@"}" -LVPN="@LVPN@" -# Guardar todo en el ~/.config del usuario local -LVPN_DIR="${XDG_CONFIG_HOME:-${HOME}/.config}/${NETWORK}" -LVPN_CONTRIB="${LVPN_CONTRIB:-"@CONTRIB@"}" -LVPN_LIBDIR="${LVPN_LIBDIR:-"@LIBDIR@"}" -LVPN_HOSTS="${LVPN_HOSTS:-"@HOSTS@"}" -LVPN_BEADLE="${LVPN_HOSTS:-"@BEADLE@"}" -KEYSIZE=${KEYSIZE:-@KEYSIZE@} -# Flags para -TINCD_FLAGS="${TINCD_FLAGS:-"@FLAGS@"}" -PORT=${PORT:-@PORT@} - -# Subnets -LVPN_SUBNET="${LVPN_SUBNET:-"@SUBNET@"}" -LVPN_SUBNET6="${LVPN_SUBNET6:-"@SUBNET6@"}" - -# Para gettext -TEXTDOMAINDIR=${TEXTDOMAINDIR:-"@TEXTDOMAINDIR@"} -TEXTDOMAIN="@TEXTDOMAIN@" - -export TINC NETWORK LVPN \ - LVPN_DIR LVPN_CONTRIB LVPN_LIBDIR LVPN_HOSTS \ - KEYSIZE TEXTDOMAINDIR TEXTDOMAIN \ - LVPN_SUBNET LVPN_SUBNET6 TINCD_FLAGS PORT - -. "${LVPN_LIBDIR}/common" - -list_commands() { - pushd "${LVPN_LIBDIR}" &>/dev/null - - printf '%s\n' lvpn-* | sed "s/^lvpn-//" - - popd &>/dev/null -} - -while getopts "hc" arg; do - case $arg in - h) help lvpn ; exit 0;; - c) list_commands ; exit 0;; - esac -done -let OPTIND--; shift ${OPTIND} - -test -z "$1" && help lvpn && exit 0 - -# El comando -command=$1; shift - -# Chequear si el comando existe -if [ ! -x "${LVPN_LIBDIR}/lvpn-${command}" ]; then - fatal_error "%s no existe, tal vez te gustaría implementarlo :D" ${command} -fi - -# Correr el comando -exec ${LVPN_LIBDIR}/lvpn-${command} "$@" - -exit $? diff --git a/rap b/rap new file mode 100755 index 0000000..1970efb --- /dev/null +++ b/rap @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +# +# rap +# +# Copyright (c) 2020- RAP +# Copyright (c) 2011-2016 LibreVPN +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation; either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Affero General +# Public License along with this program. If not, see +# . + +# ENV +# Tomar las variables de entorno (por ejemplo de un archivo de configuración +# o de la shell) o usar directorios locales +export RAP="$(readlink -f $0)" +export NETWORK="${NETWORK:-$(basename "${RAP}")}" +export TINC="${TINC:-"/etc/tinc/${NETWORK}"}" + +export RAP_DIR="${RAP_DIR:-$(dirname "$RAP")}" +export RAP_LIBDIR="${RAP_LIBDIR:-${RAP_DIR}/lib}" +export RAP_EXECDIR="${RAP_EXECDIR:-${RAP_DIR}/lib/exec}" +export RAP_SKELDIR="${RAP_SKELDIR:-${RAP_DIR}/skel}" +export RAP_HOSTS="${RAP_HOSTS:-${RAP_DIR}/hosts}" +export KEYSIZE=${KEYSIZE:-4096} +# Flags para +export TINCD_FLAGS="${TINCD_FLAGS:-"--logfile -U nobody"}" +export PORT=${PORT:-655} + +# Para gettext +export TEXTDOMAINDIR=${TEXTDOMAINDIR:-"/usr/share/locale"} +export TEXTDOMAIN="$(basename "${RAP}")" + +. "${RAP_LIBDIR}/common" + +list_commands() { + pushd "${RAP_LIBDIR}" &>/dev/null + + printf '%s\n' * + + popd &>/dev/null +} + +while getopts "hc" arg; do + case $arg in + h) help rap ; exit 0;; + c) list_commands ; exit 0;; + esac +done +let OPTIND--; shift ${OPTIND} + +test -z "$1" && help rap && exit 0 + +# El comando +command=$1; shift + +# Chequear si el comando existe +if ! test -x "${RAP_EXECDIR}/${command}" ; then + fatal_error "%s no existe, tal vez te gustaría implementarlo :D" ${command} +fi + +# Correr el comando +exec ${RAP_EXECDIR}/${command} "$@" + +exit $? diff --git a/lib/skel/50_tincd b/skel/50_tincd similarity index 100% rename from lib/skel/50_tincd rename to skel/50_tincd diff --git a/lib/skel/android/tinc-up b/skel/android/tinc-up similarity index 100% rename from lib/skel/android/tinc-up rename to skel/android/tinc-up diff --git a/lib/skel/logrotate.conf b/skel/logrotate.conf similarity index 99% rename from lib/skel/logrotate.conf rename to skel/logrotate.conf index 4bacc5c..dff1e96 100644 --- a/lib/skel/logrotate.conf +++ b/skel/logrotate.conf @@ -7,4 +7,3 @@ copytruncate noolddir } - diff --git a/lib/skel/run-script b/skel/run-script similarity index 100% rename from lib/skel/run-script rename to skel/run-script diff --git a/lib/skel/scripts/debug b/skel/scripts/debug similarity index 100% rename from lib/skel/scripts/debug rename to skel/scripts/debug diff --git a/lib/skel/scripts/ipv6-default-route b/skel/scripts/ipv6-default-route similarity index 100% rename from lib/skel/scripts/ipv6-default-route rename to skel/scripts/ipv6-default-route diff --git a/lib/skel/scripts/ipv6-router b/skel/scripts/ipv6-router similarity index 100% rename from lib/skel/scripts/ipv6-router rename to skel/scripts/ipv6-router diff --git a/lib/skel/scripts/notify b/skel/scripts/notify similarity index 100% rename from lib/skel/scripts/notify rename to skel/scripts/notify diff --git a/lib/skel/scripts/port-forwarding b/skel/scripts/port-forwarding similarity index 100% rename from lib/skel/scripts/port-forwarding rename to skel/scripts/port-forwarding diff --git a/lib/skel/scripts/postqueue b/skel/scripts/postqueue similarity index 100% rename from lib/skel/scripts/postqueue rename to skel/scripts/postqueue diff --git a/lib/skel/scripts/wall-notify b/skel/scripts/wall-notify similarity index 100% rename from lib/skel/scripts/wall-notify rename to skel/scripts/wall-notify diff --git a/lib/skel/tinc-down b/skel/tinc-down similarity index 100% rename from lib/skel/tinc-down rename to skel/tinc-down diff --git a/skel/tinc-up b/skel/tinc-up new file mode 100755 index 0000000..7adb2b4 --- /dev/null +++ b/skel/tinc-up @@ -0,0 +1,7 @@ +#!/bin/sh + +sysctl -w net.ipv6.conf.${INTERFACE}.accept_ra=0 + +ip link set ${INTERFACE} up + +. /etc/tinc/${NETNAME}/run-script diff --git a/lib/skel/tincd@.service b/skel/tincd@.service similarity index 100% rename from lib/skel/tincd@.service rename to skel/tincd@.service