From eda21a1ad94d9c5f37b0d12af962278b9ba7f5e8 Mon Sep 17 00:00:00 2001 From: corinna Date: Tue, 24 Apr 2001 21:45:20 +0000 Subject: [PATCH] * passwd.cc (getpwnam_r): Use correct offsets into buffer. Copy pw_gecos field as well. (getpwuid_r): Ditto. --- winsup/cygwin/ChangeLog | 6 ++++++ winsup/cygwin/passwd.cc | 18 ++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 9ce228cc9b..582f637cca 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +Tue Apr 24 23:43:00 2001 Corinna Vinschen + + * passwd.cc (getpwnam_r): Use correct offsets into buffer. + Copy pw_gecos field as well. + (getpwuid_r): Ditto. + 2001-04-24 Egor Duda * dlmalloc.c: New file. Port of Doug Lea's malloc diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc index 319ebbbcdd..405d8d861a 100644 --- a/winsup/cygwin/passwd.cc +++ b/winsup/cygwin/passwd.cc @@ -230,7 +230,8 @@ getpwuid_r (uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize, struct return 0; /* check needed buffer size. */ - size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) + strlen (temppw->pw_shell); + size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) + + strlen (temppw->pw_shell) + strlen (temppw->pw_gecos) + 4; if (needsize > bufsize) return ERANGE; @@ -239,11 +240,13 @@ getpwuid_r (uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize, struct pwd->pw_uid = temppw->pw_uid; pwd->pw_gid = temppw->pw_gid; pwd->pw_name = buffer; - pwd->pw_dir = buffer + strlen (temppw->pw_name); - pwd->pw_shell = buffer + strlen (temppw->pw_name) + strlen (temppw->pw_dir); + pwd->pw_dir = pwd->pw_name + strlen (temppw->pw_name) + 1; + pwd->pw_shell = pwd->pw_dir + strlen (temppw->pw_dir) + 1; + pwd->pw_gecos = pwd->pw_shell + strlen (temppw->pw_shell) + 1; strcpy (pwd->pw_name, temppw->pw_name); strcpy (pwd->pw_dir, temppw->pw_dir); strcpy (pwd->pw_shell, temppw->pw_shell); + strcpy (pwd->pw_gecos, temppw->pw_gecos); return 0; } @@ -282,7 +285,8 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s return 0; /* check needed buffer size. */ - size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) + strlen (temppw->pw_shell); + size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) + + strlen (temppw->pw_shell) + strlen (temppw->pw_gecos) + 4; if (needsize > bufsize) return ERANGE; @@ -291,11 +295,13 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s pwd->pw_uid = temppw->pw_uid; pwd->pw_gid = temppw->pw_gid; pwd->pw_name = buffer; - pwd->pw_dir = buffer + strlen (temppw->pw_name); - pwd->pw_shell = buffer + strlen (temppw->pw_name) + strlen (temppw->pw_dir); + pwd->pw_dir = pwd->pw_name + strlen (temppw->pw_name) + 1; + pwd->pw_shell = pwd->pw_dir + strlen (temppw->pw_dir) + 1; + pwd->pw_gecos = pwd->pw_shell + strlen (temppw->pw_shell) + 1; strcpy (pwd->pw_name, temppw->pw_name); strcpy (pwd->pw_dir, temppw->pw_dir); strcpy (pwd->pw_shell, temppw->pw_shell); + strcpy (pwd->pw_gecos, temppw->pw_gecos); return 0; } -- 2.11.0