[apparmor] [patch] [5/7] move ask_conflict_mode() to aa.py

Seth Arnold seth.arnold at canonical.com
Tue Jan 17 20:58:44 UTC 2017


On Sun, Jan 15, 2017 at 04:25:19PM +0100, Christian Boltz wrote:
> Hello,
> 
> The function is a exact copy of the code in aa-mergeprof (except
> removing the 'self' function parameter and changing the whitespace
> level)
> 
> Also add a ask_conflict_mode() call to aa.py ask_the_questions().
> This is needed for aa-mergeprof, and won't hurt in aa-logprof mode
> because handle_children() already handles all exec events.
> 
> 
> [ 05-move-ask_conflict_mode.diff ]

Acked-by: Seth Arnold <seth.arnold at canonical.com>

Thanks

> 
> --- utils/apparmor/aa.py	2017-01-14 23:20:29.014791326 +0100
> +++ utils/apparmor/aa.py	2017-01-14 23:47:42.507418770 +0100
> @@ -1585,6 +1585,9 @@
>                      elif ans == 'CMD_FINISHED':
>                          return
>  
> +                # check for and ask about conflicting exec modes
> +                apparmor.aa.ask_conflict_mode(profile, hat, aa[profile][hat], log_dict[aamode][profile][hat])
> +
>                  for ruletype in ruletypes:
>                      for rule_obj in log_dict[aamode][profile][hat][ruletype].rules:
>                          # XXX aa-mergeprof also has this code - if you change it, keep aa-mergeprof in sync!
> @@ -1791,6 +1794,39 @@
>  
>      return deleted
>  
> +def ask_conflict_mode(profile, hat, old_profile, merge_profile):
> +    '''ask user about conflicting exec rules'''
> +    for oldrule in old_profile['file'].rules:
> +        conflictingrules = merge_profile['file'].get_exec_conflict_rules(oldrule)
> +
> +        if conflictingrules.rules:
> +            q = aaui.PromptQuestion()
> +            q.headers = [_('Path'), oldrule.path.regex]
> +            q.headers += [_('Select the appropriate mode'), '']
> +            options = []
> +            options.append(oldrule.get_clean())
> +            for rule in conflictingrules.rules:
> +                options.append(rule.get_clean())
> +            q.options = options
> +            q.functions = ['CMD_ALLOW', 'CMD_ABORT']
> +            done = False
> +            while not done:
> +                ans, selected = q.promptUser()
> +                if ans == 'CMD_ALLOW':
> +                    if selected == 0:
> +                        pass  # just keep the existing rule
> +                    elif selected > 0:
> +                        # replace existing rule with merged one
> +                        old_profile['file'].delete(oldrule)
> +                        old_profile['file'].add(conflictingrules.rules[selected - 1])
> +                    else:
> +                        raise AppArmorException(_('Unknown selection'))
> +
> +                    for rule in conflictingrules.rules:
> +                        merge_profile['file'].delete(rule)  # make sure aa-mergeprof doesn't ask to add conflicting rules later
> +
> +                    done = True
> +
>  def match_includes(profile, rule_type, rule_obj):
>      newincludes = []
>      for incname in include.keys():
> --- utils/aa-mergeprof	2017-01-14 22:46:14.191632249 +0100
> +++ utils/aa-mergeprof	2017-01-14 23:46:55.755628680 +0100
> @@ -156,38 +156,6 @@
>          user_base = cleanprofile.CleanProf(False, self.user, self.base)
>          deleted += user_base.compare_profiles()
>  
> -    def ask_conflict_mode(self, profile, hat, old_profile, merge_profile):
> -        '''ask user about conflicting exec rules'''
> -        for oldrule in old_profile['file'].rules:
> -            conflictingrules = merge_profile['file'].get_exec_conflict_rules(oldrule)
> -
> -            if conflictingrules.rules:
> -                q = aaui.PromptQuestion()
> -                q.headers = [_('Path'), oldrule.path.regex]
> -                q.headers += [_('Select the appropriate mode'), '']
> -                options = []
> -                options.append(oldrule.get_clean())
> -                for rule in conflictingrules.rules:
> -                    options.append(rule.get_clean())
> -                q.options = options
> -                q.functions = ['CMD_ALLOW', 'CMD_ABORT']
> -                done = False
> -                while not done:
> -                    ans, selected = q.promptUser()
> -                    if ans == 'CMD_ALLOW':
> -                        if selected == 0:
> -                            pass  # just keep the existing rule
> -                        elif selected > 0:
> -                            # replace existing rule with merged one
> -                            old_profile['file'].delete(oldrule)
> -                            old_profile['file'].add(conflictingrules.rules[selected - 1])
> -                        else:
> -                            raise AppArmorException(_('Unknown selection'))
> -
> -                        for rule in conflictingrules.rules:
> -                            merge_profile['file'].delete(rule)  # make sure aa-mergeprof doesn't ask to add conflicting rules later
> -
> -                        done = True
>  
>      def ask_the_questions(self, profile):
>          aa = self.user.aa  # keep references so that the code in this function can use the short name
> 
> 
> 
> Regards,
> 
> Christian Boltz
> -- 
> Wer es sicher haben will, muss halt lesen. Was sollen wir tun? Die
> Leute zuhause besuchen, mit Broschüren in der Hand, "Guten Tag - ich
> möchte gern mit ihnen über Gott^W^W^W^Wihren Webserver sprechen"?
> [Ratti in fontlinge-devel]



> -- 
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20170117/18c9c650/attachment.pgp>


More information about the AppArmor mailing list