Guest User

Untitled

a guest
Feb 5th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. ### config_eduroam.py door Marco van den Boogaard
  4. ### Configureer WPA supplicant voor eduroam @HU
  5. ### Door de zeer specifieke instellingen van eduroam binnen de HU gaat
  6. ### dit handmatig vaak fout
  7. ### Het drie keer openen van het bestand is niet heel efficient, maar
  8. ### een bewuste keuze aangezien het bestand op die manier ook geheel
  9. ### ongemoeid gelaten kan worden.
  10. ### laatste wijziging: 10 juli 2017
  11.  
  12. import smbpasswd
  13. import sys
  14. import getpass
  15. import re
  16. import errno
  17.  
  18. wpa_config="/etc/wpa_supplicant/wpa_supplicant.conf"
  19.  
  20. # Open het configuratiebestand om de bestaande configuratie in te lezen en
  21. # te controleren of er een oude (al dan niet werkende) eduroam
  22. # configuratie verwijderd moet worden
  23. # Met behulp van reguliere expressies en hulpvariabelen wordt
  24. # de configuratiefile geparsed en vastgelegd waar een
  25. # eventuele eduroam configuratie zich bevindt.
  26. eduroam = False
  27.  
  28. try:
  29. with open(wpa_config, "r") as f:
  30. alllines = f.readlines()
  31. deletelist = []
  32. for linenr in range(len(alllines)):
  33. if re.match("[ \t]*network[ \t]*=[{][ \t]*$", alllines[linenr]):
  34. networkstart=linenr
  35.  
  36. if re.match("[ \t]*ssid[ \t]*=[ \t]*\"eduroam\"[ \t]*$", alllines[linenr].lower()):
  37. eduroam=True
  38.  
  39. if eduroam and re.match("[ \t]*[}][ \t]*$", alllines[linenr]):
  40. # tel in ieder geval 1 op bij het regelnummer aangezien we starten bij 0, en 2 als er een lege regel volgt (anders wordt bij herhaaldelijk gebruik van dit script het configuratiebestand steeds langer met lege regels
  41. if linenr < len(alllines)-1 and re.match("^$", alllines[linenr+1]):
  42. networkend=linenr+2
  43. else:
  44. networkend=linenr+1
  45.  
  46. # zet het hele blok met betrekking tot eduroam vooraan de lijst van te verwijderen regels, zodat de laatste regels het eerste weggaan (anders klopt gaandeweg de telling niet meer)
  47. deletelist.insert(0, (networkstart, networkend))
  48.  
  49. # reset eduroam hulpvariabele, mogelijk zijn er meer eduroam blokken
  50. eduroam=False
  51.  
  52. except IOError as e:
  53. if e.errno == errno.ENOENT:
  54. print "Bestand {} niet gevonden".format(wpa_config)
  55. exit(e.errno)
  56. elif e.errno == errno.EACCES:
  57. print "Kan bestand {} niet lezen.\nWordt het script wel met rootrechten gedraaid?\nDit kan met behulp van de applicatielink op de desktop,\nmet behulp van sudo of vanuit een root login".format(wpa_config)
  58. exit(e.errno)
  59. else:
  60. raise
  61.  
  62.  
  63. # Schrijf het bestand zonder de oude eduroam configuratie alleen weg
  64. # indien nodig, en met toestemming van de gebruiker
  65. if len(deletelist) > 0:
  66. if raw_input("Er is een oude eduroam configuratie gevonden.\nConfiguratie van andere netwerken blijft ongemoeid.\nOude eduroam configuratie verwijderen (j/n)? ") == "j":
  67. for (begin, eind) in deletelist:
  68. del alllines[begin:eind]
  69. else:
  70. print "Programma afgebroken, er zijn geen wijzigingen aangebracht"
  71. exit()
  72.  
  73. try:
  74. with open(wpa_config, "w") as f:
  75. for line in alllines:
  76. f.write(line)
  77.  
  78. except IOError as e:
  79. if e.errno == errno.ENOENT:
  80. # Dit zou nu niet meer mogen gebeuren, er is al succesvol gelezen
  81. print "Bestand {} niet gevonden".format(wpa_config)
  82. exit(e.errno)
  83. elif e.errno == errno.EACCES:
  84. print "Kan bestand {} niet schrijven.\nWordt het script wel met rootrechten gedraaid?\nDit kan met behulp van de applicatielink op de desktop,\nmet behulp van sudo of vanuit een root login".format(wpa_config)
  85. exit(e.errno)
  86. else:
  87. raise
  88.  
  89. # Vraag naar de Eduroam inloggegevens:
  90. # username bevat hierna de inlognaam
  91. # pwdhash bevat hierna de password hash in NTLM formaat (het is slechts
  92. # een MD4 hash, maar beter dan een plaintext wachtwoord in
  93. # het configuratiebestand op een systeem waar niet gegarandeerd
  94. # is dat het root account erg veilig is
  95. # pwdcheck is alleen tijdelijk nodig voor controle van het wachtwoord
  96. print("Hieronder wordt gevraagd om gebruikersnaam en (2x) wachtwoord. Sluit af met <Enter>.\nBij het invoeren van het wachtwoord krijg je niets te zien, dit hoort zo.\n")
  97. username=raw_input("HU account: ")
  98.  
  99. # Blijf om paren wachtwoorden vragen tot de twee wachtwoorden met elkaar matchen
  100. while True:
  101. pwdhash=str.lower(smbpasswd.nthash(getpass.getpass("Wachtwoord: ")))
  102. pwdcheck=str.lower(smbpasswd.nthash(getpass.getpass("Herhaal wachtwoord: ")))
  103. if pwdhash == pwdcheck:
  104. # matchende wachtwoorden ingegeven, ga verder
  105. break
  106. else:
  107. print("De ingevoerde wachtwoorden zijn niet gelijk. Probeer het opnieuw")
  108.  
  109. # Definieer nieuw configuratieblok voor eduroam;
  110. # username en pwdhash worden met behulp van string.format() toegevoegd,
  111. # daarom moeten ook de open- en sluitaccolades pas dan worden toegevoegd,
  112. # anders raakt format() in de war
  113. eduroam_config="""
  114.  
  115. network={}
  116. ssid=\"eduroam\"
  117. proto=RSN
  118. key_mgmt=WPA-EAP
  119. pairwise=CCMP
  120. auth_alg=OPEN
  121. eap=PEAP
  122. identity=\"{}\"
  123. password=hash:{}
  124. phase2=\"auth=MSCHAPV2\"
  125. {}
  126. """
  127.  
  128. try:
  129. with open(wpa_config, "a") as f:
  130. f.write(eduroam_config.format("{",username, pwdhash,"}"))
  131.  
  132. except IOError as e:
  133. if e.errno == errno.ENOENT:
  134. # Dit zou nu niet meer mogen gebeuren, er is al succesvol gelezen
  135. print "Bestand {} niet gevonden".format(wpa_config)
  136. exit(e.errno)
  137. elif e.errno == errno.EACCES:
  138. print "Kan bestand {} niet schrijven.\nWordt het script wel met rootrechten gedraaid?\nDit kan met behulp van de applicatielink op de desktop,\nmet behulp van sudo of vanuit een root login".format(wpa_config)
  139. exit(e.errno)
  140. else:
  141. raise
Add Comment
Please, Sign In to add comment