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