viewgit/index.php:465 Only variables should be passed by reference [2048]
viewgit/index.php:466 Non-static method GeSHi::get_language_name_from_extension() should not be called statically [2048]
#!/usr/bin/env python # -*- coding: utf-8 -*- # # Questo è un semplice script che attiva automaticamente # la VPN verso poisson per chi si connette ad una rete wireless # dall'interno del dipartimenti di Matematica di Pisa. # # Io lo uso per evitare di dover fare un clic di troppo ;) # # Ringrazio Tambet Ingo-2 dal cui script ho preso ispirazione # per cominciare questo. # # Potete trovare la sua versione di uno script in python per fare # una cosa simile in questo thread: # http://old.nabble.com/dbus-and-OpenVPN-Autostart-td21905375.html # # Questo codice è rilasciato sotto licenza GPL3 che si trova nel # file LICENSE nell'archivio dei sorgenti che potete trovare clonando # il repository git su http://poisson.phc.unipi.it/~robol/gits/AutoVPN.git # # __author__ = "Leonardo Robol <robol@poisson.phc.unipi.it>" import dbus, sys from dbus.mainloop.glib import DBusGMainLoop DBusGMainLoop(set_as_default=True) def init(): """ Istruzioni da eseguire prima di fare ogni altra cosa. In poche parole otteniamo il bus di sistema che ci servirà abbondantemente in tutto lo script. """ global bus bus = dbus.SystemBus() def is_poisson_vpn(settings): """ Questa funzione riconosce la vpn per connettersi alla rete esterna tramite poisson facendo un check su nome dell'host remote e sulla porta. Nonostante il nome non sia un fqdn, penso che il test sia abbastanza deterministico. """ if settings['connection']['type'] != "vpn": return False if settings['vpn']['data']['remote'] != "poisson.phc-priv": return False # 1194 è la porta di default per la vpn, quindi può anche essere non # specificata nel file di configurazione. Controlliamo se è così, oppure # se è stata specificata ed impostata a 1194. if settings['vpn']['data'].has_key("port") and settings['vpn']['data']['port'] != 1194: return False # Se siamo arrivati a questo punto significa che questa è davvero # la VPN per connettersi alla rete esterna da poisson return True def get_poisson_vpn(): """ Ottiene la vpn per poisson tramite dbus """ # Tentiamo di caricare la configurazione dell'utente. proxy = bus.get_object("org.freedesktop.NetworkManagerUserSettings", "/org/freedesktop/NetworkManagerSettings") interface = dbus.Interface(proxy, "org.freedesktop.NetworkManagerSettings") # Ritorniamo None se non siamo in grado di trovare la VPN oppure # se è già attiva c = None # Controlliamo tutte le connessione salvate nelle connessione dell'utente # sperando di trovare la VPN. Se questa è specificata nelle connessioni di sistema, # beh.. questa è una feature per la prossima versione. for connection in interface.ListConnections(): proxy = bus.get_object("org.freedesktop.NetworkManagerUserSettings", connection) settings = proxy.GetSettings(dbus_interface="org.freedesktop.NetworkManagerSettings.Connection") # Check per determinare se questa è la connessione giusta if is_poisson_vpn (settings): c = connection # Controlliamo se la VPN è già attiva... proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties") # ...provando a confrontarla con tutte le connessioni attive for connection in interface.Get("org.freedesktop.NetworkManager", "ActiveConnections"): proxy = bus.get_object("org.freedesktop.NetworkManager", connection) interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties") connection = interface.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection") if connection == c: return None # Ritorniamo la connessione VPN o None se non c'è bisogno di fare nulla return c def get_base_connection(): """ Otteniamo la connessione su cui attivare la VPN (i.e. PHC-wifi o CDCWL1) """ # Otteniamo la lista di tutte le connessioni attive al momento proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties") active_connections = interface.Get('org.freedesktop.NetworkManager', 'ActiveConnections') # Esaminiamo ogni connessione attiva e verifichiamo se è una connessione wireless # e se lo è se l'AP ha lo stesso MAC di PHC-wifi o di CDCWL1 for connection in active_connections: proxy = bus.get_object("org.freedesktop.NetworkManager", connection) interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties") path = interface.Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection') proxy = bus.get_object('org.freedesktop.NetworkManagerUserSettings', path) interface = dbus.Interface(proxy, 'org.freedesktop.NetworkManagerSettings.Connection') settings = interface.GetSettings() if settings.has_key("802-11-wireless"): # MAC address of CDCWL1 ap if settings['802-11-wireless']['seen-bssids'][0] == u'00:12:0E:8C:AE:A0': return connection # MAC address of PHC-wifi ap if settings['802-11-wireless']['seen-bssids'][0] == u'00:0f:cb:aa:16:52': return connection # Se siamo arrivati a questo punto significa che la connessione attiva # non è direttamente connessa a poisson.phc-priv e qunidi possiamo # anche lasciar perdere return None def activate_connection(connection): """ Attiva la connessione """ proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") interface = dbus.Interface (proxy, "org.freedesktop.NetworkManager") # Otteniamo la connessione di base su cui attivare la VPN base_connection = get_base_connection () if base_connection is not None: interface.ActivateConnection('org.freedesktop.NetworkManagerUserSettings', connection, dbus.ObjectPath("/"), base_connection) if __name__ == "__main__": # Se hai appena staccato una VPN probabilmente non hai bisogno # che ti riattivi quella per poisson (anche perché potresti stare # cercando di liberartente). if sys.argv[2] == "vpn-down": sys.exit (0) # Se è appena stata attivata una VPN non ha senso cercare di # attivarne un'altra (se non altro perché NM non ne supporta più # di una nello stesso momento) if sys.argv[2] == "vpn-up": sys.exit (0) # Se hai appena deconfigurato un'interfaccia probabilmente non # desideri attivare la VPN if sys.argv[2] == "down": sys.exit (0) # Otteniamo il bus init () # ...e la VPN per poisson poisson_vpn = get_poisson_vpn () # Se non l'abbiamo trovata oppure è # già attiva possiamo anche uscire if (poisson_vpn is None): sys.exit (0) # Altrimenti la attiviamo, e poi usciamo :) activate_connection (poisson_vpn) sys.exit (0)