1075
1075
@inline_callbacks
1076
1076
def _create_trans(self, role, action, sender, packages=None, kwargs=None):
1077
1077
"""Helper method which returns the tid of a new transaction."""
1078
yield policykit1.check_authorization_by_name(sender, action)
1078
# Check silently if one of the high level privileges has been granted
1079
# before to reduce clicks to install packages from third party
1080
# repositories: AddRepository -> UpdateCache -> InstallPackages
1081
authorized = yield self._check_alternative_privileges(role, sender)
1083
yield policykit1.check_authorization_by_name(sender, action)
1079
1084
uid = yield policykit1.get_uid_from_dbus_name(sender)
1080
1085
trans = Transaction(role, self.queue, uid, sender, packages=packages,
1082
1087
self.queue.limbo[trans.tid] = trans
1083
1088
return_value(trans.tid)
1091
def _check_alternative_privileges(self, role, sender):
1092
"""Check non-interactively if one of the high level privileges
1095
if role not in [enums.ROLE_ADD_REPOSITORY, enums.ROLE_UPDATE_CACHE,
1096
enums.ROLE_INSTALL_PACKAGES]:
1098
flags = policykit1.CHECK_AUTH_NONE
1099
for action in [policykit1.PK_ACTION_INSTALL_PACKAGES_FROM_NEW_REPO,
1100
policykit1.PK_ACTION_INSTALL_PURCHASED_PACKAGES]:
1102
yield policykit1.check_authorization_by_name(sender,
1105
except errors.NotAuthorizedError, error:
1085
1111
@dbus_deferred_method(APTDAEMON_DBUS_INTERFACE,
1086
1112
in_signature="", out_signature="s",
1087
1113
sender_keyword="sender")