예제 #1
0
    def ParseFile(self, knowledge_base, pathspec, filedesc):
        del knowledge_base  # Unused.
        del pathspec  # Unused.

        entries = []

        crondata = filedesc.read().decode("utf-8")
        jobs = crontab.CronTab(tab=crondata)

        for job in jobs:
            entries.append(
                rdf_cronjobs.CronTabEntry(minute=str(job.minute),
                                          hour=str(job.hour),
                                          dayofmonth=str(job.dom),
                                          month=str(job.month),
                                          dayofweek=str(job.dow),
                                          command=str(job.command),
                                          comment=str(job.comment)))

        try:
            source_urn = filedesc.urn
        except AttributeError:
            source_urn = None

        yield rdf_cronjobs.CronTabFile(aff4path=source_urn, jobs=entries)
예제 #2
0
    def ParseFile(
        self,
        knowledge_base: rdf_client.KnowledgeBase,
        pathspec: rdf_paths.PathSpec,
        filedesc: IO[bytes],
    ) -> Iterator[rdf_cronjobs.CronTabFile]:
        del knowledge_base  # Unused.

        entries = []

        crondata = filedesc.read().decode("utf-8")
        jobs = crontab.CronTab(tab=crondata)

        for job in jobs:
            entries.append(
                rdf_cronjobs.CronTabEntry(minute=str(job.minute),
                                          hour=str(job.hour),
                                          dayofmonth=str(job.dom),
                                          month=str(job.month),
                                          dayofweek=str(job.dow),
                                          command=str(job.command),
                                          comment=str(job.comment)))

        yield rdf_cronjobs.CronTabFile(
            # We're interested in the nominal file path, not the full Pathspec.
            path=pathspec.last.path,
            jobs=entries)
예제 #3
0
    def testExportsFileWithTwoEntries(self):
        sample = rdf_cronjobs.CronTabFile(
            path="/etc/foo.cron",
            jobs=[
                rdf_cronjobs.CronTabEntry(minute="1",
                                          hour="2",
                                          dayofmonth="3",
                                          month="4",
                                          dayofweek="1",
                                          command="bash",
                                          comment="foo"),
                rdf_cronjobs.CronTabEntry(minute="aa",
                                          hour="bb",
                                          dayofmonth="cc",
                                          month="dd",
                                          dayofweek="ee",
                                          command="ps",
                                          comment="some"),
            ])

        converter = cron_tab_file.CronTabFileConverter()
        converted = list(
            converter.Convert(base.ExportedMetadata(self.metadata), sample))

        self.assertLen(converted, 2)
        self.assertIsInstance(converted[0], cron_tab_file.ExportedCronTabEntry)

        self.assertEqual(converted[0].metadata, self.metadata)
        self.assertEqual(converted[0].cron_file_path, "/etc/foo.cron")
        self.assertEqual(converted[0].minute, "1")
        self.assertEqual(converted[0].hour, "2")
        self.assertEqual(converted[0].dayofmonth, "3")
        self.assertEqual(converted[0].month, "4")
        self.assertEqual(converted[0].dayofweek, "1")
        self.assertEqual(converted[0].command, "bash")
        self.assertEqual(converted[0].comment, "foo")

        self.assertEqual(converted[1].metadata, self.metadata)
        self.assertEqual(converted[1].cron_file_path, "/etc/foo.cron")
        self.assertEqual(converted[1].minute, "aa")
        self.assertEqual(converted[1].hour, "bb")
        self.assertEqual(converted[1].dayofmonth, "cc")
        self.assertEqual(converted[1].month, "dd")
        self.assertEqual(converted[1].dayofweek, "ee")
        self.assertEqual(converted[1].command, "ps")
        self.assertEqual(converted[1].comment, "some")
예제 #4
0
    def Parse(self, stat, file_object, knowledge_base):
        """Parse the crontab file."""
        _ = knowledge_base
        entries = []

        crondata = file_object.read()
        jobs = crontab.CronTab(tab=crondata)

        for job in jobs:
            entries.append(
                rdf_cronjobs.CronTabEntry(minute=utils.SmartStr(job.minute),
                                          hour=utils.SmartStr(job.hour),
                                          dayofmonth=utils.SmartStr(job.dom),
                                          month=utils.SmartStr(job.month),
                                          dayofweek=utils.SmartStr(job.dow),
                                          command=utils.SmartStr(job.command),
                                          comment=utils.SmartStr(job.comment)))

        try:
            source_urn = file_object.urn
        except AttributeError:
            source_urn = None

        yield rdf_cronjobs.CronTabFile(aff4path=source_urn, jobs=entries)