Changeset 14161


Ignorieren:
Zeitstempel:
17.03.2017 19:51:20 (vor 11 Tagen)
Autor:
er13
Nachricht:

FreetzMount:

  • revert r14160 - mount points with spaces could be used for command injection, it is also unsafe in that sense that we don't know if AVM closed-source components from any ever released firmware version really support them
  • thanks to PeterPawn for pointing it out
  • refs #2384
Datei:
1 bearbeitet

Legende:

Unverändert
Hinzugefügt
Entfernt
  • trunk/make/mod/files/root/usr/lib/libmodmount.sh

    r14160 r14161  
    4646    fi 
    4747 
    48     echo "$mnt_name" 
     48    echo $mnt_name 
    4949} 
    5050 
     
    6060mount_fs() { 
    6161    local dev_node=$1                                                         # device node 
    62     local mnt_path="$2"                                                       # mount path 
     62    local mnt_path=$2                                                         # mount path 
    6363    [ $# -ge 3 ] && local rw_mode=$3 || local rw_mode=rw                      # read/write mode 
    6464    [ $# -ge 4 ] && local ftp_uid=$4 || local ftp_uid=0                       # ftp user id 
     
    6969    case $fs_type in 
    7070        vfat) 
    71             mount -t vfat -o $rw_mode,noatime,shortname=winnt,uid=$ftp_uid,gid=$ftp_gid,fmask=0000,dmask=0000 $dev_node "$mnt_path" 
     71            mount -t vfat -o $rw_mode,noatime,shortname=winnt,uid=$ftp_uid,gid=$ftp_gid,fmask=0000,dmask=0000 $dev_node $mnt_path 
    7272            err_mo=$? 
    7373            ;; 
    7474        ext2|ext3|ext4|reiserfs) 
    75             mount -t $fs_type $dev_node "$mnt_path" -o noatime,nodiratime,rw,async 
     75            mount -t $fs_type $dev_node $mnt_path -o noatime,nodiratime,rw,async 
    7676            err_mo=$? 
    7777            ;; 
    7878        hfs|hfsplus) 
    79             mount -t $fs_type $dev_node "$mnt_path" 
     79            mount -t $fs_type $dev_node $mnt_path 
    8080            err_mo=$? 
    8181            ;; 
     
    8484            ;; 
    8585        ntfs) 
    86             [ -x "$(which ntfs-3g)" ] && { ntfs-3g $dev_node "$mnt_path" -o force ; err_mo=$? ; } || err_mo=111 
     86            [ -x "$(which ntfs-3g)" ] && { ntfs-3g $dev_node $mnt_path -o force ; err_mo=$? ; } || err_mo=111 
    8787            ;; 
    8888        swap) 
     
    9090            err_mo=$((17+$?)) 
    9191            ;; 
    92         *)                                                                    # fs type unknown 
    93             mount $dev_node "$mnt_path" 
     92        *)                                                                # fs type unknown 
     93            mount $dev_node $mnt_path 
    9494            err_mo=$? 
    9595            ;; 
     
    120120 
    121121    mnt_name=$(find_mnt_name $mnt_main_dev $mnt_part_num) 
    122     mnt_path="$FTPDIR/$mnt_name" 
     122    mnt_path=$FTPDIR/$mnt_name 
    123123    log_freetz notice "Mounting device $mnt_dev at $mnt_path ... " 
    124     if [ ! -d "$mnt_path" ]; then 
    125         mkdir -p "$mnt_path" 
     124    if [ ! -d $mnt_path ]; then 
     125        mkdir -p $mnt_path 
    126126    else 
    127127        log_freetz notice "$mnt_path already exists, after mounting $mnt_dev its contents (if any) will become invisible ... " 
     
    132132    umask 0 
    133133 
    134     fs_type=$(mount_fs $mnt_dev "$mnt_path" $mnt_rw $FTPUID $FTPGID)           # FREETZ mount 
     134    fs_type=$(mount_fs $mnt_dev $mnt_path $mnt_rw $FTPUID $FTPGID)             # FREETZ mount 
    135135    local err_fs_mount=$? 
    136136 
    137137    # update device map, do it before notifying other components about changes 
    138138    # TODO: it should be enough to do it on successful mount only, i.e. if err_fs_mount==0 
    139     if grep -q "$mnt_path" /proc/mounts; then 
     139    if grep -q $mnt_path /proc/mounts; then 
    140140        if [ -f "$1" -o -f "/proc/bus/usb/$1" -o -f "/dev/bus/usb/$1" ]; then 
    141141            grep -v "^$1=$2:" $DEVMAP > /var/dev-$$.map 
     
    163163 
    164164        # freetz extras 
    165         /etc/init.d/rc.swap autostart "$mnt_path"                                                               # swap 
     165        /etc/init.d/rc.swap autostart $mnt_path                                                                 # swap 
    166166        [ "$MOD_STOR_AUTORUNEND" == "yes" -a -x $autorun ] && $autorun &                                        # autorun 
    167         [ -r /mod/etc/external.pkg ] && /etc/init.d/rc.external start "$mnt_path" &                             # external 
    168  
    169         [ -x $tr069starter ] && $tr069starter "$mnt_name"                                                       # tr069 
     167        [ -r /mod/etc/external.pkg ] && /etc/init.d/rc.external start $mnt_path &                               # external 
     168 
     169        [ -x $tr069starter ] && $tr069starter $mnt_name                                                         # tr069 
    170170        [ -x $samba_control ] && $samba_control reconfig                                                        # SAMBA reconfiguration 
    171171        [ -p $tammnt ] && echo "m$mnt_path" > $tammnt                                                           # tam 
    172172 
    173         rm -f /var/media/NEW_LINK && ln -fs "$mnt_path" /var/media/NEW_LINK                                     # mark last mounted partition 
     173        rm -f /var/media/NEW_LINK && ln -fs $mnt_path /var/media/NEW_LINK                                       # mark last mounted partition 
    174174 
    175175        # notify other components that a new partition has been mounted 
     
    181181        [ -e /lib/libmediasrv.so ] && msgsend upnpd plugin force_notify libmediasrv.so new_partition            # mediasrv 
    182182        [ -e /lib/libgpmsrv.so   ] && msgsend upnpd plugin force_notify libgpmsrv.so "new_partition:$mnt_path"  # google play music 
    183         [ -x $fritznasdb_control ] && $fritznasdb_control new_partition "$mnt_path"                             # fritznasdb 
     183        [ -x $fritznasdb_control ] && $fritznasdb_control new_partition $mnt_path                               # fritznasdb 
    184184 
    185185        [ -x "$(which led-ctrl)" ] && led-ctrl filesystem_done                                                  # led 
     
    190190    # mount failed 
    191191    local mnt_failure=0 
    192     rmdir "$mnt_path" 
     192    rmdir $mnt_path 
    193193    case "$fs_type" in 
    194194        "crypto_LUKS") 
     
    253253# 
    254254do_umount_locked() { 
    255     local mnt_path="$1"                                                       # /var/media/ftp/uStorMN 
    256     local mnt_name="${mnt_path##*/}"                                          # uStorMN or LABEL 
    257     local mnt_dev=$(grep -m 1 "$mnt_path" /proc/mounts | sed 's/ .*//')       # /dev/sdXY 
     255    local mnt_path=$1                                                         # /var/media/ftp/uStorMN 
     256    local mnt_name=${mnt_path##*/}                                            # uStorMN or LABEL 
     257    local mnt_dev=$(grep -m 1 $mnt_path /proc/mounts | sed 's/ .*//')         # /dev/sdXY 
    258258 
    259259    local rcftpd="/etc/init.d/rc.ftpd" 
     
    266266    # freetz extras 
    267267    [ "$MOD_STOR_AUTORUNEND" == "yes" -a -x $autoend ] && $autoend            # autoend 
    268     [ -r /mod/etc/external.pkg ] && /etc/init.d/rc.external stop "$mnt_path"  # external 
    269     /etc/init.d/rc.swap autostop "$mnt_path"                                  # swap 
     268    [ -r /mod/etc/external.pkg ] && /etc/init.d/rc.external stop $mnt_path    # external 
     269    /etc/init.d/rc.swap autostop $mnt_path                                    # swap 
    270270 
    271271    # notify webdav & TAM unconditionally, i.e. before both "mount -o move" & the actual unmount (this is what AVM does) 
    272     [ -x $webdav_control ] && $webdav_control lost_partition "$mnt_path"      # webdav 
     272    [ -x $webdav_control ] && $webdav_control lost_partition $mnt_path        # webdav 
    273273    [ -p $tammnt ] && echo "u$mnt_path" > $tammnt                             # TAM 
    274274 
    275275    # notify other components before the actual unmount, this is NOT exactly the same what AVM does but quite close to it 
    276276    # AVM does it after "mount -o move" and before the actual unmount 
    277     [ -x $fritznasdb_control ] && $fritznasdb_control lost_partition "$mnt_path"                         # fritznasdb 
     277    [ -x $fritznasdb_control ] && $fritznasdb_control lost_partition $mnt_path                           # fritznasdb 
    278278    [ -e /lib/libmediasrv.so ] && msgsend upnpd plugin notify libmediasrv.so "lost_partition:$mnt_path"  # mediasrv 
    279279    [ -e /lib/libcloudcds.so ] && msgsend upnpd plugin notify libcloudcds.so "lost_partition:$mnt_path"  # webdav based media server 
     
    282282 
    283283    # still some open files under $mnt_path ? 
    284     if ls -l /proc/*/cwd /proc/*/fd/* 2>/dev/null | grep -q "$mnt_path"; then 
     284    if ls -l /proc/*/cwd /proc/*/fd/* 2>/dev/null | grep -q $mnt_path; then 
    285285        # wait some time to give AVM components a chance 
    286286        # to flush / to close the files under $mnt_path 
     
    288288    fi 
    289289 
    290     umount "$mnt_path" > /dev/null 2>&1                                       # umount 
     290    umount $mnt_path > /dev/null 2>&1                                         # umount 
    291291 
    292292    local smbd_needs_start=0 
     
    296296                smbd_needs_start=1 
    297297                $rcsmbd stop 
    298                 umount "$mnt_path" > /dev/null 2>&1 
     298                umount $mnt_path > /dev/null 2>&1 
    299299            fi 
    300300        fi 
     
    307307                ftpd_needs_start=1 
    308308                $rcftpd stop 
    309                 umount "$mnt_path" > /dev/null 2>&1 
     309                umount $mnt_path > /dev/null 2>&1 
    310310            fi 
    311311        fi 
     
    317317            if grep -q " $mnt_path " /proc/mounts; then                # still mounted? 
    318318                for pid in $(ps | sed 's/^ *//g;s/ .*//g'); do 
    319                     umount_files="$(realpath /proc/$pid/cwd /proc/$pid/fd/* 2>/dev/null | grep "$mnt_path")" 
     319                    umount_files="$(realpath /proc/$pid/cwd /proc/$pid/fd/* 2>/dev/null | grep $mnt_path)" 
    320320                    if [ -n "$umount_files" ]; then 
    321321                        umount_blocker="$mnt_path ($mnt_dev) - sending SIG$SIGN to [$pid] $(realpath /proc/$pid/exe):" 
     
    327327                done 
    328328                sync 
    329                 umount "$mnt_path" > /dev/null 2>&1 
     329                umount $mnt_path > /dev/null 2>&1 
    330330            fi 
    331331        done 
     
    334334    if grep -v " hfsplus " /proc/mounts | grep -q " $mnt_path "; then         # mount ro 
    335335        log_freetz notice "$mnt_path ($mnt_dev) - mounting read-only" 
    336         mount "$mnt_path" -o remount,ro 
    337         umount "$mnt_path" > /dev/null 2>&1 
     336        mount $mnt_path -o remount,ro 
     337        umount $mnt_path > /dev/null 2>&1 
    338338    fi 
    339339 
     
    341341    if grep -q " $mnt_path " /proc/mounts; then                               # still mounted? force unmount 
    342342        log_freetz notice "$mnt_path ($mnt_dev) - forcing unmount" 
    343         umount -f "$mnt_path" 
     343        umount -f $mnt_path 
    344344        err_code=$? 
    345345    fi 
     
    347347    if grep -q " $mnt_path " /proc/mounts; then                               # umount failed 
    348348        for pid in $(ps | sed 's/^ *//g;s/ .*//g'); do                    # log blocker 
    349             umount_files="$(realpath /proc/$pid/cwd /proc/$pid/fd/* 2>/dev/null | grep "$mnt_path")" 
     349            umount_files="$(realpath /proc/$pid/cwd /proc/$pid/fd/* 2>/dev/null | grep $mnt_path)" 
    350350            if [ -n "$umount_files" ]; then 
    351351                umount_blocker="$mnt_path ($mnt_dev) - still used by $(realpath /proc/$pid/exe):" 
     
    363363        mv -f /var/dev-$$.map $DEVMAP 
    364364 
    365         rmdir "$mnt_path" 
    366         [ -d "$mnt_path" ] && log_freetz err "Directory $mnt_path could not be removed" 
     365        rmdir $mnt_path 
     366        [ -d $mnt_path ] && log_freetz err "Directory $mnt_path could not be removed" 
    367367 
    368368        eventadd 141 "Partition $mnt_name ($mnt_dev)" 
     
    373373        $rcsmbd start 
    374374    else 
    375         [ -x /etc/samba_control ] && /etc/samba_control reconfig "$mnt_path" 
     375        [ -x /etc/samba_control ] && /etc/samba_control reconfig $mnt_path 
    376376    fi 
    377377    [ $ftpd_needs_start -eq 1 ] && $rcftpd start                              # start ftpd 
     
    399399    if [ "${1:1:3}" == "dev" ] 
    400400    then                                                                      # old parameter style 
    401         local mnt_path="$2"                                               # /var/media/ftp/uStorMN 
     401        local mnt_path=$2                                                 # /var/media/ftp/uStorMN 
    402402    else                                                                      # new parameter style 
    403         local mnt_path="$1"                                               # /var/media/ftp/uStorMN 
     403        local mnt_path=$1                                                 # /var/media/ftp/uStorMN 
    404404    fi 
    405405    local err_code=0 
    406406    passeeren                                                                 # semaphore on 
    407     do_umount_locked "$mnt_path" 
     407    do_umount_locked $mnt_path 
    408408    err_code=$? 
    409409    vrijgeven                                                                 # semaphore off 
     
    520520    set $MOUNT 
    521521    local mnt_dev=$1                                                          # /dev/sda1 
    522     local mnt_path="$2"                                                       # /var/media/ftp/uStorXY or LABEL 
     522    local mnt_path=$2                                                         # /var/media/ftp/uStorXY or LABEL 
    523523    local mnt_main_dev=${mnt_dev:5:3}                                         # sda 
    524524    local mserver_start="/sbin/start_mediasrv" 
     
    528528    local unplug_ret=0 
    529529    [ -x $mserver_stop ] && $mserver_stop 
    530     mount "$mnt_path" -o remount,ro 
     530    mount $mnt_path -o remount,ro 
    531531    [ -x $webdav_control ] && $webdav_control lost_all_partitions 
    532     do_umount "$mnt_path"                                                     # unmount device 
     532    do_umount $mnt_path                                                       # unmount device 
    533533    unplug_ret=$? 
    534534    remained_devs=$(grep "$mnt_main_dev" /proc/mounts)                                                       # check for remained partitions on main device 
Hinweis: Hilfe zur Verwendung der Changeset-Ansicht finden Sie unter TracChangeset.