This file is indexed.

/usr/share/pyshared/tracrpc/search.py is in trac-xmlrpc 1.1.2+r10706-1.

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
# -*- coding: utf-8 -*-
"""
License: BSD

(c) 2005-2008 ::: Alec Thomas (alec@swapoff.org)
(c) 2009      ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no)
"""

from trac.core import *
from trac.search.api import ISearchSource
from trac.search.web_ui import SearchModule
from trac.util.compat import set

from tracrpc.api import IXMLRPCHandler

__all__ = ['SearchRPC']

class SearchRPC(Component):
    """ Search Trac. """
    implements(IXMLRPCHandler)

    search_sources = ExtensionPoint(ISearchSource)

    # IXMLRPCHandler methods
    def xmlrpc_namespace(self):
        return 'search'

    def xmlrpc_methods(self):
        yield ('SEARCH_VIEW', ((list,),), self.getSearchFilters)
        yield ('SEARCH_VIEW', ((list, str), (list, str, list)), self.performSearch)

    # Others
    def getSearchFilters(self, req):
        """ Retrieve a list of search filters with each element in the form
            (name, description). """
        for source in self.search_sources:
            for filter in source.get_search_filters(req):
                yield filter

    def performSearch(self, req, query, filters=None):
        """ Perform a search using the given filters. Defaults to all if not
            provided. Results are returned as a list of tuples in the form
           (href, title, date, author, excerpt)."""
        query = SearchModule(self.env)._get_search_terms(query)
        filters_provided = filters is not None
        chosen_filters = set(filters or [])
        available_filters = []
        for source in self.search_sources:
            available_filters += source.get_search_filters(req)

        filters = [f[0] for f in available_filters if f[0] in chosen_filters]
        if not filters:
            if filters_provided:
                return []
            filters = [f[0] for f in available_filters]
        self.env.log.debug("Searching with %s" % filters)

        results = []
        for source in self.search_sources:
            for result in source.get_search_results(req, query, filters):
                results.append(['/'.join(req.base_url.split('/')[0:3])
                                + result[0]] + list(result[1:]))
        return results