Page MenuHomePhabricator

No OneTemporary

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

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

Event Timeline