- Patch #3962 by deekayen: improved error message when a blocked user attempts to login.

4.7.x
Dries Buytaert 2005-06-21 18:21:08 +00:00
parent e550f84162
commit 4c77761efb
3 changed files with 46 additions and 13 deletions

View File

@ -781,9 +781,8 @@ function drupal_get_messages() {
/**
* Perform an access check for a given mask and rule type. Rules are usually created via admin/access/rules page.
*
*/
function drupal_deny($type, $mask) {
function drupal_is_denied($type, $mask) {
$allow = db_fetch_object(db_query("SELECT * FROM {access} WHERE status = 1 AND type = '%s' AND LOWER('%s') LIKE LOWER(mask)", $type, $mask));
$deny = db_fetch_object(db_query("SELECT * FROM {access} WHERE status = 0 AND type = '%s' AND LOWER('%s') LIKE LOWER(mask)", $type, $mask));
@ -801,7 +800,7 @@ include_once "$config/settings.php";
include_once 'includes/database.inc';
// deny access to hosts which were banned. t() is not yet available.
if (drupal_deny('host', $_SERVER['REMOTE_ADDR'])) {
if (drupal_is_denied('host', $_SERVER['REMOTE_ADDR'])) {
header('HTTP/1.0 403 Forbidden');
print "Sorry, ". $_SERVER['REMOTE_ADDR']. " has been banned.";
exit();

View File

@ -338,6 +338,18 @@ function user_access($string, $account = NULL) {
return FALSE;
}
/**
* Checks for usernames blocked by user administration
*
* @return boolean true for blocked users, false for active
*/
function user_is_blocked($name) {
$allow = db_fetch_object(db_query("SELECT * FROM {users} WHERE status = 1 AND name = LOWER('%s')", $name));
$deny = db_fetch_object(db_query("SELECT * FROM {users} WHERE status = 0 AND name = LOWER('%s')", $name));
return $deny && !$allow;
}
/**
* Send an e-mail message.
*/
@ -798,8 +810,13 @@ function user_login($edit = array(), $msg = '') {
drupal_goto('user');
}
if (drupal_deny('user', $edit['name'])) {
$error = t('The name %s has been denied access.', array('%s' => theme('placeholder', $edit['name'])));
if (user_is_blocked($edit['name'])) {
// blocked in user administration
$error = t('The username %name has been blocked.', array('%name' => theme('placeholder', $edit['name'])));
}
else if (drupal_is_denied('user', $edit['name'])) {
// denied by access controls
$error = t('The name %name is a reserved username.', array('%name' => theme('placeholder', $edit['name'])));
}
else if ($edit['name'] && $edit['pass']) {
@ -1116,7 +1133,7 @@ function user_edit_validate($uid, &$edit) {
else if (db_num_rows(db_query("SELECT uid FROM {users} WHERE uid != %d AND LOWER(name) = LOWER('%s')", $uid, $edit['name'])) > 0) {
form_set_error('name', t('The name %name is already taken.', array('%name' => theme('placeholder', $edit['name']))));
}
else if (drupal_deny('user', $edit['name'])) {
else if (drupal_is_denied('user', $edit['name'])) {
form_set_error('name', t('The name %name has been denied access.', array('%name' => theme('placeholder', $edit['name']))));
}
@ -1127,7 +1144,7 @@ function user_edit_validate($uid, &$edit) {
else if (db_num_rows(db_query("SELECT uid FROM {users} WHERE uid != %d AND LOWER(mail) = LOWER('%s')", $uid, $edit['mail'])) > 0) {
form_set_error('mail', t('The e-mail address %email is already taken.', array('%email' => theme('placeholder', $edit['mail']))));
}
else if (drupal_deny('mail', $edit['mail'])) {
else if (drupal_is_denied('mail', $edit['mail'])) {
form_set_error('mail', t('The e-mail address %email has been denied access.', array('%email' => theme('placeholder', $edit['mail']))));
}
@ -1384,7 +1401,7 @@ function user_admin_access_check() {
$edit = $_POST['edit'];
if ($op) {
if (drupal_deny($edit['type'], $edit['test'])) {
if (drupal_is_denied($edit['type'], $edit['test'])) {
drupal_set_message(t('%test is not allowed.', array('%test' => theme('placeholder', $edit['test']))));
}
else {

View File

@ -338,6 +338,18 @@ function user_access($string, $account = NULL) {
return FALSE;
}
/**
* Checks for usernames blocked by user administration
*
* @return boolean true for blocked users, false for active
*/
function user_is_blocked($name) {
$allow = db_fetch_object(db_query("SELECT * FROM {users} WHERE status = 1 AND name = LOWER('%s')", $name));
$deny = db_fetch_object(db_query("SELECT * FROM {users} WHERE status = 0 AND name = LOWER('%s')", $name));
return $deny && !$allow;
}
/**
* Send an e-mail message.
*/
@ -798,8 +810,13 @@ function user_login($edit = array(), $msg = '') {
drupal_goto('user');
}
if (drupal_deny('user', $edit['name'])) {
$error = t('The name %s has been denied access.', array('%s' => theme('placeholder', $edit['name'])));
if (user_is_blocked($edit['name'])) {
// blocked in user administration
$error = t('The username %name has been blocked.', array('%name' => theme('placeholder', $edit['name'])));
}
else if (drupal_is_denied('user', $edit['name'])) {
// denied by access controls
$error = t('The name %name is a reserved username.', array('%name' => theme('placeholder', $edit['name'])));
}
else if ($edit['name'] && $edit['pass']) {
@ -1116,7 +1133,7 @@ function user_edit_validate($uid, &$edit) {
else if (db_num_rows(db_query("SELECT uid FROM {users} WHERE uid != %d AND LOWER(name) = LOWER('%s')", $uid, $edit['name'])) > 0) {
form_set_error('name', t('The name %name is already taken.', array('%name' => theme('placeholder', $edit['name']))));
}
else if (drupal_deny('user', $edit['name'])) {
else if (drupal_is_denied('user', $edit['name'])) {
form_set_error('name', t('The name %name has been denied access.', array('%name' => theme('placeholder', $edit['name']))));
}
@ -1127,7 +1144,7 @@ function user_edit_validate($uid, &$edit) {
else if (db_num_rows(db_query("SELECT uid FROM {users} WHERE uid != %d AND LOWER(mail) = LOWER('%s')", $uid, $edit['mail'])) > 0) {
form_set_error('mail', t('The e-mail address %email is already taken.', array('%email' => theme('placeholder', $edit['mail']))));
}
else if (drupal_deny('mail', $edit['mail'])) {
else if (drupal_is_denied('mail', $edit['mail'])) {
form_set_error('mail', t('The e-mail address %email has been denied access.', array('%email' => theme('placeholder', $edit['mail']))));
}
@ -1384,7 +1401,7 @@ function user_admin_access_check() {
$edit = $_POST['edit'];
if ($op) {
if (drupal_deny($edit['type'], $edit['test'])) {
if (drupal_is_denied($edit['type'], $edit['test'])) {
drupal_set_message(t('%test is not allowed.', array('%test' => theme('placeholder', $edit['test']))));
}
else {