diff --git a/bin/vhost-get.sh b/bin/vhost-get.sh new file mode 100755 index 0000000..9140975 --- /dev/null +++ b/bin/vhost-get.sh @@ -0,0 +1,163 @@ +#!/bin/bash +# +# vhost-stack +# https://git.stack-source.com/msb/vhost-stack +# MIT License Copyright (c) 2022 Matthew Saunders Brown + +# load include file +source $(dirname $0)/vhost.sh + +help() +{ + thisfilename=$(basename -- "$0") + echo "Get VirtualHost info." + echo "" + echo "usage: $thisfilename [-d ] [-o ] [-c] [-h]" + echo "" + echo " -h Print this help." + echo " -d Domain name to get info for. By defual all domains are returned" + echo " -o Type of query. 'virtualhosts' (default), 'redirects', 'aliases'." + echo " -c CVS - Output in cvs format, instead of tabbed table." +} + +vhost:getoptions "$@" + +# create newline var +NL=$'\n' + +# check for option (mode or type of query) +if [[ -z $option ]]; then + option='virtualhosts' +fi + +if [[ $option = 'virtualhosts' ]]; then + + if [[ -n $domain ]]; then + if [[ -d /srv/www/$domain ]]; then + virtualhostArray=($domain) + else + echo "ERROR: $domain not found" + exit 1 + fi + else + vhost::set-virtualhostArray + fi + + output="Virtualhost Username Config Status" + + for v in "${virtualhostArray[@]}" + do + username=$(stat -c '%U' /srv/www/$v) + if [[ -f /etc/apache2/sites-available/$v.conf ]]; then + macro="Custom" + if head -n 1 /etc/apache2/sites-available/$v.conf |grep --quiet ^Use; then + macro=$(head -n 1 /etc/apache2/sites-available/$v.conf |grep ^Use|cut -d ' ' -f 2) + fi + else + macro="None" + fi + if [[ -f /etc/apache2/sites-enabled/$v.conf ]]; then + status="Enabled" + else + status="Disabled" + fi + output="$output${NL}$v $username $macro $status" + done + if [[ $cvs ]]; then + echo "$output" | tr " " "," + else + echo "$output" | column -t + fi +elif [[ $option = 'redirects' ]]; then + + # working dir for redirect configs + cd /etc/apache2/sites-available + + if [[ -n $domain ]]; then + if [[ -f $domain.conf ]]; then + if head -n 1 $domain.conf |grep --quiet '^Use Redirect'; then + vhostConfigs=("$domain.conf") + else + echo "ERROR: $domain is not configured as a Redirect." + exit 1 + fi + else + echo "ERROR: $domain is not configured on this server." + exit 1 + fi + else + vhostConfigs=(`ls -1`) + fi + + output="Virtualhost Config Redirect Status" + + for c in "${vhostConfigs[@]}" + do + if head -n 1 /etc/apache2/sites-available/$c |grep --quiet '^Use Redirect'; then + domain=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use Redirect'|cut -d ' ' -f 3) + macro=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use Redirect'|cut -d ' ' -f 2) + redirect=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use Redirect'|cut -d ' ' -f 4) + if [[ -f /etc/apache2/sites-enabled/$c ]]; then + status="Enabled" + else + status="Disabled" + fi + output="$output${NL}$domain $macro $redirect $status" + fi + done + + if [[ $cvs ]]; then + echo "$output" | tr " " "," + else + echo "$output" | column -t + fi + +elif [[ $option = 'aliases' ]]; then + + # working dir for aliases configs + cd /etc/apache2/sites-available + + if [[ -n $domain ]]; then + if [[ -f $domain.conf ]]; then + if head -n 1 $domain.conf |grep --quiet '^Use VHostAlias'; then + vhostConfigs=("$domain.conf") + else + echo "ERROR: $domain is not configured as a Alias" + exit 1 + fi + else + echo "ERROR: $domain is not configured on this server." + exit 1 + fi + else + vhostConfigs=(`ls -1`) + fi + + output="Virtualhost Username Macro Alias Status" + + for c in "${vhostConfigs[@]}" + do + if head -n 1 /etc/apache2/sites-available/$c |grep --quiet '^Use VHostAlias'; then + macro=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use VHostAlias'|cut -d ' ' -f 2) + alias=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use VHostAlias'|cut -d ' ' -f 3) + username=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use VHostAlias'|cut -d ' ' -f 4) + virtualhost=$(head -n 1 /etc/apache2/sites-available/$c |grep '^Use VHostAlias'|cut -d ' ' -f 5) + if [[ -f /etc/apache2/sites-enabled/$c ]]; then + status="Enabled" + else + status="Disabled" + fi + output="$output${NL}$alias $username $macro $virtualhost $status" + fi + done + + if [[ $cvs ]]; then + echo "$output" | tr " " "," + else + echo "$output" | column -t + fi + +else + echo "ERROR: Invalid mode '$option'" + exit 1 +fi diff --git a/bin/vhost.sh b/bin/vhost.sh index 5ee488a..f658f46 100755 --- a/bin/vhost.sh +++ b/bin/vhost.sh @@ -38,12 +38,15 @@ function vhost::validate_domain () { function vhost:getoptions () { local OPTIND - while getopts "d:i:m:o:p:u:jhnvw" opt ; do + while getopts "cd:i:m:o:p:u:jhnvw" opt ; do case "${opt}" in h ) # display help and exit help exit ;; + c ) # cvs - output in cvs format + cvs=true + ;; d ) # domain name (virtualhost) to act on domain=${OPTARG,,} if ! vhost::validate_domain $domain; then