\n"; // Menu select pour les vlan $nbr_vlan = dhcp_vlan_test(); if ($nbr_vlan > 0) { $i = 1; $ret .= "
\n"; $ret .= ""; $ret .= gettext("Vlan"); $ret .= ""; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_iface'])) { $ret .= "" . $error['dhcp_iface'] . ""; } $ret .= "\n"; // dhcp_domain_name : Nom du domaine $ret .= "" . gettext($dhcp["dhcp_domain_name"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_domain_name'])) { $ret .= "" . $error['dhcp_domain_name'] . ""; } $ret .= "\n"; // dhcp_in_boot : dhcp start oon boot ? 0 ou 1 $ret .= "" . gettext($dhcp["dhcp_on_boot"]["descr"]) . "\n"; if ($dhcp["dhcp_on_boot"]["value"] == 1) { $CHECKED = "CHECKED"; } else { $CHECKED = ""; } $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_iface'])) { $ret .= "" . $error['dhcp_on_boot'] . ""; } $ret .= "\n"; // dhcp_max_lease : bail maximal $ret .= "" . gettext($dhcp["dhcp_max_lease"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_max_lease'])) { $ret .= "" . $error['dhcp_max_lease'] . ""; } $ret .= "\n"; // dhcp_default_lease : bail par defaut $ret .= "" . gettext($dhcp["dhcp_default_lease"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_default_lease'])) { $ret .= "" . $error['dhcp_default_lease'] . ""; } $ret .= "\n"; // dhcp_ntp : Serveur NTP $ret .= "" . gettext($dhcp["dhcp_ntp"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_ntp'])) { $ret .= "" . $error['dhcp_ntp'] . ""; } // dhcp_wins : Serveur WINS $ret .= "" . gettext($dhcp["dhcp_wins"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_wins'])) { $ret .= "" . $error['dhcp_wins'] . ""; } $ret .= "\n"; // dhcp_dns_server_prim : Serveur DNS primaire $ret .= "" . gettext($dhcp["dhcp_dns_server_prim"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_dns_server_prim'])) { $ret .= "" . $error['dhcp_dns_server_prim'] . ""; } $ret .= "\n"; // dhcp_dns_server_sec : Serveur DNS secondaire $ret .= "" . gettext($dhcp["dhcp_dns_server_sec"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_dns_server_sec'])) { $ret .= "" . $error['dhcp_dns_server_sec'] . ""; } $ret .= "\n"; // partie reserve si on a des vlan if ($_POST['vlan'] > 0) { // Adresse du reseau $ret .= "" . gettext("Adresse de réseau "); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_reseau_vlan = "dhcp_reseau_" . $_POST['vlan']; $ret .= ": "; // Masque du reseau $ret .= "" . gettext("Masque de réseau "); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_masque_vlan = "dhcp_masque_" . $_POST['vlan']; $ret .= ": "; } if (isset($error['dhcp_gateway'])) { $ret .= "" . $error['dhcp_gateway'] . ""; } $ret .= "\n"; // dhcp_gateway : PASSERELLE if ($_POST['vlan'] > 0) { $ret .= "" . gettext($dhcp["dhcp_gateway"]["descr"]); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_gateway_vlan = "dhcp_gateway_" . $_POST['vlan']; $ret .= ": "; if (isset($error['dhcp_gateway'])) { $ret .= "" . $error['dhcp_gateway'] . ""; } $ret .= "\n"; } else { if ($nbr_vlan == "0") { $ret .= "" . gettext($dhcp["dhcp_gateway"]["descr"]); $ret .= "\n"; $ret .= ": "; if (isset($error['dhcp_gateway'])) { $ret .= "" . $error['dhcp_gateway'] . ""; } $ret .= "\n"; } } // dhcp_ip_min : Debut de la plage de reservations if ($_POST['vlan'] > 0) { $ret .= "" . gettext($dhcp["dhcp_ip_min"]["descr"]); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_ip_min_vlan = "dhcp_ip_min_" . $_POST['vlan']; // if ($dhcp["$dhcp_ip_min_vlan"]["value"] == "") { $dhcp["$dhcp_ip_min_vlan"]["value"] = $ret .= ": "; if (isset($error['dhcp_ip_min'])) { $ret .= "" . $error['dhcp_ip_min'] . ""; } $ret .= "\n"; } else { if ($nbr_vlan == "0") { $ret .= "" . gettext($dhcp["dhcp_ip_min"]["descr"]); $ret .= "\n"; $ret .= ": "; if (isset($error['dhcp_ip_min'])) { $ret .= "" . $error['dhcp_ip_min'] . ""; } $ret .= "\n"; } } // dhcp_begin_range : Debut de la plage if ($_POST['vlan'] > 0) { $ret .= "" . gettext($dhcp["dhcp_begin_range"]["descr"]); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_begin_range_vlan = "dhcp_begin_range_" . $_POST['vlan']; $ret .= ": "; if (isset($error['dhcp_begin_range'])) { $ret .= "" . $error['dhcp_begin_range'] . ""; } $ret .= "\n"; } else { if ($nbr_vlan == "0") { $ret .= "" . gettext($dhcp["dhcp_begin_range"]["descr"]); $ret .= "\n"; $ret .= ": "; if (isset($error['dhcp_begin_range'])) { $ret .= "" . $error['dhcp_begin_range'] . ""; } $ret .= "\n"; } } // dhcp_end_range : Fin de la plage if ($_POST['vlan'] > 0) { $ret .= "" . gettext($dhcp["dhcp_end_range"]["descr"]); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_end_range_vlan = "dhcp_end_range_" . $_POST['vlan']; $ret .= ": "; } $ret .= "\n"; } else { if ($nbr_vlan == "0") { $ret .= "" . gettext($dhcp["dhcp_end_range"]["descr"]); $ret .= "\n"; $ret .= ": "; if (isset($error['dhcp_end_range'])) { $ret .= "" . $error['dhcp_end_range'] . ""; } $ret .= "\n"; } } $ret .= "\n"; // Option autre if ($_POST['vlan'] > 0) { $ret .= "" . gettext($dhcp["dhcp_extra_option"]["descr"]); $ret .= gettext(" du vlan ") . $_POST['vlan']; $ret .= "\n"; $dhcp_extra_option_vlan = "dhcp_extra_option_" . $_POST['vlan']; $ret .= ": "; } $ret .= "\n"; } else { if ($nbr_vlan == "0") { $ret .= "" . gettext($dhcp["dhcp_extra_option"]["descr"]); $ret .= "\n"; $ret .= ": "; if (isset($error['dhcp_end_range'])) { $ret .= "" . $error['dhcp_end_range'] . ""; } $ret .= "\n"; } } $ret .= "\n"; // dhcp_tftp_server : SERVER TFTP $ret .= "" . gettext($dhcp["dhcp_tftp_server"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_tftp_server'])) { $ret .= "" . $error['dhcp_tftp_server'] . ""; } $ret .= "\n"; // dhcp_unatt_filename fichier de boot PXE $ret .= "" . gettext($dhcp["dhcp_unatt_filename"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_unatt_filename'])) { $ret .= "" . $error['dhcp_unatt_filename'] . ""; } $ret .= "\n"; $ret .= "\n"; // UNATTENDED // dhcp_unattended_server //$ret .= "".gettext($dhcp["dhcp_unatt_server"]["descr"])."\n"; //$ret .= ": "; //$ret .= "".$error['dhcp_unatt_server'].""; //$ret .= "\n"; // dhcp_unatt_login $ret .= "" . gettext($dhcp["dhcp_unatt_login"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_unatt_login'])) { $ret .= "" . $error['dhcp_unatt_login'] . ""; } $ret .= "\n"; // dhcp_unatt_pass $ret .= "" . gettext($dhcp["dhcp_unatt_pass"]["descr"]) . "\n"; $ret .= ": 0) { $ret .= " disabled "; } $ret .= ">"; if (isset($error['dhcp_unatt_pass'])) { $ret .= "" . $error['dhcp_unatt_pass'] . ""; } $ret .= "\n"; $ret .= ""; $ret .= "\n"; $ret .= "\n"; $ret .= "\n"; $ret .= "
\n"; exec("sudo /usr/share/se3/scripts/makedhcpdconf state", $state); if ($state[0] == "1") { $ret .= "
\n"; $ret .= "\n"; $ret .= "\n"; $ret .="
"; } else { $ret .= "
\n"; $ret .= "\n"; $ret .= "\n"; $ret .="
"; } return $ret; } /** * Mise a jour de la conf du dhcp dans la base SQL * @Parametres * @Return Erreur SQL */ function dhcp_update_config() { // insert range in option service table require_once ("ihm.inc.php"); $error = ""; if ($_POST['vlan'] > 0) { //verif si le champ existe dans la table sinon on le cree $dhcp_min = "dhcp_ip_min_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_min); $dhcp_begin = "dhcp_begin_range_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_begin); $dhcp_end = "dhcp_end_range_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_end); $dhcp_gateway_vlan = "dhcp_gateway_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_gateway_vlan); $dhcp_reseau = "dhcp_reseau_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_reseau); $dhcp_masque = "dhcp_masque_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_masque); $dhcp_extra_option = "dhcp_extra_option_" . $_POST['vlan']; dhcp_vlan_champ($dhcp_extra_option); } else { $dhcp_min = "dhcp_ip_min"; $dhcp_begin = "dhcp_begin_range"; $dhcp_end = "dhcp_end_range"; $dhcp_gateway_vlan = "dhcp_gateway"; $dhcp_extra_option = "dhcp_extra_option"; } if ((set_ip_in_lan($_POST["$dhcp_min"])) || ($_POST["$dhcp_min"] == "")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_min"] . "' WHERE name='$dhcp_min'"; mysql_query($update_query); } else { $error["$dhcp_min"] = gettext("Cette addresse n'est pas valide : " . $_POST["$dhcp_min"]); } if ((set_ip_in_lan($_POST["$dhcp_begin"])) || ($_POST["$dhcp_begin"] == "")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_begin"] . "' WHERE name='$dhcp_begin'"; mysql_query($update_query); } else { $error["$dhcp_begin"] = gettext("Cette addresse n'est pas valide : " . $_POST["$dhcp_begin"]); } if ((set_ip_in_lan($_POST["$dhcp_end"]) || ($_POST["$dhcp_end"]) == "")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_end"] . "' WHERE name='$dhcp_end'"; mysql_query($update_query); } else { $error["$dhcp_end"] = gettext("Cette adresse n'est pas valide : " . $_POST["$dhcp_end"]); } if ((set_ip_in_lan($_POST["$dhcp_gateway_vlan"])) || ($_POST["$dhcp_gateway_vlan"] == "")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_gateway_vlan"] . "' WHERE name='$dhcp_gateway_vlan'"; mysql_query($update_query); } else { $error["$dhcp_gateway_vlan"] = gettext("Cette adresse n'est pas valide : " . $_POST["$dhcp_gateway_vlan"]); } if ((set_ip_in_lan($_POST["$dhcp_reseau"])) || ($_POST["$dhcp_reseau"] == "")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_reseau"] . "' WHERE name='$dhcp_reseau'"; mysql_query($update_query); } else { $error["$dhcp_reseau"] = gettext("Cette addresse n'est pas valide : " . $_POST["$dhcp_reseau"]); } if ((set_ip_in_lan($_POST["$dhcp_masque"])) || ($_POST["$dhcp_masque"] == "")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_masque"] . "' WHERE name='$dhcp_masque'"; mysql_query($update_query); } else { $error["$dhcp_masque"] = gettext("Cette addresse n'est pas valide : " . $_POST["$dhcp_masque"]); } // if (!($_POST["$dhcp_extra_option"]=="")) { $update_query = "UPDATE params SET value='" . $_POST["$dhcp_extra_option"] . "' WHERE name='$dhcp_extra_option'"; mysql_query($update_query); // } // Si on est dans la conf des vlan cette partie n'est pas modifiable if ($_POST['vlan'] < 1) { if (set_ip_in_lan($_POST['dhcp_dns_server_prim'])) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_dns_server_prim'] . "' WHERE name='dhcp_dns_server_prim'"; mysql_query($update_query); } else { $error["dhcp_dns_server_prim"] = gettext("Cette adresse n'est pas valide :" . $_POST['dhcp_dns_server_prim']); } if ((set_ip_in_lan($_POST['dhcp_dns_server_sec'])) || ($_POST['dhcp_dns_server_sec'] == "")) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_dns_server_sec'] . "' WHERE name='dhcp_dns_server_sec'"; mysql_query($update_query); } else { $error["dhcp_dns_server_sec"] = gettext("Cette adresse n'est pas valide : " . $_POST['dhcp_dns_server_sec']); } if (preg_match('/,/', $_POST['dhcp_wins'])) { list($wins_ip_1, $wins_ip_2) = preg_split('/,/', $_POST['dhcp_wins']); if ((set_ip_in_lan($wins_ip_1)) && (set_ip_in_lan($wins_ip_2))) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_wins'] . "' WHERE name='dhcp_wins'"; mysql_query($update_query); } else { $error["dhcp_wins"] = gettext("Une des adresses n'est pas valide : " . $_POST['dhcp_wins']); } } elseif ((set_ip_in_lan($_POST['dhcp_wins'])) || ($_POST['dhcp_wins'] == "")) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_wins'] . "' WHERE name='dhcp_wins'"; mysql_query($update_query); } else { $error["dhcp_wins"] = gettext("Cette adresse n'est pas valide : " . $_POST['dhcp_wins']); } if ((set_ip_in_lan($_POST['dhcp_ntp'])) || ($_POST['dhcp_ntp'] == "")) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_ntp'] . "' WHERE name='dhcp_ntp'"; mysql_query($update_query); } else { $error["dhcp_ntp"] = gettext("Cette adresse n'est pas valide : " . $_POST['dhcp_ntp']); } if (preg_match("/^[0-9]+$/", $_POST['dhcp_max_lease'])) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_max_lease'] . "' WHERE name='dhcp_max_lease'"; mysql_query($update_query); } else { $error["dhcp_max_lease"] = gettext("Ce n'est pas un nombre valide : " . $_POST['dhcp_max_lease']); } if (preg_match("/^[0-9]+$/", $_POST['dhcp_default_lease'])) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_default_lease'] . "' WHERE name='dhcp_default_lease'"; mysql_query($update_query); } else { $error["dhcp_default_lease"] = gettext("Ce n'est pas un nombre valide : " . $_POST['dhcp_default_lease']); } if (preg_match("/^eth[0-9]+$/", $_POST['dhcp_iface']) || preg_match("/^bond[0-9]+$/", $_POST['dhcp_iface'])) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_iface'] . "' WHERE name='dhcp_iface'"; mysql_query($update_query); } else { $error["dhcp_iface"] = gettext("Ce n'est pas une interface valide : " . $_POST['dhcp_iface']); } if ($_POST['dhcp_on_boot']) { $value = "1"; } else { $value = "0"; } $update_query = "UPDATE params SET value='" . $value . "' WHERE name='dhcp_on_boot'"; mysql_query($update_query); $update_query = "UPDATE params SET value='" . $_POST['dhcp_domain_name'] . "' WHERE name='dhcp_domain_name'"; mysql_query($update_query); // TFTP SERVER if ((set_ip_in_lan($_POST['dhcp_tftp_server'])) || ($_POST['dhcp_tftp_server'] == "")) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_tftp_server'] . "' WHERE name='dhcp_tftp_server'"; mysql_query($update_query); } else { $error["dhcp_tftp_server"] = gettext("Cette entrée n'est pas valide :") . $_POST['dhcp_tftp_server']; } // unatt if ((set_ip_in_lan($_POST['dhcp_unatt_server'])) || ($_POST['dhcp_unatt_server'] == "")) { $update_query = "UPDATE params SET value='" . $_POST['dhcp_unatt_server'] . "' WHERE name='dhcp_unatt_server'"; mysql_query($update_query); } else { $error["dhcp_tftp_server"] = gettext("Cette entrée n'est pas valide :") . $_POST['dhcp_unatt_server']; } $update_query = "UPDATE params SET value='" . $_POST['dhcp_unatt_login'] . "' WHERE name='dhcp_unatt_login'"; mysql_query($update_query); $update_query = "UPDATE params SET value='" . $_POST['dhcp_unatt_pass'] . "' WHERE name='dhcp_unatt_pass'"; mysql_query($update_query); $update_query = "UPDATE params SET value='" . $_POST['dhcp_unatt_filename'] . "' WHERE name='dhcp_unatt_filename'"; mysql_query($update_query); } return $error; } /** * Test si l'adresse IP appartient au reseau local * @Parametres $ip : Adresse IP a tester * @Return TRUE si oui - FLASE si non */ function set_ip_in_lan($ip) { if (preg_match("/^(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]|[1-9]).)" . "{1}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]).)" . "{2}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]){1}))$/", $ip)) { return TRUE; } else { return FALSE; } } /** * Parse le fichier dhcp.leases * @Parametres $file : fichier dhcp.laeses * @Return an associativ array : ["hostname"] / ("ip"] / [ "macaddr"] who are in dhcpd.lease and take ["parc"] entry if exist in ldap SORT by hostname */ function parse_dhcpd_lease($file) { require_once("includes/ldap.inc.php"); $lease = file($file); $compteur_clients = 0; $client["macaddr"][$compteur_clients] = ""; $client["hostname"][$compteur_clients] = ""; // $client["ip"][$compteur_clients]=$ip[0]; foreach ($lease as $compteur => $ligne) { if (preg_match("/^lease/", $ligne)) { // for each "lease" we take IP / Mac Addr / hostname preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/", $ligne, $ip); // take IP $macaddr[0] = gettext("unresolved"); $clienthostname[0] = gettext("unresolved"); $etat = 0; while (!preg_match("/^}/", $lease[$compteur])) { if (preg_match("/binding state active/", $lease[$compteur])) $etat = 1; // lease state if (preg_match("/hardware ethernet/", $lease[$compteur])) { // take mac addr preg_match("/[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}/", $lease[$compteur], $macaddr); } if (preg_match("/client-hostname/", $lease[$compteur])) { // take name preg_match("/\"(.*)\"/", $lease[$compteur], $clienthostname); $clienthostname[0] = preg_replace("/\"/", "", $clienthostname[0]); } $compteur = $compteur + 1; } if ($etat && ((!in_array($macaddr[0], $client["macaddr"])) && ($macaddr[0] != gettext("unresolved") ) && (!registred($macaddr[0])))) { $client["macaddr"][$compteur_clients] = $macaddr[0]; $client["hostname"][$compteur_clients] = $clienthostname[0]; if ($client["hostname"][$compteur_clients] == gettext("unresolved")) { $list_computer = search_machines("(&(cn=*)(ipHostNumber=$ip[0]))", "computers"); if (count($list_computer) > 1) { $resolutiondunom = "doublon_ldap"; $client["hostname"][$compteur_clients] = $resolutiondunom; } elseif (count($list_computer) > 0) { $resolutiondunom = $list_computer[0]['cn']; $client["hostname"][$compteur_clients] = $resolutiondunom; } } $client["ip"][$compteur_clients] = $ip[0]; $client["parc"][$compteur_clients] = search_parcs($clienthostname[0]); $compteur_clients++; } } } if (is_array($client["ip"])) { array_multisort($client["hostname"], SORT_ASC, $client["ip"], SORT_ASC, $client["macaddr"], SORT_ASC, $client["parc"]); } else { $client = ""; } return $client; } function my_parse_dhcpd_lease($file) { $mode_debug = "n"; $mode_fich_debug = "n"; require_once("includes/ldap.inc.php"); $lease = file($file); $compteur_clients = 0; /* $client["macaddr"][$compteur_clients]=""; $client["hostname"][$compteur_clients]=""; // $client["ip"][$compteur_clients]=$ip[0]; */ $client["macaddr"] = array(); $client["ip"] = array(); $client["hostname"] = array(); $client["parc"] = array(); $tab_recherche_ldap_faite = array(); $liste_noms_en_lease = array(); $liste_noms_ldap = array(); $liste_autres_ip = array(); if ($mode_fich_debug == "y") { $fich = fopen('/tmp/parse_dhcpd_lease.txt', 'a+'); } foreach ($lease as $compteur => $ligne) { // for each "lease" we take IP / Mac Addr / hostname if (preg_match("/^lease/", $ligne)) { preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/", $ligne, $ip); // take IP // Initialisation pour le cas ou les infos dans cette section du dhcpd.leases ne sont pas exmploitables $macaddr[0] = gettext("unresolved"); $clienthostname[0] = gettext("unresolved"); $etat = 0; // On lit le fichier jusqu'a l'accolade fermante suivante while (!preg_match("/^}/", $lease[$compteur])) { if (preg_match("/binding state active/", $lease[$compteur])) { $etat = 1; } // lease state if (preg_match("/hardware ethernet/", $lease[$compteur])) { // take mac addr preg_match("/[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}/", $lease[$compteur], $macaddr); } if (preg_match("/client-hostname/", $lease[$compteur])) { // take name preg_match("/\"(.*)\"/", $lease[$compteur], $clienthostname); $clienthostname[0] = preg_replace("/\"/", "", $clienthostname[0]); } $compteur = $compteur + 1; } if ($mode_fich_debug == "y") { fwrite($fich, "\n"); fwrite($fich, "\$ip[0]=" . $ip[0] . "\n"); fwrite($fich, "\$macaddr[0]=" . $macaddr[0] . "\n"); fwrite($fich, "\$clienthostname[0]=" . $clienthostname[0] . "\n"); } if ($etat == "1") { // On a bien 'binding state active' pour cette IP... malheureusement on peut avoir deux ip avec ca pour une meme adresse MAC if ((!registred($macaddr[0])) && ($macaddr[0] != gettext("unresolved"))) { // Adresse MAC trouvee dans le leases et pas deja enregistree dans la table se3_dhcp if (!isset($liste_noms_en_lease["$macaddr[0]"])) { $liste_noms_en_lease["$macaddr[0]"] = array(); } if (($mode_debug == 'y') || ((strtolower($clienthostname[0]) != 'unresolved') && (!in_array(strtolower($list_computer[$loop]['cn']), $liste_noms_en_lease["$macaddr[0]"])))) { $liste_noms_en_lease["$macaddr[0]"][] = strtolower($clienthostname[0]); if ($mode_fich_debug == "y") { fwrite($fich, "\$liste_noms_en_lease[\"$macaddr[0]\"][]=" . strtolower($clienthostname[0]) . "\n"); } } if ((!in_array($macaddr[0], $client["macaddr"]))) { if ($mode_fich_debug == "y") { fwrite($fich, "Adresse Mac non encore traitee.\n"); } $client["macaddr"][$compteur_clients] = $macaddr[0]; $client["hostname"][$compteur_clients] = $clienthostname[0]; $liste_noms_ldap["$macaddr[0]"] = array(); if ($mode_fich_debug == "y") { fwrite($fich, "\$client[\"hostname\"][$compteur_clients]=" . $client["hostname"][$compteur_clients] . "\n"); } if ($client["hostname"][$compteur_clients] == gettext("unresolved")) { // Le nom n'a pas ete trouve dans le dhcpd.leases pour cette section if ($mode_fich_debug == "y") { fwrite($fich, "\$client[\"hostname\"][$compteur_clients] est unresolved.\n"); } //$list_computer=search_machines("(&(cn=*)(ipHostNumber=$ip[0]))","computers"); $list_computer = search_machines("(&(cn=*)(macAddress=$macaddr[0]))", "computers"); if (count($list_computer) > 1) { $resolutiondunom = "doublon_ldap"; $client["hostname"][$compteur_clients] = $resolutiondunom; if ($mode_fich_debug == "y") { fwrite($fich, "\$client[\"hostname\"][$compteur_clients]=" . $resolutiondunom . "\n"); } } elseif (count($list_computer) > 0) { $resolutiondunom = $list_computer[0]['cn']; $client["hostname"][$compteur_clients] = $resolutiondunom; if ($mode_fich_debug == "y") { fwrite($fich, "\$client[\"hostname\"][$compteur_clients]=" . $resolutiondunom . "\n"); } } elseif ($mode_fich_debug == "y") { fwrite($fich, "Adresse Mac non trouvee dans le LDAP.\n"); } $tab_recherche_ldap_faite[] = $macaddr[0]; for ($loop = 0; $loop < count($list_computer); $loop++) { //echo " ".$list_computer[$loop]['cn']; if (($mode_debug == 'y') || (!in_array(strtolower($list_computer[$loop]['cn']), $liste_noms_ldap["$macaddr[0]"]))) { $liste_noms_ldap["$macaddr[0]"][] = strtolower($list_computer[$loop]['cn']); if ($mode_fich_debug == "y") { fwrite($fich, "\$liste_noms_ldap[\"$macaddr[0]\"][]=" . strtolower($list_computer[$loop]['cn']) . "\n"); } } } } else { // Il y a un hostname dans le lease if (!in_array($macaddr[0], $tab_recherche_ldap_faite)) { // On controle quand meme si il y a d'autres noms dans le LDAP (pour affichage) $list_computer = search_machines("(&(cn=*)(macAddress=$macaddr[0]))", "computers"); if (count($list_computer) > 0) { for ($loop = 0; $loop < count($list_computer); $loop++) { //echo " ".$list_computer[$loop]['cn']; if (($mode_debug == 'y') || (!in_array(strtolower($list_computer[$loop]['cn']), $liste_noms_ldap["$macaddr[0]"]))) { $liste_noms_ldap["$macaddr[0]"][] = strtolower($list_computer[$loop]['cn']); if ($mode_fich_debug == "y") { fwrite($fich, "\$liste_noms_ldap[\"$macaddr[0]\"][]=" . strtolower($list_computer[$loop]['cn']) . "\n"); } } } } elseif ($mode_fich_debug == "y") { fwrite($fich, "Adresse Mac non trouvee dans le LDAP.\n"); } } } $client["ip"][$compteur_clients] = $ip[0]; $client["parc"][$compteur_clients] = search_parcs($clienthostname[0]); $compteur_clients++; } else { // On controle quand meme si il y a d'autres noms dans le LDAP (pour affichage) if (!in_array($macaddr[0], $tab_recherche_ldap_faite)) { $list_computer = search_machines("(&(cn=*)(macAddress=$macaddr[0]))", "computers"); if (count($list_computer) > 0) { for ($loop = 0; $loop < count($list_computer); $loop++) { //echo " ".$list_computer[$loop]['cn']; if (($mode_debug == 'y') || (!in_array(strtolower($list_computer[$loop]['cn']), $liste_noms_ldap["$macaddr[0]"]))) { $liste_noms_ldap["$macaddr[0]"][] = strtolower($list_computer[$loop]['cn']); if ($mode_fich_debug == "y") { fwrite($fich, "\$liste_noms_ldap[\"$macaddr[0]\"][]=" . strtolower($list_computer[$loop]['cn']) . "\n"); } } } } elseif ($mode_fich_debug == "y") { fwrite($fich, "Adresse Mac non trouvee dans le LDAP.\n"); } } if (($mode_debug == 'y') || ((strtolower($clienthostname[0]) != 'unresolved') && (!in_array(strtolower($clienthostname[0]), $liste_noms_en_lease["$macaddr[0]"])))) { $liste_noms_en_lease["$macaddr[0]"][] = strtolower($clienthostname[0]); if ($mode_fich_debug == "y") { fwrite($fich, "\$liste_noms_en_lease[\"$macaddr[0]\"][]=" . strtolower($clienthostname[0]) . "\n"); } } // Et on met a jour l'IP en supposant que la derniere IP recue est la bonne $tmp_tab = array(); $tmp_tab = $client["macaddr"]; $tmp_tab = array_flip($tmp_tab); $indice = $tmp_tab[$macaddr[0]]; $liste_autres_ip[$macaddr[0]][] = $client['ip'][$indice]; $client['ip'][$indice] = $ip[0]; } } } } } if (is_array($client["ip"])) { array_multisort($client["hostname"], SORT_ASC, $client["ip"], SORT_ASC, $client["macaddr"], SORT_ASC, $client["parc"]); $client['liste_noms_en_lease'] = $liste_noms_en_lease; $client['liste_noms_ldap'] = $liste_noms_ldap; $client['liste_autres_ip'] = $liste_autres_ip; } else { $client = ""; } if ($mode_fich_debug == "y") { fwrite($fich, "=============================================\n"); fclose($fich); } return $client; } function my_dhcp_form_lease($parser) { $mode_debug = "n"; // Si on passe cette variable a 'y', passer la meme variable a 'y' dans my_parse_dhcpd_lease() require_once("includes/ldap.inc.php"); $content .= "\n"; $content .= "
\n"; $content .= "\n"; $header = "\n"; $header .="\n"; $header .="\n"; $header .="\n"; $header .="\n"; $header .="\n"; // $content .= "Tout cocher / Tout décocher\n"; $header .= "\n"; $header .="\n"; $content .= $header; $nbligne = 0; foreach ($parser["ip"] as $keys => $value) { if (!is_recorded_in_dhcp_database($parser["ip"][$keys], $parser["macaddr"][$keys], $parser["hostname"][$keys])) { $content .= "\n"; $content .="\n"; $content .="\n"; $content .="\n"; $content .="\n"; $content .="\n"; if ($nbligne++ == 10) { $content .=$header; $nbligne = 0; } } } $content .= "
\n" . gettext("Adresse IP"); $header .= "\n" . gettext("Adresse MAC"); $header .="\n" . gettext("Nom NETBIOS"); $header .="\n" . gettext("Parc(s)"); $header .="\n"; $header .= "\n"; $header .= "\n"; $header .= "\n" . gettext("Identifiants admin local"); $header .="
\n"; $content .= "\n"; if (($mode_debug == 'y') && (count($parser['liste_autres_ip'][$parser["macaddr"][$keys]]) > 0)) { for ($loop = 0; $loop < count($parser['liste_autres_ip'][$parser["macaddr"][$keys]]); $loop++) { $content .="
\n" . $parser['liste_autres_ip'][$parser["macaddr"][$keys]][$loop]; } } $content .= "
\n"; $content .= "\n"; ; $content .= $parser["macaddr"][$keys]; $content .= "\n"; $content .= "\n"; $content .= "\n"; if ((count($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]]) > 1) || (count($parser['liste_noms_ldap'][$parser["macaddr"][$keys]]) > 1) || ((isset($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]][0])) && (strtolower($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]][0]) != strtolower($parser["hostname"][$keys]))) || ((isset($parser['liste_noms_ldap'][$parser["macaddr"][$keys]][0])) && (strtolower($parser['liste_noms_ldap'][$parser["macaddr"][$keys]][0]) != strtolower($parser["hostname"][$keys]))) ) { $content .="
\n"; $content .="\n"; if (($mode_debug == 'y') || (count($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]]) > 1) || ((isset($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]][0])) && (strtolower($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]][0]) != strtolower($parser["hostname"][$keys])))) { $content .="\n"; $content .="\n"; $content .="\n"; $content .="\n"; } if (($mode_debug == 'y') || (count($parser['liste_noms_ldap'][$parser["macaddr"][$keys]]) > 1) || ((isset($parser['liste_noms_ldap'][$parser["macaddr"][$keys]][0])) && (strtolower($parser['liste_noms_ldap'][$parser["macaddr"][$keys]][0]) != strtolower($parser["hostname"][$keys])))) { $content .="\n"; $content .="\n"; $content .="\n"; $content .="\n"; } $content .="
Leases:\n"; for ($loop = 0; $loop < count($parser['liste_noms_en_lease'][$parser["macaddr"][$keys]]); $loop++) { $content .=$parser['liste_noms_en_lease'][$parser["macaddr"][$keys]][$loop] . "
\n"; } $content .="
Ldap:\n"; for ($loop = 0; $loop < count($parser['liste_noms_ldap'][$parser["macaddr"][$keys]]); $loop++) { $content .=$parser['liste_noms_ldap'][$parser["macaddr"][$keys]][$loop] . "
\n"; } $content .="
\n"; } $content .="
\n"; $showid = 0; $listaction = ""; // Est-ce que cette machine est integree ? if (count(search_machines("(cn=" . $parser["hostname"][$keys] . ")", "computers")) > 0) { if (isset($parser["parc"][$keys])) { foreach ($parser["parc"][$keys] as $keys2 => $value2) { $content.="" . $parser["parc"][$keys][$keys2]["cn"] . "
\n"; } } // ajouter a un parc dans lequel la machine n'est pas ? $content .= add_to_parc($parser["parc"][$keys], $keys); // est ce que la machine est integree au domaine ? if (count(search_machines("(uid=" . $parser["hostname"][$keys] . "$)", "computers")) > 0) { // $listaction .="
\n"; $content .="\n"; $content .="\n"; if ($showid) { $content .= "Admin local :
\n"; $content .= "Mot de passe :
\n"; } $content .="
\n"; $content .= "\n"; //$content .= "\n"; $content .= "\n"; $content .= "
\n"; return $content; } /** * MAKE a form with lease info get in dhcpd.lease * @Parametres $parser : tableau : ip mac hostname * @Return Affichage HTML d'un form a partir du dhcp.leases */ function dhcp_form_lease($parser) { require_once("includes/ldap.inc.php"); $content .= "\n"; $content .= "
\n"; $content .= "\n"; $content .="\n"; $content .= "
\n"; $content .= "Tout cocher / Tout décocher\n"; $content .= "\n"; foreach ($parser["ip"] as $keys => $value) { if (!is_recorded_in_dhcp_database($parser["ip"][$keys], $parser["macaddr"][$keys], $parser["hostname"][$keys])) { $content .= "\n"; $content .="\n"; } } $content .= "
\n" . gettext("Adresse IP"); $content .= "\n" . gettext("Adresse MAC"); $content .="\n" . gettext("Nom NETBIOS"); $content .="\n" . gettext("Parc(s)"); $content .="\n" . gettext("Action"); $content .= "
\n"; $content .= "\n"; $content .= "\n"; $content .= "\n"; $content .= "\n"; $content .= "\n"; $content .= "\n"; $content .="\n"; $showid = 0; $listaction = ""; // Est-ce que cette machine est integree ? if (count(search_machines("(cn=" . $parser["hostname"][$keys] . ")", "computers")) > 0) { if (isset($parser["parc"][$keys])) { foreach ($parser["parc"][$keys] as $keys2 => $value2) { $content.="" . $parser["parc"][$keys][$keys2]["cn"] . "
\n"; } } // ajouter a un parc dans lequel la machine n'est pas ? $content .= add_to_parc($parser["parc"][$keys], $keys); // est ce que la machine est integree au domaine ? if (count(search_machines("(uid=" . $parser["hostname"][$keys] . "$)", "computers")) > 0) { $listaction .="
\n"; $content .="\n"; $content .="\n"; if ($showid) { $content .= "Admin local :
\n"; $content .= "Mot de passe :
\n"; } $content .="
\n"; $content .= "\n"; //$content .= "\n"; $content .= "\n"; $content .= "
"; return $content; } /** * form to modify entry in dhcpd reservation * @Parametres $error : Message d'erreur * @Return Affichage HTML d'un form */ function form_existing_reservation() { require_once("includes/ldap.inc.php"); require_once ("ihm.inc.php"); require_once ("printers.inc.php"); // Recuperation des donnees dans la base SQL if (($_GET['order'] == "") || ($_GET['order'] == "ip")) { $query = "SELECT * FROM `se3_dhcp` ORDER BY INET_ATON(IP) ASC"; } else { $query = "SELECT * FROM `se3_dhcp` ORDER BY " . $_GET['order'] . " ASC"; } $result = mysql_query($query); //recup liste ip imprimantes $liste_imprimantes=search_imprimantes("printer-name=*","printers"); //$resultat=search_imprimantes("printer-name=$mpenc","printers"); for ($loopp=0; $loopp < count($liste_imprimantes); $loopp++) { $printer_uri = $liste_imprimantes[$loopp]['printer-uri']; $printer_name = $liste_imprimantes[$loopp]['printer-name']; //echo "liste imp : $printer_name $printer_uri" ; continue; } $clef = 0; $content .= "\n"; $content .= "
\n"; $content .= "\n"; $header = "\n"; $header .="\n"; $content .= $header; $nbligne = 0; while ($row = mysql_fetch_assoc($result)) { $content .= "\n"; $content .="\n"; if ($nbligne++ == 10) { $content .=$header; $nbligne = 0; } $clef++; } $content .= "
\n" . gettext("Adresse IP") . ""; $header .= "\n" . gettext("Adresse MAC") . ""; $header .="\n" . gettext("Nom NETBIOS") . ""; $header .="\n" . gettext("Parc(s)"); $header .="\n"; $header .= "\n"; $header .= "\n"; $header .= "\n" . gettext("identifiants pour l'acces distant"); $header .= "
\n"; $header .= "
\n"; $content .= "\n"; // $content .= "\n"; $content .= "\n"; $content .= "\n"; ; $content .= "\n"; $content .= "\n"; $content .= "\n"; for ($loopp=0; $loopp < count($liste_imprimantes); $loopp++) { $printer_uri = $liste_imprimantes[$loopp]['printer-uri']; $printer_name = $liste_imprimantes[$loopp]['printer-name']; //echo "liste imp : $printer_name $printer_uri" ; if (preg_match("/$row[ip]/", $printer_uri)) { $suisje_printer = "yes"; break; } else { $suisje_printer = "no" ; } } if ($suisje_printer=="yes") { $content.="
" . gettext("Imprimante $printer_name") . "\n"; } $content .="
\n"; $showid = 0; $listaction = ""; // Est-ce que cette machine est enregistree ? $parc[$clef] = search_parcs($row["name"]); if ((count(search_machines("(cn=" . $row["name"] . ")", "computers"))) > 0) { if (isset($parc[$clef])) { foreach ($parc[$clef] as $keys2 => $value2) { $content.="" . $parc[$clef][$keys2]["cn"] . "
\n"; } } // ajouter a un parc dans lequel la machine n'est pas ? $content .= add_to_parc($parc[$clef], $clef); // windows linux ou imprimante ? // est ce que la machine est integree au domaine ? if (count(search_machines("(uid=" . $row["name"] . "$)", "computers")) > 0) { $listaction .="
\n"; $content .="\n"; $content .="\n"; if ($showid) { $content .= "Admin local :
\n"; $content .= "Mot de passe :
\n"; } $content .="
\n"; $content .= "\n"; $content .= "\n"; $content .= "
"; return $content; } // Return select form whith parc where host is not recorded /** * Return select form whith parc where host is not recorded * @Parametres $parcs parc dans lequel on veut ajouter - $keys * @Return Affichage HTML d'un select avec la liste des parcs */ function add_to_parc($parcs, $keys) { require_once("includes/ldap.inc.php"); $liste_parcs = search_machines("objectclass=groupOfNames", "parcs"); if (count($liste_parcs)>0) { $ret .=""; } return $ret; } /** * renvoie l'ip si elle est libre ou une ip fixe libre dans le meme vlan * @Parametres $ip : Adresse IP a tester * @Return adresse ip libre */ function get_free_ip($ip) { include ("config.inc.php"); require_once ("ihm.inc.php"); $reseau = get_vlan($ip); $calcul_ip = floatval(sprintf("%u", ip2long($ip))); $ipmin = floatval(sprintf("%u", $reseau['ipmin'])); $ipmax = floatval(sprintf("%u", $reseau['ipmax'])); $gateway = floatval(sprintf("%u", $reseau['gateway'])); $begin_range = floatval(sprintf("%u", $reseau['begin_range'])); $end_range = floatval(sprintf("%u", $reseau['end_range'])); if ((reservation($ip)) or ($ip == long2ip($reseau['gateway'])) or (($calcul_ip >= $begin_range) and ($calcul_ip <= $end_range))) { $calcul_free = $reseau['ipmin']; while (floatval(sprintf("%u", $calcul_free)) <= $ipmax) { if ((fping(long2ip($calcul_free)) == 1) or (reservation(long2ip($calcul_free)) or ($calcul_free == $reseau['gateway']))) { $calcul_free++; } elseif ($calcul_free == $reseau['begin_range']) { $calcul_free = $reseau['end_range'] + 1; } else { // print long2ip($calcul_free) . "le coupable
"; return long2ip($calcul_free); $ipbuzy=1; return $ipbuzy; } } } else { // l'ip est libre return $ip; } } /** * renvoie les caracteristiques du vlan correspondant a l'ip * @Parametres $ip : Adresse IP a tester * @Return tableau associatif $reseau */ function get_vlan($ip) { include ("config.inc.php"); require_once ("ihm.inc.php"); if ($dhcp_vlan == 0) { return get_network(); } else { $reseau = get_network(); $calcul_inetaddr = ip2long($ip); foreach ($reseau as $key => $value) { if ($calcul_inetaddr == ($calcul_inetaddr & $value['broadcast'])) { print "L'ip est sur le vlan : $key
"; return $value; } } } } /** * renvoie les caracteristiques de tous vlan * @Parametre aucun * @Return $reseau[$vlan] tableau associatif avec les ip sous forme binaire */ function get_network() { include ("config.inc.php"); require_once ("fonc_outils.inc.php"); require_once ("ihm.inc.php"); if ($dhcp_vlan == 0) { $ifconfig = ifconfig(); $reseau['network'] = ip2long($ifconfig['network']); if (ip2long($dhcp_ip_min) > $reseau['network']) { $reseau['ipmin'] = ip2long($dhcp_ip_min); } else { $reseau['ipmin'] = $reseau['network'] + 51; $update_query = "UPDATE params SET value='" . long2ip($reseau['ipmin']) . "' WHERE name='dhcp_ip_min'"; mysql_query($update_query); } $reseau['mask'] = ip2long($ifconfig['mask']); $reseau['broadcast'] = ip2long($ifconfig['broadcast']); $reseau['ipmax'] = $reseau['broadcast'] - 1; $reseau['begin_range'] = ip2long($dhcp_begin_range); $reseau['end_range'] = ip2long($dhcp_end_range); $reseau['gateway'] = ip2long($dhcp_gateway); } else { for ($vlan = 0; $vlan <= $dhcp_vlan; $vlan++) { $nomvar = "dhcp_reseau_" . $vlan; if (isset($$nomvar)) { $reseau[$vlan]['network'] = ip2long($$nomvar); $nomvar = "dhcp_ip_min_" . $vlan; if (ip2long($$nomvar) > $reseau[$vlan]['network']) { $reseau[$vlan]['ipmin'] = ip2long($$nomvar); } else { $reseau[$vlan]['ipmin'] = $reseau[$vlan]['network'] + 51; $update_query = "UPDATE params SET value='" . long2ip($reseau[$vlan]['ipmin']) . "' WHERE name='dhcp_ip_min_" . $_POST['vlan'] . "'"; mysql_query($update_query); } $nomvar = "dhcp_masque_" . $vlan; $reseau[$vlan]['mask'] = ip2long($$nomvar); $reseau[$vlan]['broadcast'] = $reseau[$vlan]['network'] | ~$reseau[$vlan]['mask']; $reseau[$vlan]['ipmax'] = $reseau[$vlan]['broadcast'] - 1; $nomvar = "dhcp_begin_range_" . $vlan; $reseau[$vlan]['begin_range'] = ip2long($$nomvar); $nomvar = "dhcp_end_range_" . $vlan; $reseau[$vlan]['end_range'] = ip2long($$nomvar); $nomvar = "dhcp_gateway_" . $vlan; $reseau[$vlan]['gateway'] = ip2long($$nomvar); } } } return $reseau; } /** * Verifie si l'entree est dans la base SQL * @Parametres $ip - $mac - $hostname * @Return True - False */ function is_recorded_in_dhcp_database($ip, $mac, $hostname) { require_once ("ihm.inc.php"); // Recuperation des donnees dans la base SQL $query = "SELECT * from se3_dhcp where ip='$ip' and mac='$mac' and name='$hostname'"; $result = mysql_query($query); $resultat = mysql_fetch_assoc($result); if ($resultat == "") { return FALSE; } else { return TRUE; } } /** * Test la presence d'une adresse MAC dans la table se3_dhcp * @Parametres $mac * @Return True - False */ function registred($mac) { require_once ("ihm.inc.php"); $query = "SELECT * FROM `se3_dhcp` WHERE mac='$mac'"; $result = mysql_query($query); $resultat = mysql_fetch_assoc($result); if ($resultat == "") { return FALSE; } else { return TRUE; } } /** * Test la presence d'une adresse ip dans la table se3_dhcp * @Parametres $ip * @Return True - False */ function reservation($ip) { require_once ("ihm.inc.php"); $query = "SELECT * FROM `se3_dhcp` WHERE ip='$ip'"; $result = mysql_query($query); $resultat = mysql_fetch_assoc($result); if ($resultat == "") { return FALSE; } else { return TRUE; } } // add entry in se3_dhcp mysql table for reservation /** * add entry in se3_dhcp mysql table for reservation * @Parametres $ip - $mac - $name * @Return $ret */ function add_reservation($ip, $mac, $name) { require_once ("ihm.inc.php"); $ret=""; if (set_ip_in_lan($ip)) { $oldip= $ip; $ip = get_free_ip($ip); if ("$ip" == "") { $ret = gettext(" Attention : Impossible de réserver une ip dans ce vlan "); } else { $error = already_exist($ip, $name, $mac); if ($error == "") { $insert_query = "INSERT INTO `se3_dhcp` (`ip`, `mac`, `name`) VALUES ('$ip', '$mac', '$name')"; mysql_query($insert_query); exec("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh ldap $name $ip $mac $admin $adminpasswd"); if ($ip != $oldip) { $ret = gettext(" Attention : l'adresse choisie pour cette machine est déjà prise ou elle se situe dans la plage dynamique $name --> $oldip,recherche d'une adresse libre...
"); } $ret .= gettext("Mise en place d'une réservation pour la machine $name --> $ip"); } } } else { $ret = gettext(" Attention : l'addresse choisie pour cette machine n'est pas valide " . "$name --> $ip"); } return $ret; } /** * Test si une reservation existe deja pour cette machine * @Parametres $ip : ip de la machine - $name : nom de la machine - $mac : adresse mac de la machine * @Return Affichage HTML si la machine existe deja */ function already_exist($ip, $name, $mac) { require_once ("ihm.inc.php"); // Recuperation des donnees dans la base SQL $query = "SELECT * from se3_dhcp where ip='$ip'"; $result = mysql_query($query); $resultat = mysql_fetch_assoc($result); if ($resultat == "") { $error = ""; } else { $error = gettext("Cette adresse ip est déjà utilisée : " . $ip) . "\n
"; } $query = "SELECT * from se3_dhcp where mac='$mac'"; $result = mysql_query($query); $resultat = mysql_fetch_assoc($result); if ($resultat == "") { $error.=""; } else { $error.=gettext("Cette adresse mac est déjà utilisée : " . $mac) . "\n
"; } $query = "SELECT * from se3_dhcp where name='$name'"; $result = mysql_query($query); $resultat = mysql_fetch_assoc($result); if ($resultat == "") { $error.=""; } else { $error.=gettext("Ce nom est déjà utilisé : " . $name) . "\n
"; } return $error; } /** * Supprime une reservation * @Parametres $ip : Ip de la machine - $mac : Adresse mac de la machine - $name : Nom de la machine * @Return Message d'erreur SQL en cas de non suppression */ function suppr_reservation($ip, $mac, $name) { require_once ("ihm.inc.php"); $error = "Suppression de l'entrée pour la machine $name --> $ip
"; $suppr_query = "DELETE FROM `se3_dhcp` where `ip` = '$ip' AND `mac` = '$mac' AND `name` = '$name'"; mysql_query($suppr_query); return $error; } /** * renomme une machine sous linux * @Parametres $ip : Ip de la machine - $mac : Adresse mac de la machine - $name : Nom de la machine * @Return Message d'erreur SQL en cas de d'echec de l'update */ /** * renomme une machine sous linux * @Parametres $ip : Ip de la machine - $mac : Adresse mac de la machine - $name : Nom de la machine * @Return Message d'erreur SQL en cas de d'echec de l'update */ function renomme_linux($ip, $mac, $name) { require_once ("ihm.inc.php"); $ret = "Renommage du poste $ip
"; $scriptfile="/tmp/rename.sh"; if (file_exists($scriptfile)) unlink($scriptfile); $fich=fopen("$scriptfile","w+"); fwrite($fich,"#!/bin/bash echo \"$name\" > \"/etc/hostname\" invoke-rc.d hostname.sh stop invoke-rc.d hostname.sh start echo \" 127.0.0.1 localhost 127.0.1.1 $name # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters \" > \"/etc/hosts\" reboot"); fclose($fich); // Copie du script sur l'esclave avec scp exec ("/usr/bin/scp $scriptfile root@$ip:/tmp/", $AllOutput, $ReturnValue); // chmod +x du script bash exec ("ssh -l root $ip 'chmod +x $scriptfile ; $scriptfile'", $AllOutput, $ReturnValue); if ($ReturnValue==0) { echo "renommage distant en cours...."; } else { echo "renommage distant impossible "; } return $ret; } /** * renomme une reservation et met a jour l'enregistrement ldap * @Parametres $ip : Ip de la machine - $mac : Adresse mac de la machine - $name : Nom de la machine * @Return Message d'erreur SQL en cas de d'echec de l'update */ function renomme_reservation($ip, $mac, $name) { require_once ("ihm.inc.php"); $ret = "Modification de l'entrée pour la machine $name : $ip
"; $error = already_exist("ipbidon", $name, "macbidon"); if ($error == "") { $update_query = "UPDATE se3_dhcp SET name='$name' where `ip` = '$ip' AND `mac` = '$mac'"; mysql_query($update_query); $ret .= exec("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh ldap $name $ip $mac"); return $ret; } else { return $error; } } /** * change l'ip d'une reservation et met a jour l'enregistrement ldap * @Parametres $ip : Ip de la machine - $mac : Adresse mac de la machine - $name : Nom de la machine * @Return Message d'erreur SQL en cas de d'echec de l'update */ function change_ip_reservation($ip, $mac, $name) { require_once ("ihm.inc.php"); $ret = ""; if (set_ip_in_lan($ip)) { $oldip= $ip; $ip = get_free_ip($ip); if ("$ip" == "") { $ret = gettext("Impossible de reserver une ip dans ce vlan"); } else { $ret = already_exist($ip, "nombidon", "macbidon"); if ($ret == "") { $update_query = "UPDATE se3_dhcp SET ip='$ip' where `name` = '$name' AND `mac` = '$mac'"; mysql_query($update_query); $ret .= exec("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh ldap $name $ip $mac"); if ($ip != $oldip) { $ret .= gettext(" Attention : l'adresse choisie pour cette machine est déjà prise ou elle se situe dans la plage dynamique $name --> $oldip,recherche d'une adresse libre...
"); } $ret .= gettext("Réservation modifiée pour la machine $name : $ip"); } } } else { $ret = gettext("Cette addresse n'est pas valide : " . $ip); } return $ret; } /** * Indique l'etat du serveur DHCP * @Parametres * @Return Affichage HTML sur l'etat */ function dhcpd_status() { exec("sudo /usr/share/se3/scripts/makedhcpdconf state", $ret); if ($ret[0] == "1") { $content .= gettext("Le serveur DHCP est : ") . "" . gettext("actif") . ""; } else { $content .= gettext("Le serveur DHCP est : ") . "" . gettext("inactif") . ""; } return $content; } /** * Redemarre le serveur DHCP * @Parametres * MongoUpdateBatch@Return */ function dhcpd_restart() { exec("sudo /usr/share/se3/scripts/makedhcpdconf", $ret); } /** * Stop le serveur DHCP * @Parametres * MongoUpdateBatch@Return */ function dhcpd_stop() { exec("sudo /usr/share/se3/scripts/makedhcpdconf stop", $ret); } /** * Valide le nom d'une machine * @Parametres $nom : Nom a valider * @Return 0 si faux - 1 si Ok */ function valid_name($nom) { $nom = strtoupper($nom); $l = strlen($nom); if ($l == 0) { print gettext("
le nom doit contenir au moins une lettre"); return 0; } if ($l > 63) { print gettext("
le nom $nom ne doit pas dépasser 63 caractères"); return 0; } for ($i = 0; $i < $l; $i++) { $c = substr($nom, $i, 1); if (!preg_match("/[a-zA-Z0-9_-]/", $c, $tab_err)) { print gettext("
caractère $c incorrect dans hostname $nom "); return 0; } } $prem = substr($nom, 0, 1); if (!preg_match("/[a-zA-Z0-9]/", $prem, $tab_err)) { print gettext("
le nom $nom doit commencer par une lettre ou un chiffre"); return 0; } $der = substr($nom, $l - 1, 1); if (!preg_match("/[a-zA-Z0-9]/", $der, $tab_err)) { print gettext("
le nom $nom doit finir par une lettre ou un chiffre"); return 0; } return 1; } /** * validation adresse MAC * @Parametres $mac adresse MAC a tester * @Return True si OK - False si adresse MAC pas correcte */ function valid_mac($mac) { $tab_mac = explode(':', $mac); /* transforme adresse mac en tableau de 6 octets */ if (count($tab_mac) <> 6) { print gettext("
Attention : une adresse MAC doit avoir la forme xx:xx:xx:xx:xx:xx"); return(0); } $mac = strtoupper($mac); $l = strlen($mac); for ($i = 0; $i < $l; $i++) { $c = substr($mac, $i, 1); if (!preg_match("/[A-F0-9:]/", $c, $tab_err)) { print gettext("
caractère $c incorrect dans adresse mac $mac "); return 0; } } return 1; } /** * Retourne une adresse MAC formatee en completant par des zeros a gauche * @Parametres $ch_mac: Adresse MAC a traiter * @Return Retourne une adresse MAC formatee en completant par des zeros a gauche, sinon retourne chaine vide */ function format_mac($ch_mac) { $ch_mac = strtoupper($ch_mac); $mac_retour = ""; $tab_mac = explode(':', $ch_mac); /* transforme l'adresse mac en tableau de 4 chaines */ if (count($tab_mac) <> 6) { $z = count($tab_mac); print gettext("
Attention : une adresse mac doit avoir la forme xx:xx:xx:xx:xx:xx"); return(""); } else { for ($i = 0; $i < 6; $i++) { while (strlen($tab_mac[$i]) < 2) $tab_mac[$i] = '0' . $tab_mac[$i]; $mac_retour = $mac_retour . $tab_mac[$i]; if ($i < 5) $mac_retour = $mac_retour . ':'; /* on ajoute un point sauf au dernier */ } /* verification caracteres valides */ if (!preg_match("/[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}/", $mac_retour, $tab_err)) { print gettext("
Caractères interdits dans $mac_retour"); return(""); } return($mac_retour); } } /** * Validation liste hostname * @Parametres $liste_name Nom separes par des espaces * @Return False et message d'erreur - True si Ok * @note la liste doit etre une suite de noms de host separes par un espace */ function valid_list_name($liste_name) { $liste_name = trim($liste_name); /* supprime espaces a droite et a gauche */ if ($liste_name == "") return 1; $tab_name = explode(' ', $liste_name); /* transforme la liste de noms en tableau de noms */ $nb_name = count($tab_name); for ($i = 0; $i < $nb_name; $i++) { $name = $tab_name[$i]; if (!valid_name($name)) { print gettext("nom $name incorrect"); return 0; } } return 1; } /** * Importe dans la base SQL les imports a partit d'un csv * @Parametres $tableau : l'import cvs des adresses IP, Nom, MAC * @Return Affichage HTML du resultat */ function traite_tableau($tableau) { $nb_lignes = count($tableau); $separ = ";"; $z = 0; $erreur = 0; // si erreur est vrai en sortie de boucle, annuler transaction $faux_nom = 1; // si jamais le nom n'est pas renseigne, on l'invente // avec un numero while ($z < $nb_lignes) { // sauter eventuelle ligne vide // c'est souvent le cas pour la derniere ligne du presse-papier if (trim($tableau[$z]) == "") break; // decoupage de chaque ligne a partir du separateur | $tab_ligne = explode($separ, $tableau[$z]); $ip = trim($tab_ligne[0]); if (!set_ip_in_lan($ip)) { print("
"); print gettext("Erreur sur adresse ip : $tab_ligne[0]"); $ligne = $z + 1; print(" Ligne n $ligne"); $erreur = 1; $z++; continue; } // $ip=format_ip($ip); if ($ip == "") { print("
"); print gettext("Erreur sur adresse ip : $tab_ligne[0]"); $ligne = $z + 1; print gettext(" Ligne n $ligne"); $erreur = 1; $z++; continue; } $nom = trim($tab_ligne[1]); if (!valid_name($nom)) { print("
"); print gettext("Erreur sur hostname : $tab_ligne[1] "); $ligne = $z + 1; print gettext("Ligne n $ligne"); $erreur = 1; $z++; continue; } $mac = trim($tab_ligne[2]); if (!valid_mac($mac)) { print("
"); print gettext("Erreur sur adresse mac : $tab_ligne[2] "); $ligne = $z + 1; print gettext("Ligne n $ligne"); $erreur = 1; $z++; continue; } $mac = format_mac($mac); if ($mac == "") { print("
"); print gettext("Erreur sur adresse mac : $tab_ligne[2] "); $ligne = $z + 1; print gettext("Ligne n $ligne"); $erreur = 1; $z++; continue; } require_once ("ihm.inc.php"); // Recuperation des donnees dans la base SQL $query = mysql_query("SELECT * from se3_dhcp where mac='$mac'"); $v_count = mysql_num_rows($query); if ($v_count <> 0) { print("
"); print gettext("Adresse mac $mac déja utilisée "); $ligne = $z + 1; print gettext(" Ligne n $ligne"); $erreur = 1; $z++; continue; } $query = mysql_query("SELECT * from se3_dhcp where name='$nom'"); $v_count = mysql_num_rows($query); if ($v_count <> 0) { // if (strtolower($query) == strtolower($nom)) print("
"); print gettext("Hostname $nom déja utilisé "); $ligne = $z + 1; print gettext(" Ligne n $ligne"); $erreur = 1; $z++; continue; } $nominmaj = strtolower($nom); $query = mysql_query("SELECT * from se3_dhcp where name='$nominmaj'"); $v_count = mysql_num_rows($query); if ($v_count <> 0) { print("
"); print gettext("Hostname $nominmaj déja utilisé "); $ligne = $z + 1; print gettext(" Ligne n $ligne"); $erreur = 1; $z++; continue; } if ($nom == "") { $nom = "X" . $faux_nom; $faux_nom++; } if (!valid_name($nom)) { print("
"); print gettext("Nom $nom incorrect "); $ligne = $z + 1; print gettext(" Ligne n $ligne"); $erreur = 1; $z++; continue; } // tout est ok, on insere la ligne add_reservation($ip, $mac, $nom); $z++; if ($erreur) { print("

" . gettext("Erreurs durant le traitement") . "
"); } } print gettext("Traitement terminé
"); print gettext("Nb de lignes traitées : $z"); dhcpd_restart(); $mac = ""; $ip = ""; $nom = ""; } /** * Fonctions: Test la presence de dhcp_vlan dans la table params et en retourne la valeur * @Parametres $dhcp_vlan_valeur : Contenu de dhcp_vlan * @Return - 0 si pas de vlan - n nombre de vlan */ function dhcp_vlan_test() { include ("config.inc.php"); // si la variable dhcp_vlan n'est pas definie on cree l'entree dans la base sql if ($dhcp_vlan == "") { $resultat = mysql_query("INSERT into params set id='NULL', name='dhcp_vlan', value='0', srv_id='0',descr='Nombre de vlan',cat='7'"); return 0; } else { return $dhcp_vlan; } } /** * Verifie l'existance des champs dans la table params pour les vlans * @Parametres $nom_champ : Nom du champ a tester * MongoUpdateBatch@Return */ function dhcp_vlan_champ($nom_champ) { require_once ("config.inc.php"); if ($$nom_champ == "") { $resultat = mysql_query("INSERT into params set id='NULL', name='$nom_champ', value='', srv_id='',descr='',cat='7'"); } } /** * rename domain client * @Parametres $ip - $mac - $name * @Return $ret */ function renomme_domaine($ip, $oldname, $name) { require_once ("ihm.inc.php"); $ret = "
\n"; $ret .= exec("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh renomme $name $ip $oldname adminse3 $xppass") . "
\n"; $ret .= "

Attention : Si l'emetteur ne reboote pas tout seul en administrateur local, ouvrez une session administrateur local et lancez
c:\\netinst\\shutdown.cmd

\n"; return $ret; } /** * integrate domain client * @Parametres $ip - $mac - $name [ $admin - $adminpasswd ] * @Return $ret */ function integre_domaine($ip, $mac, $name, $admin, $adminpasswd) { require_once ("ihm.inc.php"); if ($adminpasswd == "xxx") { $adminpasswd = ""; } //doit-on faire verifier l'existence dans le ldap ? $ret = "
\n"; $ret .= exec("/usr/bin/sudo /usr/share/se3/scripts/integreDomaine.sh rejoint $name $ip $mac $admin $adminpasswd") . "
\n"; $ret .= "

Attention : si l'emetteur ne reboote pas tout seul en administrateur local, ouvrez une session administrateur local et lancez
c:\\netinst\\shutdown.cmd

\n"; return $ret; } ?>