#!/bin/sh
#
# PROVIDE: smbd 
# REQUIRE: SAMBA_SERVER 
# BEFORE: LOGIN
# KEYWORD: shutdown
#
. /etc/rc.subr

name="smbd"
rcvar=smbd_enable
smbd_group=""

smbd_pidfile="/var/run/samba4/smbd.pid"
smbcontrol="/usr/local/bin/smbcontrol"
jq="/usr/local/bin/jq"
sysctl="/sbin/sysctl"
extra_commands="reload status"

start_cmd="smbd_cmd"
stop_cmd="smbd_cmd"
status_cmd="smbd_cmd"
reload_cmd="smbd_reload"

smbd_reload() {
    
    local command force_run
    if [ -n "${_rc_prefix}" -a "${_rc_prefix}" = "one" ] || [ -n "${rc_force}" ] || [ -n "${rc_fast}" ]; then
        force_run=yes
    fi
    command="/usr/local/sbin/${name}"
    pid="$(check_pidfile "${smbd_pidfile}" "${command}")"
    if ( [ -n "${rcvar}" ] && checkyesno "${rcvar}" ) || [ -n "$force_run" ]; then
        if [ -n ${pid} ]; then
            debug "reloading smbd."
            echo "reloading smbd"
            ${smbcontrol} ${name} 'reload-config' > /dev/null 2>&1
        fi
    fi
}

smbd_cmd() {
    local command pidfile samba_daemons result force_run

    case "${rc_arg}" in
        start)
            ${sysctl} security.bsd.unprivileged_inode_gen=1
            ;;
        stop)
            ${sysctl} security.bsd.unprivileged_inode_gen=0
            ;;
        *)
            ;;
    esac

    unset "${rc_arg}_cmd"
    if [ -n "${_rc_prefix}" -a "${_rc_prefix}" = "one" ] || [ -n "${rc_force}" ] || [ -n "${rc_fast}" ]; then
        force_run=yes
    fi
    result=0
    command="/usr/local/sbin/${name}"
    pidfile=${smbd_pidfile}
    if ( [ -n "${rcvar}" ] && checkyesno "${rcvar}" ) || [ -n "$force_run" ]; then
        run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args}
        # If any of the commands failed, take it as a global result
        result=$((${result} || $?))
    fi
    return ${result}
}

samba_server_config_init()
{
    load_rc_config $name
    local fdpath_fstype=$(df -T /var/run/samba/fd --libxo json | ${jq} -r '."storage-system-information".filesystem[0].name' | tr -d '\n')

    if [ ${fdpath_fstype} != "fdescfs" ]; then
        mkdir -p /var/run/samba/fd
        mount -t fdescfs -o nodup null /var/run/samba/fd
    fi

    if [ -n "${samba_server_enable}" ] && [ "${samba_server_enable}" == "YES" ]; then
        eval ${name}_enable=\${${name}_enable:-"YES"}
    fi
    eval ${name}_enable=\${${name}_enable:-"NO"}
}

samba_server_config_init
smbd_flags="--daemon"
run_rc_command "$1"
