#!/bin/bash

function add_host()
{
    local addr=$1
    local hostname=$2
    local domain=$3
    local prog='BEGIN         { printf("'$addr' '$hostname' '$hostname'.'$domain'\n"); }
                /'$hostname'/ { for( i=2; i<=NF; i++ )
                                {
                                  names = ""
                                  if ( index($i, "'$hostname'") != 1 && index($i, "'$hostname'.") !=1 )
                                    names = names + " " + $i; 
                                };
                                if ( names != "" )
                                printf("%s %s\n", $1, names); next;
                              }
                              { print $0 }'

    awk "$prog" < /etc/hosts > /tmp/hosts$$
    mv /tmp/hosts$$ /etc/hosts
}

function add_users()
{
  get_data "$getuser" | \
  while read line; 
  do
    get_user "$line"
     
    option=
    if [ ! "$uid" = "" ]; then
      option="--uid-number=$uid"
    fi
     
    mne_error_ignore=1
    id $user 1>&$logfile 2>&1
    result=$?
    mne_error_ignore=
     
    if [ "$result" = "0" ]; then
      $sambabin/samba-tool user create "$user" --random-password --rfc2307-from-nss  $option
    else
     if [ "$option" = "" ]; then
       lastuid=$(getent passwd | fgrep "$workgroup" | cut -f3 -d: | sort -n | tail -1)
       if [ "$lastuid" != "" ]; then
         let lastuid=lastuid+1
         option="--uid-number=$lastuid"
       else
         option="--uid-number=30000"
       fi
     fi
       $sambabin/samba-tool user create "$user" --random-password  $option
    fi
    samba-tool user setexpiry --noexpiry "$user"
    
  done
}

function mod_bind()
{
  fgrep "/opt/mne/samba/bind-dns/named.conf" $bindconf/named.conf 1>&$logfile 2>&1
  if [ "$?" != "0" ];then
    save_file $bindconf/named.conf
    echo "include \"/opt/mne/samba/bind-dns/named.conf\";" >> $bindconf/named.conf
  fi
  
  touch $bindconf/named.conf.options.local
  touch $bindconf/named.conf.options.forwarders
  
  save_file $bindconf/named.conf.options
  cp $namedoption $bindconf/named.conf.options

  chmod 640 /var/lib/mne/samba/private/dns.keytab
  chown root:bind /var/lib/mne/samba/private/dns.keytab
  chown root:bind /etc/bind/rndc.key
}

function mod_dhclient()
{
  if [ -f $dhcpconfig ]; then
    find_template dhcpconfadd domain/enable dhcpconf_add.conf
    prog=' /####DOMAIN####/     { if ( domain = "" ) next;     gsub(/####DOMAIN####/,domain); }
           /####SEARCH####/     { if ( search = "" ) next;     gsub(/####SEARCH####/, search); }
           /####NAMESERVER####/ { if ( nameserver = "" ) next; gsub(/####NAMESERVER####/,nameserver); }
                                { print $0 }'
    
	sed -e "/mnesamba_conf start/,/mnesamba_conf end/d" < $dhcpconfig > /tmp/dhclient.$$
    mv /tmp/dhclient.$$ $dhcpconfig
    awk "$prog" "search=$3" "domain=$2" "nameserver=$1" $dhcpconfadd >> $dhcpconfig
  fi
}

function mod_appamor_dhcp()
{
    if [ "$DISTRIB_ID" = "raspbian_10" ] || [ "$DISTRIB_ID" = "debian_10" ]; then
      return;
    fi
    
    if [ -f $apparmorconf/usr.sbin.dhcpd ]; then
      sed -e "s/^.*include <dhcpd.d>/  include <dhcpd.d>/" < $apparmorconf/usr.sbin.dhcpd > /tmp/dhcpd.$$
      mv /tmp/dhcpd.$$ /etc/apparmor.d/usr.sbin.dhcpd
    fi
}

function mod_appamor_bind()
{
    if [ "$DISTRIB_ID" = "raspbian_10" ] || [ "$DISTRIB_ID" = "debian_10" ]; then
      return;
    fi
   
    if [ -f $apparmorconf/usr.sbin.named ]; then
      fgrep "usr.sbin.named.mnesamba" $apparmorconf/usr.sbin.named 1>&$logfile 2>&1
      if [ "$?" != "0" ];then
        sed -e '/^.*include <local\/usr.sbin.named>/a\ \ include <local/usr.sbin.named.mnesamba>' <  $apparmorconf/usr.sbin.named > /tmp/named.$$
        mv /tmp/named.$$  $apparmorconf/usr.sbin.named
      fi
    fi

    echo "/opt/mne/samba/lib/** krm,"                >  $apparmorconf/local/usr.sbin.named.mnesamba
    echo "/opt/mne/samba/bind-dns/** krwm,"          >> $apparmorconf/local/usr.sbin.named.mnesamba
    echo "/etc/mne/samba/** kr,"                     >> $apparmorconf/local/usr.sbin.named.mnesamba
    echo "/var/lib/mne/samba/private/dns.keytab kr," >> $apparmorconf/local/usr.sbin.named.mnesamba
    echo "/var/lib/mne/samba/private/named.conf kr," >> $apparmorconf/local/usr.sbin.named.mnesamba
    echo "/var/lib/mne/samba/private/dns/** krwk,"   >> $apparmorconf/local/usr.sbin.named.mnesamba
    
    mne_need_error
    systemctl status apparmor 1>&$logfile 2>&1
    if [ "$errorresult" = "0" ]; then
      systemctl restart apparmor 1>&$logfile 2>&1
    fi
}


