martin: server/kolab-resource-handlers/kolab-resource-handlers/resmgr kolabfilter.php.in, NONE, 1.1 kolabmailboxfilter.php.in, NONE, 1.1 resmgr.conf.in, NONE, 1.1 kolabfilter.php, 1.32, NONE kolabmailboxfilter.php, 1.4, NONE resmgr.conf, 1.8, NONE

cvs at intevation.de cvs at intevation.de
Mon Dec 5 15:13:44 CET 2005


Author: martin

Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv28144/resmgr

Added Files:
	kolabfilter.php.in kolabmailboxfilter.php.in resmgr.conf.in 
Removed Files:
	kolabfilter.php kolabmailboxfilter.php resmgr.conf 
Log Message:
MArtin Konold: Applying patch from rbos see also https://intevation.de/roundup/kolab/issue1010


--- NEW FILE: kolabfilter.php.in ---
#!@PHP@
<?php
/*
 *  Copyright (c) 2004-2005 Klaraelvdalens Datakonsult AB
 *
 *    Writen by Steffen Hansen <steffen at klaralvdalens-datakonsult.se>
 *
 *  This  program is free  software; you can redistribute  it and/or
 *  modify it  under the terms of the GNU  General Public License as
 *  published by the  Free Software Foundation; either version 2, or
 *  (at your option) any later version.
 *
 *  This program is  distributed in the hope that it will be useful,
 *  but WITHOUT  ANY WARRANTY; without even the  implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  General Public License for more details.
 *
 *  You can view the  GNU General Public License, online, at the GNU
 *  Project's homepage; see <http://www.gnu.org/licenses/gpl.html>.
 */

/* Fix include_path to pick up our modified Horde classes */
$include_path = ini_get('include_path');
ini_set( 'include_path', 
	 '.:@phplibdir2@:@phplibdir2@/pear:'.$include_path);

require_once 'PEAR.php';
require_once 'kolabfilter/misc.php';
require_once 'kolabfilter/kolabmailtransport.php';

// Profiling code
/*
function mymtime(){
  $tmp=explode(' ',microtime());
  $rt=$tmp[0]+$tmp[1];
  return $rt;
}

class MyTimer {
  function MyTimer( $name ) {
    $this->name = $name;
  }
  function start() {
    $this->time = mymtime();
  }
  function stop() {
    $time = 100*(mymtime()-$this->time);
    myLog("Section ".$this->name." took $time msecs", RM_LOG_DEBUG);
  }

  var $name;
  var $time;
};

$totaltime =& new MyTimer("Total");
$totaltime->start();
*/

// Load our configuration file
$params = array();
require_once '@resmgr_confdir@/resmgr.conf';
init();

define( 'TMPDIR', '@resmgr_filter@' );
define( 'EX_TEMPFAIL', 75 );
define( 'EX_UNAVAILABLE', 69 );

//$inputtime =& new MyTimer("Input");
//$inputtime->start();

// Temp file for storing the message
$tmpfname = tempnam( TMPDIR, 'IN.' );
$tmpf = fopen($tmpfname, "w");

// Cleanup function
function cleanup() {
  global $tmpfname;
  file_exists($tmpfname) && unlink($tmpfname);
}
register_shutdown_function( 'cleanup' );

function is_my_domain( $addr ) {
  global $params;
  if( is_array($params['email_domain']) ) {
	$domains = $params['email_domain'];
  } else {
	$domains = array($params['email_domain']);
  }
  
  $adrs = imap_rfc822_parse_adrlist($addr, $params['email_domain']);
  foreach ($adrs as $adr) {
    $adrdom = $adr->host;
	foreach( $domains as $dom ) {
	  if( $dom == $adrdom ) return true;
	  if( $params['verify_subdomains'] && substr($adrdom, -strlen($dom)-1) == ".$dom" ) return true;
	}
  }
  return false;
}

/**
 Returns a list of allowed email addresses for user $sasluser
 or a PEAR_Error object if something croaked.
*/
function addrs_for_uid( $sasluser )
{
  global $params;
  /* Connect to the LDAP server and retrieve the users'
   allowed email addresses */
  $ldap = ldap_connect($params['ldap_uri']);
  if (!ldap_bind($ldap, $params['bind_dn'], $params['bind_pw'])) {
    myLog('Unable to contact LDAP server: ' . ldap_error($ldap));
    return new PEAR_Error('Unable to contact LDAP server: ' . ldap_error($ldap));
  }
  
  $filter = "(&(objectClass=kolabInetOrgPerson)(|(mail=$sasluser)(uid=$sasluser)))";
  $result = ldap_search($ldap, $params['base_dn'],
			$filter,
			array("dn", "mail", "alias" ));
  if (!$result) {
    myLog('Unable to perform LDAP search: ' . ldap_error($ldap));
    return new PEAR_Error('Unable to perform LDAP search: ' . ldap_error($ldap));
  }
  
  $entries = ldap_get_entries($ldap, $result);
  if ($entries['count'] != 1) {
    myLog($entries['count']." objects returned for uid $sasluser");
    return new PEAR_Error("Temporary LDAP error, unable to look up user $sasluser");
  }
  unset($entries[0]['mail']['count']);
  unset($entries[0]['alias']['count']);
  $addrs = array_merge($entries[0]['mail'],$entries[0]['alias']);
  $mail = $entries[0]['mail'][0];

  ldap_free_result($result);

  $filter = "(&(objectClass=kolabInetOrgPerson)(kolabDelegate=$mail))";
  $result = ldap_search($ldap, $params['base_dn'],
			$filter,
			array("dn", "mail" ));
  if (!$result) {
    myLog('Unable to perform LDAP search: ' . ldap_error($ldap));
    return new PEAR_Error('Unable to perform LDAP search: ' . ldap_error($ldap));
  }
  
  $entries = ldap_get_entries($ldap, $result);
  unset( $entries['count'] );
  foreach( $entries as $adr ) {
    if( $adr['mail']['count'] > 0 ) {
      unset($adr['mail']['count']);
      $addrs = array_merge($addrs,$adr['mail']);
    }
  }
  ldap_free_result($result);
  ldap_close($ldap);

  #myLog("Found addresses ".print_r($addrs,true)." for user $sasluser", RM_LOG_DEBUG);
  return $addrs;
}

/** Check that the From header is not trying
    to impersonate a valid user that is not
    $sasluser. Returns one of:

    * True if From can be accepted
    * False if From must be rejected
    * A string with a corrected From header that makes
      From acceptable
    * A PEAR_Error object if something croaked
*/
function verify_sender( $sasluser, $sender, $from, $client_addr ) {
  global $params;

  /* Allow anything from localhost and
     fellow Kolab-hosts */
  if( $client_addr == '127.0.0.1' ) return true;
  $kolabhosts = split(',', $params['kolabhosts'] );
  $kolabhosts = array_map( "gethostbyname", $kolabhosts );
  foreach( $kolabhosts as $ip ) {
    if( $client_addr == $ip ) return true;
  }

  if( is_array($params['email_domain']) ) {
    $domains = $params['email_domain'];
  } else {
    $domains = array($params['email_domain']);
  }

  if( $sasluser ) {
    if( PEAR::isError($allowed_addrs = addrs_for_uid($sasluser)) ) {
      myLog("Error reading allowed addresses for $sasluser: ".$allowed_addrs->getMessage(), RM_LOG_ERROR);
      return $allowed_addrs;
    }
  } else {
    $allowed_addrs = false;
  }

  $adrs = imap_rfc822_parse_adrlist($from, $params['email_domain'][0]);
  foreach ($adrs as $adr) {
    $from = $adr->mailbox.'@'.$adr->host;
    $fromdom = $adr->host;
    if( $sasluser ) {
      if( !in_array( strtolower($from), $allowed_addrs ) ) {
	myLog("$from is not an allowed From address for $sasluser", RM_LOG_DEBUG);
	return false;
      }
    } else {
      foreach( $domains as $domain ) {
	if( strtolower($fromdom) == $domain 
	    || ( $params['verify_subdomains'] 
		 && substr($fromdom, -strlen($domain)-1) == ".$domain" ) ) {
	  if( $params['reject_forged_from_header'] ) {
	    myLog("$from is not an allowed From address for unauthenticated users", RM_LOG_DEBUG);	    
	    return false;
	  } else {
	    /* Rewrite */
	    myLog("$from is not an allowed From address for unauthenticated users, rewriting", RM_LOG_DEBUG);
	    return "$from (UNTRUSTED, sender is <$sender>)";
	  }
	}
      }
    }
  }

  /* All seems OK */
  return true;


  /* TODO: What do we do about subdomains? */
  /*
    $senderdom = substr(strrchr($sender, '@'), 1);
    foreach( $domains as $domain ) {
      if( $params['verify_subdomains'] ) {	
	if( ($senderdom == $domain ||
	     $fromdom   == $domain ||
	     substr($senderdom, -strlen($domain)-1) == ".$domain" ||
	     substr($fromdom, -strlen($domain)-1) == ".$domain" ) &&
	    $sender != $from ) {
	  return false;
	}
      } else {
	if( ($senderdom == $domain ||
	     $fromdom   == $domain ) &&
	    $sender != $from ) {
		  return false;
	}
      }
    }
  }
  return true;
  */
}

$options = parse_args( array( 's', 'r', 'c', 'h', 'u' ), $_SERVER['argv']); //getopt("s:r:c:h:u:");

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']);
$recipients = $options['r'];
$client_address = $options['c'];
$fqhostname = strtolower($options['h']);
$sasl_username = strtolower($options['u']);

// make sure recipients is an array
if( !is_array($recipients) ) {
  $recipients = array( $recipients );
}

// make recipients lowercase
for( $i = 0; $i < count($recipients); $i++ ) {
  $recipients[$i] = strtolower($recipients[$i]);
}

myLog("Kolabfilter starting up, user=$sasl_username, sender=$sender, recipients=".join(',', $recipients)
      .", client_address=$client_address", RM_LOG_DEBUG);

$ical = false;
$add_headers = array();
$headers_done = false;
$from = false;
$subject = false;
$senderok = true;
$rewrittenfrom = false;
while (!feof(STDIN) && !$headers_done) {
  $buffer = fgets(STDIN, 8192);
  $line = rtrim( $buffer, "\r\n");
  if( $line == '' ) {
    // Done with headers
    $headers_done = true;
    if( $from && $params['verify_from_header'] ) {
      $rc = verify_sender( $sasl_username, $sender, $from, $client_address);
      if( PEAR::isError($rc) ) {
	$msg = $error->getMessage().", code ".$error->getCode();
	mylog($msg, RM_LOG_ERROR);
	fwrite(STDOUT, $msg."\n"); 
	exit(EX_TEMPFAIL);
      } else if( $rc === true ) {
	/* All OK, do nothing */
      } else if( $rc === false ) {
	/* Reject! */
	$senderok = false;
      } else if( is_string($rc) ) {
	/* Rewrite from */
	if( strpos( $from, $rc )===false ) {
	  myLog("Rewriting '$from' to '$rc'", RM_LOG_DEBUG);
	  $rewrittenfrom = "From: $rc\r\n";
	}
      }
    }
  } else if( !$headers_done && $params['allow_sender_header'] && eregi( '^Sender: (.*)', $line, $regs ) ) {
    $from = $regs[1];
  } else if( !$headers_done && !$from && eregi( '^From: (.*)', $line, $regs ) ) {
    $from = $regs[1];
  } else if( !$headers_done && eregi( '^Subject: (.*)', $line, $regs ) ) {
    $subject = $regs[1];
  } else if( !$headers_done && eregi( '^Content-Type: text/calendar', $line ) ) {
    myLog("Found iCal data in message", RM_LOG_DEBUG);
    $ical = true;
  }
  if( fwrite($tmpf, $buffer) === false ) {
    exit(EX_TEMPFAIL);
  }
}
while (!feof(STDIN)) {
  $buffer = fread( STDIN, 8192 );
  if( fwrite($tmpf, $buffer) === false ) {
    exit(EX_TEMPFAIL);
  }
}
fclose($tmpf);

//$inputtime->stop();

if( !$senderok ) {
  if( $ical && $params['allow_outlook_ical_forward'] ) {
    require_once('kolabfilter/olhacks.php');
    $rc = olhacks_embedical( $fqhostname, $sender, $recipients, $from, $subject, $tmpfname );
    if( PEAR::isError( $rc ) ) {
      fwrite(STDOUT,"Filter failed: ".$rc->getMessage()."\n");
      exit(EX_TEMPFAIL);
    } else if( $rc === true ) {
      exit(0);
    }
  } else {
    $msg = "Invalid From: header. $from looks like a forged sender";
    myLog($msg, RM_LOG_DEBUG);
    fwrite(STDOUT,"$msg\n");
    exit(EX_UNAVAILABLE);
  }
}

//$outputtime =& new MyTimer("Output");
//$outputtime->start();

$tmpf = fopen($tmpfname,"r");
/* TODO: Dont hardcode localhost:10025 */
$smtp = new KolabSMTP( 'localhost', 10025 );
if( PEAR::isError( $smtp ) ) {
  fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
  if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
  else exit(EX_UNAVAILABLE);
}
if( PEAR::isError( $error = $smtp->start($sender,$recipients) ) ) {
  fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
  if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
  else exit(EX_UNAVAILABLE);
}

$headers_done = false;
while (!feof($tmpf) && !$headers_done) {
  $buffer = fgets($tmpf, 8192);
  if( !$headers_done && $rewrittenfrom && eregi( '^From: (.*)', $buffer ) ) {
	if( PEAR::isError($error = $smtp->data( $rewrittenfrom )) ) {
	  fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
	  if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
	  else exit(EX_UNAVAILABLE);
	}
	continue;
  } 
  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().", code ".$error->getCode()."\n"); 
		if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
		else exit(EX_UNAVAILABLE);
      }
    }
  }
  //myLog("Calling smtp->data( ".rtrim($buffer)." )", RM_LOG_DEBUG);
  if( PEAR::isError($error = $smtp->data( $buffer )) ) {
    fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
    if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
    else exit(EX_UNAVAILABLE);
  }
}
while (!feof($tmpf) ) {
    $buffer = fread($tmpf, 8192);
    if( PEAR::isError($error = $smtp->data( $buffer )) ) {
        fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
	if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
	else exit(EX_UNAVAILABLE);
    }
};

//myLog("Calling smtp->end()", RM_LOG_DEBUG);
$smtp->end();
//$outputtime->stop();
myLog("Kolabfilter successfully completed", RM_LOG_DEBUG);
//$totaltime->stop();
exit(0);
?>

--- NEW FILE: kolabmailboxfilter.php.in ---
#!@PHP@
<?php
/*
 *  Copyright (c) 2004,2005 Klaraelvdalens Datakonsult AB
 *
 *    Writen by Steffen Hansen <steffen at klaralvdalens-datakonsult.se>
 *
 *  This  program is free  software; you can redistribute  it and/or
 *  modify it  under the terms of the GNU  General Public License as
 *  published by the  Free Software Foundation; either version 2, or
 *  (at your option) any later version.
 *
 *  This program is  distributed in the hope that it will be useful,
 *  but WITHOUT  ANY WARRANTY; without even the  implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  General Public License for more details.
 *
 *  You can view the  GNU General Public License, online, at the GNU
 *  Project's homepage; see <http://www.gnu.org/licenses/gpl.html>.
 */

/* Fix include_path to pick up our modified Horde classes */
$include_path = ini_get('include_path');
ini_set( 'include_path', 
	 '.:@phplibdir2@:@phplibdir2@/pear:'.$include_path);

require_once 'PEAR.php';
require_once 'kolabfilter/misc.php';
require_once 'kolabfilter/kolabmailtransport.php';

// Load our configuration file
$params = array();
require_once '@resmgr_confdir@/resmgr.conf';
init();

define( 'TMPDIR', '@resmgr_filter@' );
define( 'EX_TEMPFAIL', 75 );
define( 'EX_UNAVAILABLE', 69 );

// Temp file for storing the message
$tmpfname = tempnam( TMPDIR, 'IN.' );
$tmpf = fopen($tmpfname, "w");

// Cleanup function
function cleanup() {
  global $tmpfname;
  file_exists($tmpfname) && unlink($tmpfname);
}
register_shutdown_function( 'cleanup' );

$options = parse_args( array( 's', 'r', 'c', 'h' ), $_SERVER['argv']); //getopt("s:r:c:h:");

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']);
$recipients = $options['r'];
$client_address = $options['c'];
$fqhostname = strtolower($options['h']);

// make sure recipients is an array
if( !is_array($recipients) ) {
  $recipients = array( $recipients );
}

// make recipients lowercase
for( $i = 0; $i < count($recipients); $i++ ) {
  $recipients[$i] = strtolower($recipients[$i]);
}

myLog("Kolabmailboxfilter starting up, sender=$sender, recipients=".join(',', $recipients)
      .", client_address=$client_address", RM_LOG_DEBUG);

$ical = false;
$add_headers = array();
$headers_done = false;
$from = false;
while (!feof(STDIN)) {
  $buffer = fgets(STDIN, 8192);
  $line = rtrim( $buffer, "\r\n");
  if( $line == '' ) {
    // Done with headers
    $headers_done = true;
  } else if( !$headers_done && $params['allow_sender_header'] && eregi( '^Sender: (.*)', $line, $regs ) ) {
    $from = strtolower($regs[1]);
  } else if( !$headers_done && !$from && eregi( '^From: (.*)', $line, $regs ) ) {
    $from = strtolower($regs[1]);
  } else if( eregi( '^Content-Type: text/calendar', $line ) ) {
    myLog("Found iCal data in message", RM_LOG_DEBUG);    
    $ical = true;
  }
  if( fwrite($tmpf, $buffer) === false ) {
    exit(EX_TEMPFAIL);
  }
}
fclose($tmpf);
if( $ical ) {
  require_once 'kolabfilter/resmgr.php';
  $newrecips = array();
  foreach( $recipients as $recip ) {
    myLog("Calling resmgr_filter( $sender, $recip, $tmpfname )", RM_LOG_DEBUG);
    $rc = resmgr_filter( $fqhostname, $sender, $recip, $tmpfname );
    if( PEAR::isError( $rc ) ) {
      fwrite(STDOUT,"Filter failed: ".$rc->getMessage()."\n");
      exit(EX_TEMPFAIL);
    } else if( $rc === true ) {
      $newrecips[] = $recip;
    }
  }
  $recipients = $newrecips;
  $add_headers[] = "X-Kolab-Scheduling-Message: TRUE";
} else {
  $add_headers[] = "X-Kolab-Scheduling-Message: FALSE";
}

// Check if we still have recipients
if( empty($recipients) ) exit(0);

$tmpf = fopen($tmpfname,"r");
$lmtp = new KolabLMTP();
if( PEAR::isError( $lmtp ) ) {
  fwrite(STDOUT, $lmtp->getMessage()."\n");
  if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
  else exit(EX_UNAVAILABLE);
}
if( PEAR::isError( $error = $lmtp->start($sender,$recipients) ) ) {
  fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
  if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
  else exit(EX_UNAVAILABLE);
}

