Solo necesita llamar user_save()usando un código similar al siguiente.
$edit['pass'] = 'New password';
user_save($account, $edit);
$accountcontiene el objeto de usuario para la cuenta de usuario para modificar. Obtengo que lo cargues usando user_load(), pero también podría ser el objeto de usuario para el usuario actualmente conectado. En el último caso, Drupal regenerará la sesión usando el siguiente código (parte de user_save () ).
  // If the password changed, delete all open sessions and recreate
  // the current one.
  if ($account->pass != $account->original->pass) {
    drupal_session_destroy_uid($account->uid);
    if ($account->uid == $GLOBALS['user']->uid) {
      drupal_session_regenerate();
    }
  }
La contraseña en $edit['pass']es la contraseña simple. user_save()lo reemplazará con su hash usando el siguiente código (al comienzo de la función).
if (!empty($edit['pass'])) {
  // Allow alternate password hashing schemes.
  require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
  $edit['pass'] = user_hash_password(trim($edit['pass']));
  // Abort if the hashing failed and returned FALSE.
  if (!$edit['pass']) {
    return FALSE;
  }
}
Como alternativa, puede usar drupal_submit_form () .
$form_state = array();
$form_state['user'] = $account;
$form_state['values']['pass']['pass1'] = 'New password';
$form_state['values']['pass']['pass2'] = 'New password';
$form_state['values']['op'] = t('Save');
drupal_form_submit('user_profile_form', $form_state);
De esta manera, si tiene algún módulo que, por ejemplo, valide la contraseña, su código se ejecutará y obtendrá cualquier código de error de form_get_errors () .