]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
suricatasc: now python 2 and 3 compatible
authorEric Leblond <eric@regit.org>
Thu, 11 Dec 2014 19:01:59 +0000 (20:01 +0100)
committerEric Leblond <eric@regit.org>
Fri, 12 Dec 2014 09:12:59 +0000 (10:12 +0100)
Update code to support both python 2 and python 3.

scripts/suricatasc/src/suricatasc.py
scripts/suricatasc/suricatasc.in

index d3babe188ea75dde952830a6194a0aa25d9b6ed5..c941b4b51ee9de029884e049ae18d93d44042942 100644 (file)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-import simplejson as json
+try:
+    import simplejson as json
+except:
+    import json
 import re
 import readline
 from socket import socket, AF_UNIX, error
@@ -69,7 +72,7 @@ class SuricataCompleter:
         if state == 0:
             self.generator = self.complete(text)
         try:
-            return self.generator.next()
+            return next(self.generator)
         except StopIteration:
             return None
         return None
@@ -86,11 +89,14 @@ class SuricataSC:
         data = ""
         while i < 5:
             i += 1
-            data += self.socket.recv(SIZE)
+            if sys.version < '3':
+                data += self.socket.recv(SIZE)
+            else:
+                data += self.socket.recv(SIZE).decode('iso-8859-1')
             try:
                 cmdret = json.loads(data)
                 break
-            except json.decoder.JSONDecodeError:
+            except:
                 sleep(0.3)
         return cmdret
 
@@ -103,15 +109,18 @@ class SuricataSC:
         if (arguments != None):
             cmdmsg['arguments'] = arguments
         if self.verbose:
-            print "SND: " + json.dumps(cmdmsg)
-        self.socket.send(json.dumps(cmdmsg))
+            print("SND: " + json.dumps(cmdmsg))
+        if sys.version < '3':
+            self.socket.send(json.dumps(cmdmsg))
+        else:
+            self.socket.send(bytes(json.dumps(cmdmsg), 'iso-8859-1'))
         cmdret = self.json_recv()
 
         if cmdret == None:
             raise SuricataReturnException("Unable to get message from server")
 
         if self.verbose:
-            print "RCV: "+ json.dumps(cmdret)
+            print("RCV: "+ json.dumps(cmdret))
 
         return cmdret
 
@@ -119,14 +128,17 @@ class SuricataSC:
         try:
             self.socket = socket(AF_UNIX)
             self.socket.connect(self.sck_path)
-        except error, err:
+        except error as err:
             raise SuricataNetException(err)
 
         self.socket.settimeout(10)
         #send version
         if self.verbose:
-            print "SND: " + json.dumps({"version": VERSION})
-        self.socket.send(json.dumps({"version": VERSION}))
+            print("SND: " + json.dumps({"version": VERSION}))
+        if sys.version < '3':
+            self.socket.send(json.dumps({"version": VERSION}))
+        else:
+            self.socket.send(bytes(json.dumps({"version": VERSION}), 'iso-8859-1'))
 
         # get return
         cmdret = self.json_recv()
@@ -135,7 +147,7 @@ class SuricataSC:
             raise SuricataReturnException("Unable to get message from server")
 
         if self.verbose:
-            print "RCV: "+ json.dumps(cmdret)
+            print("RCV: "+ json.dumps(cmdret))
 
         if cmdret["return"] == "NOK":
             raise SuricataReturnException("Error: %s" % (cmdret["message"]))
@@ -192,27 +204,30 @@ class SuricataSC:
         return (cmd, arguments)
 
     def interactive(self):
-        print "Command list: " + ", ".join(self.cmd_list)
+        print("Command list: " + ", ".join(self.cmd_list))
         try:
             readline.set_completer(SuricataCompleter(self.cmd_list))
             readline.set_completer_delims(";")
             readline.parse_and_bind('tab: complete')
             while True:
-                command = raw_input(">>> ").strip()
+                if sys.version < '3':
+                    command = raw_input(">>> ").strip()
+                else:
+                    command = input(">>> ").strip()
                 if command == "quit":
                     break;
                 try:
                     (cmd, arguments) = self.parse_command(command)
-                except SuricataCommandException, err:
-                    print err
+                except SuricataCommandException as err:
+                    print(err)
                     continue
                 cmdret = self.send_command(cmd, arguments)
                 #decode json message
                 if cmdret["return"] == "NOK":
-                    print "Error:"
-                    print json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': '))
+                    print("Error:")
+                    print(json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': ')))
                 else:
-                    print "Success:"
-                    print json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': '))
+                    print("Success:")
+                    print(json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': ')))
         except KeyboardInterrupt:
-            print "[!] Interrupted"
+            print("[!] Interrupted")
index 12340a715d9d008cf6311ebd794c4c78909b36f6..ea00f09380d7874bc3811cccf9575e357265419e 100755 (executable)
@@ -32,28 +32,28 @@ else:
 sc = SuricataSC(SOCKET_PATH, verbose=args.verbose)
 try:
     sc.connect()
-except SuricataNetException, err:
-    print "Unable to connect to socket %s: %s" % (SOCKET_PATH, err)
+except SuricataNetException as err:
+    print("Unable to connect to socket %s: %s" % (SOCKET_PATH, err))
     sys.exit(1)
-except SuricataReturnException, err:
-    print "Unable to negotiate version with server: %s" % (err)
+except SuricataReturnException as err:
+    print("Unable to negotiate version with server: %s" % (err))
     sys.exit(1)
 
 if args.command:
     (command, arguments) = sc.parse_command(args.command)
-    print sc.send_command(command, arguments)
+    print(sc.send_command(command, arguments))
     sc.close()
     sys.exit(0)
 
 try:
     sc.interactive()
-except SuricataNetException, err:
-    print "Communication error: %s" % (err)
+except SuricataNetException as err:
+    print("Communication error: %s" % (err))
     sys.exit(1)
-except SuricataReturnException, err:
-    print "Invalid return from server: %s" % (err)
+except SuricataReturnException as err:
+    print("Invalid return from server: %s" % (err))
     sys.exit(1)
 
-print "[+] Quit command client"
+print("[+] Quit command client")
 
 sc.close()