+ file_put_contents($file, "[$time]: $message", FILE_APPEND | LOCK_EX);
+ break;
+ case 'stderr':
+ file_put_contents('php://stderr', "[$time]: $message");
+ break;
+ case 'syslog':
+ syslog($priority, $message);
+ break;
+ }
+ }
+
+ private function initSettings() {
+ $this->log("InitSettings", 4);
+
+ if ('' == session_id()) {
+ $this->startSession();
+ }
+
+ if (false !== $this->timeout) {
+ $timeout = $this->timeout;
+ } else {
+ $timeout = 0;
+ }
+
+ $this->settings = array(
+ 'user' => null,
+ 'admin' => false,
+ 'loginStatus' => 'Not logged in',
+ 'timeout' => $timeout
+ );
+
+ $_SESSION['settings'] = $this->settings;
+ }
+
+ private function startSession() {
+ global $CFG;
+
+ $this->log("startSession", 4);
+
+ if (isset($CFG->session_timeout)) {
+ $this->timeout = $CFG->session_timeout * 60;
+ } else {
+ $this->timeout = 20 * 60;
+ }
+
+ if (ini_get('session.gc_maxlifetime') != $this->timeout)
+ ini_set('session.gc_maxlifetime', $this->timeout);
+ //if (ini_get('session.cookie_lifetime') != $this->timeout)
+ // ini_set('session.cookie_lifetime', $this->timeout);
+ ini_set('session.cookie_lifetime', 0);
+
+ session_start();
+ }
+
+ private function checkSession() {
+ global $CFG;
+
+ $this->log("checkSession", 4);
+
+ if ('' == session_id()) {
+ $this->startSession();
+ }
+
+ $time = $_SERVER['REQUEST_TIME'];
+ if (isset($_SESSION['LAST_ACTIVITY']) &&
+ ($time - $_SESSION['LAST_ACTIVITY']) >= $this->settings['timeout']) {
+ $this->log('R_TIME: '.date('c', $time).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY'].
+ 'Test: '.($time - $_SESSION['LAST_ACTIVITY'])).' >= '.$this->settings['timeout'], 3);
+ $this->logout();
+ } else {
+ $_SESSION['LAST_ACTIVITY'] = $time;
+ }
+ }
+
+ public function logout() {
+ $this->log("logout", 4);
+
+ if (ini_get('session.use_cookies')) {
+ $params = session_get_cookie_params();
+ setcookie(session_name(), '', time() - 42000,
+ $params['path'], $params['domain'],
+ $params['secure'], $params['httponly']);
+ }
+
+ if ('' != session_id()) {
+ $_SESSION = array();
+ session_unset();
+ session_destroy();
+ }
+ $this->settings = array();
+ }
+
+ public function isAdmin() {
+ $admin = false;
+
+ $this->log("isAdmin", 4);
+
+ if (isset($this->settings['admin'])) {
+ $admin = $this->settings['admin'];
+ }
+
+ return $admin;
+ }
+
+ public function login($user, $pw) {
+ global $CFG;
+ $result = false;
+
+ $this->log("login", 4);
+
+ if ('' == session_id()) {
+ $this->startSession();
+ }
+
+ $this->settings['user'] = null;
+ $this->settings['admin'] = false;
+
+ $p = explode('@', $user);
+ if (count($p) != 2) {
+ $this->settings['loginStatus'] = 'Bad username';
+ } else {
+ $domain = $p[1];
+ $dn = "mail=$user,ou=Users,domainName=$domain,$CFG->ldap_base_dn";
+ $filter = "(&(objectclass=mailUser)(accountStatus=active)(mail=$user))";
+ $ds = @ldap_connect($CFG->ldap_dsn);
+ if ($ds) {
+ @ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
+ $r = @ldap_bind($ds, $dn, $pw);
+ if ($r) {
+ $sr = @ldap_search($ds, $CFG->ldap_base_dn, $filter, array('mail','domainglobaladmin'));
+ $info = @ldap_get_entries($ds, $sr); // array
+ if ($info['count'] > 0) {
+ $this->settings['user'] = $user;
+ $result = true;
+ $this->settings['loginStatus'] = 'OK';
+ $admin = 'NO';
+ if (isset($info[0]['domainglobaladmin'])) {
+ $admin = $info[0]['domainglobaladmin'][0];
+ $admin = strtoupper($admin);
+ }
+ $this->settings['admin'] = ($admin == 'YES') ? true : false;
+ } else {
+ $this->settings['loginStatus'] = 'Login failed';
+ }
+ } else {
+ $this->settings['loginStatus'] = ldap_error($ds);
+ }
+ @ldap_close($ds);