Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # $1 : OpenVPN Config File
- # $2 : Astaro .apc to create
- # $3 : username
- # $4 : password
- if [ $# -lt 2 ] || [ $# -gt 4 ]
- then
- echo
- echo Usage:
- echo ${0} openvpn-config.ovpn output.apc [username] [password]
- echo username and password are optional and may be entered by the user
- echo The config file needs to contain the ca, cert and key directives
- echo that point to the corresponding files.
- exit
- fi
- if [ $# -gt 2 ] && [ $# -lt 4 ] # username only
- then
- user=${3}
- echo "Please enter your password: "
- read pass
- elif [ $# -gt 3 ] # username and password
- then
- user=${3}
- pass=${4}
- else # read username and password from commandline
- user=`echo $1 | cut -d '@' -f1`
- if [ ${user} = ${1} ]
- then
- echo "Enter username: "
- read user
- fi
- echo "Please enter your password: "
- read pass
- fi
- # Read the filenames from the config-file
- ca=`grep "^ca " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- key=`grep "^key " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- cert=`grep "^cert " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- # Write .apc header
- printf "\x04\x06\x041234\x04\x04\x04\x08\x03\x0c\x00\x00\x00\x0a" > $2
- # Extract protocol (UDP/TCP) from config file
- var=`grep "^proto " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- # Determine length of the protocol and convert it to hex
- varlen=`echo ${var} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- # Write length to output file
- printf "\x${varlen}" >> ${2}
- # Write protocol to output file
- echo $var | tr -d '\n' >> ${2}
- # Write fix information to output file
- printf "\x08\x00\x00\x00" >> ${2}
- echo protocol >>${2}
- # And so on...
- var=`grep "^auth " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- varlen=`echo ${var} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >> ${2}
- echo $var | tr -d '\n' >> ${2}
- printf "\x18\x00\x00\x00" >> ${2}
- echo authentication_algorithm | tr -d '\n' >> ${2}
- # Determine length of certifcate file
- varlen=`cat ${cert} | wc -c` # Length decimal
- hex=`echo "obase=16; ${varlen}" | bc -q` # Lengthe hexadecimal
- num=`echo "obase=16; ${varlen}" | bc -q | tr -d '\n' | wc -c` # Length of the hex-number
- odd=`expr ${num} % 2` # hex-number: even or odd?
- # TODO: Add a check for bigger hex-number (more than 4 digits)
- if [ ${odd} -eq 0 ]
- then # even: swap AABB > BBAA
- varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 3,4`
- varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1,2`
- else # odd: swap AAB > AB 0A
- varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 2,3`
- varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1`
- fi
- printf "\x1\x${varlen1}\x${varlen2}\x0\x0" >> ${2}
- cat ${cert} >> ${2}
- printf "\xb\x0\x0\x0" >> ${2}
- echo "certificate" | tr -d '\n' >> ${2}
- varlen=`cat ${ca} | wc -c`
- hex=`echo "obase=16; ${varlen}" | bc -q`
- num=`echo "obase=16; ${varlen}" | bc -q | tr -d '\n' | wc -c`
- odd=`expr ${num} % 2`
- if [ ${odd} -eq 0 ]
- then
- varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 3,4`
- varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1,2`
- else
- varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 2,3`
- varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1`
- fi
- printf "\x1\x${varlen1}\x${varlen2}\x0\x0" >> ${2}
- cat ${ca} >> ${2}
- printf "\x7\x0\x0\x0" >> ${2}
- echo "ca_cert" | tr -d '\n' >> ${2}
- varlen=`cat ${key} | wc -c`
- hex=`echo "obase=16; ${varlen}" | bc -q`
- num=`echo "obase=16; ${varlen}" | bc -q | tr -d '\n' | wc -c`
- odd=`expr ${num} % 2`
- if [ ${odd} -eq 0 ]
- then
- varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 3,4`
- varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1,2`
- else
- varlen1=`echo "obase=16; ${varlen}" | bc -q | cut -b 2,3`
- varlen2=`echo "obase=16; ${varlen}" | bc -q | cut -b 1`
- fi
- printf "\x1\x${varlen1}\x${varlen2}\x0\x0" >> ${2}
- cat ${key} >> ${2}
- printf "\x3\x0\x0\x0" >> ${2}
- echo "key" >> ${2}
- varlen=`echo ${user} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >>${2}
- echo ${user} | tr -d '\n' >> ${2}
- printf "\x08\x00\x00\x00" >> ${2}
- echo username | tr -d '\n' >> ${2}
- var=`grep "^comp-lzo" ${1}|tr -d '\n'`
- if [ ${var} = "comp-lzo" ]
- then
- printf "\x0a\x01\x31\x0b\x0\x0\x0" >> ${2}
- else
- printf "\x0a\x01\x31\x0b\x0\x0\x0" >> ${2}
- fi
- echo compression >> ${2}
- var=`grep "^cipher " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- varlen=`echo ${var} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >> ${2}
- echo $var | tr -d '\n' >>${2}
- printf "\x14\x00\x00\x00" >> ${2}
- echo encryption_algorithm >> ${2}
- varlen=`echo ${pass} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >> ${2}
- echo ${pass} | tr -d '\n' >> ${2}
- printf "\x08\x00\x00\x00" >> ${2}
- echo password >> ${2}
- var=`grep "^tls-remote " ${1} | cut -d '"' -f2 |tr -d '\n'`
- temp=`echo ${var} | grep "^tls-remote "`
- if [ "${temp}" = "${var}" ]
- then
- var=`grep "^tls-remote " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- fi
- varlen=`echo ${var} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >> ${2}
- echo $var | tr -d '\n' >> ${2}
- printf "\x09\x00\x00\x00" >> ${2}
- echo server_dn >> ${2}
- var=`grep "^remote " ${1} | cut -d ' ' -f3 |tr -d '\n'`
- varlen=`echo ${var} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >> ${2}
- echo $var | tr -d '\n' >>${2}
- printf "\x0b\x00\x00\x00" >> ${2}
- echo server_port >> ${2}
- var=`grep "^remote " ${1} | cut -d ' ' -f2 |tr -d '\n'`
- varlen=`echo ${var} | tr -d '\n' | wc -c`
- varlen=`echo "obase=16; ${varlen}" | bc -q`
- printf "\x${varlen}" >> ${2}
- echo $var | tr -d '\n' >> ${2}
- printf "\x0e\x00\x00\x00" >> ${2}
- echo server_address| tr -d '\n' >> ${2}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement