I hope this will helps someone else having this problem:
We had problems logging into Horde after an overnight update to 10.9.0-Release_32 from 10.8.2-Release_119. Customers would get to the Horde login page (http://example.com:2095/horde/login.php) successfully, but the login would silently fail when they click the Log in button - the page would just reload with no error messages, PHP errors, etc.
After some digging and trying the usual tricks (/scripts/fix*, /scripts/upcp --force, etc.), I found that the new version of Horde either has new MySQL tables that were not created during the update, or the tables were deleted for some reason during the update.
The script to add the new tables is located in /usr/local/cpanel/base/horde/scripts/sql/create.mysql.sql. You can either modify the file (it is designed for a new install - it includes commands for creating the 'horde' user) and run it, or I've copied the commands I had to run in MySQL below.
(The easiest way to run these commands is to log into phpMyAdmin from WHM, select the 'horde' database, click on the SQL tab, and enter the commands into the text field. I ran them in chunks, but you may be able to run the whole thing at once.)
We had problems logging into Horde after an overnight update to 10.9.0-Release_32 from 10.8.2-Release_119. Customers would get to the Horde login page (http://example.com:2095/horde/login.php) successfully, but the login would silently fail when they click the Log in button - the page would just reload with no error messages, PHP errors, etc.
After some digging and trying the usual tricks (/scripts/fix*, /scripts/upcp --force, etc.), I found that the new version of Horde either has new MySQL tables that were not created during the update, or the tables were deleted for some reason during the update.
The script to add the new tables is located in /usr/local/cpanel/base/horde/scripts/sql/create.mysql.sql. You can either modify the file (it is designed for a new install - it includes commands for creating the 'horde' user) and run it, or I've copied the commands I had to run in MySQL below.
(The easiest way to run these commands is to log into phpMyAdmin from WHM, select the 'horde' database, click on the SQL tab, and enter the commands into the text field. I ran them in chunks, but you may be able to run the whole thing at once.)
Code:
CREATE TABLE horde_users (
user_uid VARCHAR(255) NOT NULL,
user_pass VARCHAR(255) NOT NULL,
user_soft_expiration_date INT,
user_hard_expiration_date INT,
PRIMARY KEY (user_uid)
);
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_users TO horde@localhost;
CREATE TABLE horde_prefs (
pref_uid VARCHAR(200) NOT NULL,
pref_scope VARCHAR(16) NOT NULL DEFAULT '',
pref_name VARCHAR(32) NOT NULL,
pref_value LONGTEXT NULL,
PRIMARY KEY (pref_uid, pref_scope, pref_name)
);
CREATE INDEX pref_uid_idx ON horde_prefs (pref_uid);
CREATE INDEX pref_scope_idx ON horde_prefs (pref_scope);
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_prefs TO horde@localhost;
CREATE TABLE horde_datatree (
datatree_id INT NOT NULL,
group_uid VARCHAR(255) NOT NULL,
user_uid VARCHAR(255) NOT NULL,
datatree_name VARCHAR(255) NOT NULL,
datatree_parents VARCHAR(255) NOT NULL,
datatree_order INT,
datatree_data TEXT,
datatree_serialized SMALLINT DEFAULT 0 NOT NULL,
PRIMARY KEY (datatree_id)
);
CREATE INDEX datatree_datatree_name_idx ON horde_datatree (datatree_name);
CREATE INDEX datatree_group_idx ON horde_datatree (group_uid);
CREATE INDEX datatree_user_idx ON horde_datatree (user_uid);
CREATE INDEX datatree_serialized_idx ON horde_datatree (datatree_serialized);
CREATE TABLE horde_datatree_attributes (
datatree_id INT NOT NULL,
attribute_name VARCHAR(255) NOT NULL,
attribute_key VARCHAR(255) DEFAULT '' NOT NULL,
attribute_value TEXT
);
CREATE INDEX datatree_attribute_idx ON horde_datatree_attributes (datatree_id);
CREATE INDEX datatree_attribute_name_idx ON horde_datatree_attributes (attribute_name);
CREATE INDEX datatree_attribute_key_idx ON horde_datatree_attributes (attribute_key);
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_datatree TO horde@localhost;
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_datatree_attributes TO horde@localhost;
CREATE TABLE horde_tokens (
token_address VARCHAR(100) NOT NULL,
token_id VARCHAR(32) NOT NULL,
token_timestamp BIGINT NOT NULL,
PRIMARY KEY (token_address, token_id)
);
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_tokens TO horde@localhost;
CREATE TABLE horde_vfs (
vfs_id BIGINT NOT NULL,
vfs_type SMALLINT NOT NULL,
vfs_path VARCHAR(255) NOT NULL,
vfs_name VARCHAR(255) NOT NULL,
vfs_modified BIGINT NOT NULL,
vfs_owner VARCHAR(255) NOT NULL,
vfs_data LONGBLOB,
PRIMARY KEY (vfs_id)
);
CREATE INDEX vfs_path_idx ON horde_vfs (vfs_path);
CREATE INDEX vfs_name_idx ON horde_vfs (vfs_name);
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_vfs TO horde@localhost;
CREATE TABLE horde_histories (
history_id BIGINT NOT NULL,
object_uid VARCHAR(255) NOT NULL,
history_action VARCHAR(32) NOT NULL,
history_ts BIGINT NOT NULL,
history_desc TEXT,
history_who VARCHAR(255),
history_extra TEXT,
PRIMARY KEY (history_id)
);
CREATE TABLE horde_histories_seq (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (id)
);
CREATE TABLE horde_datatree_seq (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (id)
);
CREATE INDEX history_action_idx ON horde_histories (history_action);
CREATE INDEX history_ts_idx ON horde_histories (history_ts);
CREATE INDEX history_uid_idx ON horde_histories (object_uid);
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_histories TO horde@localhost;
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_histories_seq TO horde@localhost;
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_datatree_seq TO horde@localhost;
CREATE TABLE horde_sessionhandler (
session_id VARCHAR(32) NOT NULL,
session_lastmodified INT NOT NULL,
session_data LONGBLOB,
PRIMARY KEY (session_id)
) ENGINE = InnoDB;
GRANT SELECT, INSERT, UPDATE, DELETE ON horde_sessionhandler TO horde@localhost;
FLUSH PRIVILEGES;