#
# @(#) Check services file reloaded after SIGHUP
#

load_lib "util-defs.exp"

# Create a smb.conf file from a list of sections.  Each section consists of
# a name and a list of lines which are the contents of that section.
# Returns a temporary filename which must be deleted after use.

proc write_smb_conf { args } {

    # Set up temporary file

    set name "/tmp/smb.conf-test-[pid]"
    set f [open $name "w"]

    # Parse sections

    foreach section [lindex $args 0] {
	set secname [lindex $section 0]
	set contents [lindex $section 1]
	
	puts $f "\[$secname]"

	foreach { line } $contents {
	    puts $f "\t$line"
	}

	puts $f ""
    }

    close $f

    # Return filename of smb.conf file

    return $name
}

proc append_smb_conf { args } {
    
    set name [lindex $args 0]
    set f [open $name "a"]
    
    foreach section [lindex $args 1] {
	set secname [lindex $section 0]
	set contents [lindex $section 1]
	
	puts $f "\[$secname]"

	foreach { line } $contents {
	    puts $f "\t$line"
	}

	puts $f ""
    }

    close $f
}

# Create a smb.conf file

set smb_conf [list \
	[list "global" \
	    [list "netbios name = testing" \
	          "guest ok = true"]]]

set name [write_smb_conf $smb_conf]

# Run smbd and smbclient output

set smbd_output [util_start "bin/smbd" "-s $name"]
set nmbd_output [util_start "bin/nmbd" "-s $name"]

sleep 5

set smbclient_output [util_start "bin/smbclient -L //testing -N"]
verbose $smbclient_output

if { ![regexp "Anonymous login successful" $smbclient_output] } {
    untested "smbd could not be started"
    util_start "killall" "smbd nmbd"
    file delete $name
    return
}

# Append another share and sighup

append_smb_conf $name [list [list "tmp" [list "browseable = true"]]]
set output [util_start "killall" "-HUP smbd"]
verbose $output

sleep 2

set smbclient_output2 [util_start "bin/smbclient -L //testing -N"]
verbose $smbclient_output2

if { [regexp "tmp.*Disk" $smbclient_output2] } {
    pass "sighup reload"
} else {
    fail "sighup reload"
}

# Clean up

util_start "killall" "smbd nmbd"
file delete $name
