update Samba to 3.6.25, based upon 18.06
[librecmc/librecmc.git] / package / network / services / samba36 / files / lib / samba.sh
1 #!/bin/sh
2 #
3 # Copyright (C) 2018 OpenWrt.org
4 # Copyright (C) 2018 rosysong@rosinson.com
5 #
6
7 . /lib/functions.sh
8
9 FLAG_DEV_TYPE=
10 FLAG_DEV_MOPT=
11 FLAG_HAS_SECT=
12
13 samba_dev_filter() { # <devname> <[path,/dev/]>
14         case $1 in
15         ${2}mtdblock*|\
16         ${2}ubi*)
17                 FLAG_DEV_TYPE="mtd"
18                 ;;
19         ${2}loop*|\
20         ${2}mmcblk*|\
21         ${2}sd*|\
22         ${2}hd*|\
23         ${2}md*|\
24         ${2}nvme*|\
25         ${2}vd*|\
26         ${2}xvd*)
27                 FLAG_DEV_TYPE="not-mtd"
28                 ;;
29         *)
30                 [ -b ${2}${1} ] && FLAG_DEV_TYPE="not-mtd"
31                 [ -b /dev/mapper/$1 ] && FLAG_DEV_TYPE="not-mtd"
32                 ;;
33         esac
34 }
35
36 samba_cfg_lookup() { # <section> <name>
37         config_get name $1 name
38         [ "$name" = "$2" ] || return
39         FLAG_HAS_SECT=y
40 }
41
42 samba_cfg_delete() { # <section> <name>
43         config_get name $1 name
44         [ "$name" = "$2" ] || return
45         uci -q delete samba.$1
46 }
47
48 samba_find_mount_point() { # <devname>
49         # search mount point in /proc/mounts
50         while read l; do
51                 local d=$(echo $l | awk '/^\/dev/ {print $1}')
52                 [ "$d" = "/dev/$1" ] || continue
53
54                 FLAG_DEV_MOPT=$(echo $l | awk '/^\/dev/ {print $2}')
55                 break
56         done < /proc/mounts
57 }
58
59 _samba_add_section() { # <devname> <mount point>
60         uci -q batch <<-EOF
61                 add samba sambashare
62                 set samba.@sambashare[-1].browseable='yes'
63                 set samba.@sambashare[-1].name='$1'
64                 set samba.@sambashare[-1].path='$2'
65                 set samba.@sambashare[-1].users='root'
66                 set samba.@sambashare[-1].read_only='no'
67                 set samba.@sambashare[-1].guest_ok='yes'
68                 set samba.@sambashare[-1].create_mask='0755'
69                 set samba.@sambashare[-1].dir_mask='0755'
70         EOF
71 }
72
73 samba_add_section() { # <devname> [<mount point>]
74         FLAG_HAS_SECT=
75         FLAG_DEV_MOPT=
76
77         config_foreach samba_cfg_lookup sambashare $1
78         [ -z "$FLAG_HAS_SECT" ] || return
79
80         samba_find_mount_point $1
81         [ -n "$FLAG_DEV_MOPT" ] || return
82
83         [ -n "$2" -a "$2" = "$FLAG_DEV_MOPT" ] || \
84                 _samba_add_section $1 $FLAG_DEV_MOPT
85 }
86
87 samba_delete_section() { # <devname>
88         config_foreach samba_cfg_delete sambashare $1
89 }