тут система такая.... В системе есть плагин аунтификации.
C++ (Qt)
#include <QDebug>
#include <QLibrary>
#include <QSettings>
#include <QProcess>
#include <QString>
#include "auth_plugin.h"
AuthPlugin::AuthPlugin(QObject*parent)
:QObject(parent)
{
qDebug()<< "Constructor!" << endl; //user;
}
void AuthPlugin::init()
{
#if defined(Q_OS_LINUX)
QProcess whoami;
whoami.start("whoami");
QString out_whoami;
out_whoami=whoami.readAllStandardOutput();
out_whoami.remove(out_whoami.size()-1, 1 );
user=out_whoami;
qDebug()<<user<<"\n"<< "Hello!" << endl;
QProcess proc;
QString m_Output;
proc.setProcessChannelMode( QProcess::SeparateChannels );
proc.start( "id -Z" );
if (!proc.waitForStarted(1000)) {
QString e_info;
switch(proc.error()){
case QProcess::FailedToStart:
e_info = QObject::trUtf8("[Процесс не запущен или отстутсвуют права доступа на исполнение]");
break;
case QProcess::Crashed:
e_info = QObject::trUtf8("[Процесс завершен с ошибкой, после успешного запуска]");
break;
case QProcess::Timedout:
e_info = QObject::trUtf8("[Превышен предел ожидания ответа от процесса]");
break;
case QProcess::WriteError:
e_info = QObject::trUtf8("[Ошибка записи в процесс (Процесс не запущен?)]");
break;
case QProcess::ReadError:
e_info = QObject::trUtf8("[Ошибка чтения из процесса (Процесс не запущен?)]");
break;
case QProcess::UnknownError:
e_info = QObject::trUtf8("[Неизвестная ошибка]");
break;
}
emit sendEventMessageInfo(QObject::trUtf8("Ошибка %1\nПри запуске приложения id -Z !\n%2")
.arg(e_info)
.arg(QString(Q_FUNC_INFO)),
VPrn::eId_AppsError,
VPrn::Error,
VPrn::eCatId_Error);
qDebug()<< m_Output << " QProcess::error() " << proc.error();
}else{
proc.waitForFinished(-1);
proc.closeWriteChannel();
m_Output = proc.readAll();//.trimmed();
m_Output.remove(m_Output.size()-1, 1 ); //удаляем последний символ новой строки '\n'
// логон:роль:домен:mls:msc;
// unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
qDebug() << Q_FUNC_INFO << "m_Output " << m_Output << "\n";
QStringList context = m_Output.split(":");
if (context.count() == 5){
//user = context.at(0); // логин
role = context.at(1);
mlsRange = context.at(3);
mcsRange = context.at(4);
//emit userAuth(user,role,mlsRange,mcsRange);
}
}
emit userAuth(user,role,mlsRange,mcsRange);
#endif
/*
#endif*/
}
Q_EXPORT_PLUGIN2(auth_plugin, AuthPlugin);