This file is indexed.

/usr/lib/python3/dist-packages/apparmor/yasti.py is in python3-apparmor 2.9.0-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
# ----------------------------------------------------------------------
#    Copyright (C) 2013 Kshitij Gupta <kgupta8592@gmail.com>
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License as published by the Free Software Foundation.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
# ----------------------------------------------------------------------
import re
import sys
try:
    import ycp
except ImportError:
    # ycp isn't found everywhere.
    ycp = None

from apparmor.common import error, DebugLogger

# Set up UI logger for separate messages from YaST module
debug_logger = DebugLogger('YaST')


def setup_yast():
    # To-Do
    pass

def shutdown_yast():
    # To-Do
    pass

def yastLog(text):
    ycp.y2milestone(text)

def SendDataToYast(data):
    debug_logger.info('SendDataToYast: Waiting for YCP command')
    for line in sys.stdin:
        ycommand, ypath, yargument = ParseCommand(line)
        if ycommand and ycommand == 'Read':
            debug_logger.info('SendDataToYast: Sending--%s' % data)
            ycp.Return(data)
            return True
        else:
            debug_logger.info('SendDataToYast: Expected \'Read\' but got-- %s' % line)
    error('SendDataToYast: didn\'t receive YCP command before connection died')

def GetDataFromYast():
    debug_logger.inf('GetDataFromYast: Waiting for YCP command')
    for line in sys.stdin:
        debug_logger.info('GetDataFromYast: YCP: %s' % line)
        ycommand, ypath, yarg = ParseCommand(line)
        debug_logger.info('GetDataFromYast: Recieved--\n%s' % yarg)
        if ycommand and ycommand == 'Write':
            ycp.Return('true')
            return ypath, yarg
        else:
            debug_logger.info('GetDataFromYast: Expected Write but got-- %s' % line)
    error('GetDataFromYast: didn\'t receive YCP command before connection died')

def ParseCommand(commands):
    term = ParseTerm(commands)
    if term:
        command = term[0]
        term = term[1:]
    else:
        command = ''
    path = ''
    pathref = None
    if term:
        pathref = term[0]
        term = term[1:]
    if pathref:
        if pathref.strip():
            path = pathref.strip()
        elif command != 'result':
            ycp.y2error('The first arguement is not a path. (%s)' % pathref)
    argument = None
    if term:
        argument = term[0]
    if len(term) > 1:
        ycp.y2warning('Superfluous command arguments ignored')
    return (command, path, argument)

def ParseTerm(inp):
    regex_term = re.compile('^\s*`?(\w*)\s*')
    term = regex_term.search(inp)
    ret = []
    symbol = None
    if term:
        symbol = term.groups()[0]
    else:
        ycp.y2error('No term symbol')
    ret.append(symbol)
    inp = regex_term.sub('', inp)
    if not inp.startswith('('):
        ycp.y2error('No term parantheses')
    argref, err, rest = ycp.ParseYcpTermBody(inp)
    if err:
        ycp.y2error('%s (%s)' % (err, rest))
    else:
        ret += argref
    return ret