From b30b040b733ff2045ffcd7bdd44f608c7f4912b5 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 21 Sep 2022 11:10:05 +1000 Subject: [PATCH] MDEV-29582 deprecate mysql* names Eventually mysql symlinks will go away, as MariaDB and MySQL keep diverging and we do not want to make it impossible to install MariaDB and MySQL side-by-side when users want it. It also useful if people start using MariaDB tools with MariaDB. If the exe doesn't begine with "mariadb" or is a symlink, print a warning to use the resolved name. In my_readlink, add check on my_thread_var as its used by comp_err and other build utils that also use my_init. --- include/mysys_err.h | 3 ++- mysys/errors.c | 2 ++ mysys/my_init.c | 10 ++++++++++ mysys/my_symlink.c | 8 +++++--- scripts/mysql_install_db.sh | 6 ++++++ scripts/mysql_secure_installation.sh | 6 ++++++ 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/include/mysys_err.h b/include/mysys_err.h index e0e97d0284a..d115b5ddb70 100644 --- a/include/mysys_err.h +++ b/include/mysys_err.h @@ -73,7 +73,8 @@ extern const char *globerrs[]; /* my_error_messages is here */ #define EE_PERM_LOCK_MEMORY 37 #define EE_MEMCNTL 38 #define EE_DUPLICATE_CHARSET 39 -#define EE_ERROR_LAST 39 /* Copy last error nr */ +#define EE_NAME_DEPRECATED 40 +#define EE_ERROR_LAST 40 /* Copy last error nr */ /* Add error numbers before EE_ERROR_LAST and change it accordingly. */ diff --git a/mysys/errors.c b/mysys/errors.c index d88540fe277..a7b2f1ae603 100644 --- a/mysys/errors.c +++ b/mysys/errors.c @@ -60,6 +60,7 @@ const char *globerrs[GLOBERRS]= "Lock Pages in memory access rights required", "Memcntl %s cmd %s error", "Warning: Charset id '%d' csname '%s' trying to replace existing csname '%s'", + "Notice: %s is deprecated and will be removed in a future release, use command '%s'" }; void init_glob_errs(void) @@ -109,6 +110,7 @@ void init_glob_errs() EE(EE_PERM_LOCK_MEMORY)= "Lock Pages in memory access rights required"; EE(EE_MEMCNTL) = "Memcntl %s cmd %s error"; EE(EE_DUPLICATE_CHARSET)= "Warning: Charset id %d trying to replace csname %s with %s"; + EE(EE_NAME_DEPRECATED) = "Notice: %s is deprecated and will be removed in a future release, use command '%s'" } #endif diff --git a/mysys/my_init.c b/mysys/my_init.c index 44488e5848a..9ca68e80c1d 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -170,7 +170,17 @@ my_bool my_init(void) my_progname_short= "unknown"; if (my_progname) + { + char link_name[FN_REFLEN]; my_progname_short= my_progname + dirname_length(my_progname); + /* + If its a link a different program that doesn't begin with mariadb + like mariadb-repair might link to mariadb-check. + */ + if (strncmp(my_progname_short, "mariadb", 7) + && my_readlink(link_name, my_progname, MYF(0)) == 0) + my_error(EE_NAME_DEPRECATED, MYF(MY_WME), my_progname, link_name); + } /* Initialize our mutex handling */ my_mutex_init(); diff --git a/mysys/my_symlink.c b/mysys/my_symlink.c index 8238e501e7f..e7833992f0d 100644 --- a/mysys/my_symlink.c +++ b/mysys/my_symlink.c @@ -45,7 +45,7 @@ int (*mysys_test_invalid_symlink)(const char *filename)= always_valid; int my_readlink(char *to, const char *filename, myf MyFlags) { #ifndef HAVE_READLINK - strmov(to,filename); + strnmov(to, filename, FN_REFLEN); return 1; #else int result=0; @@ -54,11 +54,13 @@ int my_readlink(char *to, const char *filename, myf MyFlags) if ((length=readlink(filename, to, FN_REFLEN-1)) < 0) { + if (my_thread_var) + my_errno= errno; /* Don't give an error if this wasn't a symlink */ - if ((my_errno=errno) == EINVAL) + if (errno == EINVAL) { result= 1; - strmov(to,filename); + strnmov(to, filename, FN_REFLEN); } else { diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index cc801ca2bfe..aeda217b39a 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -46,6 +46,12 @@ extra_file="" dirname0=`dirname $0 2>/dev/null` dirname0=`dirname $dirname0 2>/dev/null` +case "$0" in + *mysql*) + echo "Notice: $0 is deprecated and will be removed in a future release, use command mariadb-install-db" 1>&2 + ;; +esac + usage() { cat <&2 + ;; +esac + parse_arg() { echo "$1" | sed -e 's/^[^=]*=//'