mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Cleanups to recent patches
Fix packet error when using wrong GRANT command
This commit is contained in:
@ -276,6 +276,7 @@ inline double ulonglong2double(ulonglong value)
|
|||||||
#define HAVE_ISAM /* We want to have support for ISAM in 4.0 */
|
#define HAVE_ISAM /* We want to have support for ISAM in 4.0 */
|
||||||
#define HAVE_QUERY_CACHE
|
#define HAVE_QUERY_CACHE
|
||||||
#define SPRINTF_RETURNS_INT
|
#define SPRINTF_RETURNS_INT
|
||||||
|
#define HAVE_SETFILEPOINTER
|
||||||
|
|
||||||
#ifdef NOT_USED
|
#ifdef NOT_USED
|
||||||
#define HAVE_SNPRINTF /* Gave link error */
|
#define HAVE_SNPRINTF /* Gave link error */
|
||||||
|
@ -108,3 +108,6 @@ flush privileges;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
||||||
Wrong usage of DB GRANT and GLOBAL PRIVILEGES
|
Wrong usage of DB GRANT and GLOBAL PRIVILEGES
|
||||||
|
select 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
@ -72,5 +72,10 @@ delete from mysql.tables_priv where user='mysqltest_1';
|
|||||||
delete from mysql.columns_priv where user='mysqltest_1';
|
delete from mysql.columns_priv where user='mysqltest_1';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test some error conditions
|
||||||
|
#
|
||||||
--error 1221
|
--error 1221
|
||||||
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
||||||
|
select 1; -- To test that the previous command didn't cause problems
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
MyFlags Flags
|
MyFlags Flags
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
my_chsize() truncates file if shorter, else fill with the filler character
|
my_chsize() truncates file if shorter else fill with the filler character
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
0 Ok
|
0 Ok
|
||||||
@ -38,89 +38,74 @@
|
|||||||
*/
|
*/
|
||||||
int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags)
|
int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags)
|
||||||
{
|
{
|
||||||
|
my_off_t oldsize;
|
||||||
|
char buff[IO_SIZE];
|
||||||
DBUG_ENTER("my_chsize");
|
DBUG_ENTER("my_chsize");
|
||||||
DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength,
|
DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength,
|
||||||
MyFlags));
|
MyFlags));
|
||||||
/* if file is shorter, expand with null, else fill unused part with null */
|
|
||||||
|
oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE));
|
||||||
|
DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize));
|
||||||
|
|
||||||
|
if (oldsize > newlength)
|
||||||
|
#if defined(HAVE_SETFILEPOINTER)
|
||||||
|
/* This is for the moment only true on windows */
|
||||||
{
|
{
|
||||||
my_off_t oldsize;
|
LARGE_INTEGER new_length;
|
||||||
char buff[IO_SIZE];
|
HANDLE win_file= (HANDLE) _get_osfhandle(fd);
|
||||||
|
new_length.QuadPart = newlength;
|
||||||
oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE));
|
if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN))
|
||||||
DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize));
|
|
||||||
|
|
||||||
#ifdef __WIN__
|
|
||||||
if (oldsize > newlength)
|
|
||||||
{
|
{
|
||||||
LARGE_INTEGER new_length;
|
if (SetEndOfFile(win_file))
|
||||||
HANDLE win_file;
|
DBUG_RETURN(0);
|
||||||
win_file= (HANDLE)_get_osfhandle(fd);
|
|
||||||
new_length.QuadPart = newlength;
|
|
||||||
if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN))
|
|
||||||
{
|
|
||||||
if (SetEndOfFile(win_file))
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
|
||||||
DBUG_PRINT("error",("errno: %d",errno));
|
|
||||||
my_errno=errno;
|
|
||||||
if (MyFlags & MY_WME)
|
|
||||||
my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno);
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
}
|
}
|
||||||
#elif defined(HAVE_CHSIZE)
|
my_errno= errno;
|
||||||
if (oldsize > newlength || filler == 0)
|
goto err;
|
||||||
{
|
|
||||||
if (chsize(fd,(off_t) newlength))
|
|
||||||
{
|
|
||||||
DBUG_PRINT("error",("errno: %d",errno));
|
|
||||||
my_errno=errno;
|
|
||||||
if (MyFlags & MY_WME)
|
|
||||||
my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno);
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (filler == 0)
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#elif defined(HAVE_FTRUNCATE)
|
|
||||||
if (oldsize > newlength)
|
|
||||||
{
|
|
||||||
if (ftruncate(fd, (off_t) newlength))
|
|
||||||
{
|
|
||||||
my_errno=errno;
|
|
||||||
DBUG_PRINT("error",("errno: %d",errno));
|
|
||||||
if (MyFlags & MY_WME)
|
|
||||||
my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), errno);
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
}
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (oldsize > newlength)
|
|
||||||
{ /* Fill diff with null */
|
|
||||||
VOID(my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE)));
|
|
||||||
swap(my_off_t, newlength, oldsize);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* Full file with 0 until it's as big as requested */
|
|
||||||
bfill(buff, IO_SIZE, filler);
|
|
||||||
while (newlength-oldsize > IO_SIZE)
|
|
||||||
{
|
|
||||||
if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP)))
|
|
||||||
goto err;
|
|
||||||
oldsize+= IO_SIZE;
|
|
||||||
}
|
|
||||||
if (my_write(fd,(byte*) buff,(uint) (newlength-oldsize),MYF(MY_NABP)))
|
|
||||||
goto err;
|
|
||||||
DBUG_RETURN(0);
|
|
||||||
err:
|
|
||||||
if (MyFlags & MY_WME)
|
|
||||||
my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),my_errno);
|
|
||||||
DBUG_PRINT("error",("errno: %d",my_errno));
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
}
|
}
|
||||||
|
#elif defined(HAVE_FTRUNCATE)
|
||||||
|
{
|
||||||
|
if (ftruncate(fd, (off_t) newlength))
|
||||||
|
{
|
||||||
|
my_errno= errno;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
#elif defined(HAVE_CHSIZE)
|
||||||
|
{
|
||||||
|
if (chsize(fd, (off_t) newlength))
|
||||||
|
{
|
||||||
|
my_errno=errno;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Fill space between requested length and true length with 'filler'
|
||||||
|
We should never come here on any modern machine
|
||||||
|
*/
|
||||||
|
VOID(my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE)));
|
||||||
|
swap(my_off_t, newlength, oldsize);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Full file with 'filler' until it's as big as requested */
|
||||||
|
bfill(buff, IO_SIZE, filler);
|
||||||
|
while (newlength-oldsize > IO_SIZE)
|
||||||
|
{
|
||||||
|
if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP)))
|
||||||
|
goto err;
|
||||||
|
oldsize+= IO_SIZE;
|
||||||
|
}
|
||||||
|
if (my_write(fd,(byte*) buff,(uint) (newlength-oldsize),MYF(MY_NABP)))
|
||||||
|
goto err;
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
|
err:
|
||||||
|
DBUG_PRINT("error", ("errno: %d", errno));
|
||||||
|
if (MyFlags & MY_WME)
|
||||||
|
my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), my_errno);
|
||||||
|
DBUG_RETURN(1);
|
||||||
} /* my_chsize */
|
} /* my_chsize */
|
||||||
|
|
||||||
|
|
||||||
|
@ -798,7 +798,8 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond)
|
|||||||
table_map ref_tables=cond->used_tables();
|
table_map ref_tables=cond->used_tables();
|
||||||
if (cond->type() != Item::FUNC_ITEM)
|
if (cond->type() != Item::FUNC_ITEM)
|
||||||
{ // Should be a field
|
{ // Should be a field
|
||||||
if (ref_tables & param->current_table)
|
if ((ref_tables & param->current_table) ||
|
||||||
|
(ref_tables & ~(param->prev_tables | param->read_tables)))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
DBUG_RETURN(new SEL_TREE(SEL_TREE::MAYBE));
|
DBUG_RETURN(new SEL_TREE(SEL_TREE::MAYBE));
|
||||||
}
|
}
|
||||||
|
@ -2370,7 +2370,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
net_printf(&thd->net,ER_WRONG_USAGE,"DB GRANT","GLOBAL PRIVILEGES");
|
net_printf(&thd->net,ER_WRONG_USAGE,"DB GRANT","GLOBAL PRIVILEGES");
|
||||||
result= -1;
|
result= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1490,11 +1490,15 @@ add_key_field(KEY_FIELD **key_fields,uint and_level,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBUG_ASSERT(num_values == 1);
|
DBUG_ASSERT(num_values == 1);
|
||||||
// DBUG_ASSERT(eq_func); /* QQ: Can I uncomment this ASSERT ? */
|
/*
|
||||||
|
For the moment eq_func is always true. This slot is reserved for future
|
||||||
|
extensions where we want to remembers other things than just eq comparisons
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(eq_func);
|
||||||
/* Store possible eq field */
|
/* Store possible eq field */
|
||||||
(*key_fields)->field=field;
|
(*key_fields)->field=field;
|
||||||
(*key_fields)->eq_func=eq_func;
|
(*key_fields)->eq_func=eq_func;
|
||||||
(*key_fields)->val=*value;
|
(*key_fields)->val= *value;
|
||||||
(*key_fields)->level=(*key_fields)->const_level=and_level;
|
(*key_fields)->level=(*key_fields)->const_level=and_level;
|
||||||
(*key_fields)->exists_optimize=exists_optimize;
|
(*key_fields)->exists_optimize=exists_optimize;
|
||||||
(*key_fields)++;
|
(*key_fields)++;
|
||||||
@ -1582,6 +1586,8 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level,
|
|||||||
if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM)
|
if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
Item *tmp=new Item_null;
|
Item *tmp=new Item_null;
|
||||||
|
if (!tmp) // Should never be true
|
||||||
|
return;
|
||||||
add_key_field(key_fields,*and_level,
|
add_key_field(key_fields,*and_level,
|
||||||
((Item_field*) (cond_func->arguments()[0]))->field,
|
((Item_field*) (cond_func->arguments()[0]))->field,
|
||||||
cond_func->functype() == Item_func::ISNULL_FUNC,
|
cond_func->functype() == Item_func::ISNULL_FUNC,
|
||||||
|
Reference in New Issue
Block a user