1. 21 Sep, 2022 2 commits
    • Alexey Botchkov's avatar
      Backport fix for MDEV-29352 to 10.3-10.5 · f5e4e154
      Alexey Botchkov authored
      The fix for MDEV-29352 was pushed to 10.6+ but the code causing the
      bug is old and the bug is unlikely to be a recent regression in 10.6.
      So, we apply the fix also to older versions, 10.3-10.5.
      
      The original commit message:
      
      MDEV-29352 SIGSEGV's in strlen and unknown location on optimized builds at SHUTDOWN
      
      When the UDF creation frails to write the newly created UDF into
      the related system table, the UDF is still created in memory.
      
      However, as it is now, the related DLL is unloaded in this case right
      in the mysql_create_function. And failure happens when the UDF handle
      is freed and tries to unload the respective DLL which is still unloaded.
      f5e4e154
    • Ian Gilfillan's avatar
      MDEV-29275 Fix server/Docs typos · b9c1c07f
      Ian Gilfillan authored
      b9c1c07f
  2. 20 Sep, 2022 3 commits
    • Brandon Nesterenko's avatar
      MDEV-28986: rpl tests sometimes failing on freebsd builders · b6bf7cd1
      Brandon Nesterenko authored
      The rpl_row_img_sequence test can fail on resource
      constrained buildbot machines due to its high
      space consumption. To reduce this footprint, the
      test is split into three parts, one for each value
      of the binlog_row_img variable.
      b6bf7cd1
    • Sergei Golubchik's avatar
      MDEV-29480 spider group by handler wrong result on order by aggregate alias · fc8a7655
      Sergei Golubchik authored
      when generating a query to send to a remote server, spider generates
      new aliases for all tables in the query (at least in the group_by handler).
      First it walks all the expressions and create a list of new table aliases
      to use for each field. Then - in init_scan() - it actually generates the
      query, taking for each field the next alias from the list.
      
      It dives recursively into functions, for example, for func(f1) it'll
      go in, will see the field f1 and append to the list the new name for
      the table of f1. This works fine for non-aggregate functions and
      for aggregate functions in the SELECT list. But aggregate functions
      in the ORDER BY are always references to the select list, they never
      need to be qualified with a table name. That is, even if there is a
      field name as an argument of an aggregate function in the ORDER BY
      it must not append a table alias to the list. Let's just skip
      aggregate functions when analyzing ORDER BY for table aliases.
      
      This fixes spider/bugfix.mdev_29008
      (was observed on aarch64, x86, ppc64le, and amd64 --rr)
      fc8a7655
    • Alexander Barkov's avatar
  3. 19 Sep, 2022 7 commits
  4. 15 Sep, 2022 1 commit
  5. 14 Sep, 2022 7 commits
    • Sergei Golubchik's avatar
      MDEV-22647 Assertion `!check_audit_mask(mysql_global_audit_mask, event_class_mask)' · beffef9f
      Sergei Golubchik authored
      
      check_audit_mask(mysql_global_audit_mask, event_class_mask) is tested in
      mysql_audit_general_log() and then assert in mysql_audit_acquire_plugins()
      verifies that the condition still holds.
      But this code path is not protected by LOCK_audit_mask, so
      mysql_global_audit_mask can change its value between the if() and the
      assert. That is, the assert is invalid and will fire if the
      audit plugin is unloaded concurrently with mysql_audit_general_log().
      
      Nothing bad will happen in this case though, we'll just do a useless
      loop over all remaining installed audit plugins.
      
      That is, the fix is simply to remove the assert.
      beffef9f
    • Anel Husakovic's avatar
      Add missing comment and remove unnecessary initialization · b7928f75
      Anel Husakovic authored
      - Commit c8948b0d introduced `get_one_variable()` - updating missing argument.
      - Remove caller setting of empty string in `rpl_filter`, since underlying functions will do the same
        (commit 9584cbe7 introduced).
      
      Reviewed by: <brandon.nesterenko@mariadb.com>
      b7928f75
    • Vicențiu Ciorbaru's avatar
      MDEV-29509 execute granted indirectly (via roles) doesn't always work · 16b2bb90
      Vicențiu Ciorbaru authored
      The issue manifests due to a bug in mysql_routine_grant. This was a side
      effect of e46eea86 which fixed the problem of not giving appropriate error
      message (ER_NONEXISTING_PROC_GRANT) when a routine grant existed due to role
      inheritance.
      
      When granting a routine privilege, it is possible to have a GRANT_NAME
      entry already created from an inherited role, but with it's init_privs
      set to 0.
      
      In this case we must not create a *new* grant entry, but we must edit
      this grant entry to set its init_privs.
      
      Note that this case was already covered by MDEV-29458, however due to a
      forgotten "flush privileges;" the actual code path never got hit.
      Remove the flush privilege command as it was never intended to be there
      in the first place.
      16b2bb90
    • Vicențiu Ciorbaru's avatar
      5ad8cd93
    • Vicențiu Ciorbaru's avatar
      MDEV-29458: Role grant commands do not propagate all grants · 7735ba76
      Vicențiu Ciorbaru authored
      There was an issue in updating in-memory role datastructures when
      propagating role grants.
      
      The issue is that changing a particular role's privilege (on any
      privilege level, global, database, etc.)
      was done such that it overwrote the entire set of bits for that
      particular level of privileges.
      
      For example:
      grant select on *.* to r1 -> sets the access bits to r1 to select,
      regardless of what bits were present for role r1 (inherited from any
      other roles).
      
      Before this fix, the rights of role r1 were propagated to any roles r1
      was granted to, however the propagated rights did *not* include the
      complete rights r1 inherited from its own grants.
      
      For example:
        grant r2 to r1;
        grant select on *.* to r2;
        grant insert on *.* to r1; # This command completely disregards the
                                   # select privilege from r2.
      
      In order to correct this, ensure that before rights are propagated
      onwards, that the current's role rights have been updated from its
      grants.
      
      Additionally, the patch exposed a flaw in the DROP ROLE code.
      When deleting a role we removed all its previous grants, but what
      remained was the actual links of roles granted to the dropped role.
      Having these links present when propagating grants meant that we would
      have leftover ACL_xxx entries.
      
      Ensure that the links are removed before propagating grants.
      7735ba76
    • Vicențiu Ciorbaru's avatar
      MDEV-29465: Inherited columns privs for roles wrongly set mysql.tables_priv column · 145932a5
      Vicențiu Ciorbaru authored
      There was a bug in the ACL internal data structures GRANT_TABLE and
      GRANT_COLUMN. The semantics are: GRANT_TABLE::init_cols and
      GRANT_COLUMN::init_privs represent the bits that correspond to the
      privilege bits stored in the physical tables. The other struct members
      GRANT_TABLE::cols and GRANT_COLUMN::privs represent the actual access
      bits, as they may be modified through role grants.
      
      The error in logic was mixing the two fields and thus we ended up
      storing the logical access bits in the physical tables, instead of the
      physical (init_xxx) bits.
      
      This caused subsequent DBUG_ASSERT failures when dropping the involved
      roles.
      145932a5
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29479 I_S.INNODB_SYS_TABLESPACES doesn't have temporary tablespace information · d7aefc0f
      Thirunarayanan Balathandayuthapani authored
      - innodb_sys_tablespaces view in information schema displays temporary
      tablespace information too.
      d7aefc0f
  6. 13 Sep, 2022 5 commits
  7. 12 Sep, 2022 2 commits
  8. 08 Sep, 2022 1 commit
  9. 07 Sep, 2022 1 commit
    • Tuukka Pasanen's avatar
      MDEV-28605: Change wrong plugin config installation location (#2160) · 04899d6d
      Tuukka Pasanen authored
      Preset include directory for configuration files below MariaDB 10.5 is
      /etc/mysql/conf.d
      
      Change installation location wrong plugin installation location from
      /etc/mysql/mariadb.d to default include directory /etc/mysql/conf.d.
      Change makes gssapi-server, oqgraph, rocksdb and tokudb plugins
      loading work after installation
      
      NOTE TO MERGERS: This commit should be upstream to MariaDB 10.4 only!
      Merging to MariaDB 10.5 and above leads to major problems.
      04899d6d
  10. 06 Sep, 2022 1 commit
  11. 03 Sep, 2022 2 commits
    • Andrei's avatar
      MDEV-28827 Minor unsafe statement warning message improvement · f501f815
      Andrei authored
      The replication unsafe warning's pattern gets corrected in the
      punctuation part.
      f501f815
    • Brandon Nesterenko's avatar
      MDEV-28530: Revoking privileges from a non-existing user on a master breaks... · 47812017
      Brandon Nesterenko authored
      MDEV-28530: Revoking privileges from a non-existing user on a master breaks replication on the slave in the presence of replication filters
      
      Problem:
      ========
      Replication can break while applying a query log event if its
      respective command errors on the primary, but is ignored by the
      replication filter within Grant_tables on the replica. The bug
      reported by MDEV-28530 shows this with REVOKE ALL PRIVILEGES using a
      non-existent user. The primary will binlog the REVOKE command with
      an error code, and the replica will think the command executed with
      success because the replication filter will ignore the command while
      accessing the Grant_tables classes. When the replica performs an
      error check, it sees the difference between the error codes, and
      replication breaks.
      
      Solution:
      ========
      If the replication filter check done by Grant_tables logic ignores
      the tables, reset thd->slave_expected_error to 0 so that
      Query_log_event::do_apply_event() can be made aware that the
      underlying query was ignored when it compares errors.
      
      Note that this bug also effects DROP USER if not all users exist
      in the provided list, and the patch fixes and tests this case.
      
      Reviewed By:
      ============
      andrei.elkin@mariadb.com
      47812017
  12. 01 Sep, 2022 1 commit
    • Nayuta Yanagisawa's avatar
      MDEV-27172 Prefix indices on Spider tables may lead to wrong query results · e4cffc92
      Nayuta Yanagisawa authored
      Spider converts HA_READ_KEY_EXACT to the equality (=) in the
      function spider_db_append_key_where_internal() but the conversion
      is not necessarily correct for tables with prefix indices.
      
      We fix the bug by converting HA_READ_KEY_EXACT to 'LIKE "foo%"' when
      a target key is a prefix key. The fix is partly inspired by FEDERATED.
      See ha_federated::create_where_from_key() for more details.
      e4cffc92
  13. 31 Aug, 2022 3 commits
    • Marko Mäkelä's avatar
      4f2dc716
    • Daniel Black's avatar
      c487eeed
    • Daniel Black's avatar
      MDEV-28592 disks plugin - getmntinfo (BSD) & getmntent (AIX) · 129616c7
      Daniel Black authored
      Thanks to references from Brad Smith, BSDs use getmntinfo as
      a system call for mounted filesystems.
      
      Most BSDs return statfs structures, (and we use OSX's statfs64),
      but NetBSD uses a statvfs structure.
      
      Simplify Linux getmntent_r to just use getmntent.
      
      AIX uses getmntent.
      
      An attempt at writing Solaris compatibility with
      a small bit of HPUX compatibility was made based on man page
      entries only. Fixes welcome.
      
      statvfs structures now use f_bsize for consistency with statfs
      
      Test case adjusted as PATH_MAX is OS defined (e.g. 1023 on AIX)
      
      Fixes: 0ee5cf83
      
      also fixes:
      
      MDEV-27818: Disk plugin does not show zpool mounted devices
      
      This is because zpool mounted point don't begin with /.
      
      Due to the proliferation of multiple filesystem types since this
      was written, we restrict the entries listed in the disks plugin
      to excude:
      * read only mount points (no point monitoring, and
        includes squash, snaps, sysfs, procfs, cgroups...)
      * mount points that aren't directories (excludes /etc/hostname and
        similar mounts in containers). (getmntent (Linux/AIX) only)
      * exclude systems where there is no capacity listed (excludes various
        virtual filesystem types).
      
      Reviewer: Sergei Golubchik
      129616c7
  14. 30 Aug, 2022 3 commits
    • Marko Mäkelä's avatar
      MDEV-13888: innodb_fts.innodb_fts_plugin failed · 57739ae9
      Marko Mäkelä authored
      Add ORDER BY to make the test deterministic.
      
      Add FLUSH TABLES to avoid crash recovery warnings about the table
      mysql.plugin. This tends to occur on Valgrind, where the server
      shutdown could presumably time out, resulting in a forced kill.
      57739ae9
    • Marko Mäkelä's avatar
      MDEV-29409 Buffer overflow in my_wc_mb_filename() on RENAME TABLE · 422f3204
      Marko Mäkelä authored
      dict_table_rename_in_cache(), dict_table_get_highest_foreign_id():
      Reserve sufficient space for the fkid[] buffer, and ensure that the
      fkid[] will be NUL-terminated.
      
      The fkid[] must accommodate both the database name (which is already
      encoded in my_charset_filename) and the constraint name
      (which must be converted to my_charset_filename) so that we can check
      if it is in the format databasename/tablename_ibfk_1 (all encoded in
      my_charset_filename).
      422f3204
    • Marko Mäkelä's avatar
      MDEV-29258 Failing assertion for name length on RENAME TABLE · b2609038
      Marko Mäkelä authored
      trx_undo_page_report_rename(): Use the correct maximum length of
      a table name. Both the database name and the table name can be up to
      NAME_CHAR_LEN (64 characters) times 5 bytes per character in the
      my_charset_filename encoding. They are not encoded in UTF-8!
      
      fil_op_write_log(): Reserve the correct amount of log buffer for
      a rename operation. The file name will be appended by
      mlog_catenate_string().
      
      rename_file_ext(): Reserve a large enough buffer for the file names.
      b2609038
  15. 28 Aug, 2022 1 commit