From 43fa235da354c8b53aa69ba745c1d398a758fcaf Mon Sep 17 00:00:00 2001
From: svncommit <devs@roundcube.net>
Date: Wed, 26 Oct 2005 05:42:19 -0400
Subject: [PATCH] 

---
 program/include/main.inc |  130 ++++++++++++++++++++++++-------------------
 1 files changed, 72 insertions(+), 58 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 8cad777..0e20616 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -51,6 +51,10 @@
     ini_set('display_errors', 1);
   else
     ini_set('display_errors', 0);
+  
+  // set session garbage collecting time according to session_lifetime
+  if (!empty($CONFIG['session_lifetime']))
+    ini_set('session.gc_maxlifetime', ($CONFIG['session_lifetime']+2)*60);
 
 
   // prepare DB connection
@@ -72,7 +76,7 @@
   if (!$_SESSION['client_id'])
     {
     $_SESSION['client_id'] = $sess_id;
-    $_SESSION['user_lang'] = 'en';
+    $_SESSION['user_lang'] = substr($CONFIG['locale_string'], 0, 2);
     $_SESSION['auth_time'] = mktime();
     $_SESSION['auth'] = rcmail_auth_hash($sess_id, $_SESSION['auth_time']);
     unset($GLOBALS['_auth']);
@@ -138,34 +142,43 @@
 
   $IMAP = new rcube_imap();
 
+  // connect with stored session data
+  if ($connect)
+    {
+    if (!($conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl'])))
+      show_message('imaperror', 'error');
+      
+    rcmail_set_imap_prop();
+    }
+
   // enable caching of imap data
   if ($CONFIG['enable_caching']===TRUE)
     $IMAP->set_caching(TRUE);
 
-  // set root dir from config
-  if (strlen($CONFIG['imap_root']))
-    $IMAP->set_rootdir($CONFIG['imap_root']);
-    
   if (is_array($CONFIG['default_imap_folders']))
     $IMAP->set_default_mailboxes($CONFIG['default_imap_folders']);
-
-  if (strlen($_SESSION['mbox']))
-    $IMAP->set_mailbox($_SESSION['mbox']);
-
-  if (isset($_SESSION['page']))
-    $IMAP->set_page($_SESSION['page']);
 
   // set pagesize from config
   if (isset($CONFIG['pagesize']))
     $IMAP->set_pagesize($CONFIG['pagesize']);
+  }
 
 
-  // connect with stored session data
-  if ($connect)
-    {
-    if (!($conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']))))
-      show_message('imaperror', 'error');
-    }
+// set root dir and last stored mailbox
+// this must be done AFTER connecting to the server
+function rcmail_set_imap_prop()
+  {
+  global $CONFIG, $IMAP;
+
+  // set root dir from config
+  if (strlen($CONFIG['imap_root']))
+    $IMAP->set_rootdir($CONFIG['imap_root']);
+
+  if (strlen($_SESSION['mbox']))
+    $IMAP->set_mailbox($_SESSION['mbox']);
+    
+  if (isset($_SESSION['page']))
+    $IMAP->set_page($_SESSION['page']);
   }
 
 
@@ -240,29 +253,28 @@
   if (!$host)
     $host = $CONFIG['default_host'];
 
-  // query if user already registered
-  $sql_result = $DB->query(sprintf("SELECT user_id, username, language, preferences
-                                    FROM   %s
-                                    WHERE  mail_host='%s' AND (username='%s' OR alias='%s')",
-                                   get_table_name('users'),
-                                   addslashes($host),
-                                   addslashes($user),
-                                   addslashes($user)));
-
-  // user already registered -> overwrite username
-  if ($sql_arr = $DB->fetch_assoc($sql_result))
-    {
-    $user_id = $sql_arr['user_id'];
-    $user = $sql_arr['username'];
-    }
-
   // parse $host URL
   $a_host = parse_url($host);
   if ($a_host['host'])
     {
     $host = $a_host['host'];
     $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
-    $imap_port = isset($a_host['post']) ? $a_host['post'] : ($imap_ssl ? 993 : $CONFIG['default_port']);
+    $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']);
+    }
+
+  // query if user already registered
+  $sql_result = $DB->query("SELECT user_id, username, language, preferences
+                            FROM ".get_table_name('users')."
+                            WHERE  mail_host=? AND (username=? OR alias=?)",
+                            $host,
+                            $user,
+                            $user);
+
+  // user already registered -> overwrite username
+  if ($sql_arr = $DB->fetch_assoc($sql_result))
+    {
+    $user_id = $sql_arr['user_id'];
+    $user = $sql_arr['username'];
     }
 
   // exit if IMAP login failed
@@ -280,16 +292,16 @@
       array_merge($CONFIG, $user_prefs);
       }
 
+
     // set user specific language
     if (strlen($sql_arr['language']))
       $sess_user_lang = $_SESSION['user_lang'] = $sql_arr['language'];
-    
+      
     // update user's record
-    $DB->query(sprintf("UPDATE %s
-                        SET    last_login=NOW()
-                        WHERE  user_id=%d",
-                       get_table_name('users'),
-                       $user_id));
+    $DB->query("UPDATE ".get_table_name('users')."
+                SET    last_login=NOW()
+                WHERE  user_id=?",
+                $user_id);
     }
   // create new system user
   else if ($CONFIG['auto_create_user'])
@@ -301,7 +313,10 @@
     {
     $_SESSION['user_id']   = $user_id;
     $_SESSION['imap_host'] = $host;
+    $_SESSION['imap_port'] = $imap_port;
+    $_SESSION['imap_ssl']  = $imap_ssl;
     $_SESSION['username']  = $user;
+    $_SESSION['user_lang'] = $sess_user_lang;
     $_SESSION['password']  = encrypt_passwd($pass);
 
     // force reloading complete list of subscribed mailboxes    
@@ -318,27 +333,26 @@
 function rcmail_create_user($user, $host)
   {
   global $DB, $CONFIG, $IMAP;
+  
+  $DB->query("INSERT INTO ".get_table_name('users')."
+              (created, last_login, username, mail_host, language)
+              VALUES (NOW(), NOW(), ?, ?, ?)",
+              $user,
+              $host,
+		      $_SESSION['user_lang']);
 
-  $DB->query(sprintf("INSERT INTO %s
-                      (created, last_login, username, mail_host)
-                      VALUES (NOW(), NOW(), '%s', '%s')",
-                     get_table_name('users'),
-                     addslashes($user),
-                     addslashes($host)));
-
-  if ($user_id = $DB->insert_id())
+  if ($user_id = $DB->insert_id('user_ids'))
     {
     $user_email = strstr($user, '@') ? $user : sprintf('%s@%s', $user, $host);
     $user_name = $user!=$user_email ? $user : '';
     
     // also create a new identity record
-    $DB->query(sprintf("INSERT INTO %s
-                        (user_id, `default`, name, email)
-                        VALUES (%d, '1', '%s', '%s')",
-                       get_table_name('identities'),
-                       $user_id,
-                       addslashes($user_name),
-                       addslashes($user_email)));
+    $DB->query("INSERT INTO ".get_table_name('identities')."
+                (user_id, `default`, name, email)
+                VALUES (?, '1', ?, ?)",
+                $user_id,
+                $user_name,
+                $user_email);
                        
     // get existing mailboxes
     $a_mailboxes = $IMAP->list_mailboxes();
@@ -550,7 +564,7 @@
     // show a label
     case 'label':
       if ($attrib['name'] || $attrib['command'])
-        return rcube_label($attrib);
+        return rep_specialchars_output(rcube_label($attrib));
       break;
 
     // create a menu item
@@ -682,7 +696,7 @@
         else if (isset($GLOBALS['PAGE_TITLE']))
           return rep_specialchars_output("RoundCube|Mail :: ".$GLOBALS['PAGE_TITLE']);
         else if ($task=='mail' && ($mbox_name = $IMAP->get_mailbox_name()))
-          return "RoundCube|Mail :: $mbox_name";
+          return "RoundCube|Mail :: ".rep_specialchars_output(UTF7DecodeString($mbox_name), 'html', 'all');
         else
           return "RoundCube|Mail :: $task";
         }
@@ -856,7 +870,7 @@
   $table .= "<thead><tr>\n";
 
   foreach ($a_show_cols as $col)
-    $table .= '<td class="'.$col.'">' . rcube_label($col) . "</td>\n";
+    $table .= '<td class="'.$col.'">' . rep_specialchars_output(rcube_label($col)) . "</td>\n";
 
   $table .= "</tr></thead>\n<tbody>\n";
   

--
Gitblit v1.9.1