Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.67 KB | None | 0 0
  1. #!/bin/bash
  2. # $1 : OpenVPN Config File
  3. # $2 : Astaro .apc to create
  4. # $3 : username
  5. # $4 : password
  6.  
  7. if [ $# -lt 2 ] || [ $# -gt 4 ]
  8. then
  9. echo
  10. echo Usage:
  11. echo ${0} openvpn-config.ovpn output.apc [username] [password]
  12. echo username and password are optional and may be entered by the user
  13. echo The config file needs to contain the ca, cert and key directives
  14. echo that point to the corresponding files.
  15. exit
  16. fi
  17. if [ $# -gt 2 ] && [ $# -lt 4 ] # username only
  18. then
  19. user=${3}
  20. echo "Please enter your password: "
  21. read pass
  22. elif [ $# -gt 3 ] # username and password
  23. then
  24. user=${3}
  25. pass=${4}
  26. else # read username and password from commandline
  27. user=`echo $1 | cut -d '@' -f1`
  28. if [ ${user} = ${1} ]
  29. then
  30. echo "Enter username: "
  31. read user
  32. fi
  33. echo "Please enter your password: "
  34. read pass
  35. fi
  36.  
  37. # Read the filenames from the config-file
  38. ca=`grep "^ca " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  39. key=`grep "^key " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  40. cert=`grep "^cert " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  41. # Write .apc header
  42. printf "\x04\x06\x041234\x04\x04\x04\x08\x03\x0c\x00\x00\x00\x0a" > $2
  43. # Extract protocol (UDP/TCP) from config file
  44. var=`grep "^proto " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  45. # Determine length of the protocol and convert it to hex
  46. varlen=`echo ${var} | tr -d '\n' | wc -c`
  47. varlen=`echo "obase=16; ${varlen}" | bc -q`
  48. # Write length to output file
  49. printf "\x${varlen}" >> ${2}
  50. # Write protocol to output file
  51. echo $var | tr -d '\n' >> ${2}
  52. # Write fix information to output file
  53. printf "\x08\x00\x00\x00" >> ${2}
  54. echo protocol >>${2}
  55.  
  56. # And so on...
  57. var=`grep "^auth " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  58. varlen=`echo ${var} | tr -d '\n' | wc -c`
  59. varlen=`echo "obase=16; ${varlen}" | bc -q`
  60. printf "\x${varlen}" >> ${2}
  61. echo $var | tr -d '\n' >> ${2}
  62. printf "\x18\x00\x00\x00" >> ${2}
  63. echo authentication_algorithm | tr -d '\n' >> ${2}
  64.  
  65. # Determine length of certifcate file
  66. varlen=`cat ${cert} | wc -c` # Length decimal
  67. hex=`echo "obase=16; ${varlen}" | bc -q` # Lengthe hexadecimal
  68. num=`echo "obase=16; ${varlen}" | bc -q | tr -d '\n' | wc -c` # Length of the hex-number
  69. odd=`expr ${num} % 2` # hex-number: even or odd?
  70. # TODO: Add a check for bigger hex-number (more than 4 digits)
  71. if [ ${odd} -eq 0 ]
  72. then # even: swap AABB > BBAA
  73. varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 3,4`
  74. varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1,2`
  75. else # odd: swap AAB > AB 0A
  76. varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 2,3`
  77. varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1`
  78. fi
  79.  
  80. printf "\x1\x${varlen1}\x${varlen2}\x0\x0" >> ${2}
  81. cat ${cert} >> ${2}
  82. printf "\xb\x0\x0\x0" >> ${2}
  83. echo "certificate" | tr -d '\n' >> ${2}
  84.  
  85.  
  86. varlen=`cat ${ca} | wc -c`
  87. hex=`echo "obase=16; ${varlen}" | bc -q`
  88. num=`echo "obase=16; ${varlen}" | bc -q | tr -d '\n' | wc -c`
  89. odd=`expr ${num} % 2`
  90. if [ ${odd} -eq 0 ]
  91. then
  92. varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 3,4`
  93. varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1,2`
  94. else
  95. varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 2,3`
  96. varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1`
  97. fi
  98.  
  99. printf "\x1\x${varlen1}\x${varlen2}\x0\x0" >> ${2}
  100. cat ${ca} >> ${2}
  101.  
  102. printf "\x7\x0\x0\x0" >> ${2}
  103. echo "ca_cert" | tr -d '\n' >> ${2}
  104.  
  105. varlen=`cat ${key} | wc -c`
  106. hex=`echo "obase=16; ${varlen}" | bc -q`
  107. num=`echo "obase=16; ${varlen}" | bc -q | tr -d '\n' | wc -c`
  108. odd=`expr ${num} % 2`
  109. if [ ${odd} -eq 0 ]
  110. then
  111. varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 3,4`
  112. varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1,2`
  113. else
  114. varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 2,3`
  115. varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1`
  116. fi
  117.  
  118. printf "\x1\x${varlen1}\x${varlen2}\x0\x0" >> ${2}
  119. cat ${key} >> ${2}
  120.  
  121. printf "\x3\x0\x0\x0" >> ${2}
  122. echo "key" >> ${2}
  123.  
  124. varlen=`echo ${user} | tr -d '\n' | wc -c`
  125. varlen=`echo "obase=16; ${varlen}" | bc -q`
  126. printf "\x${varlen}" >>${2}
  127. echo ${user} | tr -d '\n' >> ${2}
  128.  
  129. printf "\x08\x00\x00\x00" >> ${2}
  130. echo username | tr -d '\n' >> ${2}
  131.  
  132.  
  133. var=`grep "^comp-lzo" ${1}|tr -d '\n'`
  134. if [ ${var} = "comp-lzo" ]
  135. then
  136. printf "\x0a\x01\x31\x0b\x0\x0\x0" >> ${2}
  137. else
  138. printf "\x0a\x01\x31\x0b\x0\x0\x0" >> ${2}
  139. fi
  140. echo compression >> ${2}
  141.  
  142. var=`grep "^cipher " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  143. varlen=`echo ${var} | tr -d '\n' | wc -c`
  144. varlen=`echo "obase=16; ${varlen}" | bc -q`
  145. printf "\x${varlen}" >> ${2}
  146. echo $var | tr -d '\n' >>${2}
  147. printf "\x14\x00\x00\x00" >> ${2}
  148.  
  149. echo encryption_algorithm >> ${2}
  150.  
  151. varlen=`echo ${pass} | tr -d '\n' | wc -c`
  152. varlen=`echo "obase=16; ${varlen}" | bc -q`
  153. printf "\x${varlen}" >> ${2}
  154. echo ${pass} | tr -d '\n' >> ${2}
  155. printf "\x08\x00\x00\x00" >> ${2}
  156. echo password >> ${2}
  157.  
  158. var=`grep "^tls-remote " ${1} | cut -d '"' -f2 |tr -d '\n'`
  159. temp=`echo ${var} | grep "^tls-remote "`
  160. if [ "${temp}" = "${var}" ]
  161. then
  162. var=`grep "^tls-remote " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  163. fi
  164. varlen=`echo ${var} | tr -d '\n' | wc -c`
  165. varlen=`echo "obase=16; ${varlen}" | bc -q`
  166. printf "\x${varlen}" >> ${2}
  167. echo $var | tr -d '\n' >> ${2}
  168. printf "\x09\x00\x00\x00" >> ${2}
  169. echo server_dn >> ${2}
  170.  
  171. var=`grep "^remote " ${1} | cut -d ' ' -f3 |tr -d '\n'`
  172. varlen=`echo ${var} | tr -d '\n' | wc -c`
  173. varlen=`echo "obase=16; ${varlen}" | bc -q`
  174. printf "\x${varlen}" >> ${2}
  175. echo $var | tr -d '\n' >>${2}
  176. printf "\x0b\x00\x00\x00" >> ${2}
  177. echo server_port >> ${2}
  178.  
  179. var=`grep "^remote " ${1} | cut -d ' ' -f2 |tr -d '\n'`
  180. varlen=`echo ${var} | tr -d '\n' | wc -c`
  181. varlen=`echo "obase=16; ${varlen}" | bc -q`
  182. printf "\x${varlen}" >> ${2}
  183. echo $var | tr -d '\n' >> ${2}
  184. printf "\x0e\x00\x00\x00" >> ${2}
  185. echo server_address| tr -d '\n' >> ${2}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement