diff --git a/cowrie/core/realm.py b/cowrie/core/realm.py index 1768d4c..cf8df86 100644 --- a/cowrie/core/realm.py +++ b/cowrie/core/realm.py @@ -32,6 +32,10 @@ This module contains ... from zope.interface import implementer +import sys +import gc +import pickle + import twisted from twisted.conch import interfaces as conchinterfaces from twisted.python import log @@ -39,9 +43,8 @@ from twisted.python import log from cowrie.core import protocol from cowrie.core import server from cowrie.core import avatar +from cowrie.core import fs -import sys -import gc @implementer(twisted.cred.portal.IRealm) class HoneyPotRealm(object): @@ -52,6 +55,8 @@ class HoneyPotRealm(object): self.cfg = cfg # self.servers = {} + # load the pickle file system here, so servers can copy it later + self.pckl = pickle.load(file(cfg.get('honeypot', 'filesystem_file'), 'rb')) def requestAvatar(self, avatarId, mind, *interfaces): """ @@ -70,7 +75,7 @@ class HoneyPotRealm(object): # log.msg( "Refer: %s" % repr( gc.get_referrers(self.servers[i]))) if conchinterfaces.IConchUser in interfaces: - serv = server.CowrieServer(self.cfg) + serv = server.CowrieServer(self) user = avatar.CowrieUser(avatarId, serv) return interfaces[0], user, user.logout else: diff --git a/cowrie/core/server.py b/cowrie/core/server.py index def74ad..a0949b6 100644 --- a/cowrie/core/server.py +++ b/cowrie/core/server.py @@ -30,7 +30,7 @@ This module contains ... """ -import pickle +import copy import twisted.python.log as log @@ -46,10 +46,9 @@ class CowrieServer(object): This class represents a 'virtual server' that can be shared between multiple Cowrie connections """ - def __init__(self, cfg): - self.cfg = cfg + def __init__(self, realm): + self.cfg = realm.cfg self.avatars = [] self.hostname = self.cfg.get('honeypot', 'hostname') - pckl = pickle.load(file(cfg.get('honeypot', 'filesystem_file'), 'rb')) - self.fs = fs.HoneyPotFilesystem(pckl,self.cfg) + self.fs = fs.HoneyPotFilesystem(copy.deepcopy(realm.pckl),self.cfg)