Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.77 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3.  
  4. my_name=$0
  5.  
  6.  
  7. function setup_environment {
  8. bf=""
  9. n=""
  10. ORGANISATION="Universidad de Talca"
  11. URL="your local eduroam support page"
  12. SUPPORT="your local eduroam support"
  13. if [ ! -z "$DISPLAY" ] ; then
  14. if which zenity 1>/dev/null 2>&1 ; then
  15. ZENITY=`which zenity`
  16. elif which kdialog 1>/dev/null 2>&1 ; then
  17. KDIALOG=`which kdialog`
  18. else
  19. if tty > /dev/null 2>&1 ; then
  20. if echo $TERM | grep -E -q "xterm|gnome-terminal|lxterminal" ; then
  21. bf="";
  22. n="";
  23. fi
  24. else
  25. find_xterm
  26. if [ -n "$XT" ] ; then
  27. $XT -e $my_name
  28. fi
  29. fi
  30. fi
  31. fi
  32. }
  33.  
  34. function split_line {
  35. echo $1 | awk -F '\\\\n' 'END { for(i=1; i <= NF; i++) print $i }'
  36. }
  37.  
  38. function find_xterm {
  39. terms="xterm aterm wterm lxterminal rxvt gnome-terminal konsole"
  40. for t in $terms
  41. do
  42. if which $t > /dev/null 2>&1 ; then
  43. XT=$t
  44. break
  45. fi
  46. done
  47. }
  48.  
  49.  
  50. function ask {
  51. T="eduroam CAT"
  52. # if ! [ -z "$3" ] ; then
  53. # T="$T: $3"
  54. # fi
  55. if [ ! -z $KDIALOG ] ; then
  56. if $KDIALOG --yesno "${1}\n${2}?" --title "$T" ; then
  57. return 0
  58. else
  59. return 1
  60. fi
  61. fi
  62. if [ ! -z $ZENITY ] ; then
  63. if $ZENITY --question --text="${1}\n${2}?" --title="$T" ; then
  64. return 0
  65. else
  66. return 1
  67. fi
  68. fi
  69.  
  70. yes=Y
  71. no=N
  72. yes1=`echo $yes | awk '{ print toupper($0) }'`
  73. no1=`echo $no | awk '{ print toupper($0) }'`
  74. if [ $3 == "0" ]; then
  75. def=$yes
  76. else
  77. def=$no
  78. fi
  79.  
  80. echo "";
  81. while true
  82. do
  83. split_line "$1"
  84. read -p "${bf}$2 ${yes}/${no}? [${def}]:$n " answer
  85. if [ -z "$answer" ] ; then
  86. answer=${def}
  87. fi
  88. answer=`echo $answer | awk '{ print toupper($0) }'`
  89. case "$answer" in
  90. ${yes1})
  91. return 0
  92. ;;
  93. ${no1})
  94. return 1
  95. ;;
  96. esac
  97. done
  98. }
  99.  
  100. function alert {
  101. if [ ! -z $KDIALOG ] ; then
  102. $KDIALOG --sorry "${1}"
  103. return
  104. fi
  105. if [ ! -z $ZENITY ] ; then
  106. $ZENITY --warning --text="$1"
  107. return
  108. fi
  109. echo "$1"
  110.  
  111. }
  112.  
  113. function show_info {
  114. if [ ! -z $KDIALOG ] ; then
  115. $KDIALOG --msgbox "${1}"
  116. return
  117. fi
  118. if [ ! -z $ZENITY ] ; then
  119. $ZENITY --info --width=500 --text="$1"
  120. return
  121. fi
  122. echo "$1"
  123. }
  124.  
  125. function confirm_exit {
  126. if [ ! -z $KDIALOG ] ; then
  127. if $KDIALOG --yesno \"Really quit?\" ; then
  128. exit 1
  129. fi
  130. fi
  131. if [ ! -z $ZENITY ] ; then
  132. if $ZENITY --question --text=\"Really quit?\" ; then
  133. exit 1
  134. fi
  135. fi
  136. }
  137.  
  138.  
  139.  
  140. function prompt_nonempty_string {
  141. prompt=$2
  142. if [ ! -z $ZENITY ] ; then
  143. if [ $1 -eq 0 ] ; then
  144. H="--hide-text "
  145. fi
  146. if ! [ -z "$3" ] ; then
  147. D="--entry-text=$3"
  148. fi
  149. elif [ ! -z $KDIALOG ] ; then
  150. if [ $1 -eq 0 ] ; then
  151. H="--password"
  152. else
  153. H="--inputbox"
  154. fi
  155. fi
  156.  
  157.  
  158. out_s="";
  159. if [ ! -z $ZENITY ] ; then
  160. while [ ! "$out_s" ] ; do
  161. out_s=`$ZENITY --entry --width=300 $H $D --text "$prompt"`
  162. if [ $? -ne 0 ] ; then
  163. confirm_exit
  164. fi
  165. done
  166. elif [ ! -z $KDIALOG ] ; then
  167. while [ ! "$out_s" ] ; do
  168. out_s=`$KDIALOG $H "$prompt" "$3"`
  169. if [ $? -ne 0 ] ; then
  170. confirm_exit
  171. fi
  172. done
  173. else
  174. while [ ! "$out_s" ] ; do
  175. read -p "${prompt}: " out_s
  176. done
  177. fi
  178. echo $out_s;
  179. }
  180.  
  181. function user_cred {
  182. PASSWORD="a"
  183. PASSWORD1="b"
  184.  
  185. if ! USER_NAME=`prompt_nonempty_string 1 "enter your userid"` ; then
  186. exit 1
  187. fi
  188.  
  189. while [ "$PASSWORD" != "$PASSWORD1" ]
  190. do
  191. if ! PASSWORD=`prompt_nonempty_string 0 "enter your password"` ; then
  192. exit 1
  193. fi
  194. if ! PASSWORD1=`prompt_nonempty_string 0 "repeat your password"` ; then
  195. exit 1
  196. fi
  197. if [ "$PASSWORD" != "$PASSWORD1" ] ; then
  198. alert "passwords do not match"
  199. fi
  200. done
  201. }
  202. setup_environment
  203. show_info "This installer has been prepared for ${ORGANISATION}\n\nMore information and comments:\n\nEMAIL: ${SUPPORT}\nWWW: ${URL}\n\nInstaller created with software from the GEANT project."
  204. if ! ask "This installer will only work properly if you are a member of ${bf}Universidad de Talca.${n}" "Continue" 1 ; then exit; fi
  205. if [ -d $HOME/.eduroam ] ; then
  206. if ! ask "Directory $HOME/.eduroam exists; some of its files may be overwritten." "Continue" 1 ; then exit; fi
  207. else
  208. mkdir $HOME/.eduroam
  209. fi
  210. # save certificates
  211. echo "-----BEGIN CERTIFICATE-----
  212. MIIEtzCCA5+gAwIBAgIJAJQZ9p7tYyDiMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD
  213. VQQGEwJDTDEOMAwGA1UECBMFVGFsY2ExHTAbBgNVBAoTFFVuaXZlcnNpZGFkIGRl
  214. IFRhbGNhMQwwCgYDVQQLEwNEVEkxJzAlBgNVBAMTHkF1dG9yaWRhZCBDZXJ0aWZp
  215. Y2Fkb3JhIFVUQUxDQTEjMCEGCSqGSIb3DQEJARYUcGxhdGFmb3JtYUB1dGFsY2Eu
  216. Y2wwHhcNMTUwMzExMDI0ODE3WhcNMTgwMzEwMDI0ODE3WjCBmDELMAkGA1UEBhMC
  217. Q0wxDjAMBgNVBAgTBVRhbGNhMR0wGwYDVQQKExRVbml2ZXJzaWRhZCBkZSBUYWxj
  218. YTEMMAoGA1UECxMDRFRJMScwJQYDVQQDEx5BdXRvcmlkYWQgQ2VydGlmaWNhZG9y
  219. YSBVVEFMQ0ExIzAhBgkqhkiG9w0BCQEWFHBsYXRhZm9ybWFAdXRhbGNhLmNsMIIB
  220. IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2n7ik1Arvt9p8zOj3ZQEJ1+r
  221. nMPiwZ0CtVI1jC+1H7eV2GGZ4m099V2YLUBTLg5zA/JtZV7IZijhE2dEotNdCG9z
  222. v1NiNv5NHskckW+UMFnpCj8ljXx0eTeZLhF7cHEHWU6JDedPghPGM5gocsHNKnBv
  223. NqSdwRCtlhYpjyW+mYFpzzcOfirxYZKPKRzGCn2hrRemBMznEf2jK7BHzTEJ8/3h
  224. lUlJK8wPvsf246SbG8ztDOoT+OXY/Qp+tdOCucC1f3E4xHjpte5krjGx3FMExi6K
  225. XQOVPrz3TiWQ5L6TsQv8hXyGuo+JFS6zb1y3xra1mKgWG5G5AgqERkVftWYOoQID
  226. AQABo4IBADCB/TAdBgNVHQ4EFgQU3pzZEtDibtU4oFjcM19L1Duipmgwgc0GA1Ud
  227. IwSBxTCBwoAU3pzZEtDibtU4oFjcM19L1DuipmihgZ6kgZswgZgxCzAJBgNVBAYT
  228. AkNMMQ4wDAYDVQQIEwVUYWxjYTEdMBsGA1UEChMUVW5pdmVyc2lkYWQgZGUgVGFs
  229. Y2ExDDAKBgNVBAsTA0RUSTEnMCUGA1UEAxMeQXV0b3JpZGFkIENlcnRpZmljYWRv
  230. cmEgVVRBTENBMSMwIQYJKoZIhvcNAQkBFhRwbGF0YWZvcm1hQHV0YWxjYS5jbIIJ
  231. AJQZ9p7tYyDiMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAIEh5/4M
  232. qV8BtSTX9jrDtodaQDQh59pATeAy1zv9hfo+uq6nxq9vEAb2A0QLvRNndx1I3uT8
  233. ZwHyLED/PGW1C7qutveSxj0I/VjEZlMEw+MGaEebxDdcRkCTZJZH5oACpf41zG3j
  234. dBbTTCMqjurg5dEvhSa3FUuGe5Fq5IhOApfz+kJpPS16xpmWQwT9HBeahomgruWz
  235. re92XwkfiDEEubHpQsnxfmz3pZSAeUseSFaw1Vxoo7jE3GN1tw+skKxah24c0RNF
  236. 1key9MatJnVIJ7fw1tVrRbgAJYYEoal625WWbvPfSI5ftKtc31ol5hBiAfBGtQOI
  237. dHna3fjmbjn5rK4=
  238. -----END CERTIFICATE-----
  239. " > $HOME/.eduroam/ca.pem
  240. function run_python_script {
  241. python << EOF > /dev/null 2>&1
  242. #-*- coding: utf-8 -*-
  243. import dbus
  244. import re
  245. import sys
  246. import uuid
  247. import os
  248.  
  249. class EduroamNMConfigTool:
  250.  
  251. def connect_to_NM(self):
  252. #connect to DBus
  253. try:
  254. self.bus = dbus.SystemBus()
  255. except dbus.exceptions.DBusException:
  256. print "Can't connect to DBus"
  257. sys.exit(2)
  258. #main service name
  259. self.system_service_name = "org.freedesktop.NetworkManager"
  260. #check NM version
  261. nm_version = self.check_nm_version()
  262. if nm_version == "0.9":
  263. self.settings_service_name = self.system_service_name
  264. self.connection_interface_name = "org.freedesktop.NetworkManager.Settings.Connection"
  265. #settings proxy
  266. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManager/Settings")
  267. #settings intrface
  268. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManager.Settings")
  269. elif nm_version == "0.8":
  270. #self.settings_service_name = "org.freedesktop.NetworkManagerUserSettings"
  271. self.settings_service_name = "org.freedesktop.NetworkManager"
  272. self.connection_interface_name = "org.freedesktop.NetworkManagerSettings.Connection"
  273. #settings proxy
  274. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManagerSettings")
  275. #settings intrface
  276. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManagerSettings")
  277. else:
  278. print "This Network Manager version is not supported"
  279. sys.exit(2)
  280.  
  281. def check_opts(self):
  282. self.cacert_file = '${HOME}/.eduroam/ca.pem'
  283. self.pfx_file = '${HOME}/.eduroam/user.p12'
  284. if not os.path.isfile(self.cacert_file):
  285. print "Certificate file not found, looks like a CAT error"
  286. sys.exit(2)
  287.  
  288. def check_nm_version(self):
  289. try:
  290. proxy = self.bus.get_object(self.system_service_name, "/org/freedesktop/NetworkManager")
  291. props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  292. version = props.Get("org.freedesktop.NetworkManager", "Version")
  293. except dbus.exceptions.DBusException:
  294. version = "0.8"
  295. if re.match(r'^0\.9', version):
  296. return "0.9"
  297. if re.match(r'^0\.8', version):
  298. return "0.8"
  299. else:
  300. return "Unknown version"
  301.  
  302. def byte_to_string(self, barray):
  303. return "".join([chr(x) for x in barray])
  304.  
  305.  
  306. def delete_existing_connections(self, ssid):
  307. "checks and deletes earlier connections"
  308. try:
  309. conns = self.settings.ListConnections()
  310. except dbus.exceptions.DBusException:
  311. print "DBus connection problem, a sudo might help"
  312. exit(3)
  313. for each in conns:
  314. con_proxy = self.bus.get_object(self.system_service_name, each)
  315. connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
  316. try:
  317. connection_settings = connection.GetSettings()
  318. if connection_settings['connection']['type'] == '802-11-wireless':
  319. conn_ssid = self.byte_to_string(connection_settings['802-11-wireless']['ssid'])
  320. if conn_ssid == ssid:
  321. connection.Delete()
  322. except dbus.exceptions.DBusException:
  323. pass
  324.  
  325. def add_connection(self,ssid):
  326. s_con = dbus.Dictionary({
  327. 'type': '802-11-wireless',
  328. 'uuid': str(uuid.uuid4()),
  329. 'permissions': ['user:$USER'],
  330. 'id': ssid
  331. })
  332. s_wifi = dbus.Dictionary({
  333. 'ssid': dbus.ByteArray(ssid),
  334. 'security': '802-11-wireless-security'
  335. })
  336. s_wsec = dbus.Dictionary({'key-mgmt': 'wpa-eap'})
  337. s_8021x = dbus.Dictionary({
  338. 'eap': ['ttls'],
  339. 'identity': '$USER_NAME',
  340. 'ca-cert': dbus.ByteArray("file://" + self.cacert_file + "\0"),
  341. 'subject-match': 'radius.utalca.cl',
  342. 'password': '$PASSWORD',
  343. 'phase2-auth': 'pap',
  344. })
  345. s_ip4 = dbus.Dictionary({'method': 'auto'})
  346. s_ip6 = dbus.Dictionary({'method': 'auto'})
  347. con = dbus.Dictionary({
  348. 'connection': s_con,
  349. '802-11-wireless': s_wifi,
  350. '802-11-wireless-security': s_wsec,
  351. '802-1x': s_8021x,
  352. 'ipv4': s_ip4,
  353. 'ipv6': s_ip6
  354. })
  355. self.settings.AddConnection(con)
  356.  
  357. def main(self):
  358. self.check_opts()
  359. ver = self.connect_to_NM()
  360. self.delete_existing_connections('eduroam')
  361. self.add_connection('eduroam')
  362.  
  363. if __name__ == "__main__":
  364. ENMCT = EduroamNMConfigTool()
  365. ENMCT.main()
  366. EOF
  367. }
  368. function create_wpa_conf {
  369. cat << EOFW >> $HOME/.eduroam/eduroam.conf
  370.  
  371. network={
  372. ssid="eduroam"
  373. key_mgmt=WPA-EAP
  374. eap=TTLS
  375. ca_cert="${HOME}/.eduroam/ca.pem"
  376. identity="${USER_NAME}"
  377. subject_match="radius.utalca.cl"
  378. phase2="auth=PAP"
  379. password="${PASSWORD}"
  380. }
  381. EOFW
  382. chmod 600 $HOME/.eduroam/eduroam.conf
  383. }
  384. #prompt user for credentials
  385. user_cred
  386. if run_python_script ; then
  387. show_info "Installation successful"
  388. else
  389. show_info "Network Manager configuration failed, generating wpa_supplicant.conf"
  390. if [ -f $HOME/.eduroam/eduroam.conf ] ; then
  391. if ! ask "File $HOME/.eduroam/eduroam.conf exists; it will be overwritten." "Continue" 1 ; then confirm_exit; fi
  392. rm $HOME/.eduroam/eduroam.conf
  393. fi
  394. create_wpa_conf
  395. show_info "Output written to $HOME/.eduroam/eduroam.conf"
  396. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement