steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr resmgr.conf, 1.1.1.1, 1.2 resmgr.php, 1.2, 1.3
cvs at intevation.de
cvs at intevation.de
Tue Jul 13 03:15:16 CEST 2004
Author: steffen
Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv15901/kolab-resource-handlers/resmgr
Modified Files:
resmgr.conf resmgr.php
Log Message:
freebusy fixes, resource password stuff
Index: resmgr.conf
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/resmgr.conf,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- resmgr.conf 11 Jun 2004 10:52:23 -0000 1.1.1.1
+++ resmgr.conf 13 Jul 2004 01:15:14 -0000 1.2
@@ -19,8 +19,8 @@
// 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'] = 'fb at oberon.co.za';
-$params['calendar_pass'] = 'fb';
+//$params['calendar_user'] = 'fb at oberon.co.za';
+//$params['calendar_pass'] = 'fb';
// What is the name of the users' calendar mailbox?
$params['calendar_store'] = 'Calendar';
Index: resmgr.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/resmgr.php,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- resmgr.php 7 Jul 2004 16:08:54 -0000 1.2
+++ resmgr.php 13 Jul 2004 01:15:14 -0000 1.3
@@ -199,6 +199,50 @@
}
}
+/**
+ * Look up encrypted password from LDAP and decrypt it
+ */
+function getImapPassword()
+{
+ global $resource;
+ global $params;
+
+ // Connect to LDAP server end get the password
+ $ldap = ldap_connect( $params['ldap_uri'] );
+ if( !ldap_bind( $ldap, $params['bind_dn'], $params['bind_pw'] ) ) {
+ myLog("Could not contact LDAP server: ".$ldap_error($ldap));
+ return false;
+ }
+ $result = ldap_search( $ldap, $params['base_dn'], "(mail=$resource)", array("encryptedPassword"));
+ if( !$result ) {
+ myLog("Could not perform seearch: ".$ldap_error($ldap));
+ return false;
+ }
+ $entries = ldap_get_entries( $ldap, $result );
+ if( $entries['count'] != 1 ) {
+ myLog("More than one object returned for $resource");
+ return false;
+ }
+ myLog("encrypted password is ".$entries[0]['encryptedpassword'][0]);
+ $encpw = base64_decode($entries[0]['encryptedpassword'][0]);
+ ldap_close($ldap);
+
+ // Now get private key and decrypt pw:
+ $pkd=file_get_contents("@l_prefix@/etc/kolab/res_priv.pem" );
+ $pkey = openssl_pkey_get_private( $pkd );
+ if( $pkey === false ) {
+ while( $msg = openssl_error_string() )
+ myLog( "Error reading private key: $msg" );
+ }
+ if( !openssl_private_decrypt( $encpw, $cleartext, $pkey ) ) {
+ while( $msg = openssl_error_string() )
+ myLog( "Error decrypting: $msg" );
+ return false;
+ }
+ openssl_free_key($pkey);
+ return $cleartext;
+}
+
function getRequest()
{
global $requestText;
@@ -239,6 +283,20 @@
shutdown();
}
+/** Helper function */
+function glue_url($parsed)
+{
+ if (! is_array($parsed)) return false;
+ $uri = $parsed['scheme'] ? $parsed['scheme'].':'.((strtolower($parsed['scheme']) == 'mailto') ? '':'//'): '';
+ $uri .= $parsed['user'] ? urlencode($parsed['user']).($parsed['pass']? ':'.urlencode($parsed['pass']):'').'@':'';
+ $uri .= $parsed['host'] ? $parsed['host'] : '';
+ $uri .= $parsed['port'] ? ':'.$parsed['port'] : '';
+ $uri .= $parsed['path'] ? $parsed['path'] : '';
+ $uri .= $parsed['query'] ? '?'.$parsed['query'] : '';
+ $uri .= $parsed['fragment'] ? '#'.$parsed['fragment'] : '';
+ return $uri;
+}
+
function &getFreeBusy()
{
global $resource, $params;
@@ -246,6 +304,11 @@
$url = str_replace('${USER}', $resource, $params['freebusy_url']);
myLog("Using f/b URL $url", RM_LOG_DEBUG);
+ $parsed = parse_url($url);
+ $parsed['user'] = $params['calendar_user'];
+ $parsed['user'] = $params['calendar_pass'];
+ $url = glue_url($parsed);
+
$text = @file_get_contents($url);
if ($text == false || empty($text)) {
myLog("Unable to retrieve free/busy information for $resource", RM_LOG_ERROR);
@@ -402,11 +465,25 @@
} else {
$mailbox = "user/$prefix/" . $params['calendar_store'] . "$suffix";
}
+ #$fullmbox = $server . $mailbox;
+
+ $mailbox = "INBOX/Calendar";
$fullmbox = $server . $mailbox;
- myLog("Opening connection to $fullmbox", RM_LOG_DEBUG);
+ myLog("Opening connection to $server for ".$params['calendar_user'], RM_LOG_DEBUG);
// Open an IMAP connection to the requested users' calendar
- $imap = @imap_open($fullmbox, $params['calendar_user'], $params['calendar_pass'], CL_EXPUNGE);
+ $imap = @imap_open($fullmbox, $params['calendar_user'], $params['calendar_pass'], CL_EXPUNGE|OP_HALFOPEN);
+ testIMAPError();
+ @imap_reopen( $imap, $fullmbox, CL_EXPUNGE );
+ $errors = imap_errors();
+ myLog( "IMAP Errors from reopen: ".join(", ", $errors ) );
+ if( !empty($errors) ) {
+ // slurp up errors
+ // Create Calendar folder
+ @imap_createmailbox( $imap, $fullmbox );
+ myLog( "IMAP Errors from createmailbox: ".join(", ", imap_errors() ) );
+ @imap_reopen( $imap, $fullmbox, CL_EXPUNGE );
+ }
testIMAPError();
$connected = true;
@@ -492,6 +569,9 @@
init();
+$params['calendar_user'] = $resource;
+$params['calendar_pass'] = getImapPassword();
+
require_once HORDE_BASE . '/lib/core.php';
require_once 'Horde/iCalendar.php';
require_once 'Horde/MIME.php';
@@ -545,6 +625,7 @@
shutdown(0);
}
+imapConnect();
switch ($method) {
case 'REQUEST':
if ($params['action'] == RM_ACT_MANUAL) {
@@ -594,8 +675,6 @@
// iTip reply
myLog("Adding event $uid");
-
- imapConnect();
$iCalendar = &new Horde_iCalendar();
// Update our status within the vEvent
More information about the commits
mailing list