1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

WL #3337 (Event scheduler new architecture)

move back THD::change_security_context to event_change_security_context
This commit is contained in:
andrey@lmy004.
2006-07-13 12:19:01 +02:00
parent dd31d45789
commit 9eee0ee47a
3 changed files with 65 additions and 69 deletions

View File

@ -25,6 +25,65 @@
#define EVEX_MAX_INTERVAL_VALUE 1000000000L #define EVEX_MAX_INTERVAL_VALUE 1000000000L
/*
Switches the security context
SYNOPSIS
event_change_security_context()
thd Thread
user The user
host The host of the user
db The schema for which the security_ctx will be loaded
backup Where to store the old context
RETURN VALUE
FALSE OK
TRUE Error (generates error too)
*/
static bool
event_change_security_context(THD *thd, LEX_STRING user, LEX_STRING host,
LEX_STRING db, Security_context *backup)
{
DBUG_ENTER("event_change_security_context");
DBUG_PRINT("info",("%s@%s@%s", user.str, host.str, db.str));
#ifndef NO_EMBEDDED_ACCESS_CHECKS
*backup= thd->main_security_ctx;
if (acl_getroot_no_password(&thd->main_security_ctx, user.str, host.str,
host.str, db.str))
{
my_error(ER_NO_SUCH_USER, MYF(0), user.str, host.str);
DBUG_RETURN(TRUE);
}
thd->security_ctx= &thd->main_security_ctx;
#endif
DBUG_RETURN(FALSE);
}
/*
Restores the security context
SYNOPSIS
event_restore_security_context()
thd Thread
backup Context to switch to
*/
static void
event_restore_security_context(THD *thd, Security_context *backup)
{
DBUG_ENTER("event_restore_security_context");
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if (backup)
{
thd->main_security_ctx= *backup;
thd->security_ctx= &thd->main_security_ctx;
}
#endif
DBUG_VOID_RETURN;
}
/* /*
Returns a new instance Returns a new instance
@ -1686,7 +1745,8 @@ Event_job_data::compile(THD *thd, MEM_ROOT *mem_root)
thd->query_length= show_create.length(); thd->query_length= show_create.length();
DBUG_PRINT("info", ("query:%s",thd->query)); DBUG_PRINT("info", ("query:%s",thd->query));
thd->change_security_context(definer_user, definer_host, dbname, &save_ctx); event_change_security_context(thd, definer_user, definer_host, dbname,
&save_ctx);
thd->lex= &lex; thd->lex= &lex;
mysql_init_query(thd, (uchar*) thd->query, thd->query_length); mysql_init_query(thd, (uchar*) thd->query, thd->query_length);
if (MYSQLparse((void *)thd) || thd->is_fatal_error) if (MYSQLparse((void *)thd) || thd->is_fatal_error)
@ -1717,7 +1777,7 @@ Event_job_data::compile(THD *thd, MEM_ROOT *mem_root)
done: done:
lex_end(&lex); lex_end(&lex);
thd->restore_security_context(&save_ctx); event_restore_security_context(thd, &save_ctx);
DBUG_PRINT("note", ("return old data on its place. set back NAMES")); DBUG_PRINT("note", ("return old data on its place. set back NAMES"));
thd->lex= old_lex; thd->lex= old_lex;
@ -1765,7 +1825,8 @@ Event_job_data::execute(THD *thd)
if ((ret= compile(thd, NULL))) if ((ret= compile(thd, NULL)))
goto done; goto done;
thd->change_security_context(definer_user, definer_host, dbname, &save_ctx); event_change_security_context(thd, definer_user, definer_host, dbname,
&save_ctx);
/* /*
THD::~THD will clean this or if there is DROP DATABASE in the SP then THD::~THD will clean this or if there is DROP DATABASE in the SP then
it will be free there. It should not point to our buffer which is allocated it will be free there. It should not point to our buffer which is allocated
@ -1790,7 +1851,7 @@ Event_job_data::execute(THD *thd)
ret= -99; ret= -99;
} }
thd->restore_security_context(&save_ctx); event_restore_security_context(thd, &save_ctx);
done: done:
thd->end_statement(); thd->end_statement();
thd->cleanup_after_query(); thd->cleanup_after_query();

View File

@ -2068,64 +2068,6 @@ bool Security_context::set_user(char *user_arg)
return user == 0; return user == 0;
} }
/*
Switches the security context
SYNOPSIS
THD::change_security_context()
user The user
host The host of the user
db The schema for which the security_ctx will be loaded
s_ctx Security context to load state into
backup Where to store the old context
RETURN VALUE
FALSE OK
TRUE Error (generates error too)
*/
bool
THD::change_security_context(LEX_STRING user, LEX_STRING host,
LEX_STRING db, Security_context *backup)
{
DBUG_ENTER("change_security_context");
DBUG_PRINT("info",("%s@%s@%s", user.str, host.str, db.str));
#ifndef NO_EMBEDDED_ACCESS_CHECKS
*backup= main_security_ctx;
if (acl_getroot_no_password(&main_security_ctx, user.str, host.str, host.str,
db.str))
{
my_error(ER_NO_SUCH_USER, MYF(0), user.str, host.str);
DBUG_RETURN(TRUE);
}
security_ctx= &main_security_ctx;
#endif
DBUG_RETURN(FALSE);
}
/*
Restores the security context
SYNOPSIS
restore_security_context()
thd Thread
backup Context to switch to
*/
void
THD::restore_security_context(Security_context *backup)
{
DBUG_ENTER("restore_security_context");
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if (backup)
{
main_security_ctx= *backup;
security_ctx= &main_security_ctx;
}
#endif
DBUG_VOID_RETURN;
}
/**************************************************************************** /****************************************************************************
Handling of open and locked tables states. Handling of open and locked tables states.

View File

@ -868,13 +868,6 @@ public:
char *db, *catalog; char *db, *catalog;
Security_context main_security_ctx; Security_context main_security_ctx;
Security_context *security_ctx; Security_context *security_ctx;
bool
change_security_context(LEX_STRING user, LEX_STRING host,
LEX_STRING db, Security_context *backup);
void
restore_security_context(Security_context *backup);
/* remote (peer) port */ /* remote (peer) port */
uint16 peer_port; uint16 peer_port;