#!/bin/sh # # \brief Create cgdconfig(8) configuration file from key or extract the key # from the specified configuration file # \author Josef Soentgen # \date 2014-04-29 # # # Note: This script is merely just a awk(1) wrapper and only generates a # aes-cbc 256 storedkey configuration and expects the given key to # be a proper base64 encoded key generated by cgdconfig(8). # # # Print usage # print_usage() { local help=$1 printf "usage: $PROG_NAME [-h] <-f file|-k key>\n" if [ "$help" != "" ]; then printf "\t-h show this help screen\n" printf "\t-k key generate config file from key and print " printf "to stdout\n" printf "\t-f file extract key from config file and print " printf "to stdout\n" fi } # # Parse arguments given on the commandline # parse_arguments() { local args="$(getopt hf:k: ${*})" [ $? != 0 ] && exit 1 if [ $# -lt 1 ] then print_usage exit 1 fi set -- $args while [ $# -ge 0 ]; do case "$1" in -h) print_usage "help" exit 0;; -k) ARG_KEY="$2"; shift; shift;; -f) ARG_FILE="$2"; shift; shift;; --) shift; break;; esac done } # # Extract the key string from the configuration file # extract_key() { local cgd_file="$1" awk 'BEGIN { found=0 } { if (found == 1) key=key $1 if ($1 == "keygen") { found=1; key=$4 } } END { sub(/;$/, "", key); print key }' $cgd_file } # # Generate a proper cgd(8) configuration file from the given key # generate_conf() { local key="$1" printf "$key" | awk '{ key=$0 } END { printf("algorithm aes-cbc;\n") printf("iv-method encblkno1;\n") printf("keylength 256;\n") printf("verify_method none;\n") printf("keygen storedkey key ") printf("%s \\\n", substr(key, 1, 30)) printf(" %s;\n", substr(key, 31)) }' } main() { parse_arguments "$@" if [ "$ARG_FILE" != "" ]; then extract_key "$ARG_FILE" fi if [ "$ARG_KEY" != "" ]; then generate_conf "$ARG_KEY" fi } PROG_NAME=$(basename $0) ARG_FILE= ARG_KEY= main "$@" exit 0 # End of file