From: Victor Julien Date: Thu, 11 Dec 2014 13:49:17 +0000 (+0100) Subject: unix-socket: allow socked in custom locations X-Git-Tag: suricata-2.1beta3~101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84e8217fd87281db1587042653a19878aa3f6f26;p=thirdparty%2Fsuricata.git unix-socket: allow socked in custom locations Allow the socket to be set in any location. This allows for easy setting up of a socket as a non-root user. --- diff --git a/scripts/suricatasc/suricatasc.in b/scripts/suricatasc/suricatasc.in index 30d482dcd2..12340a715d 100755 --- a/scripts/suricatasc/suricatasc.in +++ b/scripts/suricatasc/suricatasc.in @@ -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" diff --git a/src/unix-manager.c b/src/unix-manager.c index d28a7dac1d..2026ab011a 100644 --- a/src/unix-manager.c +++ b/src/unix-manager.c @@ -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);