document closed Debian bug
[davical.git] / inc / drivers_rimap.php
blob323f448333eb7a48a9f1d8274a955f92ca283380
1 <?php
2 /**
3 * Manages PAM repository connection with local imap server help
5 * @package davical
6 * @category Technical
7 * @subpackage ldap
8 * @author Oliver Schulze <oliver@samera.com.py>,
9 * Andrew McMillan <andrew@mcmillan.net.nz>
10 * @copyright Based on Eric Seigne script drivers_squid_pam.php
11 * @license http://gnu.org/copyleft/gpl.html GNU GPL v2 or later
14 require_once("auth-functions.php");
16 class imapPamDrivers
18 /**#@+
19 * @access private
22 /**#@-*/
25 /**
26 * Constructor.
27 * @param string $imap_url formated for imap_open()
29 function imapPamDrivers($imap_url){
30 $this->__construct($imap_url);
34 /**
35 * The constructor
37 * @param string $imap_url formated for imap_open()
39 function __construct($imap_url)
41 global $c;
42 if (empty($imap_url)){
43 $c->messages[] = sprintf(i18n('drivers_imap_pam : imap_url parameter not configured in /etc/davical/*-conf.php'));
44 $this->valid=false;
45 return ;
51 /**
52 * Check the username / password against the IMAP server
54 function RIMAP_check($username, $password ){
55 global $c;
57 $imap_username = $username;
58 if ( function_exists('mb_convert_encoding') ) {
59 $imap_username = mb_convert_encoding($imap_username, "UTF7-IMAP",mb_detect_encoding($imap_username));
61 else {
62 $imap_username = imap_utf7_encode($imap_username);
65 //$imap_url = '{localhost:143/imap/notls}';
66 //$imap_url = '{localhost:993/imap/ssl/novalidate-cert}';
67 $imap_url = $c->authenticate_hook['config']['imap_url'];
68 $auth_result = "ERR";
70 $imap_stream = @imap_open($imap_url, $imap_username, $password, OP_HALFOPEN);
71 //print_r(imap_errors());
72 if ( $imap_stream ) {
73 // disconnect
74 imap_close($imap_stream);
75 // login ok
76 $auth_result = "OK";
79 if ( $auth_result == "OK") {
80 $principal = new Principal('username',$username);
81 if ( ! $principal->Exists() ) {
82 dbg_error_log( "PAM", "Principal '%s' doesn't exist in local DB, we need to create it",$username );
83 if ( strstr($username, '@') ) {
84 $name_arr = explode('@', $username);
85 $fullname = ucfirst(strtolower($name_arr[0]));
86 $email = $username;
88 else {
89 $fullname = ucfirst(strtolower($username));
90 $email = $username . "@" . $c->authenticate_hook['config']['email_base'];
93 $principal->Create( array(
94 'username' => $username,
95 'user_active' => true,
96 'email' => $email,
97 'fullname' => ucfirst($fullname)
98 ));
99 if ( ! $principal->Exists() ) {
100 dbg_error_log( "PAM", "Unable to create local principal for '%s'", $username );
101 return false;
103 CreateHomeCollections($username);
105 return $principal;
107 else {
108 dbg_error_log( "PAM", "User %s is not a valid username (or password was wrong)", $username );
109 return false;