Home | History | Annotate | Download | only in src
      1 #!/bin/bash
      2 
      3 # Library to find CD devices.
      4 #
      5 # Copyright (C) 2003-2006 IBM
      6 #
      7 # This program is free software; you can redistribute it and/or
      8 # modify it under the terms of the GNU General Public License as
      9 # published by the Free Software Foundation; either version 2 of the
     10 # License, or (at your option) any later version.
     11 #
     12 # This program is distributed in the hope that it will be useful, but
     13 # WITHOUT ANY WARRANTY; without even the implied warranty of
     14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     15 # General Public License for more details.
     16 #
     17 # You should have received a copy of the GNU General Public License
     18 # along with this program; if not, write to the Free Software
     19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
     20 # 02111-1307, USA.
     21 
     22 
     23 # Create a list of potential devices.  Note that this may pick up some non-block
     24 # devices; it is assumed that they will be filtered out by find_discs_with_media.
     25 function find_disc_devices() {
     26 	NUM_DEVICES=`/bin/ls $(egrep '(cdr|dvd)' /etc/fstab | awk -F " " '{print $1}') /dev/cdr* /dev/dvd* /dev/cdrom/* /dev/sr* 2> /dev/null | sort | uniq | wc -l`
     27 	if [ $NUM_DEVICES -lt 1 ]; then
     28 		# No CDs at all?
     29 		echo NONE
     30 	fi
     31 	/bin/ls $(egrep '(cdr|dvd)' /etc/fstab | awk -F " " '{print $1}') /dev/cdr* /dev/dvd* /dev/cdrom/* /dev/sr* 2> /dev/null | sort | uniq
     32 }
     33 
     34 # Try to find a disc with media in it.  Hopefully, $DEFAULT_MOUNT already exists.
     35 function find_discs_with_media() {
     36 	# If the caller doesn't specify a DEFAULT_MOUNT point, specify one.
     37 	if [ -z "$DEFAULT_MOUNT" ]; then
     38 		DEFAULT_MOUNT=/mnt
     39 	fi
     40 	POTENTIAL_DEVICES=`find_disc_devices`
     41 	# Grab a list of all CD/DVD devices that we can find.
     42 	for i in `echo "$POTENTIAL_DEVICES"`
     43 	do
     44 		# Did we get nothing at all?
     45 		if [ "$i" == "NONE" ]; then
     46 			echo NONE 0
     47 			return
     48 		fi
     49 
     50 		# Is this a link pointing to a device that's in the
     51 		# list of potential discs AND isn't in fstab?
     52 		# We want to avoid considering /dev entries that are symlinked
     53 		# elsewhere ... but we also assume that anything in fstab was
     54 		# put there for a reason and ought to be considered anyway.
     55 		if [ -L "$i" ]; then
     56 			IN_LIST=`echo "$POTENTIAL_DEVICES" | grep "$(readlink $i)" -c`
     57 			if [ $IN_LIST -gt 0 ]; then
     58 				IN_FSTAB=`grep "^$i[ 	]" /etc/fstab -c`
     59 				if [ $IN_FSTAB -eq 0 ]; then
     60 					continue;
     61 				fi
     62 			fi
     63 		fi
     64 
     65 		# Block device?
     66 		if [ -b "$i" ]; then
     67 			IN_FSTAB=`grep -c "^$i[ 	]" /etc/fstab`
     68 			FSTAB_TYPE=`grep "^$i[ 	]" /etc/fstab | awk -F " " '{print $3}'`
     69 			if [ $IN_FSTAB -gt 0 -a "$FSTAB_TYPE" != "subfs" ]; then
     70 				# This device is listed in fstab and is NOT of
     71 				# type "subfs" (SLES9 weirdness); try to mount it.
     72 				mount "$i" > /dev/null 2> /dev/null
     73 				RESULT=$?
     74 
     75 				if [ $RESULT -eq 0 ]; then
     76 					# Mounted ok!
     77 					umount "$i"
     78 					echo "$i" 1
     79 					continue
     80 				fi
     81 			fi
     82 
     83 			# Not in fstab, or the mount failed.
     84 			mount "$i" "$DEFAULT_MOUNT" -t auto > /dev/null 2> /dev/null
     85 			RESULT=$?
     86 
     87 			if [ $RESULT -eq 0 ]; then
     88 				# Mounted ok once we gave it options.
     89 				umount "$i"
     90 				echo "$i" 0
     91 				continue
     92 			fi
     93 		fi
     94 	done
     95 }
     96