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)
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)
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")
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)