Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mantisbt/mantisbt
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 9f72187414ff
Choose a base ref
...
head repository: mantisbt/mantisbt
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: ab63d69acdb7
Choose a head ref
  • 2 commits
  • 2 files changed
  • 1 contributor

Commits on Aug 30, 2012

  1. Add user_set_fields function

    Affects #14673: LDAP login performs unnecessary SQL updates
    rombert committed Aug 30, 2012
    Copy the full SHA
    9c75204 View commit details
  2. ldap_api: use only one SQL call to update user profile

    Fixes #14673: LDAP login performs unnecessary SQL updates
    rombert committed Aug 30, 2012

    Verified

    This commit was signed with the committer’s verified signature.
    haoqunjiang Haoqun Jiang
    Copy the full SHA
    ab63d69 View commit details
Showing with 46 additions and 20 deletions.
  1. +7 −6 core/ldap_api.php
  2. +39 −14 core/user_api.php
13 changes: 7 additions & 6 deletions core/ldap_api.php
Original file line number Diff line number Diff line change
@@ -401,17 +401,18 @@ function ldap_authenticate_by_username( $p_username, $p_password ) {
$t_user_id = user_get_id_by_name( $p_username );

if ( false !== $t_user_id ) {
user_set_field( $t_user_id, 'password', md5( $p_password ) );


$t_fields_to_update = array('password' => md5( $p_password ));

if ( ON == config_get( 'use_ldap_realname' ) ) {
$t_realname = ldap_realname( $t_user_id );
user_set_field( $t_user_id, 'realname', $t_realname );
$t_fields_to_update['realname'] = ldap_realname( $t_user_id );
}

if ( ON == config_get( 'use_ldap_email' ) ) {
$t_email = ldap_email_from_username( $p_username );
user_set_field( $t_user_id, 'email', $t_email );
$t_fields_to_update['email'] = ldap_email_from_username( $p_username );
}

user_set_fields( $t_user_id, $t_fields_to_update );
}
log_event( LOG_LDAP, "User '$p_username' authenticated" );
} else {
53 changes: 39 additions & 14 deletions core/user_api.php
Original file line number Diff line number Diff line change
@@ -1228,25 +1228,50 @@ function user_increment_lost_password_in_progress_count( $p_user_id ) {
return true;
}

# --------------------
# Set a user field
function user_set_field( $p_user_id, $p_field_name, $p_field_value ) {
$c_user_id = db_prepare_int( $p_user_id );
$c_field_name = db_prepare_string( $p_field_name );
/**
* Sets multiple fields on a user
*
* @param int $p_user_id
* @param array $p_fields keys are the field names and the values are the field values
*/
function user_set_fields( $p_user_id, $p_fields ) {

if( $p_field_name != 'protected' ) {
$c_user_id = db_prepare_int( $p_user_id );

if ( !array_key_exists('protected', $p_fields) ) {
user_ensure_unprotected( $p_user_id );
}

$t_user_table = db_get_table( 'mantis_user_table' );

$query = 'UPDATE ' . $t_user_table .
' SET ' . $c_field_name . '=' . db_param() .
' WHERE id=' . db_param();

db_query_bound( $query, Array( $p_field_value, $c_user_id ) );


$t_query = 'UPDATE ' . $t_user_table;
$t_parameters = Array();

foreach ( $p_fields as $t_field_name => $t_field_value ) {

$c_field_name = db_prepare_string( $t_field_name );

if ( count ( $t_parameters) == 0 )
$t_query .= ' SET '. $c_field_name. '=' . db_param();
else
$t_query .= ' , ' . $c_field_name. '=' . db_param();

array_push( $t_parameters, $t_field_value );
}

$t_query .= ' WHERE id=' . db_param();
array_push ( $t_parameters, $c_user_id );

db_query_bound( $t_query, $t_parameters );

user_clear_cache( $p_user_id );
}

# --------------------
# Set a user field
function user_set_field( $p_user_id, $p_field_name, $p_field_value ) {

user_set_fields($p_user_id, array ( $p_field_name => $p_field_value ) );

# db_query errors on failure so:
return true;