1#!/bin/sh 2 3SMB_CONF=/etc/samba/smb.conf 4TMP_SAMBA_WLIST=/tmp/tmp_samba_wlist 5TMP_SAMBA_CHECK=/tmp/tmp_samba_check 6TMP_SAMBA_LOCK=/tmp/tmp_samba_lock 7 8add_smb_global() 9{ 10 echo "[global]" > $SMB_CONF 11 echo -n " interfaces = br0 " >> $SMB_CONF 12 br0ip=`config get lan_ipaddr` 13 echo $br0ip >> $SMB_CONF 14 cat /usr/config/smb.conf >> $SMB_CONF 15} 16 17process_group() 18{ 19 echo -n " valid users=" >> $SMB_CONF 20 echo -n " write list=" > $TMP_SAMBA_WLIST 21 22 i=1 23 wc=1 24 while [ 1 ];do 25 grp=`echo $1 | awk -v cc=$i -F, {'print $ cc'}` 26 if [ -z $grp ]; then 27 break; 28 fi 29 if [ $i -ge 2 ]; then 30 echo -n "," >> $SMB_CONF 31 fi 32 echo -n "@$grp" >> $SMB_CONF 33 34 let i=$i+1 35 36 if [ $grp = "admin" ]; then 37 if [ $wc -ge 2 ]; then 38 echo -n "," >> $TMP_SAMBA_WLIST 39 fi 40 echo -n "@admin" >> $TMP_SAMBA_WLIST 41 let wc=$wc+1 42 else 43 access_mode=`config show |grep ^admin_group | sed 's/admin_group[0-9]*[=]/''/'|grep ^$grp | awk '{print$3}'` 44 [ -z $access_mode ] && continue 45 46 if [ "$access_mode" = "R&W" ]; then 47 if [ $wc -ge 2 ]; then 48 echo -n "," >> $TMP_SAMBA_WLIST 49 fi 50 echo -n "@$grp" >> $TMP_SAMBA_WLIST 51 let wc=$wc+1 52 fi 53 fi 54 55 done 56 echo >> $SMB_CONF 57 echo >> $TMP_SAMBA_WLIST 58 cat $TMP_SAMBA_WLIST >> $SMB_CONF 59} 60 61reload_samba() 62{ 63 samba_pid=`pidof smbd` 64 if [ -z "$samba_pid" ]; then 65 smbd -D $SMBD_OPTIONS & 66 else 67 killall -SIGHUP smbd 68 fi 69} 70 71check_add_shares() 72{ 73 while read abspath; 74 do 75 test -f $abspath/.wndr3700_disk_share_info || continue 76 77 cat $abspath/.wndr3700_disk_share_info | sed 's/disk_sharefolder[0-9]*[=]/''/'| while read sharefolder; 78 do 79 echo $sharefolder>/tmp/testone 80 display_name=`awk '{print$1}' /tmp/testone` 81 Partition=`awk '{print$2}' /tmp/testone` 82 Location=`awk '{print$3}' /tmp/testone` 83 group=`awk '{print$4}' /tmp/testone` 84 echo >> $SMB_CONF 85 echo "[$display_name]">> $SMB_CONF 86 echo " path=$abspath$Location">> $SMB_CONF 87 echo " read only=yes" >> $SMB_CONF 88 process_group $group 89 echo " browseable=yes">> $SMB_CONF 90 echo " public=no">> $SMB_CONF 91 rm -f /tmp/testone 92# access_mode=`config show |grep ^admin_group | sed 's/admin_group[0-9]*[=]/''/'|grep ^$group | awk '{print$3}'` 93 # [ "$access_mode" = "R&W" ] && echo "writable=yes">> $SMB_CONF 94 done 95 done < $TMP_SAMBA_CHECK 96} 97 98while [ 1 ];do 99 test -f $TMP_SAMBA_LOCK && continue 100 touch $TMP_SAMBA_LOCK 101 break 102done 103 104# $1 = add/remove $2= DEVICENAME 105echo > $TMP_SAMBA_CHECK 106 107if [ $# -eq 0 ]; then 108 add_smb_global 109 df | grep ^/dev/sd | awk {' print$6 '} > $TMP_SAMBA_CHECK 110 check_add_shares 111elif [ $# -eq 2 ]; then 112 no_global=`grep "\[global\]" $SMB_CONF` 113 [ -z $no_global ] && add_smb_global 114 case $1 in 115 add) 116 echo "/tmp/mnt/$2" > $TMP_SAMBA_CHECK 117 check_add_shares 118 ;; 119 *) 120 echo "remove not supported yet." 121 ;; 122 esac 123else 124 echo "wrong call." 125 exit 1 126fi 127 128rm $TMP_SAMBA_CHECK -f 129rm $TMP_SAMBA_WLIST -f 130 131reload_samba 132 133rm $TMP_SAMBA_LOCK -f 134