steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr kolabfilter.php, NONE, 1.1 misc.php, NONE, 1.1 smtp.php, NONE, 1.1 resmgr.php, 1.47, 1.48
cvs at intevation.de
cvs at intevation.de
Thu Nov 4 13:31:09 CET 2004
Author: steffen
Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv14562/kolab-resource-handlers/resmgr
Modified Files:
resmgr.php
Added Files:
kolabfilter.php misc.php smtp.php
Log Message:
new filter script!
--- NEW FILE: kolabfilter.php ---
#!@l_prefix@/bin/php
<?php
require_once 'PEAR.php';
require_once 'kolabfilter/misc.php';
require_once 'kolabfilter/smtp.php';
// Load our configuration file
$params = array();
require_once '@l_prefix@/etc/resmgr/resmgr.conf';
init();
define( 'TMPDIR', '@l_prefix@/var/resmgr/filter' );
define( 'EX_TEMPFAIL', 75 );
define( 'EX_UNAVAILABLE', 69 );
$tmpfname = tempnam( TMPDIR, 'IN.' );
$tmpf = fopen($tmpfname, "w");
function cleanup() {
global $tmpfname;
file_exists($tmpfname) && unlink($tmpfname);
}
register_shutdown_function( 'cleanup' );
$options = getopt("s:r:");
if (!array_key_exists('r', $options) || !array_key_exists('s', $options)) {
fwrite(STDOUT, "Usage is $argv[0] -s sender at domain -r recip at domain\n");
exit(EX_TEMPFAIL);
}
$sender = strtolower($options['s']);
$recipient = strtolower($options['r']);
myLog("Kolabfilter starting up, sender=$sender, recipient=$recipient", RM_LOG_DEBUG);
$ical = false;
$add_headers = array();
while (!feof(STDIN)) {
$buffer = fgets(STDIN, 8192);
$line = rtrim( $buffer, "\r\n");
if( $line == '' ) {
// Done with headers
} else if( eregi( '^From:(.*)', $line, $regs ) ) {
$adrs = imap_rfc822_parse_adrlist($regs[1], $params['email_domain']);
foreach( $adrs as $adr ) {
$from = $adr->mailbox.'@'.$adr->host;
if( $from != $sender ) {
fwrite(STDOUT,"Invalid From: header. $from does not match envelope $sender\n");
exit(EX_UNAVAILABLE);
}
}
} else if( eregi( '^Content-Type: text/calendar', $line ) ) {
$ical = true;
}
if( fwrite($tmpf, $buffer) === false ) {
exit(EX_TEMPFAIL);
}
}
fclose($tmpf);
if( $ical ) {
require_once 'kolabfilter/resmgr.php';
myLog("Calling resmgr_filter( $sender, $recipient, $tmpfname )", RM_LOG_DEBUG);
resmgr_filter( $sender, $recipient, $tmpfname );
$add_headers[] = "X-Kolab-Scheduling-Message: TRUE";
}
$tmpf = fopen($tmpfname,"r");
$smtp = new KolabSMTP( 'localhost', 10026 );
if( PEAR::isError( $smtp ) ) {
fwrite(STDOUT, $smtp->getMessage()."\n"); exit(EX_TEMPFAIL);
}
//myLog("Calling smtp->start( $sender, $recipient, $tmpfname )", RM_LOG_DEBUG);
if( PEAR::isError( $error = $smtp->start($sender,$recipient) ) ) {
fwrite(STDOUT, $error->getMessage()."\n"); exit(EX_TEMPFAIL);
}
$headers_done = false;
while (!feof($tmpf)) {
$buffer = fgets($tmpf, 8192);
if( !$headers_done && rtrim( $buffer, "\r\n" ) == '' ) {
$headers_done = true;
foreach( $add_headers as $h ) {
if( PEAR::isError($error = $smtp->data( "$h\r\n" )) ) {
fwrite(STDOUT, $error->getMessage()."\n"); exit(EX_TEMPFAIL);
}
}
}
//myLog("Calling smtp->data( ".rtrim($buffer)." )", RM_LOG_DEBUG);
if( PEAR::isError($error = $smtp->data( $buffer )) ) {
fwrite(STDOUT, $error->getMessage()."\n"); exit(EX_TEMPFAIL);
}
}
//myLog("Calling smtp->end()", RM_LOG_DEBUG);
$smtp->end();
myLog("Kolabfilter successfully completed", RM_LOG_DEBUG);
exit(0);
?>
--- NEW FILE: misc.php ---
<?php
// What myLog levels we can use
define('RM_LOG_SUPER', -1);
define('RM_LOG_SILENT', 0);
define('RM_LOG_ERROR', 1);
define('RM_LOG_WARN', 2);
define('RM_LOG_INFO', 3);
define('RM_LOG_DEBUG', 4);
$logLevelPrefixes = array(
RM_LOG_SUPER => '',
RM_LOG_SILENT => '',
RM_LOG_ERROR => 'Error',
RM_LOG_WARN => 'Warning',
RM_LOG_INFO => '',
RM_LOG_DEBUG => 'Debug',
);
// What logging mechanisms are available for use
define('RM_LOG_SYSLOG', 1);
define('RM_LOG_FILE', 2);
$logType = 0;
$logPrefix = '';
$logDestination = NULL;
function logInit($name = '')
{
global $params, $argv, $logType, $logPrefix, $logDestination;
if (empty($name)) {
$name = basename($argv[0]);
}
if (!array_key_exists('log', $params) || empty($params['log'])) {
return;
}
$matches = array();
if (preg_match('/(\w+):(.*)?/', $params['log'], $matches)) {
switch ($matches[1]) {
case 'syslog':
$logType = RM_LOG_SYSLOG;
$txtopts = preg_split('/[\s,]+/', $matches[2], -1, PREG_SPLIT_NO_EMPTY);
$options = 0;
foreach ($txtopts as $txtopt) {
switch ($txtopt) {
case 'cons': $options |= LOG_CONS; break;
case 'ndelay': $options |= LOG_NDELAY; break;
case 'odelay': $options |= LOG_ODELAY; break;
case 'perror': $options |= LOG_PERROR; break;
case 'pid': $options |= LOG_PID; break;
}
}
openlog($name, $options, LOG_USER);
break;
case 'file':
$logType = RM_LOG_FILE;
$logPrefix = $name;
$logDestination = fopen($matches[2], 'a');
break;
}
}
}
function logClose()
{
global $logType, $logDestination;
switch ($logType) {
case RM_LOG_SYSLOG:
closelog();
break;
case RM_LOG_FILE:
fclose($logDestination);
$logDestination = NULL;
break;
}
}
function myLog($text, $priority = RM_LOG_INFO)
{
global $params, $logLevelPrefixes, $logPrefix, $logType, $logDestination;
if ($params['log_level'] >= $priority) {
if (!empty($logLevelPrefixes[$priority])) {
$text = $logLevelPrefixes[$priority] . ": $text";
}
switch ($logType) {
case RM_LOG_SYSLOG:
syslog(RM_LOG_INFO, $text);
break;
case RM_LOG_FILE:
fwrite($logDestination, strftime('%B %d %T') . " ${logPrefix}[" . getmypid() . "]: $text\n");
fflush($logDestination);
break;
}
}
}
function init()
{
global $params;
define_syslog_variables();
logInit();
myLog('Starting up in ' . ($params['group'] ? 'group' : 'resource') . ' mode', RM_LOG_SUPER);
$url_fopen = ini_get('allow_url_fopen');
if (!$url_fopen) {
myLog('\'allow_url_fopen\' is disabled in php.ini, enabling...', RM_LOG_WARN);
ini_set('allow_url_fopen', '1');
}
// This is used as the default domain for unqualified adresses
global $_SERVER;
if (!array_key_exists('SERVER_NAME', $_SERVER)) {
$_SERVER['SERVER_NAME'] = $params['email_domain'];
}
if (!array_key_exists('REMOTE_ADDR', $_SERVER)) {
$_SERVER['REMOTE_ADDR'] = $params['server'];
}
if (!array_key_exists('REMOTE_HOST', $_SERVER)) {
$_SERVER['REMOTE_HOST'] = $params['server'];
}
}
?>
--- NEW FILE: smtp.php ---
<?php
class KolabSMTP {
function KolabSMTP( $host, $port ) {
$this->host = $host;
$this->port = $port;
$this->smtp = false;
}
function start($sender,$recip) {
require_once 'Net/SMTP.php';
$this->smtp = &new Net_SMTP($this->host, $this->port);
if (!$this->smtp) {
return new PEAR_Error('Failed to connect to SMTP: ' . $error->getMessage());
}
if (PEAR::isError($error = $this->smtp->connect())) {
return new PEAR_Error('Failed to connect to SMTP: ' . $error->getMessage());
}
if (PEAR::isError($error = $this->smtp->mailFrom($sender))) {
return new PEAR_Error('Failed to set sender: ' . $error->getMessage());
}
if (PEAR::isError($error = $this->smtp->rcptTo($recip))) {
$msg = 'Failed to set recipient: ' . $error->getMessage();
myLog($msg, RM_LOG_ERROR);
return false;
}
if (PEAR::isError($error = $this->smtp->_put('DATA'))) {
return $error;
}
if (PEAR::isError($error = $this->smtp->_parseResponse(354))) {
return $error;
}
return true;
}
function data( $data) {
$this->smtp->quotedata($data);
if (PEAR::isError($this->smtp->_send($data))) {
return new PEAR_Error('write to socket failed');
}
return true;
}
function end() {
if (PEAR::isError($this->smtp->_send("\r\n.\r\n"))) {
return new PEAR_Error('write to socket failed');
}
if (PEAR::isError($error = $this->smtp->_parseResponse(250))) {
return $error;
}
$this->smtp->disconnect();
$this->smtp = false;
return true;
}
var $host;
var $port;
var $smtp;
};
?>
Index: resmgr.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/resmgr.php,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -d -r1.47 -r1.48
--- resmgr.php 2 Nov 2004 11:47:40 -0000 1.47
+++ resmgr.php 4 Nov 2004 12:31:07 -0000 1.48
@@ -1,30 +1,6 @@
#!@l_prefix@/bin/php
<?php
-
-// What myLog levels we can use
-define('RM_LOG_SUPER', -1);
-define('RM_LOG_SILENT', 0);
-define('RM_LOG_ERROR', 1);
-define('RM_LOG_WARN', 2);
-define('RM_LOG_INFO', 3);
-define('RM_LOG_DEBUG', 4);
-
[...1013 lines suppressed...]
+ }
+ shutdown(0);
-// Pass the message through to the group's mailbox
-myLog("Passing through $method method to $resource");
-sendSMTP($sender, $resource, $requestText);
-shutdown(0, "", false);
+ default:
+ // We either don't currently handle these iTip methods, or they do not
+ // apply to what we're trying to accomplish here
+ if (!$params['group']) {
+ myLog("Ignoring $method method");
+ shutdown(0);
+ }
+ }
+ // Pass the message through to the group's mailbox
+ myLog("Passing through $method method to $resource");
+}
?>
More information about the commits
mailing list