diff --git a/modules/statistics/statistics.test b/modules/statistics/statistics.test index 955f30b9902f88fa24219ff1179c7840862fbc40..5375d1f25d3028f882dbafa07279e574753c35b1 100644 --- a/modules/statistics/statistics.test +++ b/modules/statistics/statistics.test @@ -22,7 +22,7 @@ class StatisticsBlockVisitorsTestCase extends DrupalWebTestCase { // Create user. $this->blocking_user = $this->drupalCreateUser(array('block IP addresses', 'access statistics')); - // Insert dummy access by anonymous user into accessi log. + // Insert dummy access by anonymous user into access log. db_query("INSERT INTO {accesslog} (title, path, url, hostname, uid, sid, timer, timestamp) values('%s', '%s', '%s', '%s', %d, '%s', %d, %d)", 'test', 'node/1', 'http://example.com', '192.168.1.1', '0', '10', '10', time()); } diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index 7ebac6c37a962dde65270688e1edc3376948f34a..87ef36dd9ca78fce64fd81aad0c6ff01d0f381f7 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -1137,17 +1137,20 @@ function system_ip_blocking_form($form_state) { } function system_ip_blocking_form_validate($form, &$form_state) { - $ip = $form_state['values']['ip']; + $ip = trim($form_state['values']['ip']); if (db_result(db_query("SELECT * FROM {blocked_ips} WHERE ip = '%s'", $ip))) { form_set_error('ip', t('This IP address is already blocked.')); } + else if ($ip == ip_address()) { + form_set_error('ip', t('You may not block your own IP address.')); + } else if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) == FALSE) { form_set_error('ip', t('Please enter a valid IP address.')); } } function system_ip_blocking_form_submit($form, &$form_state) { - $ip = $form_state['values']['ip']; + $ip = trim($form_state['values']['ip']); db_query("INSERT INTO {blocked_ips} (ip) VALUES ('%s')", $ip); drupal_set_message(t('The IP address %ip has been blocked.', array('%ip' => $ip))); $form_state['redirect'] = 'admin/settings/ip-blocking'; @@ -2260,4 +2263,4 @@ function theme_system_themes_form($form) { $output = theme('table', $header, $rows); $output .= drupal_render($form); return $output; -} +} \ No newline at end of file diff --git a/modules/system/system.test b/modules/system/system.test index 657c4b95e46399601c3b6f6bbdf79188abec8854..a8f947740ee76ba24aed334171afa7a7cb5ad040 100644 --- a/modules/system/system.test +++ b/modules/system/system.test @@ -126,3 +126,72 @@ class EnableDisableCoreTestCase extends DrupalWebTestCase { } } } + +class IPAddressBlocking extends DrupalWebTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('IP address blocking'), + 'description' => t('Tests IP address blocking.'), + 'group' => t('System') + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + parent::setUp(); + + // Create user. + $this->blocking_user = $this->drupalCreateUser(array('block IP addresses', 'access statistics')); + } + + /** + * Tests a variety of user input to confirm correct validation and saving of data. + */ + function testIPAddressValidation() { + $this->drupalLogin($this->blocking_user); + $this->drupalGet('admin/settings/ip-blocking'); + + // Block a valid IP address. + $edit = array(); + $edit['ip'] = '192.168.1.1'; + $this->drupalPost('admin/settings/ip-blocking', $edit, t('Save')); + $ip = db_result(db_query("SELECT iid from {blocked_ips} WHERE ip = '%s'", $edit['ip'])); + $this->assertNotNull($ip, t('IP address found in database')); + $this->assertRaw(t('The IP address %ip has been blocked.', array('%ip' => $edit['ip'])), t('IP address was blocked.')); + + // Try to block an IP address that's already blocked. + $edit = array(); + $edit['ip'] = '192.168.1.1'; + $this->drupalPost('admin/settings/ip-blocking', $edit, t('Save')); + $this->assertText(t('This IP address is already blocked.')); + + // Try to block a reserved IP address. + $edit = array(); + $edit['ip'] = '255.255.255.255'; + $this->drupalPost('admin/settings/ip-blocking', $edit, t('Save')); + $this->assertText(t('Please enter a valid IP address.')); + + // Try to block a reserved IP address. + $edit = array(); + $edit['ip'] = 'test.example.com'; + $this->drupalPost('admin/settings/ip-blocking', $edit, t('Save')); + $this->assertText(t('Please enter a valid IP address.')); + + // Submit an empty form. + $edit = array(); + $edit['ip'] = ''; + $this->drupalPost('admin/settings/ip-blocking', $edit, t('Save')); + $this->assertText(t('Please enter a valid IP address.')); + + // Submit your own IP address. This fails, although it works when testing manually. + $edit = array(); + $edit['ip'] = ip_address(); + $this->drupalPost('admin/settings/ip-blocking', $edit, t('Save')); + $this->assertText(t('You may not block your own IP address.')); + } +}