blob: 9648574c99ae5b834a2b464b76508541095b3d2c [file] [log] [blame]
#!/bin/bash
# Library to find CD devices.
#
# Copyright (C) 2003-2006 IBM
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# Create a list of potential devices. Note that this may pick up some non-block
# devices; it is assumed that they will be filtered out by find_discs_with_media.
function find_disc_devices() {
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`
if [ $NUM_DEVICES -lt 1 ]; then
# No CDs at all?
echo NONE
fi
/bin/ls $(egrep '(cdr|dvd)' /etc/fstab | awk -F " " '{print $1}') /dev/cdr* /dev/dvd* /dev/cdrom/* /dev/sr* 2> /dev/null | sort | uniq
}
# Try to find a disc with media in it. Hopefully, $DEFAULT_MOUNT already exists.
function find_discs_with_media() {
# If the caller doesn't specify a DEFAULT_MOUNT point, specify one.
if [ -z "$DEFAULT_MOUNT" ]; then
DEFAULT_MOUNT=/mnt
fi
POTENTIAL_DEVICES=`find_disc_devices`
# Grab a list of all CD/DVD devices that we can find.
for i in `echo "$POTENTIAL_DEVICES"`
do
# Did we get nothing at all?
if [ "$i" == "NONE" ]; then
echo NONE 0
return
fi
# Is this a link pointing to a device that's in the
# list of potential discs AND isn't in fstab?
# We want to avoid considering /dev entries that are symlinked
# elsewhere ... but we also assume that anything in fstab was
# put there for a reason and ought to be considered anyway.
if [ -L "$i" ]; then
IN_LIST=`echo "$POTENTIAL_DEVICES" | grep "$(readlink $i)" -c`
if [ $IN_LIST -gt 0 ]; then
IN_FSTAB=`grep "^$i[ ]" /etc/fstab -c`
if [ $IN_FSTAB -eq 0 ]; then
continue;
fi
fi
fi
# Block device?
if [ -b "$i" ]; then
IN_FSTAB=`grep -c "^$i[ ]" /etc/fstab`
FSTAB_TYPE=`grep "^$i[ ]" /etc/fstab | awk -F " " '{print $3}'`
if [ $IN_FSTAB -gt 0 -a "$FSTAB_TYPE" != "subfs" ]; then
# This device is listed in fstab and is NOT of
# type "subfs" (SLES9 weirdness); try to mount it.
mount "$i" > /dev/null 2> /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]; then
# Mounted ok!
umount "$i"
echo "$i" 1
continue
fi
fi
# Not in fstab, or the mount failed.
mount "$i" "$DEFAULT_MOUNT" -t auto > /dev/null 2> /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]; then
# Mounted ok once we gave it options.
umount "$i"
echo "$i" 0
continue
fi
fi
done
}