From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Aug 9 17:30:13 2011 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 299231065675 for ; Tue, 9 Aug 2011 17:30:13 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id F3D4F8FC12 for ; Tue, 9 Aug 2011 17:30:12 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p79HUC4V007578 for ; Tue, 9 Aug 2011 17:30:12 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p79HUChs007576; Tue, 9 Aug 2011 17:30:12 GMT (envelope-from gnats) Resent-Date: Tue, 9 Aug 2011 17:30:12 GMT Resent-Message-Id: <201108091730.p79HUChs007576@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Aragon Gouveia Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 701691065676 for ; Tue, 9 Aug 2011 17:26:30 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id 5F19D8FC21 for ; Tue, 9 Aug 2011 17:26:30 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p79HQTiS033706 for ; Tue, 9 Aug 2011 17:26:29 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p79HQTkI033705; Tue, 9 Aug 2011 17:26:29 GMT (envelope-from nobody) Message-Id: <201108091726.p79HQTkI033705@red.freebsd.org> Date: Tue, 9 Aug 2011 17:26:29 GMT From: Aragon Gouveia To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: ports/159631: New port: sysutils/amount FreeBSD specific auto mount framework for X11 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Aug 2011 17:30:13 -0000 >Number: 159631 >Category: ports >Synopsis: New port: sysutils/amount FreeBSD specific auto mount framework for X11 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Aug 09 17:30:12 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Aragon Gouveia >Release: 8.2-RELEASE-p2 >Organization: >Environment: FreeBSD fuzz.geek.sh 8.2-RELEASE-p2 FreeBSD 8.2-RELEASE-p2 #0: Sun Jul 10 15:27:35 SAST 2011 toor@igor.geek.sh:/usr/obj/usr/src-RELENG_8_2/sys/FUZZ amd64 >Description: amount is a FreeBSD specific auto mount framework, primarily intended for X11 users. It uses FreeBSD-native facilities to detect device insertion and perform volume discovery. >How-To-Repeat: >Fix: Patch attached with submission follows: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # amount # amount/Makefile # amount/files # amount/files/amountd.in # amount/files/dist # amount/files/dist/amount.conf # amount/files/dist/amount.in # amount/files/dist/amount_ob.in # amount/files/dist/amountd.in # amount/files/dist/amount.sh # amount/pkg-plist # amount/pkg-descr # echo c - amount mkdir -p amount > /dev/null 2>&1 echo x - amount/Makefile sed 's/^X//' >amount/Makefile << '1d430d95b9cd4912298940d7717616b4' X# New ports collection makefile for: amount X# Date created: 7 August 2011 X# Whom: Aragon Gouveia X# X# $FreeBSD$ X# X XPORTNAME= amount XPORTVERSION= 0.6 XCATEGORIES= sysutils XMASTER_SITES= # empty XDISTFILES= # none XEXTRACT_ONLY= # empty X XMAINTAINER= aragon@phat.za.net XCOMMENT= FreeBSD specific auto mount framework for X11 X XRUN_DEPENDS= ${LOCALBASE}/bin/sudo:${PORTSDIR}/security/sudo X XSUB_FILES= dist/amount dist/amountd XUSE_RC_SUBR= amountd XNO_BUILD= yes X XOPTIONS= OPENBOX "Install Openbox pipemenu script" off X X.include X X.if defined(WITH_OPENBOX) XSUB_FILES+= dist/amount_ob XRUN_DEPENDS+= ${LOCALBASE}/bin/xmessage:${PORTSDIR}/x11/xmessage XPLIST_SUB+= OPENBOX="" X.else XPLIST_SUB+= OPENBOX="@comment " X.endif X Xdo-extract: X @${MKDIR} ${WRKDIR}/dist X Xdo-install: X ${INSTALL_SCRIPT} ${WRKDIR}/dist/amountd ${PREFIX}/sbin X ${INSTALL_SCRIPT} ${WRKDIR}/dist/amount ${PREFIX}/bin X.if defined(WITH_OPENBOX) X ${INSTALL_SCRIPT} ${WRKDIR}/dist/amount_ob ${PREFIX}/bin X.endif X ${INSTALL_DATA} ${FILESDIR}/dist/amount.conf ${PREFIX}/etc/amount.conf.sample X ${MKDIR} ${PREFIX}/lib/amount X ${INSTALL_DATA} ${FILESDIR}/dist/amount.sh ${PREFIX}/lib/amount/amount.sh X X.include 1d430d95b9cd4912298940d7717616b4 echo c - amount/files mkdir -p amount/files > /dev/null 2>&1 echo x - amount/files/amountd.in sed 's/^X//' >amount/files/amountd.in << '1cba31682b6368f44d5497639df51b88' X#!/bin/sh X X# PROVIDE: amountd X# REQUIRE: DAEMON X# KEYWORD: shutdown nojail X X. /etc/rc.subr X Xname="amountd" Xrcvar=`set_rcvar` Xcommand="%%PREFIX%%/sbin/amountd" Xload_rc_config $name Xpidfile="/var/run/amountd.pid" Xcommand_interpreter=/bin/sh X Xrun_rc_command "$1" 1cba31682b6368f44d5497639df51b88 echo c - amount/files/dist mkdir -p amount/files/dist > /dev/null 2>&1 echo x - amount/files/dist/amount.conf sed 's/^X//' >amount/files/dist/amount.conf << 'b0b16dbe415c0c95e82edf5d60d524bd' XWRKDIR=/tmp/amountd XDEVMATCH="^(da|mmcsd)" XLABELMATCH="^(msdosfs|ntfs|ufs)/" XMNTPREFIX=/media b0b16dbe415c0c95e82edf5d60d524bd echo x - amount/files/dist/amount.in sed 's/^X//' >amount/files/dist/amount.in << 'ecd6f9da579f629514b6b579f55fd3fd' X#!/bin/sh X# X# Command line tool for amountd X X. %%PREFIX%%/lib/amount/amount.sh X Xif [ -r %%PREFIX%%/etc/amount.conf ]; then X . %%PREFIX%%/etc/amount.conf Xfi X X: ${WRKDIR:=/tmp/amountd} X: ${MNTPREFIX=/media} X XVERSION=0.6 X Xif [ "${1}" = "doCmd" ]; then X shift X doCmd "$@" X exit $? Xfi X Xif [ -n "${1}" ]; then X cdev=${1} Xfi X Xif [ ! -r ${WRKDIR}/mountable ]; then X echo amountd mountable unreadable 1>&2 X exit 1 Xfi X XIFS=" " Xwhile read dev fs mntcmd label <&3; do X if [ -z "${label}" ]; then X provider=/dev/${dev} X mpoint=${MNTPREFIX}/${dev} X olabel="${dev} ${fs}" X else X provider="/dev/${fs}/${label}" X mpoint="${MNTPREFIX}/${label}" X olabel="${dev} ${fs}/${label}" X fi X mstat=$(mount |grep -E "^/dev/(${dev}|${fs}/${label}) on") X if [ $? -eq 0 ]; then X op=umount X eval $(echo ${mstat} |sed -E 's|^(/dev/.*) on (/.*) \(.*$|provider="\1"; mpoint="\2";|') X else X op=mount X fi X if [ -n "${cdev}" ]; then X if [ "${cdev}" = "${dev}" ]; then X echo -n "${op}ing ${olabel}... " X sudo ${0} doCmd ${op} ${fs} "${mntcmd}" "${provider}" "${mpoint}" ${USER} X if [ $? -eq 0 ]; then X echo success X else X echo failed X fi X exit 0 X fi X continue X fi X echo ${op} ${olabel} Xdone 3<${WRKDIR}/mountable ecd6f9da579f629514b6b579f55fd3fd echo x - amount/files/dist/amount_ob.in sed 's/^X//' >amount/files/dist/amount_ob.in << '199a753f9cd7d462806eaed010bcd508' X#!/bin/sh X# X# OpenBox menu tool for amountd X X. %%PREFIX%%/lib/amount/amount.sh X Xif [ -r %%PREFIX%%/etc/amount.conf ]; then X . %%PREFIX%%/etc/amount.conf Xfi X X: ${WRKDIR:=/tmp/amountd} X: ${MNTPREFIX=/media} X XVERSION=0.6 X Xif [ "${1}" = "doCmd" ]; then X shift X doCmd "$@" X exit $? Xfi X Xif [ -n "${1}" -a -n "${2}" ]; then X case "${1}" in X mount|umount) ;; X *) X exit 1 X ;; X esac X cmd=${1} X cdev=${2} X if [ ! -r ${WRKDIR}/mountable ]; then X exit 1 X fi Xelse X echo "" X if [ ! -r ${WRKDIR}/mountable ]; then X echo '' X echo "" X exit 1 X fi Xfi X XIFS=" " Xwhile read dev fs mntcmd label <&3; do X if [ -z "${label}" ]; then X provider=/dev/${dev} X mpoint=${MNTPREFIX}/${dev} X oblabel="${dev} ${fs}" X else X provider="/dev/${fs}/${label}" X mpoint="${MNTPREFIX}/${label}" X oblabel="${dev} ${fs}/${label}" X fi X mstat=$(mount |grep -E "^/dev/(${dev}|${fs}/${label}) on") X if [ $? -eq 0 ]; then X op=umount X eval $(echo ${mstat} |sed -E 's|^(/dev/.*) on (/.*) \(.*$|provider="\1"; mpoint="\2";|') X else X op=mount X fi X if [ -n "${cdev}" ]; then X if [ "${cdev}" = "${dev}" -a "${op}" = "${cmd}" ]; then X sudo ${0} doCmd ${op} ${fs} "${mntcmd}" "${provider}" "${mpoint}" ${USER} X if [ $? -eq 0 ]; then X xmessage -nearmouse -timeout 1 success X else X xmessage -nearmouse -timeout 5 fail X fi X exit 0 X fi X continue X fi X cat <<_EOF X X X ${0} ${op} ${dev} X X X_EOF Xdone 3<${WRKDIR}/mountable X Xecho "" 199a753f9cd7d462806eaed010bcd508 echo x - amount/files/dist/amountd.in sed 's/^X//' >amount/files/dist/amountd.in << '64ac788b22d3ab8ffcfae31e35350152' X#!/bin/sh X# X# Auto mount daemon for FreeBSD's devd(8) X Xif [ "${1}" != "daemon" ]; then X daemon -cf -p /var/run/amountd.pid /usr/local/sbin/amountd daemon X exit $? Xfi X Xif [ -r %%PREFIX%%/etc/amount.conf ]; then X . %%PREFIX%%/etc/amount.conf Xfi X X: ${WRKDIR:=/tmp/amountd} X: ${DEVMATCH:="^(da|mmcsd)"} X: ${LABELMATCH:="^(msdosfs|ntfs|ufs)/"} X: ${MNTPREFIX=/media} X Xcleanup () { X trap - EXIT X kill ${DEVDCAT} X rm -rf ${WRKDIR} X exit 0 X} X Xlog () { X local level X level=${1} X shift X logger -p user.${level} -t amountd $* X} X XpollDev () { X local status X status=0 X while true; do X log info polling ${1} X sleep 5 X if camcontrol tur ${1} >/dev/null 2>/dev/null; then X [ ${status} -eq 0 ] || continue X status=1 X echo "!system=DEVFS subsystem=CDEV type=CREATE cdev=${1}" >${WRKDIR}/${AMOUNTDFIFO} X sleep 1 X :>/dev/${1} X else X if ! camcontrol devlist |grep -q "[(,]${1}[,)]"; then X log info lost device ${1} X echo "!system=DEVFS subsystem=CDEV type=ENDPOLL cdev=${1}" >${WRKDIR}/${AMOUNTDFIFO} X return 0 X fi X [ ${status} -eq 1 ] || continue X status=0 X echo "!system=DEVFS subsystem=CDEV type=DESTROY cdev=${1}" >${WRKDIR}/${AMOUNTDFIFO} X fi X done X} X XprobeDev () { X local dev probe gtype gprov status pollpid mntcmd X dev=$1 X eval "status=\$STATUS_${dev}" X eval "pollpid=\$POLLPID_${dev}" X if [ "${status}" = "probed" ]; then return 0; fi X if [ -z "${pollpid}" ]; then X if camcontrol devlist |grep -q "[(,]${dev}[,)]"; then X if ! camcontrol tur ${dev} >/dev/null; then X pollDev ${dev} & X eval "POLLPID_${dev}=$!" X log info forking poller at PID $! X return 1 X fi X fi X fi X if [ ${OSREL} -lt 802503 ]; then X probe=$(gpart show -r ${dev} 2>/dev/null) X else X probe=$(gpart show -rp ${dev} 2>/dev/null) X fi X if [ $? -ne 0 ]; then X probe=$(dd if=/dev/${dev} bs=128k count=1 2>/dev/null |file -Ls /dev/stdin) X case "${probe}" in X *FAT*) X mntcmd="mount_msdosfs" X if [ $(diskinfo ${dev} |cut -f 1 -d " ") -gt 134217728 ]; then X mntcmd="${mntcmd} -o large" X fi X eval "STATUS_${dev}=probed" X eval "TYPE_${dev}=msdosfs" X eval "MNTCMD_${dev}=\"${mntcmd}\"" X MOUNTABLE="${MOUNTABLE} ${dev}" X return 0 X ;; X *Linux*ext2*) X eval "STATUS_${dev}=probed" X eval "TYPE_${dev}=ext2fs" X eval "MNTCMD_${dev}=\"mount -t ext2fs\"" X MOUNTABLE="${MOUNTABLE} ${dev}" X return 0 X ;; X *NTFS*) X eval "STATUS_${dev}=probed" X eval "TYPE_${dev}=ntfs" X eval "MNTCMD_${dev}=\"mount_ntfs -o ro\"" X MOUNTABLE="${MOUNTABLE} ${dev}" X return 0 X ;; X esac X return 1 X fi X IFS=" X" X for line in ${probe}; do X IFS=" " X set -- ${line} X [ "${3}" != "-" ] || continue X if [ "${1}" = "=>" ]; then X shift X eval "STATUS_${dev}=probed" X gtype=${4} X continue X fi X if [ ${OSREL} -lt 802503 ]; then X gprov=$(gpart modify -i ${3} -f x ${dev} 2>/dev/null |cut -f 1 -d " ") X gpart undo ${dev} >/dev/null 2>&1 X else X gprov=${3} X fi X case "${gtype}" in X MBR) X case "${4}" in X 1|4|5|6|12|13|15|16) X mntcmd="mount_msdosfs" X if [ $(diskinfo ${gprov} |cut -f 1 -d " ") -gt 134217728 ]; then X mntcmd="${mntcmd} -o large" X fi X eval "STATUS_${gprov}=probed" X eval "TYPE_${gprov}=msdosfs" X eval "MNTCMD_${gprov}=\"${mntcmd}\"" X MOUNTABLE="${MOUNTABLE} ${gprov}" X ;; X 7) X if dd if=/dev/${gprov} bs=128k count=1 2>/dev/null \ X |file -Ls /dev/stdin |grep -q "NTFS"; then X eval "STATUS_${gprov}=probed" X eval "TYPE_${gprov}=ntfs" X eval "MNTCMD_${gprov}=\"mount_ntfs -o ro\"" X MOUNTABLE="${MOUNTABLE} ${gprov}" X fi X ;; X 83) X if dd if=/dev/${gprov} bs=128k count=1 2>/dev/null \ X |file -Ls /dev/stdin |grep -q "Linux.*ext2"; then X eval "STATUS_${gprov}=probed" X eval "TYPE_${gprov}=ext2fs" X eval "MNTCMD_${gprov}=\"mount -t ext2fs\"" X MOUNTABLE="${MOUNTABLE} ${gprov}" X fi X ;; X 165) X probeDev ${gprov} X if [ $? -eq 1 ]; then X eval "STATUS_${gprov}=probed" X eval "TYPE_${gprov}=ufs" X eval "MNTCMD_${gprov}=\"mount -t ufs\"" X MOUNTABLE="${MOUNTABLE} ${gprov}" X fi X ;; X esac X ;; X BSD) X case "${4}" in X 7) X eval "STATUS_${gprov}=probed" X eval "TYPE_${gprov}=ufs" X eval "MNTCMD_${gprov}=\"mount -t ufs\"" X MOUNTABLE="${MOUNTABLE} ${gprov}" X ;; X esac X ;; X esac X done X unset IFS X return 0 X} X XprobeLabel () { X local label curtype glabel X label=${1} X glabel=$(glabel status |grep "${label}") X [ $? -eq 0 ] || return 1 X set -- ${glabel} X shift $((${#}-1)) X eval "curtype=\$TYPE_${1}" X if [ "${curtype}" != "${label%/*}" ]; then X eval "STATUS_${1}=probed" X eval "TYPE_${1}=${label%/*}" X MOUNTABLE="${MOUNTABLE} ${1}" X fi X eval "LABEL_${1}=\"${label#*/}\"" X return 0 X} X XOSREL=$(sysctl -n kern.osreldate) XAMOUNTDFIFO=amountd.fifo XMNTFILE=mountable Xtrap cleanup 1 2 13 14 15 EXIT X[ -d ${WRKDIR} ] && rm -rf ${WRKDIR} Xmkdir ${WRKDIR} || ( log err unable to create WRKDIR at ${WRKDIR} && exit 1 ) Xmkfifo ${WRKDIR}/${AMOUNTDFIFO} || ( log err unable to create FIFO at ${WRKDIR}/${AMOUNTDFIFO} && exit 1 ) Xif [ -S /var/run/devd.pipe -a -r /var/run/devd.pipe ]; then X cat /var/run/devd.pipe >${WRKDIR}/${AMOUNTDFIFO} 2>/dev/null & X DEVDCAT=$! Xelse X log err devd domain socket non-existant or unreadable X exit 1 Xfi X XMOUNTABLE="" X:>${WRKDIR}/mountable X Xwhile read SYSTEM SUBSYS TYPE EXTRA <&3; do X [ "${SYSTEM#*=}" = "DEVFS" -a "${SUBSYS#*=}" = "CDEV" ] || continue X CDEV=${EXTRA#cdev=} X if echo ${CDEV} |grep -qE ${DEVMATCH}; then X PROBEFUNC=probeDev X elif echo ${CDEV} |grep -qE ${LABELMATCH}; then X PROBEFUNC=probeLabel X else X continue X fi X log notice ${TYPE#*=} ${CDEV} X if [ "${TYPE#*=}" = "CREATE" ]; then X ${PROBEFUNC} "${CDEV}" X elif [ "${TYPE#*=}" = "DESTROY" ]; then X if [ "${PROBEFUNC}" = "probeDev" ]; then X eval "TYPE=\$TYPE_${CDEV}" X if [ -n "${TYPE}" ]; then X oldmountable=${MOUNTABLE} X MOUNTABLE="" X for mountable in ${oldmountable}; do X [ "${mountable}" != "${CDEV}" ] || continue X MOUNTABLE="${MOUNTABLE} ${mountable}" X done X eval "unset TYPE_${CDEV} LABEL_${CDEV}" X fi X eval "unset STATUS_${CDEV}" X fi X elif [ "${TYPE#*=}" = "ENDPOLL" ]; then X eval "unset POLLPID_${CDEV}" X fi X :>${WRKDIR}/mountable X for mountable in ${MOUNTABLE}; do X eval "TYPE=\$TYPE_${mountable}" X eval "MNTCMD=\"\$MNTCMD_${mountable}\"" X eval "LABEL=\$LABEL_${mountable}" X printf '%s\t%s\t%s\t%s\n' ${mountable} ${TYPE} "${MNTCMD}" "${LABEL}" >>${WRKDIR}/mountable X done Xdone 3<${WRKDIR}/${AMOUNTDFIFO} 64ac788b22d3ab8ffcfae31e35350152 echo x - amount/files/dist/amount.sh sed 's/^X//' >amount/files/dist/amount.sh << '291fe3b40195adb987ac7fb8556f1595' X# Common functions for amount clients X XdoCmd () { X local mcmd X case "${1}" in X mount) X mcmd="${3}" X case "${2}" in X msdosfs|ntfs) X if [ -n "${6}" ]; then X mcmd="${mcmd} -u ${6}" X fi X ;; X esac X mkdir -p "${5}" && ${mcmd} "${4}" "${5}" X ;; X umount) X umount "${4}" && rmdir "${5}" X ;; X esac X return $? X} 291fe3b40195adb987ac7fb8556f1595 echo x - amount/pkg-plist sed 's/^X//' >amount/pkg-plist << 'f05ad28c58cc5b95db6ad13be4b8bbf3' Xetc/amount.conf.sample Xsbin/amountd Xbin/amount X%%OPENBOX%%bin/amount_ob Xlib/amount/amount.sh X@dirrm lib/amount f05ad28c58cc5b95db6ad13be4b8bbf3 echo x - amount/pkg-descr sed 's/^X//' >amount/pkg-descr << '46dcb1af1dfe840b985c260311849973' Xamount is a FreeBSD specific auto mount framework, Xprimarily intended for X11 users. It uses FreeBSD-native Xfacilities to detect device insertion and perform Xvolume discovery. X XWWW: http://forums.freebsd.org/showthread.php?t=23105 46dcb1af1dfe840b985c260311849973 exit >Release-Note: >Audit-Trail: >Unformatted: