diff options
author | Andrew Clayton <a.clayton@nginx.com> | 2023-11-06 18:43:19 +0000 |
---|---|---|
committer | Andrew Clayton <a.clayton@nginx.com> | 2024-02-19 12:59:29 +0000 |
commit | 34b3a812b110e8fba0669fc843aebffddf89ab17 (patch) | |
tree | 114bfd95ed4b9fe38d4d48f519268ecc9f3c99e8 /src/nxt_upstream_round_robin.c | |
parent | baff936be1b8bb9627deaef2af58d9aa398b7ca2 (diff) | |
download | unit-34b3a812b110e8fba0669fc843aebffddf89ab17.tar.gz unit-34b3a812b110e8fba0669fc843aebffddf89ab17.tar.bz2 |
Add nxt_file_chown()
This wraps chown(2) but takes the user/owner and group as strings.
It's a little long winded as it uses the thread safe versions of
getpwnam()/getgrname() which require a little more work.
This function will be used by the following commit that allows to set
the permissions of the Unix domain control socket.
We need to cast uid & gid to long in the call to nxt_thread_log_alert()
to appease clang-ast as it's adamant that uid/gid are unsigned ints, but
chown(2) takes -1 for these values to indicate don't change this item,
and it'd be nice to show them in the error message.
Note that getpwnam()/getgrname() don't define "not found" as an error as
per their man page
The formulation given above under "RETURN VALUE" is from POSIX.1-2001.
It does not call "not found" an error, and hence does not specify what
value errno might have in this situation. But that makes it impossible
to recognize errors. One might argue that according to POSIX errno
should be left unchanged if an entry is not found. Experiments on var‐
ious UNIX-like systems show that lots of different values occur in this
situation: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM, and probably
others.
Thus if we log an error from these functions we can end up with the
slightly humorous error message
2024/02/12 15:15:12 [alert] 99404#99404 getpwnam_r("noddy", ...) failed (0: Success) (User not found) while creating listening socket on unix:/opt/unit/control.unit.sock
Reviewed-by: Zhidao Hong <z.hong@f5.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions