Advertisement
Guest User

Untitled

a guest
Sep 16th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.42 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="ENSTA ParisTech - Ecole Nationale Supérieure de Techniques Avancées"
  16. URL="your local eduroam support page"
  17. SUPPORT="sie.enseignement@ensta-paristech.fr"
  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=Y
  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 "Really quit?" ; then
  135. exit 1
  136. fi
  137. fi
  138. if [ ! -z $ZENITY ] ; then
  139. if $ZENITY --question --text="Really quit?" 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 "enter your userid"` ; then
  193. exit 1
  194. fi
  195.  
  196. while [ "$PASSWORD" != "$PASSWORD1" ]
  197. do
  198. if ! PASSWORD=`prompt_nonempty_string 0 "enter your password"` ; then
  199. exit 1
  200. fi
  201. if ! PASSWORD1=`prompt_nonempty_string 0 "repeat your password"` ; then
  202. exit 1
  203. fi
  204. if [ "$PASSWORD" != "$PASSWORD1" ] ; then
  205. alert "passwords do not match"
  206. fi
  207. done
  208. }
  209. setup_environment
  210. 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."
  211. if ! ask "This installer will only work properly if you are a member of ${bf}ENSTA ParisTech - Ecole Nationale Supérieure de Techniques Avancées.${n}" "Continue" 1 ; then exit; fi
  212. if [ -d $HOME/.cat_installer ] ; then
  213. if ! ask "Directory $HOME/.cat_installer exists; some of its files may be overwritten." "Continue" 1 ; then exit; fi
  214. else
  215. mkdir $HOME/.cat_installer
  216. fi
  217. # save certificates
  218. echo "-----BEGIN CERTIFICATE-----
  219. MIIDsTCCApmgAwIBAgIQES7lgeBjIpJDjzDZApJMTTANBgkqhkiG9w0BAQUFADBN
  220. MRMwEQYKCZImiZPyLGQBGRYDbG9jMRcwFQYKCZImiZPyLGQBGRYHZXh0cmVtZTEd
  221. MBsGA1UEAxMURU5TVEEgUm9vdCBBdXRob3JpdHkwHhcNMTEwNzIwMDgzODU1WhcN
  222. MjEwNzIwMTQ0NzU3WjBNMRMwEQYKCZImiZPyLGQBGRYDbG9jMRcwFQYKCZImiZPy
  223. LGQBGRYHZXh0cmVtZTEdMBsGA1UEAxMURU5TVEEgUm9vdCBBdXRob3JpdHkwggEi
  224. MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDF/Qbr9yrfx7xqqHiIxTbRDvkY
  225. DZog4pcz1BGYfKOHQRD05iYn2CLSPv5V9LJfHzsPRjFeomoB+my7XOrm+Kcg0PO7
  226. SzVs1dK8V97K+f5TIu700FanIFwic/eT6zu5y1O32Qk3EQy2VObMdJ/C94HDeL0z
  227. wZX2A15438NTg47zIEvwuuloeqWprL2WdMP/LHKQ0FWGaEMOvXzB1yzd6Z38cNou
  228. 7rixWKQ/JsV+bfM22vqAw5eVTxN7xe4qPyKswDuELLv3axClWuHaAilcsgoxEg8q
  229. ns8h6jKdmG5Uc8zPAlqMAgBBujGCpZHt6ii1HM6SIK/F7RMJR9/bHTc6IX3BAgMB
  230. AAGjgYwwgYkwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgFGMA8GA1Ud
  231. EwEB/wQFMAMBAf8wHQYDVR0OBBYEFAX6Wl9zsCFJh5dVrrCRRAupkciCMBAGCSsG
  232. AQQBgjcVAQQDAgEBMCMGCSsGAQQBgjcVAgQWBBS1HRFb/Qlvi8kzAcCZEUETQsyC
  233. YTANBgkqhkiG9w0BAQUFAAOCAQEAWbDXhIn5NHXp9RgWMCw/DQ2bW41NQfhhapzH
  234. DaaTz1WQkdUggrduZ/eMe8THXXVqwDt2IO2DnH/1h/p1GJ4Isp+1EJWPMEzPY3vJ
  235. Ud3huYDk3ZKWxpG2yx7AjxyHMmrYO0RpaLFyjHmkhvr7/kxsFYYjbalKVtUSqevJ
  236. Dhq1Op/vfsRxw8TVEF4Oj4ZAyRG857wxQbL8LWRJ+ME84njJLpjzWpj4q51Q0RVI
  237. QYg2pxrkav+sMQYvcAn6faBkHVzFmsvKjOM2QONrDQlEQw833vYD8cyDSVUP7/MY
  238. 58Un63r0GoR/xVGh//6/QNz98g37u/aFhPalzgwt82IoBdK9fw==
  239. -----END CERTIFICATE-----
  240.  
  241. " > $HOME/.cat_installer/ca.pem
  242. function run_python_script {
  243. PASSWORD=$( echo "$PASSWORD" | sed "s/'/\\\'/g" )
  244. if python << EEE1 > /dev/null 2>&1
  245. import dbus
  246. EEE1
  247. then
  248. PYTHON=python
  249. elif python3 << EEE2 > /dev/null 2>&1
  250. import dbus
  251. EEE2
  252. then
  253. PYTHON=python3
  254. else
  255. PYTHON=none
  256. return 1
  257. fi
  258.  
  259. $PYTHON << EOF > /dev/null 2>&1
  260. #-*- coding: utf-8 -*-
  261. import dbus
  262. import re
  263. import sys
  264. import uuid
  265. import os
  266.  
  267. class EduroamNMConfigTool:
  268.  
  269. def connect_to_NM(self):
  270. #connect to DBus
  271. try:
  272. self.bus = dbus.SystemBus()
  273. except dbus.exceptions.DBusException:
  274. print("Can't connect to DBus")
  275. sys.exit(2)
  276. #main service name
  277. self.system_service_name = "org.freedesktop.NetworkManager"
  278. #check NM version
  279. self.check_nm_version()
  280. if self.nm_version == "0.9" or self.nm_version == "1.0":
  281. self.settings_service_name = self.system_service_name
  282. self.connection_interface_name = "org.freedesktop.NetworkManager.Settings.Connection"
  283. #settings proxy
  284. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManager/Settings")
  285. #settings intrface
  286. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManager.Settings")
  287. elif self.nm_version == "0.8":
  288. #self.settings_service_name = "org.freedesktop.NetworkManagerUserSettings"
  289. self.settings_service_name = "org.freedesktop.NetworkManager"
  290. self.connection_interface_name = "org.freedesktop.NetworkManagerSettings.Connection"
  291. #settings proxy
  292. sysproxy = self.bus.get_object(self.settings_service_name, "/org/freedesktop/NetworkManagerSettings")
  293. #settings intrface
  294. self.settings = dbus.Interface(sysproxy, "org.freedesktop.NetworkManagerSettings")
  295. else:
  296. print("This Network Manager version is not supported")
  297. sys.exit(2)
  298.  
  299. def check_opts(self):
  300. self.cacert_file = '${HOME}/.cat_installer/ca.pem'
  301. self.pfx_file = '${HOME}/.cat_installer/user.p12'
  302. if not os.path.isfile(self.cacert_file):
  303. print("Certificate file not found, looks like a CAT error")
  304. sys.exit(2)
  305.  
  306. def check_nm_version(self):
  307. try:
  308. proxy = self.bus.get_object(self.system_service_name, "/org/freedesktop/NetworkManager")
  309. props = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
  310. version = props.Get("org.freedesktop.NetworkManager", "Version")
  311. except dbus.exceptions.DBusException:
  312. version = "0.8"
  313. if re.match(r'^1\.', version):
  314. self.nm_version = "1.0"
  315. return
  316. if re.match(r'^0\.9', version):
  317. self.nm_version = "0.9"
  318. return
  319. if re.match(r'^0\.8', version):
  320. self.nm_version = "0.8"
  321. return
  322. else:
  323. self.nm_version = "Unknown version"
  324. return
  325.  
  326. def byte_to_string(self, barray):
  327. return "".join([chr(x) for x in barray])
  328.  
  329.  
  330. def delete_existing_connections(self, ssid):
  331. "checks and deletes earlier connections"
  332. try:
  333. conns = self.settings.ListConnections()
  334. except dbus.exceptions.DBusException:
  335. print("DBus connection problem, a sudo might help")
  336. exit(3)
  337. for each in conns:
  338. con_proxy = self.bus.get_object(self.system_service_name, each)
  339. connection = dbus.Interface(con_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
  340. try:
  341. connection_settings = connection.GetSettings()
  342. if connection_settings['connection']['type'] == '802-11-wireless':
  343. conn_ssid = self.byte_to_string(connection_settings['802-11-wireless']['ssid'])
  344. if conn_ssid == ssid:
  345. connection.Delete()
  346. except dbus.exceptions.DBusException:
  347. pass
  348.  
  349. def add_connection(self,ssid):
  350. server_alt_subject_name_list = dbus.Array({'DNS:ucopia.ensta.fr','DNS:ucopya.ensta.fr'})
  351. server_name = 'ensta.fr'
  352. if self.nm_version == "0.9" or self.nm_version == "1.0":
  353. match_key = 'altsubject-matches'
  354. match_value = server_alt_subject_name_list
  355. else:
  356. match_key = 'subject-match'
  357. match_value = server_name
  358.  
  359. s_con = dbus.Dictionary({
  360. 'type': '802-11-wireless',
  361. 'uuid': str(uuid.uuid4()),
  362. 'permissions': ['user:$USER'],
  363. 'id': ssid
  364. })
  365. s_wifi = dbus.Dictionary({
  366. 'ssid': dbus.ByteArray(ssid.encode('utf8')),
  367. 'security': '802-11-wireless-security'
  368. })
  369. s_wsec = dbus.Dictionary({
  370. 'key-mgmt': 'wpa-eap',
  371. 'proto': ['rsn',],
  372. 'pairwise': ['ccmp',],
  373. 'group': ['ccmp', 'tkip']
  374. })
  375. s_8021x = dbus.Dictionary({
  376. 'eap': ['ttls'],
  377. 'identity': '$USER_NAME',
  378. 'ca-cert': dbus.ByteArray("file://{0}\0".format(self.cacert_file).encode('utf8')),
  379. match_key: match_value,
  380. 'password': '$PASSWORD',
  381. 'phase2-auth': 'pap',
  382. 'anonymous-identity': 'anonymous@ensta.fr',
  383. })
  384. s_ip4 = dbus.Dictionary({'method': 'auto'})
  385. s_ip6 = dbus.Dictionary({'method': 'auto'})
  386. con = dbus.Dictionary({
  387. 'connection': s_con,
  388. '802-11-wireless': s_wifi,
  389. '802-11-wireless-security': s_wsec,
  390. '802-1x': s_8021x,
  391. 'ipv4': s_ip4,
  392. 'ipv6': s_ip6
  393. })
  394. self.settings.AddConnection(con)
  395.  
  396. def main(self):
  397. self.check_opts()
  398. ver = self.connect_to_NM()
  399. self.delete_existing_connections('eduroam')
  400. self.add_connection('eduroam')
  401.  
  402. if __name__ == "__main__":
  403. ENMCT = EduroamNMConfigTool()
  404. ENMCT.main()
  405. EOF
  406. }
  407. function create_wpa_conf {
  408. cat << EOFW >> $HOME/.cat_installer/cat_installer.conf
  409.  
  410. network={
  411. ssid="eduroam"
  412. key_mgmt=WPA-EAP
  413. pairwise=CCMP
  414. group=CCMP TKIP
  415. eap=TTLS
  416. ca_cert="${HOME}/.cat_installer/ca.pem"
  417. identity="${USER_NAME}"
  418. domain_suffix_match="ensta.fr"
  419. phase2="auth=PAP"
  420. password="${PASSWORD}"
  421. anonymous_identity="anonymous@ensta.fr"
  422. }
  423. EOFW
  424. chmod 600 $HOME/.cat_installer/cat_installer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement