diff --git a/cowrie/core/honeypot.py b/cowrie/core/honeypot.py index f153180..8c69036 100644 --- a/cowrie/core/honeypot.py +++ b/cowrie/core/honeypot.py @@ -45,9 +45,18 @@ class HoneyPotCommand(object): self.protocol.terminal.transport.session.id, re.sub('[^A-Za-z0-9]', '_', self.outfile)) perm = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH - self.fs.mkfile(self.outfile, 0, 0, 0, stat.S_IFREG | perm) - with open(self.safeoutfile, 'a'): - self.fs.update_realfile(self.fs.getfile(self.outfile), self.safeoutfile) + try: + self.fs.mkfile(self.outfile, 0, 0, 0, stat.S_IFREG | perm) + except fs.FileNotFound: + # The outfile locates at a non-existing directory. + self.protocol.pp.outReceived('-bash: %s: No such file or directory\n' % self.outfile) + self.write = self.write_to_failed + self.outfile = None + self.safeoutfile = None + + else: + with open(self.safeoutfile, 'a'): + self.fs.update_realfile(self.fs.getfile(self.outfile), self.safeoutfile) def check_arguments(self, application, args): @@ -78,10 +87,16 @@ class HoneyPotCommand(object): self.fs.update_size(self.outfile, self.writtenBytes) + def write_to_failed(self, data): + """ + """ + pass + def start(self): """ """ - self.call() + if self.write != self.write_to_failed: + self.call() self.exit()