This file is indexed.

/usr/bin/rbdmap is in ceph-common 10.1.2-0ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/sh

do_map() {

        # default to reasonable value if RBDMAPFILE not set in environment
        printenv RBDMAPFILE >/dev/null || local RBDMAPFILE=/etc/ceph/rbdmap

	if [ ! -f "$RBDMAPFILE" ]; then
		logger -p "daemon.warning" -t rbdmap "No $RBDMAPFILE found."
		exit 0
	fi

	# Read /etc/rbdtab to create non-existant mapping
	RET=0
	while read DEV PARAMS; do
		case "$DEV" in
		  ""|\#*)
			continue
			;;
		  */*)
			;;
		  *)
			DEV=rbd/$DEV
			;;
		esac
		logger -p "daemon.debug" -t rbdmap "Mapping '${DEV}'"
		newrbd=""
		MAP_RV=""
		OIFS=$IFS
		IFS=','
		CMDPARAMS=""
		for PARAM in ${PARAMS[@]}; do
			CMDPARAMS="$CMDPARAMS --$(echo $PARAM | tr '=' ' ')"
		done
		IFS=$OIFS
		if [ -b /dev/rbd/$DEV ]; then
			MAP_RV="$(readlink -f /dev/rbd/$DEV)"
		else
			MAP_RV="$(rbd map $DEV $CMDPARAMS 2>&1)"
			if [ $? -eq 0 ]; then
			    newrbd="yes"
			else
			    RET=$((${RET}+$?))
			    logger -p "daemon.warning" -t rbdmap "Failed to map '${DEV}"
			    continue
			fi
		fi
		logger -p "daemon.debug" -t rbdmap "Mapped '${DEV}' to '${MAP_RV}'"

		if [ "$newrbd" ]; then
			## Mount new rbd
			MNT_RV=""
			mount --fake /dev/rbd/$DEV >>/dev/null 2>&1 \
			&& MNT_RV=$(mount -vn /dev/rbd/$DEV 2>&1)
			[ -n "${MNT_RV}" ] && logger -p "daemon.debug" -t rbdmap "Mounted '${MAP_RV}' to '${MNT_RV}'"

			## post-mapping
			if [ -x "/etc/ceph/rbd.d/${DEV}" ]; then
			    logger -p "daemon.debug" -t rbdmap "Running post-map hook '/etc/ceph/rbd.d/${DEV}'"
			    /etc/ceph/rbd.d/${DEV} map "/dev/rbd/${DEV}"
			fi
		fi
	done < $RBDMAPFILE
	exit ${RET}

}

do_unmap() {
	RET=0
	## Unmount and unmap all rbd devices
	if ls /dev/rbd[0-9]* >/dev/null 2>&1; then
		for DEV in /dev/rbd[0-9]*; do
			## pre-unmapping
			for L in $(find /dev/rbd -type l); do
			    LL="${L##/dev/rbd/}"
			    if [ "$(readlink -f $L)" = "${DEV}" ] \
			    && [ -x "/etc/ceph/rbd.d/${LL}" ]; then
			        logger -p "daemon.debug" -t rbdmap "Running pre-unmap hook for '${DEV}': '/etc/ceph/rbd.d/${LL}'"
			        /etc/ceph/rbd.d/${LL} unmap "$L"
			        break
			    fi
			done

			logger -p "daemon.debug" -t rbdmap "Unmapping '${DEV}'"
			MNT=$(findmnt --mtab --source ${DEV} --noheadings | awk '{print $1'})
			if [ -n "${MNT}" ]; then
			    logger -p "daemon.debug" -t rbdmap "Unmounting '${MNT}'"
			    umount "${MNT}" >>/dev/null 2>&1
			fi
			if mountpoint -q "${MNT}"; then
			    ## Un-mounting failed.
			    logger -p "daemon.warning" -t rbdmap "Failed to unmount '${MNT}'"
			    RET=$((${RET}+1))
			    continue
			fi
			## Un-mapping.
			rbd unmap $DEV >>/dev/null 2>&1
			if [ $? -ne 0 ]; then
			    logger -p "daemon.warning" -t rbdmap "Failed to unmap '${MNT}'"
			    RET=$((${RET}+$?))
			    continue
			fi
			logger -p "daemon.debug" -t rbdmap "Unmapped '${DEV}'"
		done
	fi
	exit ${RET}
}

case "$1" in
  map)
	do_map
	;;

  unmap)
	do_unmap
	;;
  *)
	echo "Usage: rbdmap map | unmap"
esac