function mod_smbconf()
{
    local prog="/\[global\]/ { start=1; print \$0; next;}
   /^[    ]*$|^\[/  { if ( start == 1 )
                    {
                      print \"        include = $sambaconf/globalextra.conf\";
                      print \"        include = $sambaconf/dnsforward.conf\";
                      print \"        include = $sambaconf/dhcp.conf\";
                      start = 2;
                     }
                   }
                   { print \$0; }
               END { print \"include = $sambaconf/shares.conf\"; } "
    
    awk "$prog" < $sambaconf/smb.conf  > /tmp/smb.$$
    mv /tmp/smb.$$ $sambaconf/smb.conf;
    
    touch $sambaconf/globalextra.conf;
    touch $sambaconf/dhcp.conf;
    touch $sambaconf/dnsforward.conf;
    touch $sambaconf/shares.conf;
}

function mod_netpar()
{
    sed -e '/^passwd:/s@ *winbind@@' -e '/^passwd:/s@$@ winbind@' -e '/^group:/s@ *winbind@@' -e '/^group:/s@$@ winbind@' < /etc/nsswitch.conf  > /tmp/nsswitch.$$
    mv /tmp/nsswitch.$$ /etc/nsswitch.conf
    
    sed -e "/interfaces =/s@interfaces.*\$@interfaces = lo $netdevice@" < $sambaconf/smb.conf  > /tmp/smb.$$; 
    mv /tmp/smb.$$ $sambaconf/smb.conf;
    
    sed -e "/TLS_REQCERT/d" < $ldapconf/ldap.conf  > /tmp/ldap.$$; 
    mv /tmp/ldap.$$ $ldapconf/ldap.conf;
    echo "" >> $ldapconf/ldap.conf
    echo "TLS_REQCERT allow" >> $ldapconf/ldap.conf
    
    if [ "$dnsforwarder" != "" ]; then
        echo $dnsforwarder | sed -e 's/$/;\n};/g ;'\
                                 -e 's/,/ /g'\
                                 -e 's/  */;\n    /g'\
                                 -e 's/^/    /'\
                                 -e '1 i forwarders {' > $bindconf/named.conf.options.forwarders;
    else
        echo "" > $bindconf/named.conf.options.forwarders;
    fi
    
   . exec/system/shell/network/wrconfig
}

function mod_kerberos()
{
    if [ -f $kerberosconfig ]; then
        echo "[libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = true
    default_realm = $1
        " "$(sed -e '/^\[libdefaults\]/,/^[   ]*$/d' < $kerberosconfig )" > /tmp/$$
        mv /tmp/$$ $kerberosconfig
    else
        echo "[libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = true
    default_realm = $1
        " > $kerberosconfig
    fi
}

function rm_config()
{
    rm -rf /var/run/samba/* >&$logfile 2>&1
    rm -rf /var/lib/mne/samba   >&$logfile 2>&1

    for dir in cache lib lock locks private run
    do
        mkdir -p /var/lib/mne/samba/$dir 2>&1
    done

    # -------------------------------------------
    # check name-server in dhclient.conf
    # -------------------------------------------

    if [ -f $dhcpconfig ]; then
        sed -e "/mnesamba_conf start/,/mnesamba_conf end/d" < $dhcpconfig > /tmp/dhclient.$$
        mv /tmp/dhclient.$$ $dhcpconfig
    fi

    if [ -f $bindconf/named.conf ]; then
        sed -e "/\/opt\/mne\/\/samba/d" < $bindconf/named.conf > /tmp/named.$$
        mv /tmp/named.$$ $bindconf/named.conf
    fi

    mne_ignore_error=1
    if [ -f $sambaconf/smb.conf ];then
        rm $sambaconf/smb.conf >&$logfile 2>&1
        rm $sambaconf/validuser.conf >&$logfile 2>&1
        rm $sambaconf/shares.conf >&$logfile 2>&1
        rm $sambaconf/globalextra.conf >&$logfile 2>&1
    fi
    mne_ignore_error=
}
