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]

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Questo è un semplice script che attiva automaticamente
  5. # la VPN verso poisson per chi si connette ad una rete wireless
  6. # dall'interno del dipartimenti di Matematica di Pisa.
  7. #
  8. # Io lo uso per evitare di dover fare un clic di troppo ;)
  9. #
  10. # Ringrazio Tambet Ingo-2 dal cui script ho preso ispirazione
  11. # per cominciare questo.
  12. #
  13. # Potete trovare la sua versione di uno script in python per fare
  14. # una cosa simile in questo thread:
  15. # http://old.nabble.com/dbus-and-OpenVPN-Autostart-td21905375.html
  16. #
  17. # Questo codice è rilasciato sotto licenza GPL3 che si trova nel
  18. # file LICENSE nell'archivio dei sorgenti che potete trovare clonando
  19. # il repository git su http://poisson.phc.unipi.it/~robol/gits/AutoVPN.git
  20. #
  21. #
  22.  
  23. __author__ = "Leonardo Robol <robol@poisson.phc.unipi.it>"
  24.  
  25. # Defaults
  26. apt_proxy_file = "/etc/apt/apt.conf.d/99poisson_proxy"
  27.  
  28.  
  29. import dbus, sys, os
  30. from dbus.mainloop.glib import DBusGMainLoop
  31.  
  32. DBusGMainLoop(set_as_default=True)
  33.  
  34. def init():
  35. """
  36. Istruzioni da eseguire prima di fare ogni altra cosa. In poche
  37. parole otteniamo il bus di sistema che ci servirà abbondantemente
  38. in tutto lo script.
  39. """
  40. global bus
  41. bus = dbus.SystemBus()
  42.  
  43. def is_poisson_vpn(settings):
  44. """
  45. Questa funzione riconosce la vpn per connettersi alla rete esterna
  46. tramite poisson facendo un check su nome dell'host remote e sulla
  47. porta. Nonostante il nome non sia un fqdn, penso che il test sia
  48. abbastanza deterministico.
  49. """
  50. if settings['connection']['type'] != "vpn":
  51. return False
  52. if settings['vpn']['data']['remote'] != "poisson.phc-priv":
  53. return False
  54.  
  55. # 1194 è la porta di default per la vpn, quindi può anche essere non
  56. # specificata nel file di configurazione. Controlliamo se è così, oppure
  57. # se è stata specificata ed impostata a 1194.
  58. if settings['vpn']['data'].has_key("port") and settings['vpn']['data']['port'] != 1194:
  59. return False
  60.  
  61. # Se siamo arrivati a questo punto significa che questa è davvero
  62. # la VPN per connettersi alla rete esterna da poisson
  63. return True
  64.  
  65. def get_poisson_vpn():
  66. """
  67. Ottiene la vpn per poisson tramite dbus
  68. """
  69.  
  70. # Tentiamo di caricare la configurazione dell'utente.
  71. proxy = bus.get_object("org.freedesktop.NetworkManagerUserSettings",
  72. "/org/freedesktop/NetworkManagerSettings")
  73. interface = dbus.Interface(proxy, "org.freedesktop.NetworkManagerSettings")
  74.  
  75. # Ritorniamo None se non siamo in grado di trovare la VPN oppure
  76. # se è già attiva
  77. c = None
  78.  
  79. # Controlliamo tutte le connessione salvate nelle connessione dell'utente
  80. # sperando di trovare la VPN. Se questa è specificata nelle connessioni di sistema,
  81. # beh.. questa è una feature per la prossima versione.
  82. for connection in interface.ListConnections():
  83. proxy = bus.get_object("org.freedesktop.NetworkManagerUserSettings",
  84. connection)
  85. settings = proxy.GetSettings(dbus_interface="org.freedesktop.NetworkManagerSettings.Connection")
  86.  
  87. # Check per determinare se questa è la connessione giusta
  88. if is_poisson_vpn (settings):
  89. c = connection
  90.  
  91. # Controlliamo se la VPN è già attiva...
  92. proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
  93. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  94.  
  95. # ...provando a confrontarla con tutte le connessioni attive
  96. for connection in interface.Get("org.freedesktop.NetworkManager", "ActiveConnections"):
  97. proxy = bus.get_object("org.freedesktop.NetworkManager", connection)
  98. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  99. connection = interface.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection")
  100. if connection == c:
  101. return None
  102.  
  103. # Ritorniamo la connessione VPN o None se non c'è bisogno di fare nulla
  104. return c
  105.  
  106. def get_base_connection():
  107. """
  108. Otteniamo la connessione su cui attivare la VPN (i.e. PHC-wifi o CDCWL1)
  109. """
  110.  
  111. # Otteniamo la lista di tutte le connessioni attive al momento
  112. proxy = bus.get_object("org.freedesktop.NetworkManager",
  113. "/org/freedesktop/NetworkManager")
  114. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  115. active_connections = interface.Get('org.freedesktop.NetworkManager', 'ActiveConnections')
  116.  
  117. # Esaminiamo ogni connessione attiva e verifichiamo se è una connessione wireless
  118. # e se lo è se l'AP ha lo stesso MAC di PHC-wifi o di CDCWL1
  119. for connection in active_connections:
  120. proxy = bus.get_object("org.freedesktop.NetworkManager",
  121. connection)
  122. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  123. path = interface.Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
  124.  
  125. proxy = bus.get_object('org.freedesktop.NetworkManagerUserSettings',
  126. path)
  127. interface = dbus.Interface(proxy, 'org.freedesktop.NetworkManagerSettings.Connection')
  128. settings = interface.GetSettings()
  129.  
  130. if settings.has_key("802-11-wireless"):
  131.  
  132. # MAC address of CDCWL1 ap
  133. if settings['802-11-wireless']['seen-bssids'][0] == u'00:12:0E:8C:AE:A0':
  134. return connection
  135.  
  136. # MAC address of PHC-wifi ap
  137. if settings['802-11-wireless']['seen-bssids'][0] == u'00:0f:cb:aa:16:52':
  138. return connection
  139.  
  140. # Se siamo arrivati a questo punto significa che la connessione attiva
  141. # non è direttamente connessa a poisson.phc-priv e qunidi possiamo
  142. # anche lasciar perdere
  143. return None
  144.  
  145.  
  146. def activate_connection(connection):
  147. """
  148. Attiva la connessione
  149. """
  150. proxy = bus.get_object("org.freedesktop.NetworkManager",
  151. "/org/freedesktop/NetworkManager")
  152. interface = dbus.Interface (proxy, "org.freedesktop.NetworkManager")
  153.  
  154. # Otteniamo la connessione di base su cui attivare la VPN
  155. base_connection = get_base_connection ()
  156.  
  157. if base_connection is not None:
  158. interface.ActivateConnection('org.freedesktop.NetworkManagerUserSettings',
  159. connection,
  160. dbus.ObjectPath("/"),
  161. base_connection)
  162. setup_apt_proxy ()
  163. else:
  164. reset_apt_proxy ()
  165.  
  166. def reset_apt_proxy():
  167. if os.path.exists(apt_proxy_file):
  168. os.path.remove(apt_proxy_file)
  169.  
  170. def setup_apt_proxy():
  171. if not os.path.exists(apt_proxy_file):
  172. with open(apt_proxy_file, "w") as handle:
  173. handle.write("""Acquire::http { Proxy "http://poisson:3142"; };""")
  174. handle.write("\n")
  175.  
  176.  
  177. if __name__ == "__main__":
  178.  
  179. # Se hai appena staccato una VPN probabilmente non hai bisogno
  180. # che ti riattivi quella per poisson (anche perché potresti stare
  181. # cercando di liberartente).
  182. if sys.argv[2] == "vpn-down":
  183. delete_apt_proxy()
  184. sys.exit (0)
  185.  
  186. # Se è appena stata attivata una VPN non ha senso cercare di
  187. # attivarne un'altra (se non altro perché NM non ne supporta più
  188. # di una nello stesso momento)
  189. if sys.argv[2] == "vpn-up":
  190. sys.exit (0)
  191.  
  192. # Se hai appena deconfigurato un'interfaccia probabilmente non
  193. # desideri attivare la VPN
  194. if sys.argv[2] == "down":
  195. delete_apt_proxy()
  196. sys.exit (0)
  197.  
  198. # Otteniamo il bus
  199. init ()
  200.  
  201. # ...e la VPN per poisson
  202. poisson_vpn = get_poisson_vpn ()
  203.  
  204. # Se non l'abbiamo trovata oppure è
  205. # già attiva possiamo anche uscire
  206. if (poisson_vpn is None):
  207. sys.exit (0)
  208.  
  209. # Altrimenti la attiviamo, e poi usciamo :)
  210. activate_connection (poisson_vpn)
  211.  
  212. sys.exit (0)
  213.  
  214.