Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-25197

The statement set password=password('') executed in PS mode fails in case it is run by a user with expired password

Details

    Description

      A user with an expired password connected to a server can't assign new password with the statement "SET password=..." if the statement is run in PS mode, for example when it is submitted to server via binary protocol.

      Test case is below.

      CREATE USER user1@localhost PASSWORD EXPIRE
      SET GLOBAL disconnect_on_expired_password=OFF;
      connect(con1,localhost,user1);
      connection con1;
      --error ER_MUST_CHANGE_PASSWORD
      select 1;
       
      -- The following statement fails with the error ER_MUST_CHANGE_PASSWORD.
      PREPARE stmt FROM "SET password=password('')";
      

      In case the statement

      SET password=password('');
      

      is run as a regular statement it is executed successfully.

      Attachments

        Issue Links

          Activity

            OK to push, but please merge all commits in one befor doing it.

            sanja Oleksandr Byelkin added a comment - OK to push, but please merge all commits in one befor doing it.
            shulga Dmitry Shulga added a comment -

            Please don't forget to apply the following change set against 10.6.
            This change set wasn't applied for 10.4 and 10.5 since the data member

              thd->cur_stm
            

            was added only in 10.6

            --- a/sql/sql_prepare.cc
            +++ b/sql/sql_prepare.cc
            @@ -4386,6 +4386,7 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
                 thd->restore_backup_statement(this, &stmt_backup);
                 thd->restore_active_arena(this, &stmt_backup);
                 thd->stmt_arena= old_stmt_arena;
            +    thd->cur_stmt = save_cur_stmt;
                 my_error(ER_MUST_CHANGE_PASSWORD, MYF(0));
                 DBUG_RETURN(true);
               }
            

            shulga Dmitry Shulga added a comment - Please don't forget to apply the following change set against 10.6. This change set wasn't applied for 10.4 and 10.5 since the data member thd->cur_stm was added only in 10.6 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -4386,6 +4386,7 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len) thd->restore_backup_statement(this, &stmt_backup); thd->restore_active_arena(this, &stmt_backup); thd->stmt_arena= old_stmt_arena; + thd->cur_stmt = save_cur_stmt; my_error(ER_MUST_CHANGE_PASSWORD, MYF(0)); DBUG_RETURN(true); }

            People

              shulga Dmitry Shulga
              shulga Dmitry Shulga
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.