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.