jonathan@comp.vuw.ac.nz (Jonathan) (08/31/88)
Bug: getgrent.c assumes all lines in /etc/group have a colon as the last character. It clobbers an arbitrary byte in memory containing a colon if they don't. Symptom: Programs calling getgrid(3) (or friends) tend to lose their path. Rsh(1) is a good candidate. Repeat-By: Unshar the following test program and etc:group, move etc:group to /etc/group and run the program: -------------------------test program------------------------- echo x - getgr-test.c sed '/^X/s///' > getgr-test.c << '/' X/* X * getgrtest.c - demonstrate amusing bug X * with Minix 1.3b X */ X X#include <stdio.h> X#include <grp.h> Xextern char **environ, *getenv (); X Xpenv (str) X char *str; X{ X char **envp = environ; X X printf("%s\n", str); X for (; (envp != 0) && (*envp != (char *) 0); envp++) X printf("%s\n", *envp); X printf("\n"); X X} X X Xmain () X{ X register struct group *gr; X extern struct group *getgrgid(); X X penv("Environment before getgrid()"); X gr = getgrgid(getgid()); X penv("Environment after getgrid()"); X} X / echo x - etc:group sed '/^X/s///' > etc:group << '/' Xwheel::0 Xdaemon::1 Xfoo::21 / -------------------------End test program------------------------- Fix-By: Apply the following shar'ed context diff: echo x - getgrent.c.pat sed '/^X/s///' > getgrent.c.pat << '/' X*** /usr/src/minix/libsrc/getgrent.c Thu Jul 14 04:27:22 1988 X--- ./getgrent.c Mon Aug 29 17:13:23 1988 X*************** X*** 63,69 **** X X static skip_period () X { X! while (*_buf != ':') X _buf++; X *_buf++ = '\0'; X } X--- 63,69 ---- X X static skip_period () X { X! while ((*_buf) && (*_buf != ':')) X _buf++; X *_buf++ = '\0'; X } / -- ----------------------------------------------------------------------------- sane mailers: jonathan@comp.vuw.ac.nz | Industrial democracy: UUCP path: ...!uunet!vuwcomp!jonathan | One factory, one vode!