#!/bin/bash ###################################################################### # # Author: Andrwe Lord Weber # E-Mail: lord-weber-andrwerenona-studiosorg # Version: 0.1.5 # Description: # This script searchs smb-shares and mounts them # if permitted to destination path # ###################################################################### function getBashTmp { server=${1} tmpdom=`echo ${server} | sed 's/.*\(.*\..*\)/\1/'` if [ "`grep ${server} ~/.smb/bashsmb.auth`" -o "`grep ${tmpdom} ~/.smb/bashsmb.auth`" ] then user=`grep ${server}.user ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` pass=`grep ${server}.pass ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` dom=`grep ${server}.domain ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` if [ ! "${user}" -a ! "${pass}" ] then user=`grep ${tmpdom}.user ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` pass=`grep ${tmpdom}.pass ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` dom=`grep ${tmpdom}.domain ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` fi smbclient -gL ${server} -U ${dom}/${user}%${pass} > /tmp/bashsmb.$$ 2>&1 else smbclient -gNL ${server} > /tmp/bashsmb.$$ 2>&1 fi } # Creates directory structure for found smb-shares and mounts all permitted shares function m { BASEDIR=`echo "${1}" | sed 's#/$##'` for server in `nmblookup -T '*' | grep -vG '^query' | awk -F ',' '{print $1}'` do if [[ ${server} =~ ^local.* ]] then continue fi getBashTmp ${server} domain=`grep -m 1 Domain /tmp/bashsmb.$$ | awk -F '[' '{print $2}' | awk -F ']' '{print $1}'` if [ ! ${domain} ] then domain=`echo ${server} | awk -F '.' '{print $2}'` fi if [ ! -d "${BASEDIR}/${domain}" ] then mkdir "${BASEDIR}/${domain}" fi if [ ! -d "${BASEDIR}/${domain}/${server}" ] then mkdir "${BASEDIR}/${domain}/${server}" fi for disk in `grep Disk /tmp/bashsmb.$$ | awk -F '|' '{print $2}' | sed 's/\ /\\\\ /g'` do if [[ ! ${2} =~ d ]] then if [[ ${disk} =~ .*\$$ ]] then continue fi fi if [ ! -d "${BASEDIR}/${domain}/${server}/${disk}" ] then mkdir "${BASEDIR}/${domain}/${server}/${disk}" fi if [ ! "`mount | grep ${BASEDIR}/${domain}/${server}/${disk}`" -a ! "`mount | grep ${BASEDIR}/${server}/${disk}`" ] then if [ "`grep ${server} ~/.smb/bashsmb.auth`" -o "`grep ${tmpdom} ~/.smb/bashsmb.auth`" ] then user=`grep ${server}.user ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` pass=`grep ${server}.pass ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` dom=`grep ${server}.domain ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` if [ ! "${user}" -a ! "${pass}" ] then user=`grep ${tmpdom}.user ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` pass=`grep ${tmpdom}.pass ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` dom=`grep ${tmpdom}.domain ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` fi if [ "${dom}" ] then if [ "${domain}" ] then sudo mount //${server}/"${disk}" "${BASEDIR}/${domain}/${server}/${disk}" -o user=${dom}/${user}%${pass} else sudo mount //${server}/"${disk}" "${BASEDIR}/${server}/${disk}" -o user=${dom}/${user}%${pass} fi else if [ "${domain}" ] then sudo mount //${server}/"${disk}" "${BASEDIR}/${domain}/${server}/${disk}" -o user=${user}%${pass} else sudo mount //${server}/"${disk}" "${BASEDIR}/${server}/${disk}" -o user=${user}%${pass} fi fi else sudo mount //${server}/"${disk}" "${BASEDIR}/${domain}/${server}/${disk}" -o guest 2> /dev/null fi fi disk_esc=`echo ${disk} | sed 's/\$$//'` if [ "`mount | grep ${BASEDIR}/${domain}/${server}/${disk_esc}`" == "" ] then rm -r "${BASEDIR}/${domain}/${server}/${disk}" fi done rm /tmp/bashsmb.$$ done } # Refresh smb-shares: mount new and remove old non-existing function r { BASEDIR=`echo "${1}" | sed 's#/$##'` for server in `nmblookup -T '*' | grep -vG '^query' | awk -F ',' '{print $1}'` do if [[ ${server} =~ ^local.* ]] then continue fi getBashTmp ${server} for share in `mount | grep cifs | awk -F ' ' '{print $1}'` do if [ "`echo ${share} | grep ${server}`" ] then disk=`echo ${share} | awk -F '/' '{print $4}'` if [ ! "`grep Disk\|${disk}\| /tmp/bashsmb.$$`" ] then dir=`mount | grep ${share} | grep ${disk} | awk -F ' ' '{print $3}'` if [ ! -z "`sudo umount ${dir}`" ] then echo "Couldn't umount ${share} normally." fi if [ ! "`mount | grep ${dir}`" ] then rm -r ${dir} echo removed ${dir} fi fi fi done done rm /tmp/bashsmb.$$ m ${BASEDIR} ${2} } # Unmount smb-shares and removes directories function u { BASEDIR=`echo "${1}" | sed 's#/$##'` for domain in ${BASEDIR}/* do for server in ${domain}/* do for disk in ${server}/* do disk_esc=`echo ${disk} | sed 's/\$$//'` if [ "`mount | grep ${disk_esc}`" ] then if [ ! -z "`sudo umount ${disk}`" ] then echo "Couldn't umount ${disk} normally." fi if [[ ${2} =~ l ]] then echo "Due to parameter 'l' try to force umount using -l argument." if [ ! -z "`sudo umount -l ${disk}`" ] then echo "Couldn't umount ${disk}." fi fi fi done done if [ ! "`mount | grep ${domain}`" ] then rm -r ${domain} fi done } # Prints existing Server and shares in network function p { for server in `nmblookup -T '*' | grep -vG '^query' | awk -F ',' '{print $1}'` do if [[ ${server} =~ ^local.* ]] then continue fi echo "Server: ${server}" tmpdom=`echo ${server} | sed 's/.*\(.*\..*\)/\1/'` if [ "`grep ${server} ~/.smb/bashsmb.auth`" -o "`grep ${tmpdom} ~/.smb/bashsmb.auth`" ] then user=`grep ${server}.user ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` pass=`grep ${server}.pass ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` dom=`grep ${server}.domain ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` if [ ! "${user}" -a ! "${pass}" ] then user=`grep ${tmpdom}.user ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` pass=`grep ${tmpdom}.pass ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` dom=`grep ${tmpdom}.domain ~/.smb/bashsmb.auth | awk -F "=" '{print $2}'` fi smbclient -gL ${server} -U ${dom}/${user}%${pass} 2> /dev/null > /tmp/bashsmb.$$ else smbclient -gNL ${server} 2> /dev/null > /tmp/bashsmb.$$ fi for disk in `grep Disk /tmp/bashsmb.$$ | awk -F '|' '{print $2}'` do echo " ${disk}" done rm /tmp/bashsmb.$$ done } function usage { echo "Usage: ${0} " echo . echo "command:" echo " m