1#
2# @(#) Check services file reloaded after SIGHUP
3#
4
5load_lib "util-defs.exp"
6
7# Create a smb.conf file from a list of sections.  Each section consists of
8# a name and a list of lines which are the contents of that section.
9# Returns a temporary filename which must be deleted after use.
10
11proc write_smb_conf { args } {
12
13    # Set up temporary file
14
15    set name "/tmp/smb.conf-test-[pid]"
16    set f [open $name "w"]
17
18    # Parse sections
19
20    foreach section [lindex $args 0] {
21	set secname [lindex $section 0]
22	set contents [lindex $section 1]
23
24	puts $f "\[$secname]"
25
26	foreach { line } $contents {
27	    puts $f "\t$line"
28	}
29
30	puts $f ""
31    }
32
33    close $f
34
35    # Return filename of smb.conf file
36
37    return $name
38}
39
40proc append_smb_conf { args } {
41
42    set name [lindex $args 0]
43    set f [open $name "a"]
44
45    foreach section [lindex $args 1] {
46	set secname [lindex $section 0]
47	set contents [lindex $section 1]
48
49	puts $f "\[$secname]"
50
51	foreach { line } $contents {
52	    puts $f "\t$line"
53	}
54
55	puts $f ""
56    }
57
58    close $f
59}
60
61# Create a smb.conf file
62
63set smb_conf [list \
64	[list "global" \
65	    [list "netbios name = testing" \
66	          "guest ok = true"]]]
67
68set name [write_smb_conf $smb_conf]
69
70# Run smbd and smbclient output
71
72set smbd_output [util_start "bin/smbd" "-s $name"]
73set nmbd_output [util_start "bin/nmbd" "-s $name"]
74
75sleep 5
76
77set smbclient_output [util_start "bin/smbclient -L //testing -N"]
78verbose $smbclient_output
79
80if { ![regexp "Anonymous login successful" $smbclient_output] } {
81    untested "smbd could not be started"
82    util_start "killall" "smbd nmbd"
83    file delete $name
84    return
85}
86
87# Append another share and sighup
88
89append_smb_conf $name [list [list "tmp" [list "browseable = true"]]]
90set output [util_start "killall" "-HUP smbd"]
91verbose $output
92
93sleep 2
94
95set smbclient_output2 [util_start "bin/smbclient -L //testing -N"]
96verbose $smbclient_output2
97
98if { [regexp "tmp.*Disk" $smbclient_output2] } {
99    pass "sighup reload"
100} else {
101    fail "sighup reload"
102}
103
104# Clean up
105
106util_start "killall" "smbd nmbd"
107file delete $name
108