1 """
2 Connect against database backend.
3
4 Inter-Organisational Intrusion Detection System (IOIDS)
5
6 Yes, we could put something very sophisticated here in order to allow integration with
7 a variety of datbases; however, for reasons of simplicity I decided to just put the code
8 for connecting against the XML RPC database here.
9
10 @author: Michael Pilgermann
11 @contact: mailto:mpilgerm@glam.ac.uk
12 @license: GPL (General Public License)
13 """
14
15 from soapsytools.dbconnector import *
16 import soapsytools.dbconnector
17
18
19 DB_CONNECTION_TYPE_XML_RPC = 'xmlrpc'
20
21
22 _dbConnector = None
31
33 """
34 Standard DB connector - work on XML RPC database.
35 """
36
50
52 """
53 Collects available ioids events from the database.
54
55 The result is returned in a format mixed by lists and dictionaries.
56 """
57 from messagewrapper import getXMLDBWrapper
58 xml = getXMLDBWrapper().wrapSelect('ioids_event', 'all', conditions)
59 result = self._performRequest(xml)
60 no, resolved = getXMLDBWrapper().parseSelectReply(result)
61 return resolved
62
64 """
65 Returns all ioids events with ioids event id greater then the given one.
66 """
67 return self.getIoidsEvents([['ioids_event_id', OPERATOR_GREATER_THEN_OR_EQUAL, str(minIoidsEventId)]])
68
69
70
72 """
73 Insert a new IOIDS event.
74
75 @return: The primary key of the new event
76 @rtype: C{String}
77 """
78 from messagewrapper import getXMLDBWrapper
79
80 xml = getXMLDBWrapper().wrapInsert(ioidsEventEntryList[0], ioidsEventEntryList[1], ioidsEventEntryList[2])
81
82
83 result = self._performRequest(xml)
84
85 decode = getXMLDBWrapper().parseInsertReply(result)
86
87 return decode[0][2][1:len(decode[0][2])-1]
88
90 """
91 Insert a new ioids event with its relation to further events.
92
93 @return: The primary key of the new relation entry
94 @rtype: C{String}
95 """
96 from messagewrapper import getXMLDBWrapper
97 xml = getXMLDBWrapper().wrapInsert(fullIoidsEvent[0], fullIoidsEvent[1], fullIoidsEvent[2])
98 result = self._performRequest(xml)
99
100 decode = getXMLDBWrapper().parseInsertReply(result)
101
102 return decode[0][2][1:len(decode[0][2])-1]
103
104
105
106
107
112
117
122
131
140
142 from dataengine_tools import getPreXMLDictCreator
143 myEntry = self._getSomething('ioids_event', 'ioids_event_id', ioids_event_id)
144
145 event = None
146 sender = None
147 source = None
148 classification = None
149 if full:
150 if myEntry['event_id'] != 'None':
151 event = self.getEvent(myEntry['event_id'],1)
152 if myEntry['ioids_sender_id'] != 'None':
153 sender = self.getIoidsSender(myEntry['ioids_sender_id'],1)
154 if myEntry['ioids_source_id'] != 'None':
155 source = self.getIoidsSource(myEntry['ioids_source_id'],1)
156 if myEntry['classification_id'] != 'None':
157 classification = self.getIoidsClassification(myEntry['classification_id'],1)
158
159 return getPreXMLDictCreator().createIoidsEventEntry(myEntry, event, sender, source, classification)
160
165
166
168 from dataengine_tools import getPreXMLDictCreator
169 myEntry = self._getSomething('ioids_relation', 'ioids_relation_id', relationId)
170
171 event = None
172 ioids_event = None
173 relationType = None
174 if full:
175 if myEntry['event_id'] != 'None':
176 event = self.getEvent(myEntry['event_id'],1)
177 if myEntry['ioids_event_id'] != 'None':
178 ioids_event = self.getIoidsEvent(myEntry['ioids_event_id'],1)
179 if myEntry['ioids_relation_type_id'] != 'None':
180 relationType = self.getEvent(myEntry['ioids_relation_type_id'],1)
181
182 return getPreXMLDictCreator().createIoidsRelationEntry(myEntry, event, ioids_event, relationType)
183
208
209 - def getExtensionForEvent(self, event):
210 """
211 Retrieves extension information from the database for an event.
212
213 @param event: Event in List / Dict format.
214 @return: Name of the Extension / Extension in List / Dict format (including event).
215 """
216
217
218 from messagewrapper import getIoidsMessageWrapper
219 typeName =getIoidsMessageWrapper()._getValueInTree(event, ['event_type', 'event_type_name'])
220
221 eventid = self.insertEvent(event)
222 extension = getDBExtensionHandler().getExtensionInformationForEventId(typeName, eventid)
223
224
225
226 return typeName, extension
227
228 - def insertExtensionEvent(self, extensionName, data):
230
231
232
233 _dbExtensionHandler = None
242
244 """
245 Provides access to information from several SoapSy extensions.
246 """
247
254
256 if not self._extensions.has_key(extensionName):
257 return None
258
259 ext_db = self._extensions[extensionName]['dbconnector']
260 return ext_db().getExtensionEvent(eventId)
261
262 - def insertExtensionEvent(self, extensionName, data):
263 """
264 @return: The primary key value of the top level table of the insert action.
265 """
266 if not self._extensions.has_key(extensionName):
267 raise ValueError('Extension unknown on this node: %s' %(extensionName))
268
269 ext_db = self._extensions[extensionName]['dbconnector']
270 return ext_db().insertExtensionEvent(data)
271