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.  
  26. import dbus, sys
  27. from dbus.mainloop.glib import DBusGMainLoop
  28.  
  29. DBusGMainLoop(set_as_default=True)
  30.  
  31. def init():
  32. """
  33. Istruzioni da eseguire prima di fare ogni altra cosa. In poche
  34. parole otteniamo il bus di sistema che ci servirà abbondantemente
  35. in tutto lo script.
  36. """
  37. global bus
  38. bus = dbus.SystemBus()
  39.  
  40. def is_poisson_vpn(settings):
  41. """
  42. Questa funzione riconosce la vpn per connettersi alla rete esterna
  43. tramite poisson facendo un check su nome dell'host remote e sulla
  44. porta. Nonostante il nome non sia un fqdn, penso che il test sia
  45. abbastanza deterministico.
  46. """
  47. if settings['connection']['type'] != "vpn":
  48. return False
  49. if settings['vpn']['data']['remote'] != "poisson.phc-priv":
  50. return False
  51.  
  52. # 1194 è la porta di default per la vpn, quindi può anche essere non
  53. # specificata nel file di configurazione. Controlliamo se è così, oppure
  54. # se è stata specificata ed impostata a 1194.
  55. if settings['vpn']['data'].has_key("port") and settings['vpn']['data']['port'] != 1194:
  56. return False
  57.  
  58. # Se siamo arrivati a questo punto significa che questa è davvero
  59. # la VPN per connettersi alla rete esterna da poisson
  60. return True
  61.  
  62. def get_poisson_vpn():
  63. """
  64. Ottiene la vpn per poisson tramite dbus
  65. """
  66.  
  67. # Tentiamo di caricare la configurazione dell'utente.
  68. proxy = bus.get_object("org.freedesktop.NetworkManagerUserSettings",
  69. "/org/freedesktop/NetworkManagerSettings")
  70. interface = dbus.Interface(proxy, "org.freedesktop.NetworkManagerSettings")
  71.  
  72. # Ritorniamo None se non siamo in grado di trovare la VPN oppure
  73. # se è già attiva
  74. c = None
  75.  
  76. # Controlliamo tutte le connessione salvate nelle connessione dell'utente
  77. # sperando di trovare la VPN. Se questa è specificata nelle connessioni di sistema,
  78. # beh.. questa è una feature per la prossima versione.
  79. for connection in interface.ListConnections():
  80. proxy = bus.get_object("org.freedesktop.NetworkManagerUserSettings",
  81. connection)
  82. settings = proxy.GetSettings(dbus_interface="org.freedesktop.NetworkManagerSettings.Connection")
  83.  
  84. # Check per determinare se questa è la connessione giusta
  85. if is_poisson_vpn (settings):
  86. c = connection
  87.  
  88. # Controlliamo se la VPN è già attiva...
  89. proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
  90. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  91.  
  92. # ...provando a confrontarla con tutte le connessioni attive
  93. for connection in interface.Get("org.freedesktop.NetworkManager", "ActiveConnections"):
  94. proxy = bus.get_object("org.freedesktop.NetworkManager", connection)
  95. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  96. connection = interface.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection")
  97. if connection == c:
  98. return None
  99.  
  100. # Ritorniamo la connessione VPN o None se non c'è bisogno di fare nulla
  101. return c
  102.  
  103. def get_base_connection():
  104. """
  105. Otteniamo la connessione su cui attivare la VPN (i.e. PHC-wifi o CDCWL1)
  106. """
  107.  
  108. # Otteniamo la lista di tutte le connessioni attive al momento
  109. proxy = bus.get_object("org.freedesktop.NetworkManager",
  110. "/org/freedesktop/NetworkManager")
  111. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  112. active_connections = interface.Get('org.freedesktop.NetworkManager', 'ActiveConnections')
  113.  
  114. # Esaminiamo ogni connessione attiva e verifichiamo se è una connessione wireless
  115. # e se lo è se l'AP ha lo stesso MAC di PHC-wifi o di CDCWL1
  116. for connection in active_connections:
  117. proxy = bus.get_object("org.freedesktop.NetworkManager",
  118. connection)
  119. interface = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  120. path = interface.Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
  121.  
  122. proxy = bus.get_object('org.freedesktop.NetworkManagerUserSettings',
  123. path)
  124. interface = dbus.Interface(proxy, 'org.freedesktop.NetworkManagerSettings.Connection')
  125. settings = interface.GetSettings()
  126.  
  127. if settings.has_key("802-11-wireless"):
  128.  
  129. # MAC address of CDCWL1 ap
  130. if settings['802-11-wireless']['seen-bssids'][0] == u'00:12:0E:8C:AE:A0':
  131. return connection
  132.  
  133. # MAC address of PHC-wifi ap
  134. if settings['802-11-wireless']['seen-bssids'][0] == u'00:0f:cb:aa:16:52':
  135. return connection
  136.  
  137. # Se siamo arrivati a questo punto significa che la connessione attiva
  138. # non è direttamente connessa a poisson.phc-priv e qunidi possiamo
  139. # anche lasciar perdere
  140. return None
  141.  
  142.  
  143. def activate_connection(connection):
  144. """
  145. Attiva la connessione
  146. """
  147. proxy = bus.get_object("org.freedesktop.NetworkManager",
  148. "/org/freedesktop/NetworkManager")
  149. interface = dbus.Interface (proxy, "org.freedesktop.NetworkManager")
  150.  
  151. # Otteniamo la connessione di base su cui attivare la VPN
  152. base_connection = get_base_connection ()
  153.  
  154. if base_connection is not None:
  155. interface.ActivateConnection('org.freedesktop.NetworkManagerUserSettings',
  156. connection,
  157. dbus.ObjectPath("/"),
  158. base_connection)
  159.  
  160. if __name__ == "__main__":
  161.  
  162. # Se hai appena staccato una VPN probabilmente non hai bisogno
  163. # che ti riattivi quella per poisson (anche perché potresti stare
  164. # cercando di liberartente).
  165. if sys.argv[2] == "vpn-down":
  166. sys.exit (0)
  167.  
  168. # Se è appena stata attivata una VPN non ha senso cercare di
  169. # attivarne un'altra (se non altro perché NM non ne supporta più
  170. # di una nello stesso momento)
  171. if sys.argv[2] == "vpn-up":
  172. sys.exit (0)
  173.  
  174. # Se hai appena deconfigurato un'interfaccia probabilmente non
  175. # desideri attivare la VPN
  176. if sys.argv[2] == "down":
  177. sys.exit (0)
  178.  
  179. # Otteniamo il bus
  180. init ()
  181.  
  182. # ...e la VPN per poisson
  183. poisson_vpn = get_poisson_vpn ()
  184.  
  185. # Se non l'abbiamo trovata oppure è
  186. # già attiva possiamo anche uscire
  187. if (poisson_vpn is None):
  188. sys.exit (0)
  189.  
  190. # Altrimenti la attiviamo, e poi usciamo :)
  191. activate_connection (poisson_vpn)
  192.  
  193. sys.exit (0)
  194.  
  195.