summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2017-08-26 13:37:44 +0300
committerIgor Sysoev <igor@sysoev.ru>2017-08-26 13:37:44 +0300
commit9aaa7d8c20e58ed380225cbbbd05248539d2f500 (patch)
treefdce2cc852667f0c93e14909093376adf3c1a473
parente64494ba2cba9322f9594f26bcc69cb3a2441105 (diff)
downloadunit-9aaa7d8c20e58ed380225cbbbd05248539d2f500.tar.gz
unit-9aaa7d8c20e58ed380225cbbbd05248539d2f500.tar.bz2
Added configure option --user=USER and --group=GROUP.
-rw-r--r--auto/options6
-rwxr-xr-xconfigure3
-rw-r--r--src/nxt_process.c30
-rw-r--r--src/nxt_runtime.c12
4 files changed, 40 insertions, 11 deletions
diff --git a/auto/options b/auto/options
index b7fcc179..bcf9e17a 100644
--- a/auto/options
+++ b/auto/options
@@ -16,6 +16,9 @@ NXT_PREFIX=
NXT_PID="nginext.pid"
NXT_LOG="nginext.log"
+NXT_USER="nobody"
+NXT_GROUP=
+
NXT_DEBUG=NO
NXT_INET6=YES
@@ -62,6 +65,9 @@ do
--pid=*) NXT_PID="$value" ;;
--log=*) NXT_LOG="$value" ;;
+ --user=*) NXT_USER="$value" ;;
+ --group=*) NXT_GROUP="$value" ;;
+
--debug) NXT_DEBUG=YES ;;
--no-ipv6) NXT_INET6=NO ;;
diff --git a/configure b/configure
index a53ff106..b0741687 100755
--- a/configure
+++ b/configure
@@ -66,6 +66,9 @@ cat << END >> $NXT_AUTO_CONFIG_H
#define NXT_PID "$NXT_PID"
#define NXT_LOG "$NXT_LOG"
+#define NXT_USER "$NXT_USER"
+#define NXT_GROUP "$NXT_GROUP"
+
END
diff --git a/src/nxt_process.c b/src/nxt_process.c
index e6a6fa0c..81344b2d 100644
--- a/src/nxt_process.c
+++ b/src/nxt_process.c
@@ -364,23 +364,43 @@ nxt_user_cred_get(nxt_task_t *task, nxt_user_cred_t *uc, const char *group)
struct group *grp;
struct passwd *pwd;
+ nxt_errno = 0;
+
pwd = getpwnam(uc->user);
if (nxt_slow_path(pwd == NULL)) {
- nxt_log(task, NXT_LOG_CRIT, "getpwnam(%s) failed %E",
- uc->user, nxt_errno);
+
+ if (nxt_errno == 0) {
+ nxt_log(task, NXT_LOG_CRIT,
+ "getpwnam(\"%s\") failed, user \"%s\" not found",
+ uc->user, uc->user);
+ } else {
+ nxt_log(task, NXT_LOG_CRIT, "getpwnam(\"%s\") failed %E",
+ uc->user, nxt_errno);
+ }
+
return NXT_ERROR;
}
uc->uid = pwd->pw_uid;
uc->base_gid = pwd->pw_gid;
- if (group != NULL) {
+ if (group != NULL && group[0] != '\0') {
+ nxt_errno = 0;
+
grp = getgrnam(group);
if (nxt_slow_path(grp == NULL)) {
- nxt_log(task, NXT_LOG_CRIT, "getgrnam(%s) failed %E",
- group, nxt_errno);
+
+ if (nxt_errno == 0) {
+ nxt_log(task, NXT_LOG_CRIT,
+ "getgrnam(\"%s\") failed, group \"%s\" not found",
+ group, group);
+ } else {
+ nxt_log(task, NXT_LOG_CRIT, "getgrnam(\"%s\") failed %E",
+ group, nxt_errno);
+ }
+
return NXT_ERROR;
}
diff --git a/src/nxt_runtime.c b/src/nxt_runtime.c
index 59b209aa..d6518fbe 100644
--- a/src/nxt_runtime.c
+++ b/src/nxt_runtime.c
@@ -699,8 +699,8 @@ nxt_runtime_conf_init(nxt_task_t *task, nxt_runtime_t *rt)
rt->master_process = 1;
rt->engine_connections = 256;
rt->auxiliary_threads = 2;
- rt->user_cred.user = "nobody";
- rt->group = NULL;
+ rt->user_cred.user = NXT_USER;
+ rt->group = NXT_GROUP;
rt->pid = NXT_PID;
rt->log = NXT_LOG;
@@ -757,6 +757,8 @@ nxt_runtime_conf_read_cmd(nxt_task_t *task, nxt_runtime_t *rt)
"nginext version: " NXT_VERSION "\n"
"configured as ./configure" NXT_CONFIGURE_OPTIONS "\n";
+ static const char no_user[] = "option \"--user\" requires username\n";
+ static const char no_group[] = "option \"--group\" requires group name\n";
static const char no_pid[] = "option \"--pid\" requires filename\n";
static const char no_log[] = "option \"--log\" requires filename\n";
@@ -805,8 +807,7 @@ nxt_runtime_conf_read_cmd(nxt_task_t *task, nxt_runtime_t *rt)
if (nxt_strcmp(p, "--user") == 0) {
if (*argv == NULL) {
- nxt_log(task, NXT_LOG_CRIT,
- "no argument for option \"--user\"");
+ write(STDERR_FILENO, no_user, sizeof(no_user) - 1);
return NXT_ERROR;
}
@@ -819,8 +820,7 @@ nxt_runtime_conf_read_cmd(nxt_task_t *task, nxt_runtime_t *rt)
if (nxt_strcmp(p, "--group") == 0) {
if (*argv == NULL) {
- nxt_log(task, NXT_LOG_CRIT,
- "no argument for option \"--group\"");
+ write(STDERR_FILENO, no_group, sizeof(no_group) - 1);
return NXT_ERROR;
}