mirror of
https://github.com/pocoproject/poco.git
synced 2025-05-29 07:25:53 +02:00
porting 1.4.4. rev. 1926 (SF#3478665: Permission checks in Poco::File not correct for root)
This commit is contained in:
parent
801b2485f4
commit
0ca3bbc848
@ -100,14 +100,12 @@ bool FileImpl::canReadImpl() const
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(_path.c_str(), &st) == 0)
|
if (stat(_path.c_str(), &st) == 0)
|
||||||
{
|
{
|
||||||
if (geteuid() == 0)
|
if (st.st_uid == geteuid())
|
||||||
return true;
|
|
||||||
else if (st.st_uid == geteuid())
|
|
||||||
return (st.st_mode & S_IRUSR) != 0;
|
return (st.st_mode & S_IRUSR) != 0;
|
||||||
else if (st.st_gid == getegid())
|
else if (st.st_gid == getegid())
|
||||||
return (st.st_mode & S_IRGRP) != 0;
|
return (st.st_mode & S_IRGRP) != 0;
|
||||||
else
|
else
|
||||||
return (st.st_mode & S_IROTH) != 0;
|
return (st.st_mode & S_IROTH) != 0 || geteuid() == 0;
|
||||||
}
|
}
|
||||||
else handleLastErrorImpl(_path);
|
else handleLastErrorImpl(_path);
|
||||||
return false;
|
return false;
|
||||||
@ -121,14 +119,12 @@ bool FileImpl::canWriteImpl() const
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(_path.c_str(), &st) == 0)
|
if (stat(_path.c_str(), &st) == 0)
|
||||||
{
|
{
|
||||||
if (geteuid() == 0)
|
if (st.st_uid == geteuid())
|
||||||
return true;
|
|
||||||
else if (st.st_uid == geteuid())
|
|
||||||
return (st.st_mode & S_IWUSR) != 0;
|
return (st.st_mode & S_IWUSR) != 0;
|
||||||
else if (st.st_gid == getegid())
|
else if (st.st_gid == getegid())
|
||||||
return (st.st_mode & S_IWGRP) != 0;
|
return (st.st_mode & S_IWGRP) != 0;
|
||||||
else
|
else
|
||||||
return (st.st_mode & S_IWOTH) != 0;
|
return (st.st_mode & S_IWOTH) != 0 || geteuid() == 0;
|
||||||
}
|
}
|
||||||
else handleLastErrorImpl(_path);
|
else handleLastErrorImpl(_path);
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user