Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F193302
mac.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
mac.cpp
View Options
#include
"qmac.h"
#include
<QSharedData>
//заголовочный файл подсистемы MAC библиотеки PARSEC (мандатное разграничения доступа)
#include
<parsec/mac.h>
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class
FileMacData
:
public
QSharedData
{
friend
class
ProcessMacData
;
public
:
FileMacData
(
const
QString
&
a_fileName
);
~
FileMacData
();
QString
level
()
const
{
return
_level
;
}
QString
levelText
()
const
{
return
_levelText
;
}
QString
categoryText
()
const
{
return
_categoryText
;
}
QString
fileName
()
const
{
return
_fileName
;
}
private
:
mac_t
_mac
;
QString
_level
;
QString
_levelText
;
QString
_categoryText
;
QString
_fileName
;
};
FileMacData
::
FileMacData
(
const
QString
&
a_fileName
)
:
_fileName
(
a_fileName
)
{
//получение метки файла по его имени
_mac
=
mac_get_file
(
a_fileName
.
toLocal8Bit
().
constData
());
//числовое представление метки файла
_level
=
QString
::
number
(
mac_get_lev
(
_mac
));
//текстовое представление метки файла
ssize_t
size
;
wchar_t
*
wtext
=
mac_to_wtext
(
_mac
,
&
size
,
MAC_FMT_TXT
|
MAC_FMT_LEV
);
_levelText
=
QString
::
fromWCharArray
(
wtext
,
size
);
//освободить память, выделенную функцией mac_to_wtext
free
(
wtext
);
//текстовое представление списка категорий
wtext
=
mac_to_wtext
(
_mac
,
&
size
,
MAC_FMT_TXT
|
MAC_FMT_CAT
);
_categoryText
=
QString
::
fromWCharArray
(
wtext
,
size
);
//освободить память, выделенную функцией mac_to_wtext
free
(
wtext
);
}
FileMacData
::~
FileMacData
()
{
mac_free
(
_mac
);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
FileMac
::
FileMac
(
const
QString
&
a_fileName
)
:
d
(
new
FileMacData
(
a_fileName
))
{
}
FileMac
::~
FileMac
()
=
default
;
//---------------------------------------------------------------------------
QString
FileMac::level
()
const
{
return
d
->
level
();
}
QString
FileMac::levelText
()
const
{
return
d
->
levelText
();
}
QString
FileMac::categoryText
()
const
{
return
d
->
categoryText
();
}
QString
FileMac::fileName
()
const
{
return
d
->
fileName
();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class
ProcessMacData
:
public
QSharedData
{
public
:
ProcessMacData
();
~
ProcessMacData
();
QString
level
()
const
{
return
_level
;
}
QString
levelText
()
const
{
return
_levelText
;
}
QString
categoryText
()
const
{
return
_categoryText
;
}
bool
canRead
(
const
FileMacData
&
a_fileMacData
);
bool
canWrite
(
const
FileMacData
&
a_fileMacData
);
private
:
mac_t
_mac
;
QString
_level
;
QString
_levelText
;
QString
_categoryText
;
};
ProcessMacData
::
ProcessMacData
()
{
//получение метки текущего процесса, то же, что mac_get_pid(0) или mac_get_pid(pid)
_mac
=
mac_get_proc
();
//числовое представление метки процесса
_level
=
QString
::
number
(
mac_get_lev
(
_mac
));
//текстовое представление метки процесса
ssize_t
size
;
wchar_t
*
wtext
=
mac_to_wtext
(
_mac
,
&
size
,
MAC_FMT_TXT
|
MAC_FMT_LEV
);
_levelText
=
QString
::
fromWCharArray
(
wtext
,
size
);
//освободить память, выделенную функцией mac_to_wtext
free
(
wtext
);
//текстовое представление списка категорий
wtext
=
mac_to_wtext
(
_mac
,
&
size
,
MAC_FMT_TXT
|
MAC_FMT_CAT
);
_categoryText
=
QString
::
fromWCharArray
(
wtext
,
size
);
//освободить память, выделенную функцией mac_to_wtext
free
(
wtext
);
}
ProcessMacData
::~
ProcessMacData
()
{
mac_free
(
_mac
);
}
//---------------------------------------------------------------------------
bool
ProcessMacData
::
canRead
(
const
FileMacData
&
a_fileMacData
)
{
return
0
==
mac_file_permit
(
_mac
,
a_fileMacData
.
_mac
,
R_OK
);
}
//---------------------------------------------------------------------------
bool
ProcessMacData
::
canWrite
(
const
FileMacData
&
a_fileMacData
)
{
return
0
==
mac_file_permit
(
_mac
,
a_fileMacData
.
_mac
,
W_OK
);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
ProcessMac
::
ProcessMac
()
:
d
(
new
ProcessMacData
)
{
}
ProcessMac
::~
ProcessMac
()
=
default
;
//---------------------------------------------------------------------------
QString
ProcessMac::level
()
const
{
return
d
->
level
();
}
QString
ProcessMac::levelText
()
const
{
return
d
->
levelText
();
}
QString
ProcessMac::categoryText
()
const
{
return
d
->
categoryText
();
}
bool
ProcessMac::canRead
(
const
FileMac
&
a_fileMac
)
{
return
d
->
canRead
(
*
(
a_fileMac
.
d
));
}
bool
ProcessMac::canWrite
(
const
FileMac
&
a_fileMac
)
{
return
d
->
canWrite
(
*
(
a_fileMac
.
d
));
}
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Wed, Jun 11, 3:12 PM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
127064
Attached To
rLQMAC Библиотека для работы с мандатными метками в AstraLinux
Event Timeline
Log In to Comment