#!/usr/bin/php
<?php

/* ١ǥ쥯ȥ */
define("BASE_DIR", "/usr/local/postldapadmin/");

/* 饤֥饤 */
include_once(BASE_DIR. "/lib/dglibdhcpadmin");
include_once(BASE_DIR. "/lib/dglibpostldapadmin");
include_once(BASE_DIR. "./lib/dglibcommon");
include_once(BASE_DIR. "/lib/dglibsendmail");
include_once(BASE_DIR. "/htdocs/admin/dhcpadmin/initial");

/* ͤ */
define("PROCESS_NAME",      "dhcpadmin_import_csv");
define("STR_IPV4",          "IPv4");
define("MAX_SUBNET_LENGTH", "31");
define("MODE_CHECK_DUP",    "2");
define("MODE_NO_CHECK_DUP", "1");
define("DATE_FORMAT",       "Y-m-d H:i:s");
define("EUCJP_ENCODEING",   "EUC-JP");
define("SJIS_ENCODEING",    "SJIS");
define("UTF8_ENCODEING",    "UTF-8");
define("BATCH_IP",          "127.0.0.1");
define("BACKUP_CSV_OK",     "OK_%s.bak");
define("BACKUP_CSV_NG",     "NG_%s.bak");

/* ᡼ƥץ졼ȤΥեѥ */
define("MAIL_TMPL_OK", BASE_DIR. "/tmpl/mail_import_csv_success.tmpl");
define("MAIL_TMPL_NG", BASE_DIR. "/tmpl/mail_import_csv_error.tmpl");

/* η */
define("LOG_FMT_OK",         "%s:OK:%s");
define("LOG_FMT_INFO",       "%s:IF:%s");
define("LOG_FMT_ERR_CSV",    "%s:NG:%s(%s)");
define("LOG_FMT_ERR_OTHER",  "%s:NG:%s");
define("SCREEN_FMT_ERR_CSV", "%s(%s)");

/********************************************************************
 * ̴ؿ                                                         *
 ********************************************************************/

/***********************************************************
 * dhcpadmin_login_check
 *
 * ťΥåԤ
 *
 * []
 *        $lock_file          åեѥ(ȥǡ)
 *
 * [֤]
 *        FUNC_TRUE           
 *        FUNC_FALSE          顼
 *        LOCK_FALSE          ť
 *
 **********************************************************/
function import_csv_login_check(&$lock_file)
{
    global $domain;
    global $basedir;
    global $lock_file;

    /* tmpեΥѥ */
    $tmp_file = $basedir .  VARDIR . $domain . '/' . LOCKFILE . '.' . getmypid();

    /* åե¸߳ǧ */
    if (file_exists($lock_file)) {

        /* ťˤʤäƤʤå */
        $ret = dhcpadmin_check_lockfile($lock_file);
        if ($ret !== FUNC_TRUE) {
            return $ret;
        }
    }

    /* åեκ */
    $ret = import_csv_make_lockfile($lock_file, $tmp_file);
    if ($ret === FALSE) {
        return FUNC_FALSE;
    }

    return FUNC_TRUE;
}

/***********************************************************
 * import_csv_make_lockfile
 *
 * åեκ
 *
 * []
 *        $lock_file     åեΥѥ
 *        $tmp_file     եΥѥ
 *
 * [֤]
 *        TRUE           
 *        FALSE          顼
 *
 **********************************************************/
function import_csv_make_lockfile($lock_file, $tmp_file)
{
    /*  */
    $data = PROCESS_NAME. "\t". BATCH_IP. "\t" . time();

    /* ե򥪡ץ */
    $tmp_fp = fopen($tmp_file, "w");
    if ($tmp_fp === FALSE) {
        return FALSE;
    }

    /* ե˽񤭹 */
    $ret = fwrite($tmp_fp, $data);
    fclose($tmp_fp);
    if ($ret === FALSE) {
        unlink($tmp_file);
        return FALSE;
    }

    /* åե֤ */
    $ret = rename($tmp_file, $lock_file);
    if ($ret === FALSE) {
        unlink($tmp_file);
        return FUNC_FALSE;
    }

    return TRUE;
}

/***********************************************************
 * import_csv_del_lockfile
 *
 * åեκ
 *
 * []
 *        ʤ
 *
 * [֤]
 *        TRUE           
 *        FALSE          顼
 *
 **********************************************************/
function import_csv_del_lockfile()
{
    global $domain;
    global $basedir;
    global $lock_file;

    /* åեɤ߹ */
    $ret = dhcpadmin_read_lockfile($lock_file, $filedata);
    if ($ret === FALSE) {
        return FUNC_FALSE;
    }

    /* 桼̾,IPɥ쥹å */
    if (($filedata[0] !== PROCESS_NAME) || ($filedata[1] !== BATCH_IP)) {
        return LOCK_FALSE;
    }

    /* եκ */
    $ret = unlink($lock_file);
    if ($ret === FALSE) {
        return LOCK_FALSE;
    }

    return FUNC_TRUE;
}

/***********************************************************
 * scan_dir
 *
 * եι֤ǥȤCSVե
 *
 * []
 *        $dir           ǥ쥯ȥѥ
 *
 * [֤]
 *        TRUE           
 *        FALSE          顼
 *
 **********************************************************/
function scan_dir($dir) 
{
    $temp_file = array();

    /* ǥ쥯ȥϥɥ򥪡ץ󤹤 */
    $h_dir = opendir($dir);
    if ($h_dir === FALSE) {
        return FALSE;
    }

    /*  ǥ쥯ȥϥɥ뤫饨ȥɤ߹ */
    while (($filename = readdir($h_dir)) !== FALSE) {

        if ($filename === '.' && $filename === '..') {
            continue;
        }

        $csv_filepath = $dir . '/' . $filename;

        /* ̾ե뤫ɤĴ٤ */
        if (!is_file($csv_filepath)) {
            continue;
        }

        /* եѥ˴ؤ֤ */
        $file_parts = pathinfo($csv_filepath);

        /* ĥҤcsvǤϤʤ硢 */
        if (!isset($file_parts['extension']) || $file_parts['extension'] !== 'csv') {
            continue;
        }

        /* ե϶ξ */
        if (filesize($csv_filepath) == 0){
            continue;
        }

        /* Ϣ˥ե̾ȹ֤Ǽ */
        $temp_file[$filename] = filectime($csv_filepath);
    }
   
    /* ǥ쥯ȥϥɥ򥯥 */
    closedir($h_dir);
   
    /* ϢۥǤȤδطݻĤ򥽡Ȥ */
    asort($temp_file);

    return $temp_file;
}

/*********************************************************
 * check_subnet()
 *
 * ֥ͥåȤͥå
 *
 * []
 *      $subnet      ֥ͥåȤ
 * [֤]
 *      TRUE         
 *      FALSE        ۾
 **********************************************************/
function check_subnet($subnet)
{
    /* ʸå */
    $length = strlen($subnet);
    if ($length > MAX_SUBNET_LENGTH) {
        return FALSE;
    }
    /* /ʬ */
    $piece = explode("/", $subnet);
    if (count($piece) != 2) {
        return FALSE;
    }
    /* /򤽤줾å */
    $ret = check_ip($piece[0]);
    if ($ret == FALSE) {
        return FALSE;
    }
    $ret = check_ip($piece[1]);
    if ($ret == FALSE) {
        return FALSE;
    }
    return TRUE;
}

/*********************************************************
 * check_select()
 *
 * IP߽å
 *
 * []
 *      $select      IP߽
 * [֤]
 *      TRUE         
 *      FALSE        ۾
 **********************************************************/
function check_select($select)
{
    /* Ϥ줿ͤallow⤷deny */
    $select = mb_convert_encoding($select, EUCJP_ENCODEING, SJIS_ENCODEING);
    if ($select == "" || $select == "") {
        return TRUE;
    }
    return FALSE;
}

/*********************************************************
 * add_host_session()
 *
 * Ͽؿ
 *
 * []
 *      $file_data    ե
 * [֤]
 *      TRUE         
 *      FALSE        ۾
 **********************************************************/
function add_host_session($file_data)
{
    foreach ($file_data as $data) {

        $data = rtrim($data);

        /* dataȤʤcontinue */
        if ($data == "") {
            continue;
        }

        /* ޤǶڤ */
        list($subnet, $hostname, $mac, $ip, $select) = explode(",", $data);

        /* MACɥ쥹2· */
        $mac = check_macaddr($mac);

        /* MACɥ쥹ϾʸѴ */
        $mac = strtolower($mac);

        /* IP߽Ѵ */
        $select = mb_convert_encoding($select, EUCJP_ENCODEING, SJIS_ENCODEING);
        if ($select == "") {
            $select = "allow";
        } else {
            $select = "deny";
        }

        /* SESSIONʸ¤٤ */
        $line = $hostname . "," . $mac . "," . $ip . "," . "\"$hostname\"" . "," . $select;

        /* Shared-networkĴ٤ */
        $sn = judge_sn($subnet);
        if ($sn == "") {
            return FALSE;
        }

        if (isset($_SESSION[STR_IP]["$sn"]["$subnet"]["host"])) {
            /* hostȤФĤʤ */
            $hostline = $_SESSION[STR_IP]["$sn"]["$subnet"]["host"];
            $hostline = $hostline . $line . "\n";
        } else {
            /* hostȤʤ */
            $hostline = $line . "\n";
        }

        /* SESSIONϿ */
        $_SESSION[STR_IP]["$sn"]["$subnet"]["host"] = $hostline;
    }

    return TRUE;
}

/*********************************************************
 * check_column()
 *
 * åؿ
 *
 * []
 *      $file_data    եȤä
 * [֤]
 *      $line         顼ι
 **********************************************************/
/*å*/
function check_column($file_data)
{
    $line = 0;
    foreach ($file_data as $data) {
        $line++;
        $data = rtrim($data);
        /* ޤǶڤ */
        $column = explode(",", $data);
        /*å*/
        if (count($column) != 5) {
            /* 顼ιԿ֤ */
            return $line;
        }
    }
    /* 0֤ */
    return 0;
}

/*********************************************************
 * check_in_must()
 *
 * ɬܹܤϤƤ뤫å
 *
 * []
 *      $subnet      1ԤȤΥ֥ͥå
 *      $hostname    1ԤȤΥۥ̾
 *      $mac         1ԤȤmacɥ쥹
 *      $select      1ԤȤIP߽
 * [֤]
 *      0            
 *      1            ֥ͥåȥ顼
 *      2            ۥ̾顼
 *      3            MACɥ쥹顼
 *      4            IPɥ쥹顼
 **********************************************************/
function check_in_must($subnet, $hostname, $mac, $select)
{
    /* ֥ͥåȤϤ뤫 */
    if ($subnet == "") {
        return 1;
    }
    /* ۥ̾Ϥ뤫 */
    if ($hostname == "") {
        return 2;
    }
    /* MACɥ쥹Ϥ뤫 */
    if ($mac == "") {
        return 3;
    }
    /* IP߽꤬򤵤Ƥ뤫 */
    if ($select == "") {
        return 4;
    }
    return 0;
}

/*********************************************************
 * check_update_in()
 *
 * 饤ȰϿͥå
 *
 * []
 *      $file_data   եȤä
 * [֤]
 *      0            
 *      1            ֥ͥå̤
 *      2            ۥ̤̾
 *      3            MACɥ쥹̤
 *      4            IP߽̤
 *      5            ֥ͥåȥ顼
 *      6            ۥ̾顼
 *      7            MACɥ쥹顼
 *      8            IPɥ쥹顼
 *      9            IP߽ꥨ顼
 *     10            ֥ͥåȤ¸ߤʤ
 *     11            IP֥ͥåϰϳ
 **********************************************************/
function check_update_in($file_data, &$line)
{
    foreach ($file_data as $data) {
        $data = rtrim($data);
        /* ޤǶڤ */
        list($subnet, $hostname, $mac, $ip, $select) = explode(",", $data);

        $line++;
        /* ɬܹܥå */
        $must = check_in_must($subnet, $hostname, $mac, $select);
        if ($must != 0) {
            /* ϥ顼 */
            return $must;
        }
        /* ֥ͥåȤϤ顼 */
        $ret = check_subnet($subnet);
        if ($ret == FALSE) {
            return 5;
        }
        /* ۥ̾Ϥ顼 */
        $ret = check_hostname($hostname);
        if ($ret == FALSE) {
            return 6;
        }
        /* MACɥ쥹Ϥ顼 */
        $ret = check_add_mac($mac);
        if ($ret == FALSE) {
            return 7;
        }
        /* IPɥ쥹Ϥ顼 */
        $ret = check_ip($ip);
        if ($ret == FALSE) {
            return 8;
        }
        /* IP߽Ϥ顼 */
        $ret = check_select($select);
        if ($ret == FALSE) {
            return 9;
        }
        /* åƱ֥ͥåȤ뤫 */
        $judge = judge_sn($subnet);
        if ($judge == "") {
            return 10;
        }
        /* IPϰϤ顼 */
        if (isset($ip) && $ip != "") {
            $ret = in_range_ipv4($subnet, $ip);
            if ($ret == FALSE) {
                return 11;
            }
        }
    }
    return 0;
}

