35#include "adminauthorization_p.h"
37#include <QtCore/QStringList>
38#include <QtCore/QVector>
40#include <Security/Authorization.h>
41#include <Security/AuthorizationTags.h>
48 return geteuid() == 0;
53 AuthorizationRef authorizationRef;
54 OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
55 kAuthorizationFlagDefaults, &authorizationRef);
56 if (status != errAuthorizationSuccess)
59 AuthorizationItem item = { kAuthorizationRightExecute, 0, 0, 0 };
60 AuthorizationRights rights = { 1, &item };
61 const AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed
62 | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
64 status = AuthorizationCopyRights(authorizationRef, &rights, kAuthorizationEmptyEnvironment,
66 if (status != errAuthorizationSuccess)
70 QVector<QByteArray> utf8Args;
71 for(
auto argument : arguments) {
72 utf8Args.push_back(argument.toUtf8());
73 args.push_back(utf8Args.last().data());
77 const QByteArray utf8Program = program.toUtf8();
78 status = AuthorizationExecuteWithPrivileges(authorizationRef, utf8Program.data(),
79 kAuthorizationFlagDefaults, args.data(), 0);
81 AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
82 return status == errAuthorizationSuccess;
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.