'Check if a .listing filename exists in the domain_path.
:return: None, everything is saved to the self.out_queue.'

def _check_and_analyze(self, domain_path):

    url = domain_path.url_join('.listing')
    try:
        response = self._uri_opener.GET(url, cache=True)
    except BaseFrameworkException as w3:
        msg = 'Failed    to    GET    .listing    file:    "%s".    Exception:    "%s".'
        om.out.debug((msg % (url, w3)))
        return
    if is_404(response):
        return
    fr = FuzzableRequest(response.get_url())
    self.output_queue.put(fr)
    parsed_url_set = set()
    users = set()
    groups = set()
    extracted_info = self._extract_info_from_listing(response.get_body())
    for (username, group, filename) in extracted_info:
        if ((filename != '.') and (filename != '..')):
            parsed_url_set.add(domain_path.url_join(filename))
            users.add(username)
            groups.add(group)
    self.worker_pool.map(self.http_get_and_parse, parsed_url_set)
    if parsed_url_set:
        desc = 'A    .listing    file    was    found    at:    "%s".    The    contents    of    this    file    disclose    filenames.'
        desc = (desc % response.get_url())
        v = Vuln('.listing    file    found', desc, severity.LOW, response.id, self.get_name())
        v.set_url(response.get_url())
        kb.kb.append(self, 'dot_listing', v)
        om.out.vulnerability(v.get_desc(), severity=v.get_severity())
    real_users = set([u for u in users if (not u.isdigit())])
    real_groups = set([g for g in groups if (not g.isdigit())])
    if (real_users or real_groups):
        desc = 'A    .listing    file    which    leaks    operating    system    usernames    and    groups    was    identified    at    %s.    The    leaked    users    are    %s,    and    the    groups    are    %s.    This    information    can    be    used    during    a    bruteforce    attack    to    the    Web    application,    SSH    or    FTP    services.'
        desc = (desc % (response.get_url(), ',    '.join(real_users), ',    '.join(real_groups)))
        v = Vuln('Operating    system    username    and    group    leak', desc, severity.LOW, response.id, self.get_name())
        v.set_url(response.get_url())
        kb.kb.append(self, 'dot_listing', v)
        om.out.vulnerability(v.get_desc(), severity=v.get_severity())
