diff options
Diffstat (limited to 'fpm-numeric-uid-gid.patch')
-rw-r--r-- | fpm-numeric-uid-gid.patch | 52 |
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; |