/*********************************************************
 * check_data_csv
 *
 * CSVեΥå
 *
 * []
 *      $file_data   csvΥեΥǡ
 *      &$log_msg    å(ȥǡ)
 *      &$err_msg    顼å(ȥǡ)
 *
 * [֤]
 *      TRUE    
 *      FALSE   ۾
 **********************************************************/
function check_data_csv($file_data, &$log_msg, &$err_msg)
{
    global $msgarr;

    /* ͤΥå */
    $ret = check_update_in($file_data, $line);

    switch ($ret) {
    /* ֥ͥåȤϤʤ */
    case 1:
	$log_msg = sprintf($msgarr['34002'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34002'][SCREEN_MSG], $line);
        return FALSE;
    /* ۥ̾Ϥʤ */
    case 2:
	$log_msg = sprintf($msgarr['34003'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34003'][SCREEN_MSG], $line);
        return FALSE;
    /* MACɥ쥹Ϥʤ */
    case 3:
	$log_msg = sprintf($msgarr['34005'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34005'][SCREEN_MSG], $line);
        return FALSE;
     /* IP߽꤬򤵤Ƥ뤫 */
    case 4:
	$log_msg = sprintf($msgarr['34010'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34010'][SCREEN_MSG], $line);
        return FALSE;
    /* ֥ͥåȤϥå顼 */
    case 5:
	$log_msg = sprintf($msgarr['34009'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34009'][SCREEN_MSG], $line);
        return FALSE;
    /* ۥ̾ϥå顼 */
    case 6:
	$log_msg = sprintf($msgarr['34004'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34004'][SCREEN_MSG], $line);
        return FALSE;
    /* MACɥ쥹ϥå顼 */
    case 7:
	$log_msg = sprintf($msgarr['34006'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34006'][SCREEN_MSG], $line);
        return FALSE;
    /* IPɥ쥹ϥå顼 */
    case 8:
	$log_msg = sprintf($msgarr['34007'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34007'][SCREEN_MSG], $line);
        return FALSE;
   /* IP߽ϥå顼 */
    case 9:
	$log_msg = sprintf($msgarr['34012'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34012'][SCREEN_MSG], $line);
        return FALSE;
    /* ֥ͥå¸ߥ顼 */
    case 10:
	$log_msg = sprintf($msgarr['34011'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['34011'][SCREEN_MSG], $line);
        return FALSE;
    /* IPɥ쥹ϰϥ顼 */
    case 11:
	$log_msg = sprintf($msgarr['33020'][LOG_MSG], $line);
	$err_msg = sprintf($msgarr['33020'][SCREEN_MSG], $line);
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * check_duplication_csv_only
 *
 * CSVե˥ۥ̾MACɥ쥹IPνʣå
 *
 * []
 *      $file_data   csvΥեΥǡ
 *      $log_msg     å(ȥǡ)
 *      $err_msg     顼å(ȥǡ)
 *
 * [֤]
 *      TRUE    
 *      FALSE   ۾
 **********************************************************/
function check_duplication_csv_only($file_data, &$log_msg, &$err_msg)
{
    global $msgarr;

    /* CSVιԿ */
    $line = 0;

    /* CSVǡ */
    $arr_data_hostname = array();
    $arr_data_mac_addr = array();
    $arr_data_ip_addr  = array();

    foreach ($file_data as $data) {

	$line++;

        /* Ԥκ */
        $data = rtrim($data);

        /* ޤǶڤ */
        list($f_subnet, $f_hostname, $f_mac, $f_ip, $f_select) = explode(",", $data);

        /* ۥ̾¸ߤ */
        if (isset($arr_data_hostname[$f_hostname])) {
            $log_msg = sprintf($msgarr['37010'][LOG_MSG], $line);
            $err_msg = sprintf($msgarr['37010'][SCREEN_MSG], $line);
            return FALSE;
        }

        /* MACɥ쥹¸ߤ */
        if (isset($arr_data_mac_addr[$f_mac])) {
            $log_msg = sprintf($msgarr['37011'][LOG_MSG], $line);
            $err_msg = sprintf($msgarr['37011'][SCREEN_MSG], $line);
            return FALSE;
        }

        /* IPɥ쥹¸ߤ */
        if (isset($arr_data_ip_addr[$f_ip])) {
            $log_msg = sprintf($msgarr['37012'][LOG_MSG], $line);
            $err_msg = sprintf($msgarr['37012'][SCREEN_MSG], $line);
            return FALSE;
        }

        /* ˳Ǽ */
        $arr_data_hostname[$f_hostname][$f_mac] = "";
        $arr_data_mac_addr[$f_mac] = "";
        $arr_data_ip_addr[$f_ip]  = "";
    }    

    return TRUE;
}

/*********************************************************
 * check_duplication_data_cus()
 *
 * ʣå
 * δؿlib/dglibdhcpadmin饳ԡ
 *   MACɥ쥹羮ʸ:ޤळȤб
 *
 * []
 *      $f_data         ե1
 *
 * [֤]
 *      0            
 *      1            ۥ̾顼
 *      2            MACɥ쥹顼
 *      3            IPɥ쥹顼
 *      4            Shared-network顼
 **********************************************************/
function check_duplication_data_cus($f_data)
{
    $data = rtrim($f_data);
    /* ޤǶڤ */
    list($f_subnet, $f_hostname, $f_mac, $f_ip, $f_select) = explode(",", $data);
    /* shared-network */
    $sn = judge_sn($f_subnet);
    if ($sn == "") {
        return 4;
    }
    /* ۥȤȤнʣå */
    if (isset($_SESSION[STR_IP]["$sn"]["$f_subnet"]["host"])) {
        $s_hostline = $_SESSION[STR_IP]["$sn"]["$f_subnet"]["host"];

        $s_hosts = explode("\n", $s_hostline);
        foreach ($s_hosts as $s_host) {
            /* [host]Ȥʤcontinue */
            if ($s_host == "") {
                continue;
            }

            /* ޤǶڤ */
            list($s_host, $s_mac, $s_ip, $s_hostname, $s_select) = explode(",", $s_host);
            $s_hostname = ltrim($s_hostname, "\"");
            $s_hostname = rtrim($s_hostname, "\"");

            /* $s_hostnameʸϾʸΤ */
            $f_hostname = strtolower($f_hostname);

            /* ۥ̾ʣƤ뤫 */
            if ($s_hostname == $f_hostname) {
                return 1;
            }

            /* :ޤMACɥ쥹б*/
            $s_mac = str_replace(":", "", $s_mac);
            $f_mac = str_replace(":", "", $f_mac);
            $f_mac = strtolower($f_mac);
            $s_mac = strtolower($s_mac);

            /* MACɥ쥹ʣƤ뤫 */
            if ($s_mac == $f_mac) {
                return 2;
            }
            /* IPɥ쥹뤫 */
            if ($f_ip != "") {
                if ($s_ip == $f_ip) {
                    return 3;
                }
            }
        }
    }
    /* ۥȤȤʤreturn0 */
    return 0;
}

/*********************************************************
 * check_dup_csv_and_dhcpd
 *
 * ¸ǡMACɥ쥹ȤIPɥ쥹¸ߤ顢
 * ʣ顼ˤ
 *
 * []
 *      $file_data   csvΥեΥǡ
 *      $log_msg     å(ȥǡ)
 *      $err_msg     顼å(ȥǡ)
 *
 * [֤]
 *      TRUE    
 *      FALSE   ۾
 **********************************************************/
function check_dup_csv_and_dhcpd($file_data, &$log_msg, &$err_msg)
{
    global $msgarr;

    $line = 0;

    foreach ($file_data as $data) {

	$line++;

	$ret = check_duplication_data_cus($data);

	switch ($ret) {
	/* ۥ̾ʣ */
	case 1:
	    $log_msg = sprintf($msgarr['34015'][LOG_MSG], $line);
	    $err_msg = sprintf($msgarr['34015'][SCREEN_MSG], $line);
            return FALSE;
	/* MACɥ쥹ʣ */
	case 2:
	    $log_msg = sprintf($msgarr['34016'][LOG_MSG], $line);
	    $err_msg = sprintf($msgarr['34016'][SCREEN_MSG], $line);
            return FALSE;
	/* IPɥ쥹ʣ */
	case 3:
	    $log_msg = sprintf($msgarr['34017'][LOG_MSG], $line);
	    $err_msg = sprintf($msgarr['34017'][SCREEN_MSG], $line);
            return FALSE;
	/* Shared-network¸ߤʤ */
	case 4:
	    $log_msg = sprintf($msgarr['34022'][LOG_MSG], $line);
	    $err_msg = sprintf($msgarr['34022'][SCREEN_MSG], $line);
            return FALSE;
	}
    }    

    return TRUE;
}

/*********************************************************
 * delete_dup_data_line()
 *
 * ʣåʤ⡼ɤξ硢MACɥ쥹ȤIPɥ쥹
 * ʣƤʤ顢ۥ̾
 *
 * []
 *      $f_data      ե1ԤΥǡ
 *
 * [֤]
 *      0            
 *      1            ۥ̾ʣ
 *      2            Shared-network¸ߤʤ
 **********************************************************/
function delete_dup_data_line($f_data)
{
    global $msgarr;

    /* ۥ̾ʣΥե饰 */
    $dup_hostname = FALSE;

    $data = rtrim($f_data);

    /* ޤǶڤ */
    list($f_subnet, $f_hostname, $f_mac, $f_ip, $f_select) = explode(",", $data);

    /* ʸѴ */
    $f_mac = strtolower($f_mac); 

    /* shared-network */
    $sn = judge_sn($f_subnet);
    if ($sn == "") {
        return 2;
    }

    /*
     * CSVǻꤵƤIPɥ쥹Υǡ¸꤫ 
     * CSVǻꤵƤMACɥ쥹Υǡ¸꤫ 
     */
    if (isset($_SESSION[STR_IP]["$sn"]["$f_subnet"]["host"])) {

         $s_hostline = $_SESSION[STR_IP]["$sn"]["$f_subnet"]["host"];

         /* ԤǶڤ */
         $s_hosts = explode("\n", $s_hostline);

         /* ƥۥ̾򷫤֤ */
         foreach ($s_hosts as $s_host) {

            /* [host]Ȥʤcontinue */
            if ($s_host == "") {
                continue;
            }

            /* ޤʬ */
            list($s_host, $s_mac, $s_ip, $s_hostname, $s_select) = explode(",", $s_host);

            $s_hostname = ltrim($s_hostname, "\"");
            $s_hostname = rtrim($s_hostname, "\"");

            $check_s_mac = str_replace(":", "", $s_mac);
            $check_f_mac = str_replace(":", "", $f_mac);

            /* MACɥ쥹ʣƤ뤫 */
            if ($check_s_mac == $check_f_mac) {
                /* ¸ǡΥۥ̾ */
                delete_host_dup($sn, $f_subnet, $s_hostname);
                $log_msg = sprintf($msgarr['37008'][LOG_MSG], $sn, $f_subnet, $s_hostname, $f_mac);
                info_syslog($log_msg);
            }

            /* IPɥ쥹ʣƤ뤫 */
            if ($f_ip != "") {
                if ($s_ip == $f_ip) {
                    /* ¸ǡΥۥ̾ */
                    delete_host_dup($sn, $f_subnet, $s_hostname);
                    $log_msg = sprintf($msgarr['37009'][LOG_MSG], $sn, $f_subnet, $s_hostname, $f_ip);
                    info_syslog($log_msg);
                }
            }
        }
    }    

    /* CSVǻꤵƤۥ̾ʣƤʤå */
    if (isset($_SESSION[STR_IP]["$sn"]["$f_subnet"]["host"])) {

         $s_hostline = $_SESSION[STR_IP]["$sn"]["$f_subnet"]["host"];

         /* ԤǶڤ */
         $s_hosts = explode("\n", $s_hostline);

         /* ƥۥ̾򷫤֤ */
         foreach ($s_hosts as $s_host) {

            /* [host]Ȥʤcontinue */
            if ($s_host == "") {
                continue;
            }

            /* ޤʬ */
            list($s_host, $s_mac, $s_ip, $s_hostname, $s_select) = explode(",", $s_host);

            $s_hostname = ltrim($s_hostname, "\"");
            $s_hostname = rtrim($s_hostname, "\"");

            /* ۥ̾ʣƤ뤫 */
            if ($s_hostname == $f_hostname) {
                return 1;
            }
        }
    }         

    return 0;
}

/*********************************************************
 * delete_host_dup()
 *
 * CSVǻꤵƤIPɥ쥹Υǡ¸꤫
 * CSVǻꤵƤMACɥ쥹Υǡ¸꤫
 * 
 * []
 *      $sn           $_SESSIONˤshared-network
 *      $subnet       $_SESSIONˤ륵֥ͥå
 *      $s_hostname   ۥ̾
 *
 * [֤]
 *      ʤ
 **********************************************************/
function delete_host_dup($sn, $subnet, $s_hostname)
{
    /* [host]Ԥʬ */
    $hosts = explode("\n", $_SESSION[STR_IP]["$sn"]["$subnet"]["host"]);

    /* snƱ */
    $new_host = "";

    /* sessionˤ٤ƥۥ̾򷫤֤ */
    foreach ($hosts as $host) {

        if ($host == "") {
            continue;
        }

        /* ޤǥۥ̾ʸʬ */
        $pieces = explode(",", $host);

        /* ۥ̾ */
        $hostname = trim($pieces[3], "\"");

        /* ۥ̾оݤ򸫤Ĥʤ顢 */
        if (($s_hostname === $hostname)) {
            continue;
        }
 
        /* ¾ΥۥȤ򤽤ΤΤޤ */
        $new_host .= $host . "\n";
    }

    /* ʣǡκθˡۥ̾ĤäƤʤ */
    if ($new_host === "") {
        unset($_SESSION[STR_IP]["$sn"]["$subnet"]["host"]);
    } else {
        $_SESSION[STR_IP]["$sn"]["$subnet"]["host"] = $new_host;
    }
}

/*********************************************************
 * delete_dup_data_in_dhcp
 *
 * ¸ǡMACɥ쥹ȤIPɥ쥹¸ߤ顢
 * ¸ΥǡΥۥ̾
 *
 * []
 *      $file_data   csvΥեΥǡ
 *      $log_msg     å(ȥǡ)
 *      $err_msg     顼å(ȥǡ)
 *
 * [֤]
 *      TRUE    
 *      FALSE   ۾
 **********************************************************/
function delete_dup_data_in_dhcp($file_data, &$log_msg, &$err_msg)
{
    global $msgarr;
    $error = FALSE;
    $line = 0;
  
    foreach ($file_data as $data) {

        $line++;

        /* ¸ǡIPɥ쥹ȤMACɥ쥹¸ߤ顢ۥ̾ */
        $ret = delete_dup_data_line($data);

        /* ۥ̾ʣ */
        if ($ret === 1) {
            $log_msg = sprintf($msgarr['34015'][LOG_MSG], $line);
            $err_msg = sprintf($msgarr['34015'][SCREEN_MSG], $line);
            $error = TRUE;
            break;
        }

        /* shared-network¸ߤʤ  */
        if ($ret === 2) {
            $log_msg = sprintf($msgarr['34022'][LOG_MSG], $line);
            $err_msg = sprintf($msgarr['34022'][SCREEN_MSG], $line);
            $error = TRUE;
            break;
        }
    }

    /* 顼ȯ */
    if ($error) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * send_error_mail
 *
 * 顼ΤΥ᡼
 *
 * []
 *      $error_msg    顼å
 *
 * [֤]
 *      TRUE    
 *      FALSE   ۾
 **********************************************************/
function send_error_mail($error_msg, $csv_data_tags = array()) 
{
    global $web_conf;
    global $msgarr;

    /* ߤ */
    $now_time = date(DATE_FORMAT, time());

    /* UTF8Ѵ */
    $error_msg = mb_convert_encoding($error_msg, UTF8_ENCODEING, EUCJP_ENCODEING);

    /* ᡼ִ */
    $tags = array(
        '{$PROCESS_NAME}' => PROCESS_NAME,
        '{$EXE_TIME}'     => $now_time,
        '{$ERROR_MSG}'    => $error_msg,
    );

    /* ᡼ */
    $ret = sendmail_to_admin(MAIL_TMPL_NG, $web_conf["dhcpadmin"]["mailtoaddr"],
                             $web_conf["dhcpadmin"]["mailfromaddr"], $tags, $csv_data_tags);
    /* ᡼Ԥ */
    if ($ret === FALSE) {
        $log_msg = sprintf($msgarr['37004'][LOG_MSG], $web_conf["dhcpadmin"]["mailtoaddr"]);  
        result_log(PROCESS_NAME . ":NG:" . $log_msg, LOG_ERR);
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * send_success_mail
 *
 * ΤΥ᡼
 *
 * []
 *      $log_msg          å
 *      $$csv_data_tags   CVSǡΥ
 *
 * [֤]
 *      TRUE    
 *      FALSE   ۾
 **********************************************************/
function send_success_mail($log_msg, $csv_data_tags)
{
    global $web_conf;
    global $msgarr;

    /* ߤ */
    $now_time = date(DATE_FORMAT, time());

    /* ᡼ִ */
    $tags = array(
        '{$PROCESS_NAME}' => PROCESS_NAME,
        '{$EXE_TIME}'     => $now_time,
    );

    /* ᡼ */
    $ret = sendmail_to_admin(MAIL_TMPL_OK, $web_conf["dhcpadmin"]["mailtoaddr"],
                                $web_conf["dhcpadmin"]["mailfromaddr"],
                                $tags, $csv_data_tags);
    /* ᡼Ԥ */
    if ($ret === FALSE) {
        $log_msg = sprintf($msgarr['37004'][LOG_MSG], $web_conf["dhcpadmin"]["mailtoaddr"]);
        result_log(PROCESS_NAME . ":NG:" . $log_msg, LOG_ERR);
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * program_exit_ng
 *
 * åϤ
 * 顼᡼
 * åե
 *
 * []
 *      $err_msg        顼å
 *      $log_msg        å
 *      $csv_filename   CSVե̾
 *      $csv_filedata   CSVǡΥ
 *
 * [֤]
 *      void
 **********************************************************/
function program_exit_ng($err_msg, $log_msg)
{
    global $msgarr;
    global $basedir;
    global $domain;
    global $lock_file;

    /* ᡼ */
    send_error_mail($err_msg);

    /* 顼ν */
    $log_msg = sprintf(LOG_FMT_ERR_OTHER, PROCESS_NAME, $log_msg);
    result_log($log_msg);

    /* åեκ */
    $ret = import_csv_del_lockfile();
    if ($ret != FUNC_TRUE) {
        $err_msg = sprintf($msgarr['37005'][SCREEN_MSG], $lock_file);
        $log_msg = sprintf($msgarr['37005'][LOG_MSG], $lock_file);
        error_syslog($log_msg);
        send_error_mail($err_msg);
    }

    return;
}

/*********************************************************
 * backup_file_csv
 *
 * CSVեХååפ
 *
 * []
 *      $filename   CSVե̾
 *      $mode       ⡼
 *                       1: CSVեϢȤ
 *                       2: CSVեϢȤ˥顼ȯ
 *
 * [֤]
 *      $csv_filedata        CSVե
 *      FALSE                ۾
 **********************************************************/
function backup_file_csv($filename, $mode = 1)
{
    global $web_conf;
    global $msgarr;

    /* ⡼ */
    if ($mode == 1) {
        $back_filename = sprintf(BACKUP_CSV_OK, $filename);
    /* ۾⡼ */
    } else {
        $back_filename = sprintf(BACKUP_CSV_NG, $filename);
    }

    /* եѥκ */
    $org_filepath = $web_conf["dhcpadmin"]["pathtocsvinput"]. "/". $filename;

    /* Хååץեѥκ */
    $back_filepath = $web_conf["dhcpadmin"]["pathtocsvbackup"]. "/". $back_filename;

    /* CSVեƤ */
    $csv_filedata = file_get_contents($org_filepath);
    if ($csv_filedata === FALSE) {
        $err_msg = sprintf($msgarr['37003'][SCREEN_MSG], $csv_filepath);
        $log_msg = sprintf($msgarr['37003'][LOG_MSG], $csv_filepath);
        error_syslog($log_msg);
        send_error_mail($err_msg);
    }

    /* UTF-8Ѵ */
    $csv_filedata = mb_convert_encoding($csv_filedata, UTF8_ENCODEING, SJIS_ENCODEING);

    /* CSVեμ˼ԤƤCSVեХååפ */
    $ret = rename($org_filepath, $back_filepath);

    /* 顼ȯ */
    if ($ret === FALSE) {
        $err_msg = sprintf($msgarr['37006'][SCREEN_MSG], $org_filepath, $back_filepath);
        $log_msg = sprintf($msgarr['37006'][LOG_MSG], $org_filepath, $back_filepath);
        error_syslog($log_msg);
        send_error_mail($err_msg, $filename, $csv_filedata);
    }

    return $csv_filedata;
}

/*********************************************************
 * process_listifle_ok
 *
 * OK-CSVե
 *   - CSVեХååפ
 *   - ᡼
 *
 * []
 *      $listfile   CSVե
 *
 * [֤]
 *      TRUE        
 *      FALSE       ۾
 **********************************************************/
function process_listifle_ok($listfile)
{
    global $msgarr;
    $count_idx = 0;
    $list_file_str = "";

    if ($listfile === array()) {
        return;
    }
    
    /* CSVǡΥ롼ץ */
    $mail_data_csv = array();

    /* ƥե򷫤֤ƥХååפ */
    foreach ($listfile as $file_info) {

        /* եΥХåå */
        $csvfile_data = backup_file_csv($file_info["filename"], 1);

        /* CSVǡΥ롼ץκ */
        $mail_data_csv[$count_idx]['{$CSV_FILENAME}'] = $file_info["filename"];
        $mail_data_csv[$count_idx]['{$CSV_CONTENT}']  = $csvfile_data;

        if ($list_file_str === "") {
            $list_file_str = $file_info["filename"];
        } else {
            $list_file_str .= ", ". $file_info["filename"];
        }

        $count_idx++;
    }

    /* åκ */
    $log_msg = sprintf($msgarr['37007'][LOG_MSG], $list_file_str);
    $log_msg = sprintf(LOG_FMT_OK, PROCESS_NAME, $log_msg);
    result_log($log_msg);

    /* ᡼ */
    $ret = send_success_mail($log_msg, $mail_data_csv);
    if ($ret === FALSE) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * process_listifle_ng
 *
 * NG-CSVե
 *   - CSVեХååפ
 *   - 顼᡼
 *   - åե 
 *
 * []
 *      $listfile   CSVե
 *      $syserrmsg  ƥ२顼
 *
 * [֤]
 *      TRUE        
 *      FALSE       ۾
 **********************************************************/
function process_listifle_ng($listfile, $syserrmsg = NULL)
{
    global $msgarr;
    $count_idx = 0;
    $list_file_str = "";

    if ($listfile !== array()) {
    
        /* CSVǡΥ롼ץ */
        $mail_data_csv = array();

        /* ƥե򷫤֤ƥХååפ */
        foreach ($listfile as $file_info) {

            /* եΥХåå */
            $csvfile_data = backup_file_csv($file_info["filename"], 1);

            /* CSVǡΥ롼ץκ */
            $mail_data_csv[$count_idx]['{$CSV_ERROR}'] = mb_convert_encoding($file_info["errmsg"], 
                                                                   UTF8_ENCODEING, EUCJP_ENCODEING);
            $mail_data_csv[$count_idx]['{$CSV_FILENAME}'] = $file_info["filename"];
            $mail_data_csv[$count_idx]['{$CSV_CONTENT}']  = $csvfile_data;
    
            if (!empty($file_info["logmsg"])) {
                /* åν */
                error_syslog($file_info["logmsg"]);
            }

            $count_idx++;
        }

        /* 顼᡼ */
        $ret = send_error_mail($syserrmsg, $mail_data_csv);
    }

    /* åեκ */
    $ret = import_csv_del_lockfile();

    /* 顼ȯ */
    if ($ret !== FUNC_TRUE) {
        $log_msg = sprintf($msgarr['37005'][LOG_MSG], $lock_file);
        $err_msg = sprintf($msgarr['37005'][SCREEN_MSG], $lock_file);

        /* ν */
        error_syslog($log_msg);

        /* 顼᡼ */
        send_error_mail($syserrmsg);
    }

    return;
}

/*********************************************************
 * error_syslog
 *
 * 顼Ϥ
 *
 * []
 *      $log_msg    å
 *
 * [֤]
 *      void
 **********************************************************/
function error_syslog($log_msg) 
{
    $log_msg = sprintf(LOG_FMT_ERR_OTHER, PROCESS_NAME, $log_msg);
    /* ν */
    result_log($log_msg);
}

/*********************************************************
 * info_syslog
 *
 * Ϥ
 *
 * []
 *      $log_msg    å
 *
 * [֤]
 *      void
 **********************************************************/
function info_syslog($log_msg)
{
    $log_msg = sprintf(LOG_FMT_INFO, PROCESS_NAME, $log_msg);
    /* ν */
    result_log($log_msg);
}

/********************************************************************
 * MAIN                                                             *
 ********************************************************************/
/* $basedir$topdirΥå */
global $basedir;
global $domain;
global $lock_file;

/* Υå */
if ($argc != 2) {
    print("Usage dhcpadmin_import_csv domain_name\n");
    exit(1);
}

/* ١ǥ쥯ȥ */
$basedir = BASE_DIR;

/* ɥᥤ̾ */
$domain = $argv[1];

/* åեѥ */
$lock_file = $basedir . VARDIR . $domain . '/' . LOCKFILE;

$list_file_ok = array();
$list_file_ng = array();

/* ꤷƤɥᥤեɤ߹ */
if (read_web_conf('dhcpadmin') === FALSE) {
    print $err_msg;
    print "\n";
    exit(1);
}

/* åեɹ */
if (make_msgarr(MESSAGEFILE) === FALSE) {
    print $err_msg;
    print "\n";
    exit(1);
}

/* ťΥå */
$ret = import_csv_login_check($lock_file);

/*  åեκ˼Ԥޤ */
if ($ret === FUNC_FALSE) {
    $err_msg = sprintf($msgarr['27006'][SCREEN_MSG], $lock_file);
    $log_msg = sprintf($msgarr['27006'][LOG_MSG], $lock_file);
    error_syslog($log_msg);
    send_error_mail($err_msg);
    exit(1);
/* åƤ */
} elseif ($ret === LOCK_FALSE) {
    $err_msg = sprintf($msgarr['27005'][SCREEN_MSG], PROCESS_NAME. ":". BATCH_IP);
    $log_msg = sprintf($msgarr['27005'][LOG_MSG], PROCESS_NAME. ":". BATCH_IP);
    error_syslog($log_msg);
    send_error_mail($err_msg);
    exit(1);
}

/* csv¸ǥ쥯ȥ */
$dir_save_csv   = $web_conf["dhcpadmin"]["pathtocsvinput"];

/* csvХååפǥ쥯ȥ */
$dir_backup_csv = $web_conf["dhcpadmin"]["pathtocsvbackup"];

/* CSVǥ쥯ȥå */
if (!is_dir($dir_save_csv)) {
    $err_msg = sprintf($msgarr['37001'][SCREEN_MSG], $dir_save_csv);
    $log_msg = sprintf($msgarr['37001'][LOG_MSG], $dir_save_csv);
    program_exit_ng($err_msg, $log_msg);
    exit(1);
}

/* CSVΥХååץǥ쥯ȥå */
if (!is_dir($dir_backup_csv)) {
    $err_msg = sprintf($msgarr['37001'][SCREEN_MSG], $dir_backup_csv);
    $log_msg = sprintf($msgarr['37001'][LOG_MSG], $dir_backup_csv);
    program_exit_ng($err_msg, $log_msg);
    exit(1);
}

/* CSVǥ쥯ȥ˥ե */
$listfile = scan_dir($dir_save_csv);
if ($listfile === FALSE) {
    $err_msg = sprintf($msgarr['37002'][SCREEN_MSG], $dir_backup_csv);
    $log_msg = sprintf($msgarr['37002'][LOG_MSG], $dir_backup_csv);
    program_exit_ng($err_msg, $log_msg);
    exit(1);
}

/* CSVե¸ߤʤ */
if ($listfile === array()) {

    /* åեκ */
    $ret = import_csv_del_lockfile();
    if ($ret != FUNC_TRUE) {
        $log_msg = sprintf($msgarr['37005'][LOG_MSG], $lock_file);
        $err_msg = sprintf($msgarr['37005'][LOG_MSG], $lock_file);
        error_syslog($log_msg);
        send_error_mail($err_msg);
        exit(1);
    }

    $err_msg = sprintf($msgarr['37013'][SCREEN_MSG], $dir_save_csv);
    $log_msg = sprintf($msgarr['37013'][LOG_MSG], $dir_save_csv);
//    send_error_mail($err_msg);
    info_syslog($log_msg);

    exit(0);
}

/* dhcpd.confʬ */
$ret = analyze_dhcpd_conf($web_conf["dhcpadmin"]["dhcpdconfpath"], STR_IPV4);
if ($ret === FALSE) {
    $err_msg = sprintf($msgarr['27004'][SCREEN_MSG], $dir_backup_csv);
    $log_msg = sprintf($msgarr['27004'][LOG_MSG], $dir_backup_csv);
    program_exit_ng($err_msg, $log_msg);
    exit(1);
}

/* 줿ե򷫤֤ */
foreach ($listfile as $csv_filename => $time_created) {

    /* CSVեѥκ */
    $csv_filepath = $dir_save_csv. "/". $csv_filename; 
 
    /* CSVեɤ߹ */
    $file_data = file($csv_filepath);

    /* 顼ȯ */
    if ($file_data === FALSE) {
        $csv_file_info["filename"] = $csv_filename;
        $csv_file_info["errmsg"] = sprintf($msgarr['37003'][SCREEN_MSG], $csv_filepath);
        $csv_file_info["logmsg"] = sprintf($msgarr['37003'][LOG_MSG], $csv_filepath);
        array_push($list_file_ng, $csv_file_info);
        continue;   
    }

    /* å */
    $line = check_column($file_data);
    if ($line != 0) {
        $csv_file_info["filename"] = $csv_filename;
        $csv_file_info["errmsg"] = sprintf($msgarr['34001'][SCREEN_MSG], $line);
        $csv_file_info["logmsg"] =  sprintf($msgarr['34001'][LOG_MSG], $line);
        array_push($list_file_ng, $csv_file_info);
        continue;
    }

    /* ͤΥå */
    $ret = check_data_csv($file_data, $log_msg, $err_msg);
    if ($ret === FALSE) {
        $csv_file_info["filename"] = $csv_filename;
        $csv_file_info["errmsg"] = $err_msg;
        $csv_file_info["logmsg"] = $log_msg;
        array_push($list_file_ng, $csv_file_info);
        continue;
    }

    /* CSVեνʣå */
    $ret = check_duplication_csv_only($file_data, $log_msg, $err_msg);
    if ($ret === FALSE) {
        $csv_file_info["filename"] = $csv_filename;
        $csv_file_info["errmsg"] = $err_msg;
        $csv_file_info["logmsg"] = $log_msg;
        array_push($list_file_ng, $csv_file_info);
        continue;
    }

    /* ʣå⡼ɤʤ */
    if ($web_conf["dhcpadmin"]["importcsvmode"] === MODE_CHECK_DUP) {

        /* ʣΥå */
        $ret = check_dup_csv_and_dhcpd($file_data, $log_msg, $err_msg);
        if ($ret === FALSE) {
            $csv_file_info["filename"] = $csv_filename;
            $csv_file_info["errmsg"] = $err_msg;
            $csv_file_info["logmsg"] = $log_msg;
            array_push($list_file_ng, $csv_file_info);
            continue;
        }

    /* ʣåʤ⡼ɤʤ */
    } else {
        /* ¸ǡνʣƤIPɥ쥹MACɥ쥹ޤۥ̾ */
        $ret = delete_dup_data_in_dhcp($file_data, $log_msg, $err_msg);
        if ($ret === FALSE) {
            $csv_file_info["filename"] = $csv_filename;
            $csv_file_info["errmsg"] = $err_msg;
            $csv_file_info["logmsg"] = $log_msg;
            array_push($list_file_ng, $csv_file_info);
            continue;
        }
    }

    /* ¸ǡCSVΥǡޡ */
    $ret = add_host_session($file_data);
    if ($ret === FALSE) {
        $csv_file_info["filename"] = $csv_filename;
        $csv_file_info["errmsg"] = sprintf($msgarr['34022'][SCREEN_MSG], $line);
        $csv_file_info["logmsg"] = sprintf($msgarr['34022'][LOG_MSG], $line);
        array_push($list_file_ng, $csv_file_info);
        continue;
    }

    /* ʥꥹȤ˳Ǽ */
    $csv_file_info["filename"] = $csv_filename;
    $csv_file_info["errmsg"] = NULL;
    $csv_file_info["logmsg"] = NULL;
    array_push($list_file_ok, $csv_file_info);
}

/* ХååץեΥѥ */
$backup_path = $web_conf["dhcpadmin"]["dhcpdconfpath"] . ".backup";

/* Хååץեκ */
$ret = create_back_file($web_conf["dhcpadmin"]["dhcpdconfpath"], $backup_path);

/* 顼ȯ */
if ($ret === FUNC_FALSE) {
    $log_msg = sprintf($msgarr['36001'][LOG_MSG], $backup_path);
    $err_msg = sprintf($msgarr['36001'][SCREEN_MSG], $backup_path);

    /* CSVեΥǡޡ */
    $list_file_ng = array_merge($list_file_ng, $list_file_ok);

    process_listifle_ng($list_file_ng, $err_msg);
    error_syslog($log_msg);

    exit(1);
}

/* pid */
$pid = getmypid();

/* dhcpdեκ */
$tmpfile_path = $web_conf["dhcpadmin"]["dhcpdconfpath"]. ".tmp." . $pid;

/* åξ󤫤ե */
$ret = create_tmp_file($tmpfile_path);

/* 顼ȯ */
if ($ret === FUNC_FALSE) {
    $err_msg = sprintf($msgarr['36002'][SCREEN_MSG], $tmpfile_path);
    $log_msg = sprintf($msgarr['36002'][LOG_MSG], $tmpfile_path);

    /* CSVեΥǡޡ */
    $list_file_ng = array_merge($list_file_ng, $list_file_ok);

    process_listifle_ng($list_file_ng, $err_msg);
    error_syslog($log_msg);
    exit(1);
}

/* ե񤭤ޤ */
$ret = overwrite_setting_file($tmpfile_path, $web_conf["dhcpadmin"]["dhcpdconfpath"]);

/* 顼ȯ */
if ($ret === FUNC_FALSE) {
    $err_msg = sprintf($msgarr['36003'][LOG_MSG], $backup_path);
    $log_msg = sprintf($msgarr['36003'][LOG_MSG], $backup_path);

    /* CSVեΥǡޡ */
    $list_file_ng = array_merge($list_file_ng, $list_file_ok);

    process_listifle_ng($list_file_ng, $err_msg);
    error_syslog($log_msg);
    exit(1);
}

/* configtestޥ */
$ret = run_command($web_conf["dhcpadmin"]["dhcpdconftestcom"]);

/* 顼ȯ */
if ($ret === FUNC_FALSE) {
    /* Хååץե뤫dhcpd.conf */
    rename($backup_path, $web_conf["dhcpadmin"]["dhcpdconfpath"]);

    /* dhcpdƵư */
    run_command($web_conf["dhcpadmin"]["dhcpdrestartcom"]);

    $err_msg = $msgarr['36004'][SCREEN_MSG];
    $log_msg = $msgarr['36004'][LOG_MSG];

    /* CSVեΥǡޡ */
    $list_file_ng = array_merge($list_file_ng, $list_file_ok);

    process_listifle_ng($list_file_ng, $err_msg);
    error_syslog($log_msg);
    exit(1);
}

/* Ƶư */
$ret = run_command($web_conf["dhcpadmin"]["dhcpdrestartcom"]);

/* 顼ȯ */
if ($ret === FUNC_FALSE) {

    /* Хååץե뤫dhcpd.conf */
    rename($backup_path, $web_conf["dhcpadmin"]["dhcpdconfpath"]);

    /* dhcpdƵư */
    run_command($web_conf["dhcpadmin"]["dhcpdrestartcom"]);

    $err_msg = sprintf($msgarr['36005'][SCREEN_MSG], $backup_path);
    $log_msg = sprintf($msgarr['36005'][LOG_MSG], $backup_path);

    /* CSVեΥǡޡ */
    $list_file_ng = array_merge($list_file_ng, $list_file_ok);

    process_listifle_ng($list_file_ng, $err_msg);
    error_syslog($log_msg);
    exit(1);
}

/* CSVե */
process_listifle_ok($list_file_ok);

/* ۾CSVե */
process_listifle_ng($list_file_ng);

/* ˽λ */
exit(0);

?>
