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);