summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_fs.c
diff options
context:
space:
mode:
authorAndrew Clayton <a.clayton@nginx.com>2022-08-07 00:19:24 +0100
committerAndrew Clayton <andrew@digital-domain.net>2022-10-03 14:26:45 +0100
commit57fc9201cb91e3d8901a64e3daaaf31684ee5bf5 (patch)
treeeff38400658ae0dd62046f1e426734cc4753c9f9 /src/nxt_fs.c
parent2e69b7eb5712e03a198caa66240c2002175c5ed9 (diff)
downloadunit-57fc9201cb91e3d8901a64e3daaaf31684ee5bf5.tar.gz
unit-57fc9201cb91e3d8901a64e3daaaf31684ee5bf5.tar.bz2
Socket: Created control socket & pid file directories.
@alejandro-colomar reported an issue on GitHub whereby Unit would fail to start due to not being able to create the control socket (a Unix Domain Socket) 2022/08/05 20:12:22 [alert] 21613#21613 bind(6, unix:/opt/local/unit/var/run/unit/control.unit.sock.tmp) failed (2: No such file or directory) This could happen if the control socket was set to a directory that doesn't exist. A common place to put the control socket would be under /run/unit, and while /run will exist, /run/unit may well not (/run is/should be cleared on each boot). The pid file would also generally go under /run/unit, though this is created after the control socket, however it could go someplace else so we should also ensure its directory exists. This commit will try to create the pid file and control sockets parent directory. In some cases the user will need to ensure that the rest of the path already exists. This adds a new nxt_fs_mkdir_parent() function that given a full path to a file (or directory), strips the last component off before passing the remaining directory path to nxt_fs_mkdir(). Cc: Konstantin Pavlov <thresh@nginx.com> Closes: <https://github.com/nginx/unit/issues/742> Reported-by: Alejandro Colomar <alx@nginx.com> Reviewed-by: Alejandro Colomar <alx@nginx.com> Tested-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
Diffstat (limited to '')
-rw-r--r--src/nxt_fs.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/nxt_fs.c b/src/nxt_fs.c
index 71498f99..35850798 100644
--- a/src/nxt_fs.c
+++ b/src/nxt_fs.c
@@ -273,6 +273,31 @@ nxt_fs_mkdir_all(const u_char *dir, mode_t mode)
}
+nxt_int_t
+nxt_fs_mkdir_parent(const u_char *path, mode_t mode)
+{
+ char *ptr, *dir;
+ nxt_int_t ret;
+
+ dir = nxt_strdup(path);
+ if (nxt_slow_path(dir == NULL)) {
+ return NXT_ERROR;
+ }
+
+ ret = NXT_OK;
+
+ ptr = strrchr(dir, '/');
+ if (nxt_fast_path(ptr != NULL)) {
+ *ptr = '\0';
+ ret = nxt_fs_mkdir((const u_char *) dir, mode);
+ }
+
+ nxt_free(dir);
+
+ return ret;
+}
+
+
static nxt_int_t
nxt_fs_mkdir(const u_char *dir, mode_t mode)
{