#!/bin/sh # set some defaults format="sh" dbuser_varname="dbuser" dbpass_varname="dbpass" dbname_varname="dbname" dbserver_varname="dbserver" dbport_varname="dbport" dbtype_varname="dbtype" # the version will always be < the package version VERSION="1.7" version(){ prog=`basename $0` cat << EOF $prog v$VERSION copyright (c) 2005 sean finney EOF } usage(){ version cat << EOF usage: $prog [-hv] [-f format] [-a] [-d [varname]] [-u [varname]] [-p [varname]] [-s [varname]] [-P [varname]] [-t [varname]] [-O owner[:group]] [-m mode] [-U] infile [outfile] infile use the given dbconfig-common config file as input outfile use the given file as input (default: stdout) -f|--format use the given output format (default: sh) -a|--all include all information in output (default) -d|--dbname include the dbname in the output -p|--dbpass include the dbpass in the output -s|--dbserver include the dbserver in the output -P|--dbport include the dbport in the output -u|--dbuser include the dbuser in the output -t|--dbtype include the dbtype in the output -O|--owner set the owner:group of the output file -m|--mode set the permissions on the output file -U|--ucf register the outputfile with ucf -h|--help display this helpful message -v|--version output the version and exit format is one of a list of include-file style formats for various programming languages. the current list includes: sh - /bin/sh style include file perl - perl parseable include file php - php parseable include file cpp - c-style header file, using #define'd constants EOF } TEMP=`getopt -o af:hd::m:p::u::s::t::O:P::Uv --long help,dbuser::,dbpass::,dbport::,dbserver::,dbtype::,output:,format:,owner:,mode:,ucf,version -n $0 -- "$@"` if [ $? != 0 ] ; then usage >&2 ; exit 1 ; fi eval set -- "$TEMP" while true; do case "$1" in -a|--all) use_all="yes" shift ;; -d|--dbname) use_dbname="yes" if [ ! -z "$2" ]; then dbname_varname="$2" fi shift 2 ;; -u|--dbuser) use_dbuser="yes" if [ ! -z "$2" ]; then dbuser_varname="$2" fi shift 2 ;; -p|--dbpass) use_dbpass="yes" if [ ! -z "$2" ]; then dbpass_varname="$2" fi shift 2 ;; -s|--dbserver) use_dbserver="yes" if [ ! -z "$2" ]; then dbserver_varname="$2" fi shift 2 ;; -P|--dbport) use_dbport="yes" if [ ! -z "$2" ]; then dbport_varname="$2" fi shift 2 ;; -t|--dbtype) use_dbtype="yes" if [ ! -z "$2" ]; then dbtype_varname="$2" fi shift 2 ;; -f|--format) format="$2" shift 2 ;; -O|--owner) owner="$2" shift 2 ;; -m|--mode) perms="$2" shift 2 ;; -h|--help) usage exit ;; -v|--version) version exit ;; -U|--ucf) do_ucf=1 exit ;; --) shift break ;; *) echo "eh? $1" > /dev/stderr exit 1 ;; esac done # if they asked for all vars, or didn't ask for anything (which defaults to all) if [ "$use_all" ] || [ ! "${use_dbuser}${use_dbpass}${use_dbname}${use_dbserver}${use_dbtype}${use_dbport}" ]; then use_dbuser="yes" use_dbpass="yes" use_dbname="yes" use_dbserver="yes" use_dbport="yes" use_dbtype="yes" fi inputfile=$1 outputfile=$2 if [ ! "$inputfile" ]; then echo "you must specify an inputfile" >&2 usage >&2 exit 1 fi if [ "$outputfile" ]; then tmpout=`mktemp -t dbconfig-generate-include.XXXXXX` if [ ! -f "$tmpout" ]; then echo "unable to create temporary file $tmpout" >&2 exit 1 fi exec > $tmpout fi if [ ! -f "$inputfile" -o ! -r "$inputfile" ]; then echo "unable to read input file $inputfile" >&2 exit 1 fi if ! . $inputfile ; then echo "error processing $inputfile, check file contents" >&2 exit 1 fi case $format in sh) cat << EOF ## ## database access settings in /bin/sh format ## automatically generated from $inputfile ## by $0 ## `date -R` ## ## by default this file is managed via ucf, so you shouldn't have to ## worry about manual changes being silently discarded. *however*, ## you'll probably also want to edit the configuration file mentioned ## above too. ## EOF [ "$use_dbuser" ] && echo "$dbuser_varname='$dbc_dbuser'" [ "$use_dbpass" ] && echo "$dbpass_varname='$dbc_dbpass'" [ "$use_dbname" ] && echo "$dbname_varname='$dbc_dbname'" [ "$use_dbserver" ] && echo "$dbserver_varname='$dbc_dbserver'" [ "$use_dbport" ] && echo "$dbport_varname='$dbc_dbport'" [ "$use_dbtype" ] && echo "$dbtype_varname='$dbc_dbtype'" ;; php) cat << EOF EOF ;; perl) cat << EOF ## ## database access settings in perl format ## automatically generated from $inputfile ## by $0 ## `date -R` ## ## by default this file is managed via ucf, so you shouldn't have to ## worry about manual changes being silently discarded. *however*, ## you'll probably also want to edit the configuration file mentioned ## above too. ## EOF [ "$use_dbuser" ] && echo "our \$$dbuser_varname='$dbc_dbuser';" [ "$use_dbpass" ] && echo "our \$$dbpass_varname='$dbc_dbpass';" [ "$use_dbname" ] && echo "our \$$dbname_varname='$dbc_dbname';" [ "$use_dbserver" ] && echo "our \$$dbserver_varname='$dbc_dbserver';" [ "$use_dbport" ] && echo "our \$$dbport_varname='$dbc_dbport';" [ "$use_dbtype" ] && echo "our \$$dbtype_varname='$dbc_dbtype';" cat << EOF 1; EOF ;; cpp) cat << EOF /* * database access settings in cpp header format * why you would ever need this, who knows? :) * automatically generated from $inputfile * by $0 * `date -R` * * by default this file is managed via ucf, so you shouldn't have to * worry about manual changes being silently discarded. *however*, * you'll probably also want to edit the configuration file mentioned * above too. * */ #ifndef _DBCONFIG_COMMON_CONFIG_ #define _DBCONFIG_COMMON_CONFIG_ EOF [ "$use_dbuser" ] && echo " #define $dbuser_varname \"$dbc_dbuser\";" [ "$use_dbpass" ] && echo " #define $dbpass_varname \"$dbc_dbpass\";" [ "$use_dbname" ] && echo " #define $dbname_varname \"$dbc_dbname\";" [ "$use_dbserver" ] && echo " #define $dbserver_varname \"$dbc_dbserver\";" [ "$use_dbport" ] && echo " #define $dbport_varname \"$dbc_dbport\";" [ "$use_dbtype" ] && echo " #define $dbtype_varname \"$dbc_dbtype\";" cat << EOF #endif /* _DBCONFIG_COMMON_CONFIG_ */ EOF ;; esac if [ "$outputfile" ]; then if [ "$do_ucf" ]; then ucf "$tmpout" "$outputfile" else mv "$tmpout" "$outputfile" fi [ "$owner" ] && chown $owner $outputfile [ "$perms" ] && chmod $perms $outputfile fi exit 0