diff --git a/include/class.validator.php b/include/class.validator.php index d41bf027fe826c855893146dfee680c578598feb..2cec3fa3f2f83d92e9a1a8e04a4174f78b3cc2ca 100644 --- a/include/class.validator.php +++ b/include/class.validator.php @@ -172,10 +172,15 @@ class Validator { return false; $ip=trim($ip); - if(preg_match("/^[0-9]{1,3}(.[0-9]{1,3}){3}$/",$ip)) { - foreach(explode(".", $ip) as $block) - if($block<0 || $block>255 ) - return false; + # Thanks to http://stackoverflow.com/a/1934546 + if (function_exists('inet_pton')) { # PHP 5.1.0 + # Let the built-in library parse the IP address + return @inet_pton($ip) !== false; + } else if (preg_match( + '/^(?>(?>([a-f0-9]{1,4})(?>:(?1)){7}|(?!(?:.*[a-f0-9](?>:|$)){7,})' + .'((?1)(?>:(?1)){0,5})?::(?2)?)|(?>(?>(?1)(?>:(?1)){5}:|(?!(?:.*[a-f0-9]:){5,})' + .'(?3)?::(?>((?1)(?>:(?1)){0,3}):)?)?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])' + .'(?>\.(?4)){3}))$/iD', $ip)) { return true; } return false; diff --git a/include/upgrader/patches/aa4664af-b19dc97d.patch.sql b/include/upgrader/patches/aa4664af-b19dc97d.patch.sql new file mode 100644 index 0000000000000000000000000000000000000000..8b5ce9eb37fd24d4257f7e14ed1f7f4f962e1597 --- /dev/null +++ b/include/upgrader/patches/aa4664af-b19dc97d.patch.sql @@ -0,0 +1,23 @@ +/** + * Change IP address columns to have sufficient room to store IPv6 address + * + * @version 1.7-rc1 ipv6-addresses + */ + +ALTER TABLE `%TABLE_PREFIX%api_key` + CHANGE `ipaddr` `ipaddr` varchar(64) NOT NULL; + +ALTER TABLE `%TABLE_PREFIX%session` + CHANGE `user_id` `user_id` int(10) unsigned NOT NULL default '0' + COMMENT 'osTicket staff ID', + CHANGE `user_ip` `user_ip` varchar(64) NOT NULL; + +ALTER TABLE `%TABLE_PREFIX%syslog` + CHANGE `ip_address` `ip_address` varchar(64) NOT NULL; + +ALTER TABLE `%TABLE_PREFIX%ticket` + CHANGE `ip_address` `ip_address` varchar(64) NOT NULL default ''; + +-- Finished with patch +UPDATE `%TABLE_PREFIX%config` + SET `schema_signature`='b19dc97d19f7a30f59663c812d1f3ddc'; diff --git a/main.inc.php b/main.inc.php index 8ada794f952c5528c2cb9529157a85eff082f311..d4d44fde7d72738d3b4e404f1e713b3e0ae9f01d 100644 --- a/main.inc.php +++ b/main.inc.php @@ -63,7 +63,7 @@ #Current version && schema signature (Changes from version to version) define('THIS_VERSION','1.7-DPR4'); //Shown on admin panel - define('SCHEMA_SIGNATURE','aa4664afc3b43d4068eb2e82684fc28e'); //MD5 signature of the db schema. (used to trigger upgrades) + define('SCHEMA_SIGNATURE','b19dc97d19f7a30f59663c812d1f3ddc'); //MD5 signature of the db schema. (used to trigger upgrades) #load config info $configfile=''; diff --git a/setup/inc/sql/osticket-v1.7-mysql.sql b/setup/inc/sql/osticket-v1.7-mysql.sql index b8bb7ce263dfbcb7442fda8b2e15b9edebdbb48c..7f29d024f38ae354614e51a083eec9a148968df7 100644 --- a/setup/inc/sql/osticket-v1.7-mysql.sql +++ b/setup/inc/sql/osticket-v1.7-mysql.sql @@ -3,7 +3,7 @@ DROP TABLE IF EXISTS `%TABLE_PREFIX%api_key`; CREATE TABLE `%TABLE_PREFIX%api_key` ( `id` int(10) unsigned NOT NULL auto_increment, `isactive` tinyint(1) NOT NULL default '1', - `ipaddr` varchar(16) NOT NULL, + `ipaddr` varchar(64) NOT NULL, `apikey` varchar(255) NOT NULL, `notes` text, `updated` datetime NOT NULL, @@ -423,9 +423,8 @@ CREATE TABLE `%TABLE_PREFIX%session` ( `session_data` longtext collate utf8_unicode_ci, `session_expire` datetime default NULL, `session_updated` datetime default NULL, - `user_id` int(10) unsigned NOT NULL default '0' COMMENT 'osTicket staff -ID', - `user_ip` varchar(32) collate utf8_unicode_ci NOT NULL, + `user_id` int(10) unsigned NOT NULL default '0' COMMENT 'osTicket staff ID', + `user_ip` varchar(64) NOT NULL, `user_agent` varchar(255) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`session_id`), KEY `updated` (`session_updated`), @@ -497,7 +496,7 @@ CREATE TABLE `%TABLE_PREFIX%syslog` ( `title` varchar(255) NOT NULL, `log` text NOT NULL, `logger` varchar(64) NOT NULL, - `ip_address` varchar(16) NOT NULL, + `ip_address` varchar(64) NOT NULL, `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`log_id`), @@ -546,7 +545,7 @@ CREATE TABLE `%TABLE_PREFIX%ticket` ( `subject` varchar(64) NOT NULL default '[no subject]', `phone` varchar(16) default NULL, `phone_ext` varchar(8) default NULL, - `ip_address` varchar(16) NOT NULL default '', + `ip_address` varchar(64) NOT NULL default '', `status` enum('open','closed') NOT NULL default 'open', `source` enum('Web','Email','Phone','API','Other') NOT NULL default 'Other', diff --git a/setup/inc/sql/osticket-v1.7-mysql.sql.md5 b/setup/inc/sql/osticket-v1.7-mysql.sql.md5 index 4bdfcd1ce270c2ca67c9c9f461bef15d010936f6..a1d99aa526afd9af5d19e5bd1d8c98ea7608ab91 100644 --- a/setup/inc/sql/osticket-v1.7-mysql.sql.md5 +++ b/setup/inc/sql/osticket-v1.7-mysql.sql.md5 @@ -1 +1 @@ -aa4664afc3b43d4068eb2e82684fc28e +b19dc97d19f7a30f59663c812d1f3ddc