]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
unix-socket: allow socked in custom locations
authorVictor Julien <victor@inliniac.net>
Thu, 11 Dec 2014 13:49:17 +0000 (14:49 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 12 Dec 2014 08:44:20 +0000 (09:44 +0100)
Allow the socket to be set in any location. This allows for easy
setting up of a socket as a non-root user.

scripts/suricatasc/suricatasc.in
src/unix-manager.c

index 30d482dcd28094e2a6ba8ddc222dd06ef861ca7c..12340a715d9d008cf6311ebd794c4c78909b36f6 100755 (executable)
@@ -25,7 +25,7 @@ parser.add_argument('socket', metavar='socket', nargs='?', help='socket file to
 args = parser.parse_args()
 
 if args.socket != None:
-    SOCKET_PATH = "@e_localstatedir@/" + args.socket[0]
+    SOCKET_PATH = args.socket
 else:
     SOCKET_PATH = "@e_localstatedir@/suricata-command.socket"
 
index d28a7dac1d40a7d21d7e00fddb89d20300d6f77a..2026ab011aaff1988a21593ab60285d7c4807d48 100644 (file)
@@ -102,26 +102,36 @@ int UnixNew(UnixCommand * this)
     TAILQ_INIT(&this->tasks);
     TAILQ_INIT(&this->clients);
 
-    /* Create socket dir */
-    ret = mkdir(SOCKET_PATH, S_IRWXU|S_IXGRP|S_IRGRP);
-    if ( ret != 0 ) {
-        int err = errno;
-        if (err != EEXIST) {
-            SCLogError(SC_ERR_OPENING_FILE,
-                    "Cannot create socket directory %s: %s", SOCKET_PATH, strerror(err));
-            return 0;
-        }
-    }
-
     if (ConfGet("unix-command.filename", &socketname) == 1) {
-        int socketlen = strlen(SOCKET_PATH) + strlen(socketname) + 2;
-        sockettarget = SCMalloc(socketlen);
-        if (unlikely(sockettarget == NULL)) {
-            SCLogError(SC_ERR_MEM_ALLOC, "Unable to allocate socket name");
-            return 0;
+        if (PathIsAbsolute(socketname)) {
+            sockettarget = SCStrdup(socketname);
+            if (unlikely(sockettarget == NULL)) {
+                SCLogError(SC_ERR_MEM_ALLOC, "Unable to allocate socket name");
+                return 0;
+            }
+        } else {
+            int socketlen = strlen(SOCKET_PATH) + strlen(socketname) + 2;
+            sockettarget = SCMalloc(socketlen);
+            if (unlikely(sockettarget == NULL)) {
+                SCLogError(SC_ERR_MEM_ALLOC, "Unable to allocate socket name");
+                return 0;
+            }
+            snprintf(sockettarget, socketlen, "%s/%s", SOCKET_PATH, socketname);
+
+            /* Create socket dir */
+            ret = mkdir(SOCKET_PATH, S_IRWXU|S_IXGRP|S_IRGRP);
+            if ( ret != 0 ) {
+                int err = errno;
+                if (err != EEXIST) {
+                    SCFree(sockettarget);
+                    SCLogError(SC_ERR_OPENING_FILE,
+                            "Cannot create socket directory %s: %s", SOCKET_PATH, strerror(err));
+                    return 0;
+                }
+            }
+
         }
-        snprintf(sockettarget, socketlen, "%s/%s", SOCKET_PATH, socketname);
-        SCLogInfo("Use unix socket file '%s'.", sockettarget);
+        SCLogInfo("Using unix socket file '%s'", sockettarget);
     }
     if (sockettarget == NULL) {
         sockettarget = SCStrdup(SOCKET_TARGET);