(no commit message)
This commit is contained in:
parent
c45651cfe3
commit
fcd8901bb9
@ -2,6 +2,7 @@ import SocketServer
|
||||
import threading
|
||||
import cmd
|
||||
import sys
|
||||
import time
|
||||
|
||||
import Entry
|
||||
from logger import Logger
|
||||
@ -9,109 +10,125 @@ from logger import Logger
|
||||
|
||||
class LocalMyCmdException(Exception):
|
||||
def __init__(self, msg):
|
||||
self.msg = msg
|
||||
self.msg = msg
|
||||
|
||||
class MyCmd(cmd.Cmd):
|
||||
@classmethod
|
||||
def setClassParams(cls, entries, adminPwd):
|
||||
cls.entries = entries
|
||||
cls.adminPwd = adminPwd
|
||||
cls.entries = entries
|
||||
cls.adminPwd = adminPwd
|
||||
|
||||
def __init__(self, i, o):
|
||||
cmd.Cmd.__init__(self, completekey=None, stdin=i, stdout=o)
|
||||
cmd.Cmd.use_rawinput = False
|
||||
self.intro = "Hello at the yadyn cli\n"
|
||||
self.prompt = "yadyn> "
|
||||
cmd.Cmd.__init__(self, completekey=None, stdin=i, stdout=o)
|
||||
cmd.Cmd.use_rawinput = False
|
||||
self.intro = "Hello at the yadyn cli\n"
|
||||
self.prompt = "yadyn> "
|
||||
|
||||
def do_list(self, l):
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
x = parts[0]
|
||||
if x == 'all':
|
||||
for entry in MyCmd.entries.values():
|
||||
self.stdout.write(str(entry) + "\n")
|
||||
elif MyCmd.entries.has_key(x):
|
||||
self.stdout.write(str(MyCmd.entries[x]) + "\n")
|
||||
else:
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
x = parts[0]
|
||||
if x == 'all':
|
||||
for entry in MyCmd.entries.values():
|
||||
self.stdout.write(str(entry) + "\n")
|
||||
elif MyCmd.entries.has_key(x):
|
||||
self.stdout.write(str(MyCmd.entries[x]) + "\n")
|
||||
else:
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
def do_reset(self, l):
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
x = parts[0]
|
||||
if MyCmd.entries.has_key(x):
|
||||
entries[x].address = '0.0.0.0'
|
||||
entries[x].addressInDns = '0.0.0.0'
|
||||
entries[x].lastEventTime = int(time.time())
|
||||
self.stdout.write(str(MyCmd.entries[x]) + "\n")
|
||||
else:
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
def do_add(self, l):
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 4:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
(dynid, name, zone, sharedSecret) = parts
|
||||
if MyCmd.entries.has_key(dynid):
|
||||
raise LocalMyCmdException("duplicate dynid")
|
||||
for entry in MyCmd.entries.values():
|
||||
if entry.name == name and entry.zone == zone:
|
||||
raise LocalMyCmdException("duplicate full name")
|
||||
newEntry = Entry.Entry(dynid, sharedSecret, name, zone)
|
||||
MyCmd.entries[dynid] = newEntry
|
||||
self.stdout.write("Done\n")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 4:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
(dynid, name, zone, sharedSecret) = parts
|
||||
if MyCmd.entries.has_key(dynid):
|
||||
raise LocalMyCmdException("duplicate dynid")
|
||||
for entry in MyCmd.entries.values():
|
||||
if entry.name == name and entry.zone == zone:
|
||||
raise LocalMyCmdException("duplicate full name")
|
||||
newEntry = Entry.Entry(dynid, sharedSecret, name, zone)
|
||||
MyCmd.entries[dynid] = newEntry
|
||||
self.stdout.write("Done\n")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
def do_edit(self, l):
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 3:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
(dynid, attr, value) = parts
|
||||
if not MyCmd.entries.has_key(dynid):
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
if attr == 'sharedSecret':
|
||||
MyCmd.entries[dynid].sharedSecret = value
|
||||
elif attr == 'name':
|
||||
MyCmd.entries[dynid].name = value
|
||||
else:
|
||||
raise LocalMyCmdException("unknown attribute to change")
|
||||
self.stdout.write("Done\n")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 3:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
(dynid, attr, value) = parts
|
||||
if not MyCmd.entries.has_key(dynid):
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
if attr == 'sharedSecret':
|
||||
MyCmd.entries[dynid].sharedSecret = value
|
||||
elif attr == 'name':
|
||||
MyCmd.entries[dynid].name = value
|
||||
else:
|
||||
raise LocalMyCmdException("unknown attribute to change")
|
||||
self.stdout.write("Done\n")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
def do_delete(self, l):
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
x = parts[0]
|
||||
if not MyCmd.entries.has_key(x):
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
del MyCmd.entries[x]
|
||||
self.stdout.write("Done\n")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
x = parts[0]
|
||||
if not MyCmd.entries.has_key(x):
|
||||
raise LocalMyCmdException("unknown dynid")
|
||||
del MyCmd.entries[x]
|
||||
self.stdout.write("Done\n")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
def do_debug(self, l):
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
if parts[0] == 'on':
|
||||
Logger.debugEnable()
|
||||
elif parts[0] == 'off':
|
||||
Logger.debugDisable()
|
||||
else:
|
||||
raise LocalMyCmdException("illegal argument")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
try:
|
||||
parts = l.split(' ')
|
||||
if len(parts) != 1:
|
||||
raise LocalMyCmdException("illegal number of arguments")
|
||||
if parts[0] == 'on':
|
||||
Logger.debugEnable()
|
||||
elif parts[0] == 'off':
|
||||
Logger.debugDisable()
|
||||
else:
|
||||
raise LocalMyCmdException("illegal argument")
|
||||
except LocalMyCmdException, e:
|
||||
self.stdout.write("Failure: %s\n" % str(e.msg))
|
||||
|
||||
|
||||
def do_quit(self, l):
|
||||
self.stdout.write("Bye\n")
|
||||
return True
|
||||
self.stdout.write("Bye\n")
|
||||
return True
|
||||
|
||||
|
||||
|
||||
class CmdHandler(SocketServer.StreamRequestHandler):
|
||||
def handle(self):
|
||||
myCmd = MyCmd(self.rfile, self.wfile)
|
||||
myCmd.cmdloop()
|
||||
myCmd = MyCmd(self.rfile, self.wfile)
|
||||
myCmd.cmdloop()
|
||||
|
||||
|
||||
class CmdServer(SocketServer.ThreadingTCPServer):
|
||||
@ -128,5 +145,5 @@ class CmdReceiver(threading.Thread):
|
||||
self.setDaemon(True)
|
||||
|
||||
def run(self):
|
||||
CmdServer(self.cmdAddr, CmdHandler).serve_forever()
|
||||
CmdServer(self.cmdAddr, CmdHandler).serve_forever()
|
||||
|
||||
|
@ -12,63 +12,63 @@ from logger import Logger
|
||||
|
||||
class LocalDnsHandlerException(Exception):
|
||||
def __init__(self, msg):
|
||||
Exception.__init__(self, msg)
|
||||
Exception.__init__(self, msg)
|
||||
|
||||
class DnsHandler(threading.Thread):
|
||||
def __init__(self, msgQueue, dnsDummy, tsigKey, nsAddress, ttl, actionlogDir):
|
||||
threading.Thread.__init__(self)
|
||||
self.msgQueue = msgQueue
|
||||
self.dnsDummy = dnsDummy
|
||||
self.dnsDummy = dnsDummy
|
||||
self.nsAddress = nsAddress
|
||||
self.ttl = ttl
|
||||
self.keyring = dns.tsigkeyring.from_text(tsigKey)
|
||||
self.actionlogDir = actionlogDir
|
||||
self.setDaemon(True)
|
||||
self.actionlogDir = actionlogDir
|
||||
self.setDaemon(True)
|
||||
|
||||
def writeActionlog(self, dynid, name, zone, oldAddr, newAddr):
|
||||
f = open("%s/%s" % (self.actionlogDir, dynid), 'a')
|
||||
f.write("%d %s.%s %s %s\n" % (time.time(), name, zone, oldAddr, newAddr))
|
||||
f.close()
|
||||
f = open("%s/%s" % (self.actionlogDir, dynid), 'a')
|
||||
f.write("%d %s.%s %s %s\n" % (time.time(), name, zone, oldAddr, newAddr))
|
||||
f.close()
|
||||
|
||||
def run(self):
|
||||
while(True):
|
||||
msg = self.msgQueue.get()
|
||||
|
||||
if msg.address != msg.addressInDns:
|
||||
try:
|
||||
self.deleteARR(msg.dynid, msg.name, msg.zone)
|
||||
self.insertARR(msg.dynid, msg.name, msg.zone, msg.address)
|
||||
self.writeActionlog(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address)
|
||||
Logger.log("Update: %s, %s.%s, %s -> %s" %
|
||||
(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address))
|
||||
msg.addressInDns = msg.address
|
||||
except Exception, e:
|
||||
Logger.log("Failure for %s when updating DNS: %s" % (str(msg), str(e)))
|
||||
if msg.address != msg.addressInDns:
|
||||
try:
|
||||
self.deleteARR(msg.dynid, msg.name, msg.zone)
|
||||
self.insertARR(msg.dynid, msg.name, msg.zone, msg.address)
|
||||
self.writeActionlog(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address)
|
||||
Logger.log("Update: %s, %s.%s, %s -> %s" %
|
||||
(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address))
|
||||
msg.addressInDns = msg.address
|
||||
except Exception, e:
|
||||
Logger.log("Failure for %s when updating DNS: %s" % (str(msg), str(e)))
|
||||
|
||||
|
||||
def insertARR(self, dynid, name, zone, address):
|
||||
if self.dnsDummy:
|
||||
return
|
||||
if self.dnsDummy:
|
||||
return
|
||||
# send A-RR insertion for ip to DNS server
|
||||
rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address)
|
||||
u = dns.update.Update(zone, keyring=self.keyring)
|
||||
u.add(name, self.ttl, rr)
|
||||
r = dns.query.tcp(u, self.nsAddress)
|
||||
|
||||
rc = r.rcode()
|
||||
rc = r.rcode()
|
||||
if rc != 0:
|
||||
raise LocalDnsHandlerException("failure when inserting: %d, %s" % (rc, dns.rcode.to_text(rc)))
|
||||
raise LocalDnsHandlerException("failure when inserting: %d, %s" % (rc, dns.rcode.to_text(rc)))
|
||||
|
||||
|
||||
def deleteARR(self, dynid, name, zone):
|
||||
if self.dnsDummy:
|
||||
return
|
||||
if self.dnsDummy:
|
||||
return
|
||||
# send A-RR deletion for ip to DNS server
|
||||
u = dns.update.Update(zone, keyring=self.keyring)
|
||||
u.delete(name)
|
||||
r = dns.query.tcp(u, self.nsAddress)
|
||||
|
||||
rc = r.rcode()
|
||||
rc = r.rcode()
|
||||
if rc != 0:
|
||||
raise LocalDnsHandlerException("failure when deleting: %d, %s" % (rc, dns.rcode.to_text(rc)))
|
||||
raise LocalDnsHandlerException("failure when deleting: %d, %s" % (rc, dns.rcode.to_text(rc)))
|
||||
|
||||
|
@ -7,7 +7,7 @@ class Entry(object):
|
||||
self.zone = zone
|
||||
self.lastEventTime = 0
|
||||
self.address = '0.0.0.0'
|
||||
self.addressInDns = '0.0.0.0'
|
||||
self.addressInDns = '0.0.0.0'
|
||||
|
||||
def __str__(self):
|
||||
return "dynid=%s, name=%s, zone=%s, sharedSecret=%s, address=%s (%s), lastEventTime=%d" % (self.dynid, self.name, self.zone, self.sharedSecret, self.address, self.addressInDns, self.lastEventTime)
|
||||
|
@ -54,13 +54,13 @@ class Event(object):
|
||||
if d != self.checksum:
|
||||
raise IllegalEventException("wrong checksum for event %s" % str(self))
|
||||
|
||||
entry.lastEventTime = self.msgTime
|
||||
entry.address = self.address
|
||||
Logger.debug("Set in DNS: %s -> %s" % (entry.name, entry.address))
|
||||
try:
|
||||
Event.dnsq.put_nowait(entry)
|
||||
except Queue.Full, e:
|
||||
Logger.log("Dns Queue overrun, drop event for %s" % str(entry))
|
||||
entry.lastEventTime = self.msgTime
|
||||
entry.address = self.address
|
||||
Logger.debug("Set in DNS: %s -> %s" % (entry.name, entry.address))
|
||||
try:
|
||||
Event.dnsq.put_nowait(entry)
|
||||
except Queue.Full, e:
|
||||
Logger.log("Dns Queue overrun, drop event for %s" % str(entry))
|
||||
|
||||
def __str__(self):
|
||||
if not self.prepared:
|
||||
|
@ -11,71 +11,71 @@ import Entry
|
||||
|
||||
class LocalException(Exception):
|
||||
def __init__(self, msg):
|
||||
Logger.log("Exception in HttpCmdReceiver: %s" % msg)
|
||||
self.msg = msg
|
||||
Logger.log("Exception in HttpCmdReceiver: %s" % msg)
|
||||
self.msg = msg
|
||||
|
||||
class HttpCmdHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||
server_version = "YadynCMDHTTP/1.0"
|
||||
|
||||
@classmethod
|
||||
def setClassParams(cls, entries, adminPwd):
|
||||
cls.entries = entries
|
||||
cls.adminPwd = adminPwd
|
||||
cls.entries = entries
|
||||
cls.adminPwd = adminPwd
|
||||
|
||||
def do_GET(self):
|
||||
Logger.log("Request: %s" % self.path)
|
||||
try:
|
||||
if self.command == "GET":
|
||||
q = urlparse.urlparse(self.path).query
|
||||
c = cgi.parse_qs(q)
|
||||
if not c.has_key('c'):
|
||||
raise LocalException('no cmd given')
|
||||
cmd = c['c'][0]
|
||||
Logger.log("Cmd: " + cmd)
|
||||
if cmd == 'register':
|
||||
self.register(c)
|
||||
else:
|
||||
raise LocalException('unknown cmd')
|
||||
Logger.log("Request: %s" % self.path)
|
||||
try:
|
||||
if self.command == "GET":
|
||||
q = urlparse.urlparse(self.path).query
|
||||
c = cgi.parse_qs(q)
|
||||
if not c.has_key('c'):
|
||||
raise LocalException('no cmd given')
|
||||
cmd = c['c'][0]
|
||||
Logger.log("Cmd: " + cmd)
|
||||
if cmd == 'register':
|
||||
self.register(c)
|
||||
else:
|
||||
raise LocalException('unknown cmd')
|
||||
|
||||
self.send_response(200, "OK")
|
||||
self.end_headers()
|
||||
except LocalException, e:
|
||||
self.send_response(400, e.msg)
|
||||
self.end_headers()
|
||||
self.send_response(200, "OK")
|
||||
self.end_headers()
|
||||
except LocalException, e:
|
||||
self.send_response(400, e.msg)
|
||||
self.end_headers()
|
||||
|
||||
def register(self, c):
|
||||
try:
|
||||
subdomain = c['subdomain'][0]
|
||||
sharedSecret = c['sharedsecret'][0]
|
||||
except KeyError, e:
|
||||
raise LocalException('Parameter missing: ' + str(e))
|
||||
try:
|
||||
subdomain = c['subdomain'][0]
|
||||
sharedSecret = c['sharedsecret'][0]
|
||||
except KeyError, e:
|
||||
raise LocalException('Parameter missing: ' + str(e))
|
||||
|
||||
dynid = subdomain
|
||||
zone = 'yadynns.net'
|
||||
|
||||
if HttpCmdHandler.entries.has_key(dynid):
|
||||
raise LocalException("duplicate dynid")
|
||||
for entry in HttpCmdHandler.entries.values():
|
||||
if entry.name == subdomain and entry.zone == zone:
|
||||
raise LocalException("duplicate full name")
|
||||
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
||||
HttpCmdHandler.entries[dynid] = newEntry
|
||||
dynid = subdomain
|
||||
zone = 'yadynns.net'
|
||||
|
||||
if HttpCmdHandler.entries.has_key(dynid):
|
||||
raise LocalException("duplicate dynid")
|
||||
for entry in HttpCmdHandler.entries.values():
|
||||
if entry.name == subdomain and entry.zone == zone:
|
||||
raise LocalException("duplicate full name")
|
||||
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
||||
HttpCmdHandler.entries[dynid] = newEntry
|
||||
|
||||
|
||||
class HttpCmdServer(SocketServer.ThreadingTCPServer):
|
||||
def __init__(self, serverAddr):
|
||||
self.allow_reuse_address = True
|
||||
SocketServer.ThreadingTCPServer.__init__(self, serverAddr, HttpCmdHandler)
|
||||
self.allow_reuse_address = True
|
||||
SocketServer.ThreadingTCPServer.__init__(self, serverAddr, HttpCmdHandler)
|
||||
|
||||
|
||||
class HttpCmdReceiver(threading.Thread):
|
||||
def __init__(self, httpCmdRecvAddr, entries, adminPwd):
|
||||
threading.Thread.__init__(self)
|
||||
self.httpCmdRecvAddr = httpCmdRecvAddr
|
||||
HttpCmdHandler.setClassParams(entries, adminPwd)
|
||||
HttpCmdHandler.setClassParams(entries, adminPwd)
|
||||
self.setDaemon(True)
|
||||
|
||||
def run(self):
|
||||
server = HttpCmdServer(self.httpCmdRecvAddr)
|
||||
server.serve_forever()
|
||||
server = HttpCmdServer(self.httpCmdRecvAddr)
|
||||
server.serve_forever()
|
||||
|
||||
|
@ -8,13 +8,13 @@ import Entry
|
||||
|
||||
class LocalException(Exception):
|
||||
def __init__(self, msg):
|
||||
self.msg = msg
|
||||
self.msg = msg
|
||||
|
||||
class XmlRpcServer(SimpleXMLRPCServer):
|
||||
@classmethod
|
||||
def setClassParams(cls, entries, adminPwd):
|
||||
cls.entries = entries
|
||||
cls.adminPwd = adminPwd
|
||||
cls.entries = entries
|
||||
cls.adminPwd = adminPwd
|
||||
|
||||
|
||||
def _dispatch(self, method, params):
|
||||
@ -29,21 +29,21 @@ class XmlRpcServer(SimpleXMLRPCServer):
|
||||
return func(*params)
|
||||
|
||||
def export_register(self, subdomain, sharedSecret, email):
|
||||
try:
|
||||
dynid = subdomain
|
||||
zone = 'yadynns.net'
|
||||
|
||||
if XmlRpcServer.entries.has_key(dynid):
|
||||
raise LocalException("duplicate dynid")
|
||||
for entry in XmlRpcServer.entries.values():
|
||||
if entry.name == subdomain and entry.zone == zone:
|
||||
raise LocalException("duplicate full name")
|
||||
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
||||
XmlRpcServer.entries[dynid] = newEntry
|
||||
|
||||
return 'ok'
|
||||
except LocalException, e:
|
||||
return 'not ok ' + e.msg
|
||||
try:
|
||||
dynid = subdomain
|
||||
zone = 'yadynns.net'
|
||||
|
||||
if XmlRpcServer.entries.has_key(dynid):
|
||||
raise LocalException("duplicate dynid")
|
||||
for entry in XmlRpcServer.entries.values():
|
||||
if entry.name == subdomain and entry.zone == zone:
|
||||
raise LocalException("duplicate full name")
|
||||
newEntry = Entry.Entry(dynid, sharedSecret, subdomain, zone)
|
||||
XmlRpcServer.entries[dynid] = newEntry
|
||||
|
||||
return 'ok'
|
||||
except LocalException, e:
|
||||
return 'not ok ' + e.msg
|
||||
|
||||
|
||||
|
||||
@ -53,10 +53,10 @@ class XmlRpcReceiver(threading.Thread):
|
||||
def __init__(self, xmlRpcRecvAddr, entries, adminPwd):
|
||||
threading.Thread.__init__(self)
|
||||
self.xmlRpcRecvAddr = xmlRpcRecvAddr
|
||||
XmlRpcServer.setClassParams(entries, adminPwd)
|
||||
XmlRpcServer.setClassParams(entries, adminPwd)
|
||||
self.setDaemon(True)
|
||||
|
||||
def run(self):
|
||||
server = XmlRpcServer(self.xmlRpcRecvAddr)
|
||||
server.serve_forever()
|
||||
server = XmlRpcServer(self.xmlRpcRecvAddr)
|
||||
server.serve_forever()
|
||||
|
||||
|
@ -11,7 +11,7 @@ class Logger(object):
|
||||
@staticmethod
|
||||
def debug(data):
|
||||
if Logger.debugFlag:
|
||||
syslog.syslog(syslog.LOG_DEBUG, data)
|
||||
syslog.syslog(syslog.LOG_DEBUG, data)
|
||||
print data
|
||||
|
||||
@staticmethod
|
||||
@ -24,7 +24,7 @@ class Logger(object):
|
||||
|
||||
@staticmethod
|
||||
def debugDisable():
|
||||
Logger.debugFlag = False
|
||||
Logger.debugFlag = False
|
||||
|
||||
debugFlag = False
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user