~mvo/aptdaemon/0.3-fix-race-597017

« back to all changes in this revision

Viewing changes to aptdaemon/core.py

  • Committer: sebi at glatzor
  • Date: 2010-09-09 13:22:17 UTC
  • mfrom: (484.1.5 auth-me-less)
  • Revision ID: sebi@glatzor.de-20100909132217-qq0q8hyazd7t134e
Merge the auth me less branch!

Show diffs side-by-side

added added

removed removed

Lines of Context:
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)
 
1082
        if not authorized:
 
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,
1081
1086
                            kwargs=kwargs)
1082
1087
        self.queue.limbo[trans.tid] = trans
1083
1088
        return_value(trans.tid)
1084
1089
 
 
1090
    @inline_callbacks
 
1091
    def _check_alternative_privileges(self, role, sender):
 
1092
        """Check non-interactively if one of the high level privileges
 
1093
        has been granted.
 
1094
        """
 
1095
        if role not in [enums.ROLE_ADD_REPOSITORY, enums.ROLE_UPDATE_CACHE,
 
1096
                        enums.ROLE_INSTALL_PACKAGES]:
 
1097
            return_value(False)
 
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]:
 
1101
            try:
 
1102
                yield policykit1.check_authorization_by_name(sender,
 
1103
                                                             action,
 
1104
                                                             flags=flags)
 
1105
            except errors.NotAuthorizedError, error:
 
1106
                continue
 
1107
            else:
 
1108
                return_value(True)
 
1109
        return_value(False)
 
1110
 
1085
1111
    @dbus_deferred_method(APTDAEMON_DBUS_INTERFACE,
1086
1112
                          in_signature="", out_signature="s",
1087
1113
                          sender_keyword="sender")