'Attempt to read and parse a list of filenames, returning a list
of filenames which were successfully parsed.  This is a method of
RawConfigParser that is overridden to build self.section_to_file,
which is a mapping of section names to the files they came from.'

def read(self, filenames, **kwargs):

    if isinstance(filenames, basestring):
        filenames = [filenames]
    ok_filenames = []
    for filename in filenames:
        sections_orig = self._sections.copy()
        ok_filenames.extend(ConfigParser.RawConfigParser.read(self, [filename], **kwargs))
        diff = (frozenset(self._sections) - frozenset(sections_orig))
        for section in diff:
            self.section_to_file[section] = filename
    return ok_filenames
