Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F213314
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
10 KB
Subscribers
None
View Options
diff --git a/qmac/nomac.cpp b/qmac/nomac.cpp
--- a/qmac/nomac.cpp
+++ b/qmac/nomac.cpp
@@ -1,119 +1,121 @@
#include "qmac.h"
#include <QSharedData>
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class ProcessMacData : public QSharedData
{
public:
ProcessMacData();
int level() const { return _level; }
QString levelText() const { return _levelText; }
QString categoryText() const { return _categoryText; }
private:
int _level;
QString _levelText;
QString _categoryText;
};
ProcessMacData::ProcessMacData()
: _level(0)
, _levelText(QStringLiteral("Нет"))
+ , _categoryText(QStringLiteral("Нет"))
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
ProcessMac::ProcessMac()
: d(new ProcessMacData)
{
}
ProcessMac::~ProcessMac() = default;
//---------------------------------------------------------------------------
int 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)
{
Q_UNUSED(a_fileMac)
return true;
}
bool ProcessMac::canWrite(const FileMac& a_fileMac)
{
Q_UNUSED(a_fileMac)
return true;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class FileMacData : public QSharedData
{
public:
FileMacData(const QString& a_fileName);
int level() const { return _level; }
QString levelText() const { return _levelText; }
QString categoryText() const { return _categoryText; }
QString fileName() const { return _fileName; }
private:
int _level;
QString _levelText;
QString _categoryText;
QString _fileName;
};
FileMacData::FileMacData(const QString& a_fileName)
: _level(0)
, _levelText(QStringLiteral("Нет"))
+ , _categoryText(QStringLiteral("Нет"))
, _fileName(a_fileName)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
FileMac::FileMac(const QString& a_fileName)
: d(new FileMacData(a_fileName))
{
}
FileMac::~FileMac() = default;
//---------------------------------------------------------------------------
int 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();
}
diff --git a/tests/main.cpp b/tests/main.cpp
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -1,234 +1,105 @@
#include "main.h"
#include "qmac.h"
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QFileInfo>
#include <QTextStream>
//для getpid
#include <sys/types.h>
//для типов операции функции mac_file_permit()
#include <unistd.h>
//заголовочный файл подсистемы MAC библиотеки PARSEC (мандатное разграничения доступа)
//#include <parsec/mac.h>
//#include <parsec/parsec_mac.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream os(stdout);
os << "AstraLinux SE security system PARSEC demo application" << '\n' << '\n';
os << "Process name : " << argv[0] << '\n';
//(необязательно) получение идентификатора текущего процесса
pid_t pid = getpid();
os << "Process ID : " << pid << '\n';
//
// Процессы
//
ProcessMac processMac;
os << "Process MAC level: " << processMac.levelText() << " (" << processMac.level() << ')' << '\n';
os << "Process category : " << processMac.categoryText() << '\n';
//
// Файлы
//
QCommandLineParser parser;
parser.process(a);
QStringList fileNames = parser.positionalArguments();
for (const auto& fileName : fileNames)
{
os << '\n';
os << "File name: " << fileName << '\n';
os << "File type: ";
QFileInfo fi(fileName);
if (!fi.exists())
{
os << "does not exist" << '\n';
continue;
}
if (fi.isDir())
os << "directory" << '\n';
else if (fi.isFile())
os << "regular file" << '\n';
else
{
os << "unsupported" << '\n';
continue;
}
FileMac fileMac(fileName);
os << "MAC level: " << fileMac.levelText() << " (" << fileMac.level() << ')' << '\n';
os << "MAC categ: " << fileMac.categoryText() << '\n';
//проверка возможности чтения и записи файла
bool canRead = processMac.canRead(fileMac);
bool canWrite = processMac.canWrite(fileMac);
os << "Can read : " << (canRead ? "true" : "false") << '\n';
os << "Can write: " << (canWrite ? "true" : "false") << '\n';
if (fi.isDir())
continue;
//проверим, действительно ли невозможно читать и записывать файлы
if (!canRead)
{
QFile f(fileName);
if (f.open(QIODevice::ReadOnly))
os << "Can not read, but opened for reading !!!" << '\n';
else
os << "Open for reading failed" << '\n';
}
if (!canWrite)
{
QFile f(fileName);
if (f.open(QIODevice::ReadWrite))
os << "Can not write, but opened for writing !!!" << '\n';
else
os << "Open for writing failed" << '\n';
}
}
}
-
-/*
- //получение метки текущего процесса, то же, что mac_get_pid(0) или mac_get_pid(pid)
- mac_t processMac = mac_get_proc();
-
- //текстовое представление метки процесса
- ssize_t size;
- wchar_t* wtext = mac_to_wtext(processMac, &size, MAC_FMT_TXT | MAC_FMT_LEV);
-
- os << "Process MAC level: " << QString::fromWCharArray(wtext, size) << " (" << mac_get_lev(processMac) << ')' << '\n';
-
- //освободить память, выделенную функцией mac_to_wtext
- free(wtext);
-
- //текстовое представление списка категорий
- wtext = mac_to_wtext(processMac, &size, MAC_FMT_TXT | MAC_FMT_CAT);
-
- os << "Process category : " << QString::fromWCharArray(wtext, size) << '\n';
-
- //освободить память, выделенную функцией mac_to_wtext
- free(wtext);
-
- //
- // Файлы
- //
- QCommandLineParser parser;
- parser.process(a);
-
- QStringList fileNames = parser.positionalArguments();
- for (const auto& fileName : fileNames)
- {
- os << '\n';
- os << "File name: " << fileName << '\n';
- os << "File type: ";
- QFileInfo fi(fileName);
- if (!fi.exists())
- {
- os << "does not exist" << '\n';
- continue;
- }
-
- if (fi.isDir())
- os << "directory" << '\n';
- else if (fi.isFile())
- os << "regular file" << '\n';
- else
- {
- os << "unsupported" << '\n';
- continue;
- }
-
- //получение метки файла по его имени
- mac_t fileMac = mac_get_file(fileName.toLocal8Bit().constData());
-
- //текстовое представление метки файла
- ssize_t size;
- wchar_t* wtext = mac_to_wtext(fileMac, &size, MAC_FMT_TXT | MAC_FMT_LEV);
-
- os << "MAC level: " << QString::fromWCharArray(wtext, size) << " (" << mac_get_lev(fileMac) << ')' << '\n';
-
- //освободить память, выделенную функцией mac_to_wtext
- free(wtext);
-
- //текстовое представление списка категорий
- wtext = mac_to_wtext(fileMac, &size, MAC_FMT_TXT | MAC_FMT_CAT);
-
- os << "MAC categ: " << QString::fromWCharArray(wtext, size) << '\n';
-
- //освободить память, выделенную функцией mac_to_wtext
- free(wtext);
-
- //проверка возможности чтения и записи файла
- bool canRead = 0 == mac_file_permit(processMac, fileMac, R_OK);
- bool canWrite = 0 == mac_file_permit(processMac, fileMac, W_OK);
-
- os << "Can read : " << (canRead ? "true" : "false") << '\n';
- os << "Can write: " << (canWrite ? "true" : "false") << '\n';
-
- //освободить память после использования
- mac_free(fileMac);
-
- if (fi.isDir())
- continue;
-
- //проверим, действительно ли невозможно читать и записывать файлы
- if (!canRead)
- {
- QFile f(fileName);
-
- if (f.open(QIODevice::ReadOnly))
- os << "Can not read, but opened for reading !!!" << '\n';
- else
- os << "Open for reading failed" << '\n';
- }
-
- if (!canWrite)
- {
- QFile f(fileName);
-
- if (f.open(QIODevice::ReadWrite))
- os << "Can not write, but opened for writing !!!" << '\n';
- else
- os << "Open for writing failed" << '\n';
- }
-
- if (canRead)
- {
- QFile f(fileName);
-
- if (f.open(QIODevice::ReadOnly))
- {
- //получение метки открытого файла по его дескриптору
- mac_t mac = mac_get_fd(f.handle());
-
- //получение уровня доступа
- mac_lev_t lev = mac_get_lev(mac);
- Q_UNUSED(lev)
- //os << "MAC level: " << lev << '\n';
-
- //освободить память после использования
- mac_free(mac);
- }
- }
- }
-
- //освободить память после использования
- mac_free(processMac);
-}
-*/
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Jul 29, 5:37 AM (1 d, 15 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
139591
Attached To
rLQMAC Библиотека для работы с мандатными метками в AstraLinux
Event Timeline
Log In to Comment