Below is the file 'plugins/postgresql.py' from this revision. You can also download the file.


import socket
import threading
import sys
from pyPgSQL import libpq

export = {
	"name" : "text_output",
	"version" : "0.1",
	"description" : "A simple output module that writes a text file",
	"type" : "output"
}

lock = threading.Lock()
cnx = None
seen_hosts = set()

def q(s):
	if s == None: return "NULL"
	else: return libpq.PgQuoteString(s)

def initialise(library):
	global cnx
	cnx = libpq.PQconnectdb(library.config.connect_str)
	cnx.query("DELETE FROM urgency")
	for urgency in library.urgency_to_string:
		cnx.query("INSERT INTO urgency (urgency,description) VALUES (%d,%s)" % (urgency, q(library.urgency_to_string[urgency])))

def finalise(library):
	return

def write_results(library, host, plugins, results):
	lock.acquire()
	for result in results:
		# the first time we see a host, delete prior history for those plugins which ran in this scan
		if (result.address[0]) not in seen_hosts:
			seen_hosts.add(result.address[0])
			for plugin in plugins:
				cnx.query("DELETE FROM results WHERE address=" + q(result.address[0]) + " AND plugin_name=" + q(plugin))
		query = "INSERT INTO results (updated,address,plugin_name,tcp_ports,udp_ports,urgency,short_mesg,long_mesg,advice) VALUES (now(),"
		udp_ports = result.udp_ports
		if udp_ports != None: udp_ports = ','.join(map(str, udp_ports))
		tcp_ports = result.tcp_ports
		if tcp_ports != None: tcp_ports = ','.join(map(str, tcp_ports))
		urgency = result.urgency
		if urgency != None: urgency = str(urgency)
		values = [ result.address[0], result.plugin_name, tcp_ports, udp_ports, urgency, result.short_mesg, result.long_mesg, result.advice ]
		values = map(q, values)
		query += ','.join(values) + ")"
		cnx.query(query)
	lock.release()

def write_errors(library, host, errors):
	return