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