RabbitCommon v2.2.6
Loading...
Searching...
No Matches
adminauthorization_mac.cpp
1
35#include "adminauthorization_p.h"
36
37#include <QtCore/QStringList>
38#include <QtCore/QVector>
39
40#include <Security/Authorization.h>
41#include <Security/AuthorizationTags.h>
42#include <unistd.h>
43
44using namespace RabbitCommon;
45
47{
48 return geteuid() == 0;
49}
50
51bool CAdminAuthorization::executeAsAdmin(const QString &program, const QStringList &arguments)
52{
53 AuthorizationRef authorizationRef;
54 OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
55 kAuthorizationFlagDefaults, &authorizationRef);
56 if (status != errAuthorizationSuccess)
57 return false;
58
59 AuthorizationItem item = { kAuthorizationRightExecute, 0, 0, 0 };
60 AuthorizationRights rights = { 1, &item };
61 const AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed
62 | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
63
64 status = AuthorizationCopyRights(authorizationRef, &rights, kAuthorizationEmptyEnvironment,
65 flags, 0);
66 if (status != errAuthorizationSuccess)
67 return false;
68
69 QVector<char *> args;
70 QVector<QByteArray> utf8Args;
71 for(auto argument : arguments) {
72 utf8Args.push_back(argument.toUtf8());
73 args.push_back(utf8Args.last().data());
74 }
75 args.push_back(0);
76
77 const QByteArray utf8Program = program.toUtf8();
78 status = AuthorizationExecuteWithPrivileges(authorizationRef, utf8Program.data(),
79 kAuthorizationFlagDefaults, args.data(), 0);
80
81 AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
82 return status == errAuthorizationSuccess;
83}
bool hasAdminRights() override
Tests whether this program already has elevated rights or not.
bool executeAsAdmin(const QString &program, const QStringList &arguments) override
Runs a program with the given arguments with elevated rights.