#!/bin/sh

# Handles the interfaces configuration
#-------------------------------------

update_interfaces_config() {
    set +e

    [ -e /etc/init.d/functions-automagic ] && source /etc/init.d/functions-automagic
    [ -e /etc/sysconfig/automagic ] && source /etc/sysconfig/automagic
    [ -e /etc/sysconfig/samba ] && source /etc/sysconfig/samba

    # Bail if automagic is disabled

    if [ "$AUTOMAGIC" == "off" ]; then
        return
    fi

    CHECK=`grep "^interfaces = lo ${AUTOMAGIC_LANIFS}$" /etc/samba/smb.conf 2>/dev/null`
    if [ -z "$CHECK" ]; then
        logger -p local6.notice -t clearsync "samba - securing interfaces settings"
        sed -i -e "s/^interfaces.*/interfaces = lo $AUTOMAGIC_LANIFS/" /etc/samba/smb.conf
    else
        logger -p local6.notice -t clearsync "samba - no interfaces changes required"
    fi
}

set -e

# Check initialization - we don't want to stomp on that process
#--------------------------------------------------------------

if [ -e /var/clearos/samba/lock/initializing ]; then
    if [ -e /var/clearos/samba/initialized ]; then
        rm -f /var/clearos/samba/lock/initializing
    else
        logger -p local6.notice -t clearsync "samba - skipping event, initialization in progress"
        exit 0
    fi
fi

if [ -e /var/clearos/samba/lock/initializing_local ]; then
    if [ -e /var/clearos/samba/initialized_local ]; then
        rm -f /var/clearos/samba/lock/initializing_local
    else
        logger -p local6.notice -t clearsync "samba - skipping event, local initialization in progress"
        exit 0
    fi
fi

# Reload Samba on a configuration change
#---------------------------------------

if [ "$1" == "configuration_change_event" ]; then
    if [ -e /var/clearos/samba_common/initialized ]; then
        set +e
        update_interfaces_config
        /usr/clearos/apps/samba/deploy/cleanup-ldap
        /usr/clearos/apps/samba/deploy/cleanup-sids
        # Seems to do some sort of LDAP sync, there's a better way no doubt
        /usr/bin/pdbedit -L -v >/dev/null 2>&1

        logger -p local6.notice -t clearsync "samba - reloading daemons"
        [ -x /etc/rc.d/init.d/winbind ] && /sbin/service winbind reload
        [ -x /etc/rc.d/init.d/nmb ] && /sbin/service nmb reload
        [ -x /etc/rc.d/init.d/smb ] && /sbin/service smb reload

    fi

# Initialize directory when it is online
#---------------------------------------

elif [ "$1" == "directory_online_event" ]; then
    if ( [ -e /var/clearos/openldap_directory/ready_for_extensions ] || [ -e /var/clearos/accounts/initialized ] ); then
        READY="yes"
    fi

    if ( [ ! -e /var/clearos/samba/initialized_openldap ] && [ -n "$READY" ] ); then
        logger -p local6.notice -t clearsync "samba - checking Samba directory initialization"
        ( flock -x -n 200
            logger -p local6.notice -t clearsync "samba - initializing Samba directory"
            [ -x /usr/sbin/app-samba-openldap-initialize ] && /usr/sbin/app-samba-openldap-initialize >/dev/null 2>&1
        ) 200>/var/tmp/samba-init
    fi

    # TODO: overkill - needs to be successful once
    if [ -e /var/clearos/samba_common/initialized ]; then
        [ -x /usr/sbin/add-windows-group-info ] && /usr/sbin/add-windows-group-info >/dev/null 2>&1
        [ -x /usr/sbin/password-policies-synchronize ] && /usr/sbin/password-policies-synchronize >/dev/null 2>&1
    fi

# Set interfaces parameter when network changes
#----------------------------------------------

elif [ "$1" == "network_change_event" ]; then
    update_interfaces_config
fi

exit 0
