summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <qt-info@nokia.com>2011-05-04 07:39:26 +0200
committerkh1 <qt-info@nokia.com>2011-05-04 07:41:35 +0200
commit04f60ae2e22b3685f58a687b9e734c8758055841 (patch)
tree7a5e501e0dd3c7483b29986036d78d1c273f5b4d
parent162ed64b51d869a316c0e387ab79fe3ed6676971 (diff)
Check on OSX as well for root privilegs, cleanup.
-rw-r--r--installerbuilder/libinstaller/adminauthorization.cpp8
-rw-r--r--installerbuilder/libinstaller/adminauthorization_mac.cpp79
2 files changed, 47 insertions, 40 deletions
diff --git a/installerbuilder/libinstaller/adminauthorization.cpp b/installerbuilder/libinstaller/adminauthorization.cpp
index fa2a091b1..1fafac9dc 100644
--- a/installerbuilder/libinstaller/adminauthorization.cpp
+++ b/installerbuilder/libinstaller/adminauthorization.cpp
@@ -60,11 +60,3 @@ void AdminAuthorizationBase::setAuthorized()
{
d->authorized = true;
}
-
-#ifdef Q_WS_MAC
-bool AdminAuthorization::hasAdminRights()
-{
- // as this is only required on Windows
- return false;
-}
-#endif
diff --git a/installerbuilder/libinstaller/adminauthorization_mac.cpp b/installerbuilder/libinstaller/adminauthorization_mac.cpp
index 50ba63a25..d4b2de8d1 100644
--- a/installerbuilder/libinstaller/adminauthorization_mac.cpp
+++ b/installerbuilder/libinstaller/adminauthorization_mac.cpp
@@ -35,70 +35,85 @@
#include <Security/Authorization.h>
#include <Security/AuthorizationTags.h>
+#include <QtCore/QStringList>
+#include <QtCore/QVector>
+
#include <unistd.h>
-#include <QStringList>
-#include <QVector>
+
+// -- AdminAuthorization::Private
class AdminAuthorization::Private
{
public:
Private()
- : auth( 0 )
- {
- }
+ : auth(0) { }
AuthorizationRef auth;
};
+
+// -- AdminAuthorization
+
AdminAuthorization::AdminAuthorization()
{
- AuthorizationCreate( 0, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &d->auth );
+ AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &d->auth);
}
AdminAuthorization::~AdminAuthorization()
{
- AuthorizationFree( d->auth, kAuthorizationFlagDestroyRights );
+ AuthorizationFree(d->auth, kAuthorizationFlagDestroyRights);
}
bool AdminAuthorization::authorize()
{
- if( geteuid() == 0 )
+ if(geteuid() == 0)
setAuthorized();
- if( isAuthorized() )
+ if(isAuthorized())
return true;
- AuthorizationItem item = { kAuthorizationRightExecute, 0, NULL, 0 };
- const AuthorizationRights rights = { 1, &item };
-
- const AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
-
- const int result = AuthorizationCopyRights( d->auth, &rights, 0, flags, 0 );
- if( result != 0 )
+ AuthorizationItem item;
+ item.name = kAuthorizationRightExecute;
+ item.valueLength = 0;
+ item.value = NULL;
+ item.flags = 0;
+
+ AuthorizationRights rights;
+ rights.count = 1;
+ rights.items = &item;
+
+ const AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed
+ | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
+
+ const OSStatus result = AuthorizationCopyRights(d->auth, &rights, kAuthorizationEmptyEnvironment,
+ flags, 0);
+ if(result != errAuthorizationSuccess)
return false;
- seteuid( 0 );
+ seteuid(0);
setAuthorized();
emit authorized();
return true;
}
-
-bool AdminAuthorization::execute( QWidget*, const QString& program, const QStringList& arguments )
+
+bool AdminAuthorization::execute(QWidget*, const QString& program, const QStringList& arguments)
{
- const QByteArray utf8Program = program.toUtf8();
- const char* const prog = utf8Program.data();
- QVector< QByteArray > utf8Args;
- QVector< char* > args;
- for( QStringList::const_iterator it = arguments.begin(); it != arguments.end(); ++it )
- {
- utf8Args.push_back( it->toUtf8() );
- args.push_back( utf8Args.last().data() );
+ QVector<char* > args;
+ QVector<QByteArray> utf8Args;
+ foreach (const QString &argument, arguments) {
+ utf8Args.push_back(argument.toUtf8());
+ args.push_back(utf8Args.last().data());
}
- args.push_back( 0 );
+ args.push_back(0);
- const AuthorizationFlags flags = kAuthorizationFlagDefaults;
-
- const int result = AuthorizationExecuteWithPrivileges( d->auth, prog, flags, args.data(), 0 );
- return result == 0;
+ const QByteArray utf8Program = program.toUtf8();
+ const OSStatus result = AuthorizationExecuteWithPrivileges(d->auth, utf8Program.data(),
+ kAuthorizationFlagDefaults, args.data(), 0);
+ return result == errAuthorizationSuccess;
+}
+
+bool AdminAuthorization::hasAdminRights()
+{
+ return geteuid() == 0;
}