diff --git a/src/helpers.c b/src/helpers.c index 8540825c..fa04e39d 100644 --- a/src/helpers.c +++ b/src/helpers.c @@ -413,6 +413,40 @@ int getgroup(char *group) #endif } +/* get current user */ +int getcuser(char *buf, size_t len) +{ + char *ptr = "root"; + +#ifndef ENABLE_STATIC + struct passwd *pw = getpwuid(getuid()); + + if (pw) + ptr = pw->pw_name; +#endif + if (strlcpy(buf, ptr, len) > len) + return -1; + + return 0; +} + +/* get current group */ +int getcgroup(char *buf, size_t len) +{ + char *ptr = "root"; + +#ifndef ENABLE_STATIC + struct group *gr = getgrgid(getgid()); + + if (gr) + ptr = gr->gr_name; +#endif + if (strlcpy(buf, ptr, len) > len) + return -1; + + return 0; +} + void set_hostname(char **hostname) { FILE *fp; diff --git a/src/helpers.h b/src/helpers.h index e4fc1595..87315875 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -81,6 +81,10 @@ int print_result (int fail); int getuser (char *username, char **home); int getgroup (char *group); + +int getcuser (char *buf, size_t len); +int getcgroup (char *buf, size_t len); + void set_hostname (char **hostname); void networking (int updown); diff --git a/src/service.c b/src/service.c index 93c38158..454429bb 100644 --- a/src/service.c +++ b/src/service.c @@ -1145,6 +1145,9 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) strlcpy(svc->group, ptr, sizeof(svc->group)); } strlcpy(svc->username, username, sizeof(svc->username)); + } else { + getcuser(svc->username, sizeof(svc->username)); + getcgroup(svc->group, sizeof(svc->group)); } parse_cmdline_args(svc, cmd);