#!/bin/bash # $HeadURL$ $LastChangedRevision$ # Modules . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff # Other globals main() { local MY_ARGS # Defaults for options OPT_FILE= OPT_TOUCH=false # Process options special_opts_handler() { case $1 in --file=*) OPT_FILE=${1#*=} ;; --touch) OPT_TOUCH=true ;; *) return 1 ;; esac } miniade_process_options --help-handler=help --special-opts-handler=special_opts_handler MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments [ $# = 1 ] || miniade_bad_usage type encode > /dev/null 2>&1 || miniade_internal "encode: command not found (hint: is PATH set correctly?)" ENCODE_OUTPUT=$(encode --decode "$1") || miniade_internal "encode: failed (hint: see messages above)" eval set -- "$ENCODE_OUTPUT" [ $# = 2 ] || miniade_bad_usage LOGIN="$1" SSHKEY="$2" # Sanity checks and derivations id $LOGIN >/dev/null 2>&1 || miniade_error "$LOGIN: no such login" if [ "X$OPT_FILE" != X ]; then CHOWN_FLAG=false else CHOWN_FLAG=true eval "OPT_FILE=~$LOGIN/.ssh/authorized_keys" fi # Guts lineinfile --after=EOF --text="$SSHKEY" --file=$OPT_FILE ! $CHOWN_FLAG || chown -R $LOGIN:$LOGIN $(dirname $OPT_FILE) ! $OPT_TOUCH || touch $OPT_FILE } help() { local PROGNAME miniade_get_progname PROGNAME echo "Usage: $PROGNAME [ ] [ --file= ] [ --touch ] @" exit 0 } main "$@"