Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
212388bd
Commit
212388bd
authored
Mar 04, 2005
by
ingo@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge with after merge fix
parents
2c6e46f4
0f3b5b7c
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
523 additions
and
695 deletions
+523
-695
include/my_global.h
include/my_global.h
+3
-0
myisam/mi_create.c
myisam/mi_create.c
+7
-7
myisammrg/myrg_create.c
myisammrg/myrg_create.c
+1
-1
mysys/mf_tempfile.c
mysys/mf_tempfile.c
+4
-4
sql/ha_myisam.cc
sql/ha_myisam.cc
+11
-7
sql/mysql_priv.h
sql/mysql_priv.h
+1
-1
sql/mysqld.cc
sql/mysqld.cc
+422
-638
sql/sql_udf.cc
sql/sql_udf.cc
+69
-36
sql/table.cc
sql/table.cc
+5
-1
No files found.
include/my_global.h
View file @
212388bd
...
...
@@ -523,6 +523,9 @@ typedef SOCKET_SIZE_TYPE size_socket;
#ifndef O_SHORT_LIVED
#define O_SHORT_LIVED 0
#endif
#ifndef O_NOFOLLOW
#define O_NOFOLLOW 0
#endif
/* #define USE_RECORD_LOCK */
...
...
myisam/mi_create.c
View file @
212388bd
...
...
@@ -39,7 +39,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
{
register
uint
i
,
j
;
File
dfile
,
file
;
int
errpos
,
save_errno
;
int
errpos
,
save_errno
,
create_mode
=
O_RDWR
|
O_TRUNC
;
myf
create_flag
;
uint
fields
,
length
,
max_key_length
,
packed
,
pointer
,
real_length_diff
,
key_length
,
info_length
,
key_segs
,
options
,
min_key_length_skip
,
...
...
@@ -173,7 +173,10 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
if
(
!
(
options
&
(
HA_OPTION_PACK_RECORD
|
HA_OPTION_COMPRESS_RECORD
)))
min_pack_length
+=
varchar_length
;
if
(
flags
&
HA_CREATE_TMP_TABLE
)
{
options
|=
HA_OPTION_TMP_TABLE
;
create_mode
|=
O_EXCL
|
O_NOFOLLOW
;
}
if
(
flags
&
HA_CREATE_CHECKSUM
||
(
options
&
HA_OPTION_CHECKSUM
))
{
options
|=
HA_OPTION_CHECKSUM
;
...
...
@@ -573,9 +576,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
goto
err
;
}
if
((
file
=
my_create_with_symlink
(
linkname_ptr
,
filename
,
0
,
O_RDWR
|
O_TRUNC
,
if
((
file
=
my_create_with_symlink
(
linkname_ptr
,
filename
,
0
,
create_mode
,
MYF
(
MY_WME
|
create_flag
)))
<
0
)
goto
err
;
errpos
=
1
;
...
...
@@ -586,7 +587,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
if
(
share
.
base
.
raid_type
)
{
(
void
)
fn_format
(
filename
,
name
,
""
,
MI_NAME_DEXT
,
2
+
4
);
if
((
dfile
=
my_raid_create
(
filename
,
0
,
O_RDWR
|
O_TRUNC
,
if
((
dfile
=
my_raid_create
(
filename
,
0
,
create_mode
,
share
.
base
.
raid_type
,
share
.
base
.
raid_chunks
,
share
.
base
.
raid_chunksize
,
...
...
@@ -610,8 +611,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
create_flag
=
MY_DELETE_OLD
;
}
if
((
dfile
=
my_create_with_symlink
(
linkname_ptr
,
filename
,
0
,
O_RDWR
|
O_TRUNC
,
my_create_with_symlink
(
linkname_ptr
,
filename
,
0
,
create_mode
,
MYF
(
MY_WME
|
create_flag
)))
<
0
)
goto
err
;
}
...
...
myisammrg/myrg_create.c
View file @
212388bd
...
...
@@ -34,7 +34,7 @@ int myrg_create(const char *name, const char **table_names,
errpos
=
0
;
if
((
file
=
my_create
(
fn_format
(
buff
,
name
,
""
,
MYRG_NAME_EXT
,
4
),
0
,
O_RDWR
|
O_
TRUNC
,
MYF
(
MY_WME
)))
<
0
)
O_RDWR
|
O_
EXCL
|
O_NOFOLLOW
,
MYF
(
MY_WME
)))
<
0
)
goto
err
;
errpos
=
1
;
if
(
table_names
)
...
...
mysys/mf_tempfile.c
View file @
212388bd
...
...
@@ -70,7 +70,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
{
strmake
(
to
,
res
,
FN_REFLEN
-
1
);
(
*
free
)(
res
);
file
=
my_create
(
to
,
0
,
mode
,
MyFlags
);
file
=
my_create
(
to
,
0
,
mode
|
O_EXCL
|
O_NOFOLLOW
,
MyFlags
);
}
environ
=
old_env
;
}
...
...
@@ -81,7 +81,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
{
strmake
(
to
,
res
,
FN_REFLEN
-
1
);
(
*
free
)(
res
);
file
=
my_create
(
to
,
0
,
mode
,
MyFlags
);
file
=
my_create
(
to
,
0
,
mode
|
O_EXCL
|
O_NOFOLLOW
,
MyFlags
);
}
#elif defined(HAVE_MKSTEMP) && !defined(__NETWARE__)
{
...
...
@@ -143,7 +143,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
strmake
(
to
,
res
,
FN_REFLEN
-
1
);
(
*
free
)(
res
);
file
=
my_create
(
to
,
0
,
(
int
)
(
O_RDWR
|
O_BINARY
|
O_TRUNC
|
(
int
)
(
O_RDWR
|
O_BINARY
|
O_TRUNC
|
O_EXCL
|
O_NOFOLLOW
|
O_TEMPORARY
|
O_SHORT_LIVED
),
MYF
(
MY_WME
));
...
...
@@ -186,7 +186,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
}
(
void
)
strmov
(
end_pos
,
TMP_EXT
);
file
=
my_create
(
to
,
0
,
(
int
)
(
O_RDWR
|
O_BINARY
|
O_TRUNC
|
(
int
)
(
O_RDWR
|
O_BINARY
|
O_TRUNC
|
O_EXCL
|
O_NOFOLLOW
|
O_TEMPORARY
|
O_SHORT_LIVED
),
MYF
(
MY_WME
));
}
...
...
sql/ha_myisam.cc
View file @
212388bd
...
...
@@ -1350,7 +1350,7 @@ int ha_myisam::create(const char *name, register TABLE *table_arg,
HA_CREATE_INFO
*
info
)
{
int
error
;
uint
i
,
j
,
recpos
,
minpos
,
fieldpos
,
temp_length
,
length
;
uint
i
,
j
,
recpos
,
minpos
,
fieldpos
,
temp_length
,
length
,
create_flags
=
0
;
bool
found_real_auto_increment
=
0
;
enum
ha_base_keytype
type
;
char
buff
[
FN_REFLEN
];
...
...
@@ -1538,17 +1538,21 @@ int ha_myisam::create(const char *name, register TABLE *table_arg,
create_info
.
data_file_name
=
info
->
data_file_name
;
create_info
.
index_file_name
=
info
->
index_file_name
;
if
(
info
->
options
&
HA_LEX_CREATE_TMP_TABLE
)
create_flags
|=
HA_CREATE_TMP_TABLE
;
if
(
options
&
HA_OPTION_PACK_RECORD
)
create_flags
|=
HA_PACK_RECORD
;
if
(
options
&
HA_OPTION_CHECKSUM
)
create_flags
|=
HA_CREATE_CHECKSUM
;
if
(
options
&
HA_OPTION_DELAY_KEY_WRITE
)
create_flags
|=
HA_CREATE_DELAY_KEY_WRITE
;
/* TODO: Check that the following fn_format is really needed */
error
=
mi_create
(
fn_format
(
buff
,
name
,
""
,
""
,
2
+
4
),
share
->
keys
,
keydef
,
(
uint
)
(
recinfo_pos
-
recinfo
),
recinfo
,
0
,
(
MI_UNIQUEDEF
*
)
0
,
&
create_info
,
(((
options
&
HA_OPTION_PACK_RECORD
)
?
HA_PACK_RECORD
:
0
)
|
((
options
&
HA_OPTION_CHECKSUM
)
?
HA_CREATE_CHECKSUM
:
0
)
|
((
options
&
HA_OPTION_DELAY_KEY_WRITE
)
?
HA_CREATE_DELAY_KEY_WRITE
:
0
)));
&
create_info
,
create_flags
);
my_free
((
gptr
)
recinfo
,
MYF
(
0
));
DBUG_RETURN
(
error
);
...
...
sql/mysql_priv.h
View file @
212388bd
...
...
@@ -1064,7 +1064,7 @@ extern my_bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types;
extern
my_bool
opt_safe_show_db
,
opt_local_infile
;
extern
my_bool
opt_slave_compressed_protocol
,
use_temp_pool
;
extern
my_bool
opt_readonly
,
lower_case_file_system
;
extern
my_bool
opt_enable_named_pipe
,
opt_sync_frm
;
extern
my_bool
opt_enable_named_pipe
,
opt_sync_frm
,
opt_allow_suspicious_udfs
;
extern
my_bool
opt_secure_auth
;
extern
my_bool
sp_automatic_privileges
;
extern
my_bool
opt_old_style_user_limits
;
...
...
sql/mysqld.cc
View file @
212388bd
This diff is collapsed.
Click to expand it.
sql/sql_udf.cc
View file @
212388bd
...
...
@@ -74,32 +74,49 @@ static HASH udf_hash;
static
rw_lock_t
THR_LOCK_udf
;
static
udf_func
*
add_udf
(
LEX_STRING
*
name
,
Item_result
ret
,
char
*
dl
,
Item_udftype
typ
);
static
udf_func
*
add_udf
(
LEX_STRING
*
name
,
Item_result
ret
,
char
*
dl
,
Item_udftype
typ
);
static
void
del_udf
(
udf_func
*
udf
);
static
void
*
find_udf_dl
(
const
char
*
dl
);
static
void
init_syms
(
udf_func
*
tmp
)
static
char
*
init_syms
(
udf_func
*
tmp
,
char
*
nm
)
{
char
nm
[
MAX_FIELD_NAME
+
16
],
*
end
;
char
*
end
;
if
(
!
((
tmp
->
func
=
dlsym
(
tmp
->
dlhandle
,
tmp
->
name
.
str
))))
return
tmp
->
name
.
str
;
tmp
->
func
=
dlsym
(
tmp
->
dlhandle
,
tmp
->
name
.
str
);
end
=
strmov
(
nm
,
tmp
->
name
.
str
);
(
void
)
strmov
(
end
,
"_init"
);
tmp
->
func_init
=
dlsym
(
tmp
->
dlhandle
,
nm
);
(
void
)
strmov
(
end
,
"_deinit"
);
tmp
->
func_deinit
=
dlsym
(
tmp
->
dlhandle
,
nm
);
if
(
tmp
->
type
==
UDFTYPE_AGGREGATE
)
{
(
void
)
strmov
(
end
,
"_clear"
);
tmp
->
func_clear
=
dlsym
(
tmp
->
dlhandle
,
nm
);
(
void
)
strmov
(
end
,
"_add"
);
tmp
->
func_add
=
dlsym
(
tmp
->
dlhandle
,
nm
);
/* Give error if _clear and _add doesn't exists */
if
(
!
tmp
->
func_clear
||
!
tmp
->
func_add
)
tmp
->
func
=
0
;
(
void
)
strmov
(
end
,
"_clear"
);
if
(
!
((
tmp
->
func_clear
=
dlsym
(
tmp
->
dlhandle
,
nm
))))
return
nm
;
(
void
)
strmov
(
end
,
"_add"
);
if
(
!
((
tmp
->
func_add
=
dlsym
(
tmp
->
dlhandle
,
nm
))))
return
nm
;
}
(
void
)
strmov
(
end
,
"_deinit"
);
tmp
->
func_deinit
=
dlsym
(
tmp
->
dlhandle
,
nm
);
(
void
)
strmov
(
end
,
"_init"
);
tmp
->
func_init
=
dlsym
(
tmp
->
dlhandle
,
nm
);
/*
to prefent loading "udf" from, e.g. libc.so
let's ensure that at least one auxiliary symbol is defined
*/
if
(
!
tmp
->
func_init
&&
!
tmp
->
func_deinit
&&
tmp
->
type
!=
UDFTYPE_AGGREGATE
)
{
if
(
opt_allow_suspicious_udfs
)
sql_print_error
(
ER
(
ER_CANT_FIND_DL_ENTRY
),
nm
);
else
return
nm
;
}
return
0
;
}
extern
"C"
byte
*
get_hash_key
(
const
byte
*
buff
,
uint
*
length
,
...
...
@@ -111,7 +128,7 @@ extern "C" byte* get_hash_key(const byte *buff,uint *length,
}
/*
** Read all predeclared functions from
func@mysql
and accept all that
** Read all predeclared functions from
mysql.func
and accept all that
** can be used.
*/
...
...
@@ -153,7 +170,7 @@ void udf_init()
if
(
simple_open_n_lock_tables
(
new_thd
,
&
tables
))
{
DBUG_PRINT
(
"error"
,(
"Can't open udf table"
));
sql_print_error
(
"Can't open the mysql
/
func table. Please run the mysql_install_db script to create it."
);
sql_print_error
(
"Can't open the mysql
.
func table. Please run the mysql_install_db script to create it."
);
goto
end
;
}
...
...
@@ -171,10 +188,23 @@ void udf_init()
if
(
table
->
s
->
fields
>=
4
)
// New func table
udftype
=
(
Item_udftype
)
table
->
field
[
3
]
->
val_int
();
if
(
!
(
tmp
=
add_udf
(
&
name
,(
Item_result
)
table
->
field
[
1
]
->
val_int
(),
/*
Ensure that the .dll doesn't have a path
This is done to ensure that only approved dll from the system
directories are used (to make this even remotely secure).
*/
if
(
strchr
(
dl_name
,
'/'
)
||
name
.
length
>
NAME_LEN
)
{
sql_print_error
(
"Invalid row in mysql.func table for function '%.64s'"
,
name
.
str
);
continue
;
}
if
(
!
(
tmp
=
add_udf
(
&
name
,(
Item_result
)
table
->
field
[
1
]
->
val_int
(),
dl_name
,
udftype
)))
{
sql_print_error
(
"Can't alloc memory for udf function:
name"
);
sql_print_error
(
"Can't alloc memory for udf function:
'%.64s'"
,
name
.
str
);
continue
;
}
...
...
@@ -191,15 +221,17 @@ void udf_init()
new_dl
=
1
;
}
tmp
->
dlhandle
=
dl
;
init_syms
(
tmp
);
if
(
!
tmp
->
func
)
{
sql_print_error
(
ER
(
ER_CANT_FIND_DL_ENTRY
),
name
);
char
buf
[
MAX_FIELD_NAME
+
16
],
*
missing
;
if
((
missing
=
init_syms
(
tmp
,
buf
)))
{
sql_print_error
(
ER
(
ER_CANT_FIND_DL_ENTRY
),
missing
);
del_udf
(
tmp
);
if
(
new_dl
)
dlclose
(
dl
);
}
}
}
if
(
error
>
0
)
sql_print_error
(
ER
(
ER_GET_ERRNO
),
my_errno
);
end_read_record
(
&
read_record_info
);
...
...
@@ -407,13 +439,14 @@ int mysql_create_function(THD *thd,udf_func *udf)
new_dl
=
1
;
}
udf
->
dlhandle
=
dl
;
init_syms
(
udf
);
if
(
udf
->
func
==
NULL
)
{
my_error
(
ER_CANT_FIND_DL_ENTRY
,
MYF
(
0
),
udf
->
name
);
char
buf
[
MAX_FIELD_NAME
+
16
],
*
missing
;
if
((
missing
=
init_syms
(
udf
,
buf
)))
{
my_error
(
ER_CANT_FIND_DL_ENTRY
,
MYF
(
0
),
missing
);
goto
err
;
}
}
udf
->
name
.
str
=
strdup_root
(
&
mem
,
udf
->
name
.
str
);
udf
->
dl
=
strdup_root
(
&
mem
,
udf
->
dl
);
if
(
!
(
u_d
=
add_udf
(
&
udf
->
name
,
udf
->
returns
,
udf
->
dl
,
udf
->
type
)))
...
...
@@ -425,7 +458,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
u_d
->
func_clear
=
udf
->
func_clear
;
u_d
->
func_add
=
udf
->
func_add
;
/* create entry in mysql
/
func table */
/* create entry in mysql
.
func table */
bzero
((
char
*
)
&
tables
,
sizeof
(
tables
));
tables
.
db
=
(
char
*
)
"mysql"
;
...
...
@@ -445,7 +478,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
close_thread_tables
(
thd
);
if
(
error
)
{
my_error
(
ER_ERROR_ON_WRITE
,
MYF
(
0
),
"
func@mysql
"
,
error
);
my_error
(
ER_ERROR_ON_WRITE
,
MYF
(
0
),
"
mysql.func
"
,
error
);
del_udf
(
u_d
);
goto
err
;
}
...
...
sql/table.cc
View file @
212388bd
...
...
@@ -1276,6 +1276,10 @@ File create_frm(register my_string name, uint reclength, uchar *fileinfo,
uint
key_length
;
ulong
length
;
char
fill
[
IO_SIZE
];
int
create_flags
=
O_RDWR
|
O_TRUNC
;
if
(
create_info
->
options
&
HA_LEX_CREATE_TMP_TABLE
)
create_flags
|=
O_EXCL
|
O_NOFOLLOW
;
#if SIZEOF_OFF_T > 4
/* Fix this when we have new .frm files; Current limit is 4G rows (QQ) */
...
...
@@ -1290,7 +1294,7 @@ File create_frm(register my_string name, uint reclength, uchar *fileinfo,
*/
set_if_smaller
(
create_info
->
raid_chunks
,
255
);
if
((
file
=
my_create
(
name
,
CREATE_MODE
,
O_RDWR
|
O_TRUNC
,
MYF
(
MY_WME
)))
>=
0
)
if
((
file
=
my_create
(
name
,
CREATE_MODE
,
create_flags
,
MYF
(
MY_WME
)))
>=
0
)
{
bzero
((
char
*
)
fileinfo
,
64
);
/* header */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment