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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
2e1ded2f
Commit
2e1ded2f
authored
May 29, 2004
by
serg@serg.mylan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
backport wild_compare fix from 4.1 - bug#3924
parent
1998dd78
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
61 additions
and
38 deletions
+61
-38
include/my_sys.h
include/my_sys.h
+1
-1
mysys/mf_wcomp.c
mysys/mf_wcomp.c
+45
-22
mysys/mf_wfile.c
mysys/mf_wfile.c
+2
-2
sql/sql_acl.cc
sql/sql_acl.cc
+5
-5
sql/sql_acl.h
sql/sql_acl.h
+1
-1
sql/sql_base.cc
sql/sql_base.cc
+1
-1
sql/sql_db.cc
sql/sql_db.cc
+1
-1
sql/sql_parse.cc
sql/sql_parse.cc
+2
-2
sql/sql_show.cc
sql/sql_show.cc
+3
-3
No files found.
include/my_sys.h
View file @
2e1ded2f
...
...
@@ -620,7 +620,7 @@ extern my_string my_path(my_string to,const char *progname,
const
char
*
own_pathname_part
);
extern
my_string
my_load_path
(
my_string
to
,
const
char
*
path
,
const
char
*
own_path_prefix
);
extern
int
wild_compare
(
const
char
*
str
,
const
char
*
wildstr
);
extern
int
wild_compare
(
const
char
*
str
,
const
char
*
wildstr
,
pbool
str_is_pattern
);
extern
my_string
my_strcasestr
(
const
char
*
src
,
const
char
*
suffix
);
extern
int
my_strcasecmp
(
const
char
*
s
,
const
char
*
t
);
extern
int
my_strsortcmp
(
const
char
*
s
,
const
char
*
t
);
...
...
mysys/mf_wcomp.c
View file @
2e1ded2f
...
...
@@ -23,11 +23,12 @@
char
wild_many
=
'*'
;
char
wild_one
=
'?'
;
char
wild_prefix
=
0
;
char
wild_prefix
=
0
;
/* QQ this can potentially cause a SIGSEGV */
int
wild_compare
(
register
const
char
*
str
,
register
const
char
*
wildstr
)
int
wild_compare
(
register
const
char
*
str
,
register
const
char
*
wildstr
,
pbool
str_is_pattern
)
{
reg3
int
flag
;
char
cmp
;
DBUG_ENTER
(
"wild_compare"
);
while
(
*
wildstr
)
...
...
@@ -35,33 +36,55 @@ int wild_compare(register const char *str, register const char *wildstr)
while
(
*
wildstr
&&
*
wildstr
!=
wild_many
&&
*
wildstr
!=
wild_one
)
{
if
(
*
wildstr
==
wild_prefix
&&
wildstr
[
1
])
{
wildstr
++
;
if
(
*
wildstr
++
!=
*
str
++
)
DBUG_RETURN
(
1
);
if
(
str_is_pattern
&&
*
str
++
!=
wild_prefix
)
DBUG_RETURN
(
1
);
}
if
(
!
*
wildstr
)
DBUG_RETURN
(
*
str
!=
0
);
if
(
*
wildstr
++
!=
*
str
++
)
DBUG_RETURN
(
1
);
}
if
(
!
*
wildstr
)
DBUG_RETURN
(
*
str
!=
0
);
if
(
*
wildstr
++
==
wild_one
)
{
if
(
!
*
str
++
)
DBUG_RETURN
(
1
);
/* One char; skipp */
if
(
!
*
str
||
(
str_is_pattern
&&
*
str
==
wild_many
))
DBUG_RETURN
(
1
);
/* One char; skip */
if
(
*
str
++
==
wild_prefix
&&
str_is_pattern
&&
*
str
)
str
++
;
}
else
{
/* Found '*' */
if
(
!*
wildstr
)
DBUG_RETURN
(
0
);
/* '*' as last char: OK */
flag
=
(
*
wildstr
!=
wild_many
&&
*
wildstr
!=
wild_one
);
do
while
(
str_is_pattern
&&
*
str
==
wild_many
)
str
++
;
for
(;
*
wildstr
==
wild_many
||
*
wildstr
==
wild_one
;
wildstr
++
)
if
(
*
wildstr
==
wild_many
)
{
if
(
flag
)
while
(
str_is_pattern
&&
*
str
==
wild_many
)
str
++
;
}
else
{
char
cmp
;
if
((
cmp
=
*
wildstr
)
==
wild_prefix
&&
wildstr
[
1
])
if
(
str_is_pattern
&&
*
str
==
wild_prefix
&&
str
[
1
])
str
+=
2
;
else
if
(
!
*
str
++
)
DBUG_RETURN
(
1
);
}
if
(
!*
wildstr
)
DBUG_RETURN
(
0
);
/* '*' as last char: OK */
if
((
cmp
=
*
wildstr
)
==
wild_prefix
&&
wildstr
[
1
]
&&
!
str_is_pattern
)
cmp
=
wildstr
[
1
];
for
(;;
str
++
)
{
while
(
*
str
&&
*
str
!=
cmp
)
str
++
;
if
(
!*
str
)
DBUG_RETURN
(
1
);
if
(
!*
str
)
DBUG_RETURN
(
1
);
if
(
wild_compare
(
str
,
wildstr
,
str_is_pattern
)
==
0
)
DBUG_RETURN
(
0
);
}
if
(
wild_compare
(
str
,
wildstr
)
==
0
)
DBUG_RETURN
(
0
);
}
while
(
*
str
++
&&
wildstr
[
0
]
!=
wild_many
);
DBUG_RETURN
(
1
);
/* We will never come here */
}
}
DBUG_RETURN
(
*
str
!=
'\0'
);
DBUG_RETURN
(
*
str
!=
0
);
}
/* wild_compare */
mysys/mf_wfile.c
View file @
2e1ded2f
...
...
@@ -106,7 +106,7 @@ int wf_test(register WF_PACK *wf_pack, register const char *name)
not_pos
=
wf_pack
->
not_pos
;
for
(
i
=
0
;
i
<
not_pos
;
i
++
)
if
(
wild_compare
(
name
,
wf_pack
->
wild
[
i
])
==
0
)
if
(
wild_compare
(
name
,
wf_pack
->
wild
[
i
]
,
0
)
==
0
)
goto
found
;
if
(
i
)
DBUG_RETURN
(
1
);
/* No-match */
...
...
@@ -115,7 +115,7 @@ found:
/* Test that it isn't in not-list */
for
(
i
=
not_pos
;
i
<
wf_pack
->
wilds
;
i
++
)
if
(
wild_compare
(
name
,
wf_pack
->
wild
[
i
])
==
0
)
if
(
wild_compare
(
name
,
wf_pack
->
wild
[
i
]
,
0
)
==
0
)
DBUG_RETURN
(
1
);
DBUG_RETURN
(
0
);
}
/* wf_test */
...
...
sql/sql_acl.cc
View file @
2e1ded2f
...
...
@@ -834,7 +834,7 @@ static void acl_insert_db(const char *user, const char *host, const char *db,
*/
ulong
acl_get
(
const
char
*
host
,
const
char
*
ip
,
const
char
*
bin_ip
,
const
char
*
user
,
const
char
*
db
)
const
char
*
user
,
const
char
*
db
,
my_bool
db_is_pattern
)
{
ulong
host_access
,
db_access
;
uint
i
,
key_length
;
...
...
@@ -868,7 +868,7 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip,
{
if
(
compare_hostname
(
&
acl_db
->
host
,
host
,
ip
))
{
if
(
!
acl_db
->
db
||
!
wild_compare
(
db
,
acl_db
->
db
))
if
(
!
acl_db
->
db
||
!
wild_compare
(
db
,
acl_db
->
db
,
db_is_pattern
))
{
db_access
=
acl_db
->
access
;
if
(
acl_db
->
host
.
hostname
)
...
...
@@ -890,7 +890,7 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip,
ACL_HOST
*
acl_host
=
dynamic_element
(
&
acl_hosts
,
i
,
ACL_HOST
*
);
if
(
compare_hostname
(
&
acl_host
->
host
,
host
,
ip
))
{
if
(
!
acl_host
->
db
||
!
wild_compare
(
db
,
acl_host
->
db
))
if
(
!
acl_host
->
db
||
!
wild_compare
(
db
,
acl_host
->
db
,
0
))
{
host_access
=
acl_host
->
access
;
// Fully specified. Take it
break
;
...
...
@@ -1222,7 +1222,7 @@ static bool compare_hostname(const acl_host_and_ip *host, const char *hostname,
}
return
(
!
host
->
hostname
||
(
hostname
&&
!
wild_case_compare
(
hostname
,
host
->
hostname
))
||
(
ip
&&
!
wild_compare
(
ip
,
host
->
hostname
)));
(
ip
&&
!
wild_compare
(
ip
,
host
->
hostname
,
0
)));
}
...
...
@@ -1300,7 +1300,7 @@ static bool test_if_create_new_users(THD *thd)
tl
.
db
=
(
char
*
)
"mysql"
;
tl
.
real_name
=
(
char
*
)
"user"
;
db_access
=
acl_get
(
thd
->
host
,
thd
->
ip
,
(
char
*
)
&
thd
->
remote
.
sin_addr
,
thd
->
priv_user
,
tl
.
db
);
thd
->
priv_user
,
tl
.
db
,
0
);
if
(
!
(
db_access
&
INSERT_ACL
))
{
if
(
check_grant
(
thd
,
INSERT_ACL
,
&
tl
,
0
,
1
))
...
...
sql/sql_acl.h
View file @
2e1ded2f
...
...
@@ -85,7 +85,7 @@ my_bool acl_init(THD *thd, bool dont_read_acl_tables);
void
acl_reload
(
THD
*
thd
);
void
acl_free
(
bool
end
=
0
);
ulong
acl_get
(
const
char
*
host
,
const
char
*
ip
,
const
char
*
bin_ip
,
const
char
*
user
,
const
char
*
db
);
const
char
*
user
,
const
char
*
db
,
my_bool
db_is_pattern
);
ulong
acl_getroot
(
THD
*
thd
,
const
char
*
host
,
const
char
*
ip
,
const
char
*
user
,
const
char
*
password
,
const
char
*
scramble
,
char
**
priv_user
,
char
*
priv_host
,
...
...
sql/sql_base.cc
View file @
2e1ded2f
...
...
@@ -149,7 +149,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *wild)
if
(
wild
)
{
strxmov
(
name
,
entry
->
table_cache_key
,
"."
,
entry
->
real_name
,
NullS
);
if
(
wild_compare
(
name
,
wild
))
if
(
wild_compare
(
name
,
wild
,
0
))
continue
;
}
...
...
sql/sql_db.cc
View file @
2e1ded2f
...
...
@@ -410,7 +410,7 @@ bool mysql_change_db(THD *thd,const char *name)
db_access
=
DB_ACLS
;
else
db_access
=
(
acl_get
(
thd
->
host
,
thd
->
ip
,(
char
*
)
&
thd
->
remote
.
sin_addr
,
thd
->
priv_user
,
dbname
)
|
thd
->
priv_user
,
dbname
,
0
)
|
thd
->
master_access
);
if
(
!
(
db_access
&
DB_ACLS
)
&&
(
!
grant_option
||
check_grant_db
(
thd
,
dbname
)))
{
...
...
sql/sql_parse.cc
View file @
2e1ded2f
...
...
@@ -2672,7 +2672,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
if
(
!
(
thd
->
master_access
&
SELECT_ACL
)
&&
(
db
&&
(
!
thd
->
db
||
strcmp
(
db
,
thd
->
db
))))
db_access
=
acl_get
(
thd
->
host
,
thd
->
ip
,
(
char
*
)
&
thd
->
remote
.
sin_addr
,
thd
->
priv_user
,
db
);
/* purecov: inspected */
thd
->
priv_user
,
db
,
0
);
/* purecov: inspected */
*
save_priv
=
thd
->
master_access
|
db_access
;
DBUG_RETURN
(
FALSE
);
}
...
...
@@ -2692,7 +2692,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
if
(
db
&&
(
!
thd
->
db
||
strcmp
(
db
,
thd
->
db
)))
db_access
=
acl_get
(
thd
->
host
,
thd
->
ip
,
(
char
*
)
&
thd
->
remote
.
sin_addr
,
thd
->
priv_user
,
db
);
/* purecov: inspected */
thd
->
priv_user
,
db
,
0
);
/* purecov: inspected */
else
db_access
=
thd
->
db_access
;
// Remove SHOW attribute and access rights we already have
...
...
sql/sql_show.cc
View file @
2e1ded2f
...
...
@@ -78,7 +78,7 @@ mysqld_show_dbs(THD *thd,const char *wild)
{
if
(
thd
->
master_access
&
(
DB_ACLS
|
SHOW_DB_ACL
)
||
acl_get
(
thd
->
host
,
thd
->
ip
,
(
char
*
)
&
thd
->
remote
.
sin_addr
,
thd
->
priv_user
,
file_name
)
||
thd
->
priv_user
,
file_name
,
0
)
||
(
grant_option
&&
!
check_grant_db
(
thd
,
file_name
)))
{
thd
->
packet
.
length
(
0
);
...
...
@@ -214,7 +214,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path,
#endif
{
if
(
file
->
name
[
0
]
==
'.'
||
!
MY_S_ISDIR
(
file
->
mystat
->
st_mode
)
||
(
wild
&&
wild_compare
(
file
->
name
,
wild
)))
(
wild
&&
wild_compare
(
file
->
name
,
wild
,
0
)))
continue
;
}
}
...
...
@@ -232,7 +232,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path,
if
(
wild_case_compare
(
file
->
name
,
wild
))
continue
;
}
else
if
(
wild_compare
(
file
->
name
,
wild
))
else
if
(
wild_compare
(
file
->
name
,
wild
,
0
))
continue
;
}
}
...
...
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