'Identify the init scripts and the start/stop scripts at each runlevel.
Evaluate all the stat entries collected from the system.
If the path name matches a runlevel spec, and if the filename matches a
sysv init symlink process the link as a service.
Args:
stats: An iterator of StatEntry rdfs.
unused_file_obj: An iterator of file contents. Not needed as the parser
only evaluates link attributes.
unused_kb: Unused KnowledgeBase rdf.
Yields:
rdf_anomaly.Anomaly if the startup link seems wierd.
rdf_client.LinuxServiceInformation for each detected service.'

def ParseMultiple(self, stats, unused_file_obj, unused_kb):

    services = {}
    for stat_entry in stats:
        path = stat_entry.pathspec.path
        runlevel = self.runlevel_re.match(os.path.dirname(path))
        runscript = self.runscript_re.match(os.path.basename(path))
        if (runlevel and runscript):
            svc = runscript.groupdict()
            service = services.setdefault(svc['name'], rdf_client.LinuxServiceInformation(name=svc['name'], start_mode='INIT'))
            runlvl = GetRunlevelsNonLSB(runlevel.group(1))
            if ((svc['action'] == 'S') and runlvl):
                service.start_on.append(runlvl.pop())
                service.starts = True
            elif runlvl:
                service.stop_on.append(runlvl.pop())
            if (not stat.S_ISLNK(int(stat_entry.st_mode))):
                (yield rdf_anomaly.Anomaly(type='PARSER_ANOMALY', finding=[path], explanation='Startup    script    is    not    a    symlink.'))
    for svc in services.itervalues():
        (yield svc)
