--- ntp-4.2.4/ntpd/ntpd.c.groups 2006-12-29 00:02:02.000000000 +0100 +++ ntp-4.2.4/ntpd/ntpd.c 2007-01-02 16:24:21.000000000 +0100 @@ -874,10 +874,18 @@ sw_uid = (uid_t)strtoul(user, &endp, 0); if (*endp != '\0') goto getuser; + + if ((pw = getpwuid(sw_uid)) != NULL) { + user = strdup(pw->pw_name); + } else { + user = (char *)-1; + } + } else { getuser: if ((pw = getpwnam(user)) != NULL) { sw_uid = pw->pw_uid; + sw_gid = pw->pw_gid; } else { errno = 0; msyslog(LOG_ERR, "Cannot find user `%s'", user); @@ -913,6 +921,13 @@ exit (-1); } } + + if (user && (user != (char *)-1) && initgroups(user, sw_gid)) { + msyslog(LOG_ERR, "Cannot initgroups() to user `%s': %m", user); + exit (-1); + } + + if (group && setgid(sw_gid)) { msyslog(LOG_ERR, "Cannot setgid() to group `%s': %m", group); exit (-1);