Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7436)

Unified Diff: chrome/installer/mac/app/AuthorizedInstall.m

Issue 2243863003: Added authorized install with a script to do the copy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/installer/mac/app/AuthorizedInstall.m
diff --git a/chrome/installer/mac/app/AuthorizedInstall.m b/chrome/installer/mac/app/AuthorizedInstall.m
new file mode 100644
index 0000000000000000000000000000000000000000..61df2e9c09078ac13dedf3025ef997c6157fe863
--- /dev/null
+++ b/chrome/installer/mac/app/AuthorizedInstall.m
@@ -0,0 +1,79 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "AuthorizedInstall.h"
+
+// TODO: Move attemptAuthorizedInstall body into Unpacker method which will
+// provide
+// alternative in the case where authorization failed.
+void attemptAuthorizedInstall() {
+ NSString* toolPath =
+ [[NSBundle mainBundle] pathForResource:@"install" ofType:@"sh"];
+ NSFileManager* manager = [NSFileManager defaultManager];
+ if (![manager fileExistsAtPath:toolPath]) {
+ exit(1);
Elly Fong-Jones 2016/08/16 14:59:42 that seems kind of abrupt? maybe we should signal
ivanhernandez 2016/08/16 17:18:38 Acknowledged.
+ }
+
+ NSString* appBundleName = @"Google Chrome.app";
+
+ NSArray* applicationDirectories = NSSearchPathForDirectoriesInDomains(
+ NSApplicationDirectory, NSLocalDomainMask, YES);
+ NSString* applicationDirectory = applicationDirectories.firstObject;
+
+ // TODO: Change sourceAppBundlePath to the temporary folder that chrome will
+ // be downloaded and extracted to.
+ NSArray* downloadDirectories = NSSearchPathForDirectoriesInDomains(
+ NSDownloadsDirectory, NSUserDomainMask, YES);
+ NSString* sourceAppBundlePath = [NSString
+ pathWithComponents:@[ downloadDirectories.firstObject, appBundleName ]];
+ NSString* destinationAppBundlePath =
+ [NSString pathWithComponents:@[ applicationDirectory, appBundleName ]];
+
+ const char* sourcePath = [sourceAppBundlePath UTF8String];
+ const char* destinationPath = [applicationDirectory UTF8String];
+ const char* fullDestinationPath = [destinationAppBundlePath UTF8String];
+ const char* args[] = {sourcePath, destinationPath, fullDestinationPath, NULL};
+
+ AuthorizationRef authRef;
+ OSStatus status;
+
+ if (attemptAuthorization(&authRef, &status)) {
+ authorizedMoveToApplications(&authRef, &status, [toolPath UTF8String],
+ args);
+ AuthorizationFree(authRef, kAuthorizationFlagDestroyRights);
+ } else {
+ // TODO: call on unauthorized install
+ }
+}
+
+// Does the setup needed to authorize a tool to run as admin.
+BOOL attemptAuthorization(AuthorizationRef* authRef, OSStatus* status) {
+ *status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
+ kAuthorizationFlagDefaults, authRef);
+
+ AuthorizationItem items = {kAuthorizationRightExecute, 0, NULL, 0};
+ AuthorizationRights rights = {1, &items};
+ AuthorizationFlags flags =
+ kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed |
+ kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
+
+ *status = AuthorizationCopyRights(*authRef, &rights, NULL, flags, NULL);
+ return (*status == errAuthorizationSuccess);
+}
+
+BOOL authorizedMoveToApplications(AuthorizationRef* authRef,
+ OSStatus* status,
+ const char* toolPath,
+ const char** args) {
+ if (*status != errAuthorizationSuccess)
+ return false;
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ *status = AuthorizationExecuteWithPrivileges(
Elly Fong-Jones 2016/08/16 14:59:42 Hm - if this is deprecated, is there a newer, shin
Mark Mentovai 2016/08/16 15:06:32 Elly Jones wrote:
+ *authRef, toolPath, kAuthorizationFlagDefaults, (char* const*)args, NULL);
+#pragma clang diagnostic pop
+
+ return (*status == errAuthorizationSuccess);
+}

Powered by Google App Engine
This is Rietveld 408576698