summarylogtreecommitdiffstats
path: root/fpm-numeric-uid-gid.patch
diff options
context:
space:
mode:
Diffstat (limited to 'fpm-numeric-uid-gid.patch')
-rw-r--r--fpm-numeric-uid-gid.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/fpm-numeric-uid-gid.patch b/fpm-numeric-uid-gid.patch
new file mode 100644
index 000000000000..f99dbe048037
--- /dev/null
+++ b/fpm-numeric-uid-gid.patch
@@ -0,0 +1,52 @@
+--- a/sapi/fpm/fpm/fpm_unix.c
++++ b/sapi/fpm/fpm/fpm_unix.c
+@@ -165,27 +165,35 @@
+ #endif
+
+ if (c->listen_owner && *c->listen_owner) {
+- struct passwd *pwd;
++ if (strlen(c->listen_owner) == strspn(c->listen_owner, "0123456789")) {
++ wp->socket_uid = strtoul(c->listen_owner, 0, 10);
++ } else {
++ struct passwd *pwd;
+
+- pwd = getpwnam(c->listen_owner);
+- if (!pwd) {
+- zlog(ZLOG_SYSERROR, "[pool %s] cannot get uid for user '%s'", wp->config->name, c->listen_owner);
+- return -1;
+- }
++ pwd = getpwnam(c->listen_owner);
++ if (!pwd) {
++ zlog(ZLOG_SYSERROR, "[pool %s] cannot get uid for user '%s'", wp->config->name, c->listen_owner);
++ return -1;
++ }
+
+- wp->socket_uid = pwd->pw_uid;
+- wp->socket_gid = pwd->pw_gid;
++ wp->socket_uid = pwd->pw_uid;
++ wp->socket_gid = pwd->pw_gid;
++ }
+ }
+
+ if (c->listen_group && *c->listen_group) {
+- struct group *grp;
++ if (strlen(c->listen_group) == strspn(c->listen_group, "0123456789")) {
++ wp->socket_gid = strtoul(c->listen_group, 0, 10);
++ } else {
++ struct group *grp;
+
+- grp = getgrnam(c->listen_group);
+- if (!grp) {
+- zlog(ZLOG_SYSERROR, "[pool %s] cannot get gid for group '%s'", wp->config->name, c->listen_group);
+- return -1;
++ grp = getgrnam(c->listen_group);
++ if (!grp) {
++ zlog(ZLOG_SYSERROR, "[pool %s] cannot get gid for group '%s'", wp->config->name, c->listen_group);
++ return -1;
++ }
++ wp->socket_gid = grp->gr_gid;
+ }
+- wp->socket_gid = grp->gr_gid;
+ }
+
+ return 0;