Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.91 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. if [ -z "$BASH" ] ; then
  3. bash $0
  4. exit
  5. fi
  6.  
  7.  
  8.  
  9. my_name=$0
  10.  
  11.  
  12. function setup_environment {
  13. bf=""
  14. n=""
  15. ORGANISATION="Uniwersytet Warszawski"
  16. URL="https://it.uw.edu.pl/eduroam/"
  17. SUPPORT="eduroam@adm.uw.edu.pl"
  18. if [ ! -z "$DISPLAY" ] ; then
  19. if which zenity 1>/dev/null 2>&1 ; then
  20. ZENITY=`which zenity`
  21. elif which kdialog 1>/dev/null 2>&1 ; then
  22. KDIALOG=`which kdialog`
  23. else
  24. if tty > /dev/null 2>&1 ; then
  25. if echo $TERM | grep -E -q "xterm|gnome-terminal|lxterminal" ; then
  26. bf="";
  27. n="";
  28. fi
  29. else
  30. find_xterm
  31. if [ -n "$XT" ] ; then
  32. $XT -e $my_name
  33. fi
  34. fi
  35. fi
  36. fi
  37. }
  38.  
  39. function split_line {
  40. echo $1 | awk -F '\\\\n' 'END { for(i=1; i <= NF; i++) print $i }'
  41. }
  42.  
  43. function find_xterm {
  44. terms="xterm aterm wterm lxterminal rxvt gnome-terminal konsole"
  45. for t in $terms
  46. do
  47. if which $t > /dev/null 2>&1 ; then
  48. XT=$t
  49. break
  50. fi
  51. done
  52. }
  53.  
  54.  
  55. function ask {
  56. T="eduroam CAT"
  57. # if ! [ -z "$3" ] ; then
  58. # T="$T: $3"
  59. # fi
  60. if [ ! -z $KDIALOG ] ; then
  61. if $KDIALOG --yesno "${1}\n${2}?" --title "$T" ; then
  62. return 0
  63. else
  64. return 1
  65. fi
  66. fi
  67. if [ ! -z $ZENITY ] ; then
  68. text=`echo "${1}" | fmt -w60`
  69. if $ZENITY --no-wrap --question --text="${text}\n${2}?" --title="$T" 2>/dev/null ; then
  70. return 0
  71. else
  72. return 1
  73. fi
  74. fi
  75.  
  76. yes=T
  77. no=N
  78. yes1=`echo $yes | awk '{ print toupper($0) }'`
  79. no1=`echo $no | awk '{ print toupper($0) }'`
  80.  
  81. if [ $3 == "0" ]; then
  82. def=$yes
  83. else
  84. def=$no
  85. fi
  86.  
  87. echo "";
  88. while true
  89. do
  90. split_line "$1"
  91. read -p "${bf}$2 ${yes}/${no}? [${def}]:$n " answer
  92. if [ -z "$answer" ] ; then
  93. answer=${def}
  94. fi
  95. answer=`echo $answer | awk '{ print toupper($0) }'`
  96. case "$answer" in
  97. ${yes1})
  98. return 0
  99. ;;
  100. ${no1})
  101. return 1
  102. ;;
  103. esac
  104. done
  105. }
  106.  
  107. function alert {
  108. if [ ! -z $KDIALOG ] ; then
  109. $KDIALOG --sorry "${1}"
  110. return
  111. fi
  112. if [ ! -z $ZENITY ] ; then
  113. $ZENITY --warning --text="$1" 2>/dev/null
  114. return
  115. fi
  116. echo "$1"
  117.  
  118. }
  119.  
  120. function show_info {
  121. if [ ! -z $KDIALOG ] ; then
  122. $KDIALOG --msgbox "${1}"
  123. return
  124. fi
  125. if [ ! -z $ZENITY ] ; then
  126. $ZENITY --info --width=500 --text="$1" 2>/dev/null
  127. return
  128. fi
  129. split_line "$1"
  130. }
  131.  
  132. function confirm_exit {
  133. if [ ! -z $KDIALOG ] ; then
  134. if $KDIALOG --yesno "Naprawdę zakończyć?" ; then
  135. exit 1
  136. fi
  137. fi
  138. if [ ! -z $ZENITY ] ; then
  139. if $ZENITY --question --text="Naprawdę zakończyć?" 2>/dev/null ; then
  140. exit 1
  141. fi
  142. fi
  143. }
  144.  
  145.  
  146.  
  147. function prompt_nonempty_string {
  148. prompt=$2
  149. if [ ! -z $ZENITY ] ; then
  150. if [ $1 -eq 0 ] ; then
  151. H="--hide-text "
  152. fi
  153. if ! [ -z "$3" ] ; then
  154. D="--entry-text=$3"
  155. fi
  156. elif [ ! -z $KDIALOG ] ; then
  157. if [ $1 -eq 0 ] ; then
  158. H="--password"
  159. else
  160. H="--inputbox"
  161. fi
  162. fi
  163.  
  164.  
  165. out_s="";
  166. if [ ! -z $ZENITY ] ; then
  167. while [ ! "$out_s" ] ; do
  168. out_s=`$ZENITY --entry --width=300 $H $D --text "$prompt" 2>/dev/null`
  169. if [ $? -ne 0 ] ; then
  170. confirm_exit
  171. fi
  172. done
  173. elif [ ! -z $KDIALOG ] ; then
  174. while [ ! "$out_s" ] ; do
  175. out_s=`$KDIALOG $H "$prompt" "$3"`
  176. if [ $? -ne 0 ] ; then
  177. confirm_exit
  178. fi
  179. done
  180. else
  181. while [ ! "$out_s" ] ; do
  182. read -p "${prompt}: " out_s
  183. done
  184. fi
  185. echo "$out_s";
  186. }
  187.  
  188. function user_cred {
  189. PASSWORD="a"
  190. PASSWORD1="b"
  191.  
  192. if ! USER_NAME=`prompt_nonempty_string 1 "wprowadź identyfikator użytkownika"` ; then
  193. exit 1
  194. fi
  195.  
  196. while [ "$PASSWORD" != "$PASSWORD1" ]
  197. do
  198. if ! PASSWORD=`prompt_nonempty_string 0 "wprowadź hasło"` ; then
  199. exit 1
  200. fi
  201. if ! PASSWORD1=`prompt_nonempty_string 0 "powtórz hasło"` ; then
  202. exit 1
  203. fi
  204. if [ "$PASSWORD" != "$PASSWORD1" ] ; then
  205. alert "niezgodność haseł"
  206. fi
  207. done
  208. }
  209. setup_environment
  210. show_info "Ten instalator został przygotowany dla instytucji: ${ORGANISATION}\n\nWięcej informacji i uwagi:\n\nEMAIL: ${SUPPORT}\nWWW: ${URL}\n\nInstalator został stworzony przy pomocy oprogramowania przygotowanego przez projekt GEANT."
  211. if ! ask "Ten instalator będzie poprawnie działał tylko jeżeli Twoją instytucją macierzystą jest ${bf}Uniwersytet Warszawski.${n}" "Kontynuuj" 1 ; then exit; fi
  212. if [ -d $HOME/.cat_installer ] ; then
  213. if ! ask "Katalog $HOME/.cat_installer już istnieje; niektóre pliki mogą ulec zmianie." "Kontynuuj" 1 ; then exit; fi
  214. else
  215. mkdir $HOME/.cat_installer
  216. fi
  217. # save certificates
  218. echo "-----BEGIN CERTIFICATE-----
  219. MIIE+zCCA+OgAwIBAgIQCHC8xa8/25Wakctq7u/kZTANBgkqhkiG9w0BAQsFADBl
  220. MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
  221. d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
  222. b3QgQ0EwHhcNMTQxMTE4MTIwMDAwWhcNMjQxMTE4MTIwMDAwWjBkMQswCQYDVQQG
  223. EwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJQW1zdGVyZGFt
  224. MQ8wDQYDVQQKEwZURVJFTkExGDAWBgNVBAMTD1RFUkVOQSBTU0wgQ0EgMzCCASIw
  225. DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMV2Dw/ZQyk7bG3RR63eEL8jwnio
  226. Snc18SNb4EweQefCMQC9iDdFdd25AhCAHo/tZCMERaegOTuBTc9jP8JJ/yKeiLDS
  227. lrlcinQfkioq8hLIt2hUtVhBgUBoBhpPhSn7tU08D08/QJYbzqjMXjX/ZJj1dd10
  228. VAWgNhEEEiRVY++Udy538RV27tOkWUUhn6i+0SftCuirOMo/h9Ha8Y+5Cx9E5+Ct
  229. 85XCFk3shKM6ktTPxn3mvcsaQE+zVLHzj28NHuO+SaNW5Ae8jafOHbBbV1bRxBz8
  230. mGXRzUYvkZS/RYVJ+G1ShxwCVgEnFqtyLvRx5GG1IKD6JmlqCvGrn223zyUCAwEA
  231. AaOCAaYwggGiMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMHkG
  232. CCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu
  233. Y29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln
  234. aUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MIGBBgNVHR8EejB4MDqgOKA2hjRodHRw
  235. Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3Js
  236. MDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVk
  237. SURSb290Q0EuY3JsMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxo
  238. dHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMB0GA1UdDgQWBBRn/YggFCeYxwnS
  239. JRm76VERY3VQYjAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
  240. hkiG9w0BAQsFAAOCAQEAqSg1esR71tonHqyYzyc2TxEydHTmQN0dzfJodzWvs4xd
  241. xgS/FfQjZ4u5b5cE60adws3J0aSugS7JurHogNAcyTnBVnZZbJx946nw09E02DxJ
  242. WYsamM6/xvLYMDX/6W9doK867mZTrqqMaci+mqege9iCSzMTyAfzd9fzZM2eY/lC
  243. J1OuEDOJcjcV8b73HjWizsMt8tey5gvHacDlH198aZt+ziYaM0TDuncFO7pdP0GJ
  244. +hY77gRuW6xWS++McPJKe1e9GW6LNgdUJi2GCZQfXzer8CM/jyxflp5HcahE3qm5
  245. hS+1NGClXwmgmkMd1L8tRNaN2v11y18WoA5hwnA9Ng==
  246. -----END CERTIFICATE-----
  247.  
  248. -----BEGIN CERTIFICATE-----
  249. MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
  250. MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
  251. d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
  252. b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
  253. EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
  254. cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
  255. MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
  256. JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
  257. mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
  258. wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
  259. VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
  260. AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
  261. AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
  262. BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
  263. pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
  264. dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
  265. fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
  266. NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
  267. H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
  268. +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
  269. -----END CERTIFICATE-----
  270.  
  271. " > $HOME/.cat_installer/ca.pem
  272. function run_python_script {
  273. PASSWORD=$( echo "$PASSWORD" | sed "s/'/\\\'/g" )
  274. if python << EEE1 > /dev/null 2>&1
  275. import dbus
  276. EEE1
  277. then
  278. PYTHON=python
  279. elif python3 << EEE2 > /dev/null 2>&1
  280. import dbus
  281. EEE2
  282. then
  283. PYTHON=python3
  284. else
  285. PYTHON=none
  286. return 1
  287. fi
  288.  
  289. $PYTHON << EOF > /dev/null 2>&1
  290. #-*- coding: utf-8 -*-
  291. import dbus
  292. import re
  293. import sys
  294. import uuid
  295. import os
  296.  
  297. class EduroamNMConfigTool:
  298.  
  299. def connect_to_NM(self):
  300. #connect to DBus
  301. try:
  302. self.bus = dbus.SystemBus()
  303. except dbus.exceptions.DBusException:
  304. print("Can't connect to DBus")
  305. sys.exit(2)
  306. #main service name
  307. self.system_service_name = "org.freedesktop.NetworkManager"
  308. #check NM version
  309. self.check_nm_version()
  310. if self.nm_version == "0.9" or self.nm_version == "1.0":
  311. self.settings_service_name = self.system_service_name
  312. self.connection_interface_name = "org.freedesktop.NetworkManager.Settings.Connection"
  313. #settings proxy
  314. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManager/Settings")
  315. #settings intrface
  316. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManager.Settings")
  317. elif self.nm_version == "0.8":
  318. #self.settings_service_name = "org.freedesktop.NetworkManagerUserSettings"
  319. self.settings_service_name = "org.freedesktop.NetworkManager"
  320. self.connection_interface_name = "org.freedesktop.NetworkManagerSettings.Connection"
  321. #settings proxy
  322. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManagerSettings")
  323. #settings intrface
  324. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManagerSettings")
  325. else:
  326. print("This Network Manager version is not supported")
  327. sys.exit(2)
  328.  
  329. def check_opts(self):
  330. self.cacert_file = '${HOME}/.cat_installer/ca.pem'
  331. self.pfx_file = '${HOME}/.cat_installer/user.p12'
  332. if not os.path.isfile(self.cacert_file):
  333. print("Certificate file not found, looks like a CAT error")
  334. sys.exit(2)
  335.  
  336. def check_nm_version(self):
  337. try:
  338. proxy = self.bus.get_object(self.system_service_name, "/org/freedesktop/NetworkManager")
  339. props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  340. version = props.Get("org.freedesktop.NetworkManager", "Version")
  341. except dbus.exceptions.DBusException:
  342. version = "0.8"
  343. if re.match(r'^1\.', version):
  344. self.nm_version = "1.0"
  345. return
  346. if re.match(r'^0\.9', version):
  347. self.nm_version = "0.9"
  348. return
  349. if re.match(r'^0\.8', version):
  350. self.nm_version = "0.8"
  351. return
  352. else:
  353. self.nm_version = "Unknown version"
  354. return
  355.  
  356. def byte_to_string(self, barray):
  357. return "".join([chr(x) for x in barray])
  358.  
  359.  
  360. def delete_existing_connections(self, ssid):
  361. "checks and deletes earlier connections"
  362. try:
  363. conns = self.settings.ListConnections()
  364. except dbus.exceptions.DBusException:
  365. print("DBus connection problem, a sudo might help")
  366. exit(3)
  367. for each in conns:
  368. con_proxy = self.bus.get_object(self.system_service_name, each)
  369. connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
  370. try:
  371. connection_settings = connection.GetSettings()
  372. if connection_settings['connection']['type'] == '802-11-wireless':
  373. conn_ssid = self.byte_to_string(connection_settings['802-11-wireless']['ssid'])
  374. if conn_ssid == ssid:
  375. connection.Delete()
  376. except dbus.exceptions.DBusException:
  377. pass
  378.  
  379. def add_connection(self,ssid):
  380. server_alt_subject_name_list = dbus.Array({'DNS:eduroam.uw.edu.pl'})
  381. server_name = 'eduroam.uw.edu.pl'
  382. if self.nm_version == "0.9" or self.nm_version == "1.0":
  383. match_key = 'altsubject-matches'
  384. match_value = server_alt_subject_name_list
  385. else:
  386. match_key = 'subject-match'
  387. match_value = server_name
  388.  
  389. s_con = dbus.Dictionary({
  390. 'type': '802-11-wireless',
  391. 'uuid': str(uuid.uuid4()),
  392. 'permissions': ['user:$USER'],
  393. 'id': ssid
  394. })
  395. s_wifi = dbus.Dictionary({
  396. 'ssid': dbus.ByteArray(ssid.encode('utf8')),
  397. 'security': '802-11-wireless-security'
  398. })
  399. s_wsec = dbus.Dictionary({
  400. 'key-mgmt': 'wpa-eap',
  401. 'proto': ['rsn',],
  402. 'pairwise': ['ccmp',],
  403. 'group': ['ccmp', 'tkip']
  404. })
  405. s_8021x = dbus.Dictionary({
  406. 'eap': ['peap'],
  407. 'identity': '$USER_NAME',
  408. 'ca-cert': dbus.ByteArray("file://{0}\0".format(self.cacert_file).encode('utf8')),
  409. match_key: match_value,
  410. 'password': '$PASSWORD',
  411. 'phase2-auth': 'mschapv2',
  412. })
  413. s_ip4 = dbus.Dictionary({'method': 'auto'})
  414. s_ip6 = dbus.Dictionary({'method': 'auto'})
  415. con = dbus.Dictionary({
  416. 'connection': s_con,
  417. '802-11-wireless': s_wifi,
  418. '802-11-wireless-security': s_wsec,
  419. '802-1x': s_8021x,
  420. 'ipv4': s_ip4,
  421. 'ipv6': s_ip6
  422. })
  423. self.settings.AddConnection(con)
  424.  
  425. def main(self):
  426. self.check_opts()
  427. ver = self.connect_to_NM()
  428. self.delete_existing_connections('eduroam')
  429. self.add_connection('eduroam')
  430.  
  431. if __name__ == "__main__":
  432. ENMCT = EduroamNMConfigTool()
  433. ENMCT.main()
  434. EOF
  435. }
  436. function create_wpa_conf {
  437. cat << EOFW >> $HOME/.cat_installer/cat_installer.conf
  438.  
  439. network={
  440. ssid="eduroam"
  441. key_mgmt=WPA-EAP
  442. pairwise=CCMP
  443. group=CCMP TKIP
  444. eap=PEAP
  445. ca_cert="${HOME}/.cat_installer/ca.pem"
  446. identity="${USER_NAME}"
  447. domain_suffix_match="eduroam.uw.edu.pl"
  448. phase2="auth=MSCHAPV2"
  449. password="${PASSWORD}"
  450. }
  451. EOFW
  452. chmod 600 $HOME/.cat_installer/cat_installer.conf
  453. }
  454. #prompt user for credentials
  455. user_cred
  456. if run_python_script ; then
  457. show_info "Instalacja zakończona"
  458. else
  459. show_info "Nie udało się skonfigurować Network Managera, tworzę konfigurację wpa_suplicant"
  460. if ! ask "Network Manager configuration failed, but we may generate a wpa_supplicant configuration file if you wish. Be warned that your connection password will be saved in this file as clear text." "Zapisz plik" 1 ; then exit ; fi
  461.  
  462. if [ -f $HOME/.cat_installer/cat_installer.conf ] ; then
  463. if ! ask "Plik $HOME/.cat_installer/cat_installer.conf już istnieje i zostanie zastąpiony nowym." "Kontynuuj" 1 ; then confirm_exit; fi
  464. rm $HOME/.cat_installer/cat_installer.conf
  465. fi
  466. create_wpa_conf
  467. show_info "Wynik zapisano w $HOME/.cat_installer/cat_installer.conf"
  468. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement