173 lines
3.8 KiB
C++
173 lines
3.8 KiB
C++
#include <unistd.h>
|
|
#include <pwd.h>
|
|
#include <grp.h>
|
|
|
|
#include <QStringList>
|
|
#include <QDebug>
|
|
#include <QProcess>
|
|
#include <QByteArray>
|
|
|
|
#include "common.h"
|
|
|
|
CheckRes checkCommand(const QStringList &command)
|
|
{
|
|
if (command.isEmpty())
|
|
return MAINWINDOW;
|
|
else if(command.at(0).compare("debug")==0)
|
|
return DEBUG;
|
|
else if(command.at(0).compare("show")==0)
|
|
return MAINWINDOW;
|
|
else if (command.size() != 2) {
|
|
return CHECK_FALSE;
|
|
}
|
|
else if (command.at(0).compare("add")==0
|
|
|| command.at(0).compare("remove")==0
|
|
|| command.at(0).compare("add_uri")==0 ) {
|
|
|
|
return POPWINDOW;
|
|
}
|
|
return CHECK_FALSE;
|
|
}
|
|
|
|
QString getRetFromCommand(const QStringList &command)
|
|
{
|
|
QProcess proc;
|
|
QStringList options;
|
|
options << "-c"<< command.join(" ");
|
|
proc.closeWriteChannel();
|
|
proc.start("bash", options);
|
|
if (!proc.waitForFinished())
|
|
return "";
|
|
QString res = QString(proc.readAll());
|
|
proc.close();
|
|
if(res.right(1) == "\n")
|
|
res.chop(1);
|
|
return res;
|
|
}
|
|
|
|
void runCommand(const QStringList &command)
|
|
{
|
|
QProcess proc;
|
|
QStringList options;
|
|
options << "-c"<< command.join(" ");
|
|
proc.closeWriteChannel();
|
|
proc.startDetached("bash", options);
|
|
|
|
return ;
|
|
}
|
|
|
|
const char *qstringTochar(const QString &qstr)
|
|
{
|
|
if (qstr.isEmpty())
|
|
return nullptr;
|
|
QByteArray ba = qstr.toLocal8Bit();
|
|
return ba.data();
|
|
}
|
|
|
|
QString getUserName()
|
|
{
|
|
uid_t uid;
|
|
uid_t NO_UID = -1;
|
|
struct passwd *pw;
|
|
|
|
errno = 0;
|
|
uid = geteuid ();
|
|
if (uid == -1 && errno) {
|
|
qDebug () << "get uid error";
|
|
return "";
|
|
}
|
|
pw = getpwuid (uid);
|
|
if (!pw) {
|
|
qDebug ("cannot find name for user ID %lu", (unsigned long int) uid);
|
|
return "";
|
|
}
|
|
return QString(pw->pw_name);
|
|
}
|
|
|
|
bool isAdministratorUser()
|
|
{
|
|
static gid_t list[100];
|
|
int n_gp = getgroups(100,list);
|
|
struct group *gp;
|
|
for(int i = 0;i < n_gp; i++) {
|
|
gp = getgrgid(list[i]);
|
|
if (!gp) {
|
|
continue;
|
|
}
|
|
if(QString(gp->gr_name) == "lpadmin") {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void specialDeviceCheck(QString &vendor, QString &model)
|
|
{
|
|
QMap<QString, QString>::const_iterator iter = mfgConvertMap.begin();
|
|
while (iter != mfgConvertMap.end())
|
|
{
|
|
if (iter.key().compare(vendor, Qt::CaseInsensitive) == 0) {
|
|
vendor = iter.value();
|
|
break;
|
|
}
|
|
iter++;
|
|
}
|
|
if (model.indexOf("HP") == 0) {
|
|
model.remove(0, 2);
|
|
if (model.at(0) == " ") {
|
|
model.remove(0, 1);
|
|
}
|
|
}
|
|
|
|
if (model.contains(" series")) {
|
|
model.remove(" series");
|
|
}
|
|
}
|
|
|
|
QString devicePathCheck(const QString &path)
|
|
{
|
|
QString ppath = path;
|
|
if (ppath.contains("unbind@"))
|
|
ppath.remove("unbind@");
|
|
if (ppath.contains("bind@"))
|
|
ppath.remove("bind@");
|
|
return ppath;
|
|
}
|
|
|
|
bool ipIsValid(const QString &ipAddr)
|
|
{
|
|
QRegExp rx2("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");
|
|
if (!rx2.exactMatch(ipAddr)) {
|
|
return false;
|
|
} else {
|
|
QStringList pieces = ipAddr.split(".");
|
|
bool ok = true;
|
|
for (int i = 0; i < 4; i++) {
|
|
int num = pieces.value(i).toInt(&ok, 10); //合理性判断
|
|
if (!ok) {
|
|
return false;
|
|
}
|
|
if (num > 255) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool printerNameIsLegal(const QString &printerName)
|
|
{
|
|
if (printerName.contains(" ")
|
|
|| printerName.contains("/")
|
|
|| printerName.contains("\\")
|
|
|| printerName.contains("'")
|
|
|| printerName.contains('"')
|
|
|| printerName.contains("?")
|
|
|| printerName.contains("#")
|
|
|| printerName.toLocal8Bit().size() > 127) {
|
|
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|