Download | Plain Text | No Line Numbers
- --- html/functions.inc.php.orig 2010-05-24 18:34:26.000000000 +0200
- +++ html/functions.inc.php 2010-05-24 18:40:33.000000000 +0200
- @@ -1293,4 +1293,6 @@
- return false;
- }
-
- +require_once($confixx_homeDir . '/udmedia.inc.php');
- +
- ?>
- --- /dev/null 2012-02-21 15:24:06.016184274 +0100
- +++ udmedia.inc.php 2012-09-24 14:02:03.000000000 +0200
- @@ -0,0 +1,275 @@
- +<?php
- +
- +/*
- + * get all destination from email: $user@$domain of $customer on $serverid
- + */
- +function email_get_destination($user, $domain, $customer, $serverid)
- +{
- + if ($user instanceof SQLString)
- + $user = $user->GetValue();
- + if ($domain instanceof SQLString)
- + $domain = $domain->GetValue();
- + if ($customer instanceof SQLString)
- + $customer = $customer->GetValue();
- +
- + $dbres = safe_query2("
- + SELECT fwd.pop3
- + FROM email e
- + JOIN email_forward fwd
- + ON (e.ident = fwd.email_ident AND e.kunde = fwd.kunde AND e.server_id = fwd.server_id)
- + WHERE e.prefix = ? AND e.domain = ? AND e.kunde = ? AND e.server_id = '".$serverid."'",
- + new SQLString($user),
- + new SQLString($domain),
- + new SQLString($customer)
- + );
- +
- + $result = array();
- + while($row = db_fetch_array($dbres))
- + $result[] = $row['pop3'];
- + return $result;
- +}
- +
- +/*
- + * reverse of email_get_destination
- + * returns all mail addresses that forwards to $user
- + */
- +function email_get_source($user, $domain, $customer, $serverid)
- +{
- + if ($user instanceof SQLString)
- + $user = $user->GetValue();
- + if ($domain instanceof SQLString)
- + $domain = $domain->GetValue();
- + if ($customer instanceof SQLString)
- + $customer = $customer->GetValue();
- + $email = (empty($domain)) ? $user : $user . '@' . $domain;
- +
- + $dbres = safe_query2("
- + SELECT e.prefix, e.domain
- + FROM email e
- + JOIN email_forward fwd
- + ON (e.ident = fwd.email_ident AND e.kunde = fwd.kunde AND e.server_id = fwd.server_id)
- + WHERE fwd.pop3 = ? AND e.kunde = ? AND e.server_id = '".$serverid."'",
- + new SQLString($email),
- + new SQLString($customer)
- + );
- +
- + $result = array();
- + while($row = db_fetch_array($dbres))
- + {
- + $result[] = array(
- + 'prefix' => $row['prefix'],
- + 'domain' => $row['domain']
- + );
- + }
- + return $result;
- +}
- +
- +/*
- + * walks back the email address to its origin (may be muliple)
- + * format:
- + * array(
- + * array('u1@dom', 'u1fwd1@dom', 'u1fwd2@dom', 'dest@dom'),
- + * array('u2@dom', 'u2fwd1@dom', ...),
- + * ...
- + * )
- + */
- +function email_walkback($user, $domain, $customer, $serverid, $routes = array())
- +{
- + if ($user instanceof SQLString)
- + $user = $user->GetValue();
- + if ($domain instanceof SQLString)
- + $domain = $domain->GetValue();
- + if ($customer instanceof SQLString)
- + $customer = $customer->GetValue();
- + $email = (empty($domain)) ? $user : $user . '@' . $domain;
- +
- + /* add the looked up address to the route too */
- + if (empty($routes))
- + $routes[] = $email;
- +
- + $sources = email_get_source($user, $domain, $customer, $serverid);
- + /* if address has no more sources (= forwards to this address) return the route */
- + if (empty($sources))
- + return array($routes);
- +
- + $result = array();
- + foreach($sources as $source)
- + {
- + $routescpy = $routes;
- + array_unshift($routescpy, $source['prefix'] . '@' . $source['domain']);
- + $tmpres = email_walkback($source['prefix'], $source['domain'], $customer, $serverid, $routescpy);
- + if (is_array($tmpres[0]))
- + $result = array_merge($result, $tmpres);
- + else
- + $result[] = $tmpres;
- + }
- + return $result;
- +}
- +
- +/*
- + * walks the email address to its destination (may be multiple)
- + * format:
- + * array(
- + * array('f1@dom', 'f2@dom', 'dest1@dom'),
- + * array('f1@dom', 'f3@dom', 'dest2@dom'),
- + * ...
- + * )
- + */
- +function email_walkforward($user, $domain, $customer, $serverid, $routes = array())
- +{
- + if ($user instanceof SQLString)
- + $user = $user->GetValue();
- + if ($domain instanceof SQLString)
- + $domain = $domain->GetValue();
- + if ($customer instanceof SQLString)
- + $customer = $customer->GetValue();
- + $email = (empty($domain)) ? $user : $user . '@' . $domain;
- +
- + /* add the looked up address to the route too */
- + if (empty($routes))
- + $routes[] = $email;
- +
- + $dests = email_get_destination($user, $domain, $customer, $serverid);
- + if (empty($dests))
- + return array($routes);
- +
- + $result = array();
- + foreach($dests as $dest)
- + {
- + $routescpy = $routes;
- + array_push($routescpy, $dest);
- +
- + list($dest_user, $dest_domain) = explode('@', $dest . '@', 2);
- + $tmpres = email_walkforward($dest_user, $dest_domain, $customer, $serverid, $routescpy);
- + if (is_array($tmpres[0]))
- + $result = array_merge($result, $tmpres);
- + else
- + $result[] = $tmpres;
- + }
- + return $result;
- +}
- +
- +/*
- + * simple loop detection algorithm:
- + * - walk back the source address to its origins
- + * - walk forward the destination address to its final destinations
- + * - if an email address appears in both arrays we have a loop
- + *
- + * returns the found mail loops as array
- + */
- +function email_checkloop($source_user, $source_domain,
- + $dest_user, $dest_domain, $customer, $serverid)
- +{
- + $origins = email_walkback($source_user, $source_domain, $customer, $serverid);
- + $dests = email_walkforward($dest_user, $dest_domain, $customer, $serverid);
- +
- + $result = array();
- + foreach($origins as $origin)
- + {
- + $loop = array();
- + foreach($dests as $dest)
- + {
- + $intersect = array_intersect($origin, $dest);
- + if (empty($intersect))
- + continue;
- +
- + $loop[] = $source_user . '@' . $source_domain;
- + for($i = 0; $i < count($dest); ++$i)
- + {
- + $loop[] = $dest[$i];
- + if ($dest[$i] == current($intersect))
- + break;
- + }
- +
- + /* start at index of intersection of origin */
- + for($i = key($intersect) + 1; $i < count($origin); ++$i)
- + {
- + $loop[] = $origin[$i];
- + if ($origin[$i] == $s[0] . '@' . $s[1])
- + break;
- + }
- + break;
- + }
- +
- + if (!empty($loop))
- + $result[] = $loop;
- + }
- + return $result;
- +}
- +
- +#-------------------------------------------------------------------------------
- +
- +$lang_udmedia['en']['mailloop'] = "You will create at least one e-mail loop with this forward <i>%s</i>:";
- +$lang_udmedia['de']['mailloop'] = "Sie erzeugen mindestens eine E-Mail-Schleife mit dieser Weiterleitung <i>%s</i>:";
- +
- +function ltextud($identifier)
- +{
- + global $lang_udmedia;
- + global $shortlang;
- +
- + $text = "";
- + if (isset($shortlang) && isset($lang_udmedia[$shortlang][$identifier]))
- + $text = $lang_udmedia[$shortlang][$identifier];
- + else if (isset($lang_udmedia['en'][$identifier]))
- + $text = $lang_udmedia['en'][$identifier];
- +
- + $args = func_get_args();
- + array_shift($args);
- + if (!empty($text) && count($args))
- + $text = vsprintf($text, $args);
- +
- + return $text;
- +}
- +
- +#-------------------------------------------------------------------------------
- +
- +function call_user_func_array_reffix($name, &$args)
- +{
- + $refl = null;
- + if (is_array($name) && count($name) == 2 && is_object($name[0]) && is_string($name[1]))
- + $refl = new ReflectionMethod(get_class($name[0]), $name[1]);
- + else if (is_string($name))
- + $refl = new ReflectionFunction($name);
- + if ($refl == null)
- + return array();
- +
- + $ret = array();
- + $params = $refl->getParameters();
- + for($i = 0; $i < count($args); ++$i)
- + {
- + if (isset($params[$i]) && $params[$i]->isPassedByReference())
- + $ret[$i] = &$args[$i];
- + else
- + $ret[$i] = $args[$i];
- + }
- + return $ret;
- +}
- +
- +function call_user_func_array2($name, $args)
- +{
- + return call_user_func_array($name, call_user_func_array_reffix($name, $args));
- +}
- +
- +#-------------------------------------------------------------------------------
- +
- +if (!function_exists('session_register'))
- +{
- + function session_register()
- + {
- + $args = func_get_args();
- + foreach($args as $key)
- + $_SESSION[$key] = $GLOBALS[$key];
- + }
- +
- + function session_is_registered($key)
- + {
- + return isset($_SESSION[$key]);
- + }
- +
- + function session_unregister($key)
- + {
- + unset($_SESSION[$key]);
- + }
- +}
- +
- +?>
-