$headers_done = false;
while (!feof($tmpf) && !$headers_done) {
  $buffer = fgets($tmpf, 8192);
  if( !$headers_done && rtrim( $buffer, "\r\n" ) == '' ) {
    $headers_done = true;
    foreach( $add_headers as $h ) {
      if( PEAR::isError($error = $lmtp->data( "$h\r\n" )) ) {
	fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
	if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
	else exit(EX_UNAVAILABLE);
      }
    }
  }
  //myLog("Calling smtp->data( ".rtrim($buffer)." )", RM_LOG_DEBUG);
  if( PEAR::isError($error = $lmtp->data( $buffer )) ) {
    fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
    if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
    else exit(EX_UNAVAILABLE);
  }
}
while (!feof($tmpf) ) {
    $buffer = fread($tmpf, 8192);
    if( PEAR::isError($error = $lmtp->data( $buffer )) ) {
	fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
	if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
	else exit(EX_UNAVAILABLE);
    }
};
//myLog("Calling smtp->end()", RM_LOG_DEBUG);
$lmtp->end();
myLog("Kolabmailboxfilter successfully completed", RM_LOG_DEBUG);
exit(0);
?>

--- NEW FILE: resmgr.conf.in ---
<?php
// Example conf file for resmgr!

// What is the root directory of our Horde instance?
@define('HORDE_BASE', '@webserver_document_root@/fbview');

// What is the address of the Cyrus server where the calendar data is stored?
$params['server'] = 'localhost';

// What is our default mail domain? This is used if any users do not have
// '@domain' specified after their username as part of their email address.
$params['email_domain'] = 'example.com';

// List of kolab hosts that are priviledged
$params['kolabhosts'] = 'one.example.com,two.example.com,three.example.com';

// Are we using virtual domains with Cyrus?
$params['virtual_domains'] = true;

// Should we append domains to mailbox URIs? This only applies when
// virtual_domains is true, and when using manager accounts.
$params['append_domains'] = false;

// Should we make sure that the sender and From header match for mail
// that origins on this server?
$params['verify_from_header'] = true;

// Should we perform this check on mail from our
// subdomains too?
$params['verify_subdomains'] = true;

// Should the Sender: header be used over From: if present?
$params['allow_sender_header'] = true;

// Should reject messages with From headers that dont match
// the envelope? Default is to rewrite the header
$params['reject_forged_from_header'] = false;

// Should we allow forwarded ical messages from Outlook
// by encapsulating them in a MIME multipart
$params['allow_outlook_ical_forward']  = true;

// LDAP data
// What is the address of the LDAP server address where user objects reside
$params['ldap_uri'] = 'ldaps://ldap.example.com';

// What is the Base DN of our LDAP database?
$params['base_dn'] = 'dc=example,dc=com';

// What DN should we use to bind to the LDAP server?
$params['bind_dn'] = 'cn=nobody,cn=internal,dc=example,dc=com';

// What password should we use with the above DN when binding?
$params['bind_pw'] = 'xyz';


// What account should we use to read/write calendar data? This account should
// have access to the calendar mailbox of all resource/group mailboxes.
$params['calendar_user'] = 'calendar@'.$params['email_domain'];
$params['calendar_pass'] = 'zyx';

// Filename of private key used to decrypt password from LDAP
$params['priv_key_file'] = '@sysconfdir@/kolab/res_priv.pem';

// What is the name of the users' calendar mailbox?
$params['calendar_store'] = 'Calendar';

// Where can we get free/busy information from?
$params['freebusy_url'] = 'http://kolab.example.com/freebusy/${USER}.ifb';
 
// PFB url to trigger creation of pfb
$params['pfb_trigger_url'] = 'http://@@@fqdnhostname@@@/freebusy/trigger/${USER}/${FOLDER}.xpfb';

// Where are we logging to?
$params['log'] = 'file:@resmgr_logfile@';                // File...
// $params['log'] = 'syslog:cons, pid';            // Or syslog...

// What level of output should we log? Higher levels give more verbose output.
// One of: RM_LOG_SILENT; RM_LOG_ERROR; RM_LOG_WARN; RM_LOG_INFO or RM_LOG_DEBUG.
$params['log_level'] = RM_LOG_DEBUG;
?>

--- kolabfilter.php DELETED ---

--- kolabmailboxfilter.php DELETED ---

--- resmgr.conf DELETED ---





More information about the commits mailing list