62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| #
 | |
| # fix_mounts.sh - ensures autofs mounts are mounted by a user and not 'root'
 | |
| #
 | |
| # copyright 2016 scot.mcphee@gmail.com 
 | |
| #
 | |
| # GPL 3.0 LICENCE https://www.gnu.org/licenses/gpl.txt
 | |
| #
 | |
| # This file should be run by 'root' as the 'sudo' should execute without stopping
 | |
| # to ask for your password, unless you run this manually. See the
 | |
| # org.autonomous.fixmounts.plist file which accompanies it. This plist executes 
 | |
| # the script every 15 seconds. I put mine in /Library/LaunchDaemons  where it will 
 | |
| # be run as root whether there is a user logged in or not.
 | |
| #
 | |
| # autofsname   - the name of the file in /etc/ that is specified in auto_master
 | |
| #                e.g. 
 | |
| #                /- auto_nas -nosuid
 | |
| #                then it's 'auto_nas'
 | |
| #
 | |
| # mnt_usr  - the userid of the user (you) that you want the mounts for
 | |
| # mnt_pnt  - the directory in the user dir where the mounts are
 | |
| # t_mnt    - using $mnt_usr and $mnt_pnt; the full path to the mounts
 | |
| # mounts   - space-separated list of mounts expected in $t_mnt
 | |
| 
 | |
| autofsname=auto_nas
 | |
| mnt_usr=[[USERNAME]]
 | |
| mnt_pnt=mnt
 | |
| t_mnt=/Users/${mnt_usr}/${mnt_pnt}
 | |
| mounts="music photo video NAS"
 | |
| 
 | |
| # don't change below here unless you know what you are doing with shell scripts.
 | |
| 
 | |
| 
 | |
| all_mounts=`/sbin/mount | /usr/bin/grep $t_mnt | /usr/bin/grep -v "map $autofsname on $t_mnt"`
 | |
| 
 | |
| d=`/bin/date`
 | |
| echo "fix_mounts [$d] checking $t_mnt for $mounts"
 | |
| for mt in $mounts;
 | |
| do
 | |
| 	full_mount=${t_mnt}/${mt}
 | |
| 	if [[ $all_mounts == *"$full_mount"* ]]; 
 | |
| 	then
 | |
| 		# it is mounted, let us see if it mounted by the user.
 | |
| 		mm=`/bin/echo "$all_mounts" | /usr/bin/grep $full_mount` 
 | |
| 		if [[ ! $mm =~ on.$full_mount.*mounted.by.$mnt_usr ]]; then
 | |
| 			echo "fix_mounts [$d] Remounting: $full_mount - because $mnt_usr not mounted $mm"
 | |
|       ps -e | grep automounted
 | |
| 			if ps -e | grep automounted | grep -v grep; then
 | |
| 				echo "Automount in progress. Aborting!"
 | |
| 				exit 0
 | |
| 			fi
 | |
| 			/usr/bin/sudo /sbin/umount $full_mount 
 | |
| 			# if resource is busy force unmount with diskutil DANGER
 | |
| 			if [ ! $? ]; then /usr/sbin/diskutil unmount force $full_mount; fi
 | |
| 			/usr/bin/sudo -u $mnt_usr cd $full_mount 
 | |
| 		fi
 | |
| 	else
 | |
| 		echo "fix_mounts [$d] Not mounted: $full_mount - ignoring"
 | |
| 	fi
 | |
| done
 | |
| 
 |