function system_update_7003

Update {blocked_ips} with valid IP addresses from {access}.

Related topics

File

modules/system/system.install, line 1940

Code

function system_update_7003() {
    $messages = array();
    $type = 'host';
    $result = db_query("SELECT mask FROM {access} WHERE status = :status AND type = :type", array(
        ':status' => 0,
        ':type' => $type,
    ));
    foreach ($result as $blocked) {
        if (filter_var($blocked->mask, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) !== FALSE) {
            db_insert('blocked_ips')->fields(array(
                'ip' => $blocked->mask,
            ))
                ->execute();
        }
        else {
            $invalid_host = check_plain($blocked->mask);
            $messages[] = t('The host !host is no longer blocked because it is not a valid IP address.', array(
                '!host' => $invalid_host,
            ));
        }
    }
    if (isset($invalid_host)) {
        drupal_set_message('Drupal no longer supports wildcard IP address blocking. Visitors whose IP addresses match ranges you have previously set using <em>access rules</em> will no longer be blocked from your site when you put the site online. See the <a href="http://drupal.org/node/24302">IP address and referrer blocking Handbook page</a> for alternative methods.', 'warning');
    }
    // Make sure not to block any IP addresses that were specifically allowed by access rules.
    if (!empty($result)) {
        $result = db_query("SELECT mask FROM {access} WHERE status = :status AND type = :type", array(
            ':status' => 1,
            ':type' => $type,
        ));
        $or = db_condition('or');
        foreach ($result as $allowed) {
            $or->condition('ip', $allowed->mask, 'LIKE');
        }
        if (count($or)) {
            db_delete('blocked_ips')->condition($or)
                ->execute();
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.