array(NS1, NS2))); try { $result = $r->query($domaine[1], 'MX'); } catch(Net_DNS2_Exception $e) { return false; } if ($result->answer) { return true; } else { return false; } } else { return true; } } // postmap command function UpdateVirtualDB() { global $dbco; try { $selectcmd = $dbco->prepare("SELECT status, alias, email FROM ".DBTABLEPREFIX."alias WHERE status > 0 ORDER BY alias ASC"); $selectcmd->execute(); } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } $file_content=null; while($alias_db = $selectcmd->fetch()) { if ($alias_db['status'] == 5) { $file_content .= $alias_db['alias'].' '.$alias_db['email']."\n"; } else if ($alias_db['status'] == 3) { $file_content .= $alias_db['alias']." devnull\n"; } } $alias_file=fopen(FICHIERALIAS,'w'); fputs($alias_file, $file_content); fclose($alias_file); exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return); } // add new alias function AjouterAlias($status, $alias,$email, $life, $comment) { global $dbco; $dateCreat=date('Y-m-d H:i:s'); if ($life == 0) { $dateExpir=NULL; } else { $dateExpir=date('Y-m-d H:i:s', time()+$life); } try { $insertcmd = $dbco->prepare("INSERT INTO ".DBTABLEPREFIX."alias (status, alias, email, dateCreat, dateExpir, comment) VALUES (:status, :alias, :email, :dateCreat, :dateExpir, :comment)"); $insertcmd->bindParam('status', $status, PDO::PARAM_INT); $insertcmd->bindParam('alias', $alias, PDO::PARAM_STR); $insertcmd->bindParam('email', $email, PDO::PARAM_STR); $insertcmd->bindParam('dateCreat', $dateCreat, PDO::PARAM_STR); $insertcmd->bindParam('dateExpir', $dateExpir, PDO::PARAM_STR); $insertcmd->bindParam('comment', $comment, PDO::PARAM_STR); $insertcmd->execute(); } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } UpdateVirtualDB(); return $dbco->lastInsertId(); } // delete email function DeleteEmail($email) { global $dbco; if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."'")->fetchColumn() != 0) { try { $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE email = :email"); $deletecmd->bindParam('email', $email, PDO::PARAM_STR); $deletecmd->execute(); echo '
'.$email.' '._('has been deleted with all these aliases').'.
'; } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } } else { echo '
'._('Erreur').' : '.$email.' '._('has not been deleted').'.
'; } UpdateVirtualDB(); } function AddBlacklistEmail($email) { $contenu = '/^'.$email.'$/'; $fichier = fopen(BLACKLIST, 'a'); fwrite($fichier, $contenu."\n"); fclose($fichier); echo '
La mention '.$contenu.' a été ajouté au fichier de blackliste '.BLACKLIST.'
'; } // delete alias function DeleteAlias($id, $alias_full) { global $dbco; if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE alias = '".$alias_full."' AND id = ".$id)->fetchColumn() != 0) { try { $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE id = :id AND alias = :alias_full"); $deletecmd->bindParam('id', $id, PDO::PARAM_INT); $deletecmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); $deletecmd->execute(); echo '
'.$alias_full.' '._('has been deleted').'
'; } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } } else { echo '
'._('Error: email trash unknown').'
'; } UpdateVirtualDB(); } // enable alias function EnableAlias($id, $alias_full, $email) { global $dbco; if ($id == null) { $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE email = :email AND alias = :alias_full"); $selectcmd->bindParam('email', $email, PDO::PARAM_STR); } else { $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE id = :id AND alias = :alias_full"); $selectcmd->bindParam('id', $id, PDO::PARAM_INT); } $selectcmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); $selectcmd->execute(); $alias_fetch = $selectcmd->fetch(); if (! $alias_fetch) { echo '
'._('Error: Can not find this trash email').'
'; } else if ($alias_fetch['status'] == 3) { UpdateStatusAlias($alias_fetch['id'], $alias_full, 5); echo '
'._('The reception on').' '.$alias_full.' '._('is active again').'.
'; } else if ($alias_fetch['status'] == 5) { echo '
'._('The reception on').' '.$alias_full.' '._('is already active').'.
'; } else if ($alias_fetch['status'] == 0) { echo '
'._('The reception on').' '.$alias_full.''; } else { echo '
'._('Error: unknown status').'
'; } UpdateVirtualDB(); } // disable alias function DisableAlias($id, $alias_full, $email) { global $dbco; if ($id == null) { $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE email = :email AND alias = :alias_full"); $selectcmd->bindParam('email', $email, PDO::PARAM_STR); } else { $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE id = :id AND alias = :alias_full"); $selectcmd->bindParam('id', $id, PDO::PARAM_INT); } $selectcmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); $selectcmd->execute(); $alias_fetch = $selectcmd->fetch(); if (! $alias_fetch) { echo '
'._('Error: Can not find this trash email').'
'; } else if ($alias_fetch['status'] == 5) { UpdateStatusAlias($alias_fetch['id'], $alias_full, 3); echo '
'._('The reception on').' '.$alias_full.' '._('is now suspended').'.
'; } else if ($alias_fetch['status'] == 3) { echo '
'._('The reception on').' '.$alias_full.' '._('is already suspended').'.
'; } else if ($alias_fetch['status'] == 0) { echo '
'._('The reception on').' '.$alias_full.' '._('can not be suspended because it has not been activated yet').'.
'; } else { echo '
'._('Error: unknown status').'
'; } UpdateVirtualDB(); } // update alias status function UpdateStatusAlias($id, $alias_full, $status) { global $dbco; try { $updatecmd = $dbco->prepare("UPDATE ".DBTABLEPREFIX."alias SET status = $status WHERE id = :id AND alias = :alias_full"); $updatecmd->bindParam('id', $id, PDO::PARAM_INT); $updatecmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); $updatecmd->execute(); } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } UpdateVirtualDB(); } // parse file for blacklist and aliasdeny function parseFileRegex($file, $chaine) { $return=false; $handle = fopen($file, 'r'); while (!feof($handle)) { $buffer = fgets($handle); $buffer = str_replace("\n", "", $buffer); if ($buffer) { if (!preg_match('/^(#|$|;)/', $buffer) && preg_match($buffer, $chaine)) { $return=true; break; } } } fclose($handle); return $return; } // check blacklistemail function BlacklistEmail($email) { if (defined('BLACKLIST')) { return parseFileRegex(BLACKLIST, $email); } else { return false; } } // check aliasdeny function AliasDeny($alias) { if (defined('ALIASDENY')) { return parseFileRegex(ALIASDENY, $alias); } else { return false; } } // list alias function ListeAlias($email) { global $dbco; try { $selectcmd = $dbco->prepare("SELECT id, status, alias, dateCreat, dateExpir, comment FROM ".DBTABLEPREFIX."alias WHERE email = :email AND status > 0 ORDER BY status DESC"); $selectcmd->bindParam('email', $email, PDO::PARAM_STR); $selectcmd->execute(); } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } $nb_alias=0; $nb_alias_disable=0; $message= "## "._('List trash email activate')." : \n\n"; while($alias_db = $selectcmd->fetch()) { if ($alias_db['status'] == 3 && $nb_alias_disable == 0) { $message.= "## "._('List trash email disable')." : \n\n"; } $message.=" * ".$alias_db['alias']." "._('Create ')." ".$alias_db['dateCreat']; if ($alias_db['dateExpir']) { $message.=" "._('and expires on')." ".$alias_db['dateExpir']; } $message.="\n"; if ($alias_db['comment']) { $message.="\t"._('Comment :')." ".$alias_db['comment']."\n"; } if ($alias_db['status'] == 5) { $message.="\t"._('Disable :')." ".urlGen('disable',$alias_db['id'],$alias_db['alias'])."\n"; $nb_alias++; } else { $message.="\t"._('Activate :')." ".urlGen('enable',$alias_db['id'],$alias_db['alias'])."\n"; $nb_alias_disable++; } $message.="\t"._('Delete :')." ".urlGen('delete',$alias_db['id'],$alias_db['alias'])."\n\n"; } $nb_alias_total = $nb_alias + $nb_alias_disable; if ($nb_alias_total == 0) { return false; } else { SendEmail($email,_('List trash email'),$message); return true; } } function SendEmail($recipient, $sujet, $message) { $header = "From: ".EMAILFROM."\n"; $header.= "MIME-Version: 1.0\n"; /* if (preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $recipient)) { $header = str_replace("\n", "\r\n", $header); $message = str_replace("\n", "\r\n", $header); } */ $message="Bonjour,\n\n".$message."\n\n". mail($recipient,EMAILTAGSUJET.' '.$sujet,$message,$header); } function urlGen($act,$id,$alias_full) { $idUrl=base64_encode($id.';'.$alias_full); if (URLREWRITE_START && URLREWRITE_MIDDLE && URLREWRITE_END) { return URLREWRITE_START.$act.URLREWRITE_MIDDLE.$idUrl.URLREWRITE_END; } else { return URLPAGE."?act=".$act."&value=".$idUrl; } } function urlUnGen($get_value) { $explode_get_value = explode(';', base64_decode($get_value)); $return['id']=$explode_get_value[0]; $return['alias_full']=$explode_get_value[1]; return $return; } // Source http://css-tricks.com/serious-form-security/ function StripCleanToHtml($s){ // Restores the added slashes (ie.: " I\'m John " for security in output, and escapes them in htmlentities(ie.: " etc.) // Also strips any tags it may encouter // Use: Anything that shouldn't contain html (pretty much everything that is not a textarea) return htmlentities(trim(strip_tags(stripslashes($s))), ENT_NOQUOTES, "UTF-8"); } function CleanToHtml($s){ // Restores the added slashes (ie.: " I\'m John " for security in output, and escapes them in htmlentities(ie.: " etc.) // It preserves any tags in that they are encoded aswell (like <html>) // As an extra security, if people would try to inject tags that would become tags after stripping away bad characters, // we do still strip tags but only after htmlentities, so any genuine code examples will stay // Use: For input fields that may contain html, like a textarea return strip_tags(htmlentities(trim(stripslashes($s))), ENT_NOQUOTES, "UTF-8"); } ////////////////// // Admin function ////////////////// function CheckUpdate() { if (CHECKUPDATE) { if (! is_file(DATA.'/checkupdate') || filemtime(DATA.'/checkupdate') + CHECKUPDATE < time()) { $ep_get_version = @file_get_contents('http://poubelle.zici.fr/ep_checkupdate'); $ep_version_file=fopen(DATA.'/checkupdate','w'); fputs($ep_version_file, $ep_get_version); fclose($ep_version_file); if (DEBUG) { echo 'ep_checkupdate_downloaded : '.file_get_contents(DATA.'/checkupdate').'\n'; } } $file_current_version = trim(file_get_contents(DATA.'/checkupdate')); if ($file_current_version != '' && $file_current_version != VERSION) { return '

Upgrade note: Your version is in '.VERSION.' while the current version is in '.$file_current_version.'

'; } else { return false; } } } function LifeExpire() { global $dbco; try { $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE dateExpir IS NOT NULL AND dateExpir < '".date('Y-m-d H:i:s')."'"); $deletecmd->execute(); } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } } // Vérifie que le domaine de l'alias est bien dans la configuration function domainePresent($postDom) { $domains = explode(';', DOMAIN); $return=true; if (count($domains) == 1) { if (!preg_match('#'.$postDom.'#',DOMAIN)) { $return=false; } } else { foreach ($domains as $one_domain) { if (!preg_match('#'.$postDom.'#',$one_domain)) { $return=false; } } } return $return; } // Vérifie que l'email n'est pas un alias avec un domain "poubelle" (éviter boucle forward) function emailIsAlias($postemail) { $domains = explode(';', DOMAIN); $return=false; if (count($domains) == 1) { if (preg_match('#'.DOMAIN.'$#',$postemail)) { $return=true; } } else { foreach ($domains as $one_domain) { if (preg_match('#'.$one_domain.'$#',$postemail)) { $return=true; } } } return $return; } function get_ip() { // IP si internet partagé if (isset($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } // IP derrière un proxy elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } // Sinon : IP normale else { return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''); } } // Fonction langues : function languesSwitch() { echo '
fr it en
'; } function lang2locale($langue) { global $langueEtLocalDispo; if ($langueEtLocalDispo[$langue] != '') { return $langueEtLocalDispo[$langue]; } else { // par défaut return 'en_US'; } } function locale2lang($localeRecherche) { global $langueEtLocalDispo; foreach($langueEtLocalDispo as $code=>$locale) { if ($locale == $localeRecherche) { return $code; break; } } // par défaut return 'en'; } // Ajoute la langue à une URL qui n'en a pas function addLang2url($lang) { global $_SERVER; $URIexplode=explode('?', $_SERVER['REQUEST_URI']); if ($URIexplode[1] != '') { return $URIexplode[0].$URIexplode[1].'&langue='.$lang; } else { return $URIexplode[0].'?langue='.$lang; } } function replaceLang2url($lang) { global $_SERVER; $URIexplode=explode('?', $_SERVER['REQUEST_URI']); $debutUrl=substr($URIexplode[0], 0, -langCountChar($URIexplode[0])); if ($URIexplode[1] != '') { return $debutUrl.$lang.'?'.$URIexplode[1]; } else { return $debutUrl.$lang; } } function langCountChar($url) { // $url reçu c'est l'URL avant la query : ?machin=1 if (preg_match('#/sr-Cyrl-ME$#',$url)) { return 10; } elseif (preg_match('#/[a-z]{2}-[A-Z]{2}$#',$url)) { return 5; } elseif (preg_match('#/[a-z]{3}-[A-Z]{2}$#',$url)) { return 6; } elseif (preg_match('#/[a-z]{3}$#',$url)) { return 3; } elseif (preg_match('#/[a-z]{2}$#',$url)) { return 2; } } ?>