As I understand it, this is the "official" way to submit changes/fixes back to the maintainers of CVS, so here you go.
Attached is a patch to CVS 1.10.8 to fix the "can't chdir(/root)" error on Redhat linux 6.1. From what I read this is caused by inetd daemon not starting with a clean environment and CVS trying to open files in the root user's directory for which it doesn't not have permissions. The patches to ignore.c and wrapper.c came from a post in the egroups archive(I don't remember the author, sorry). A similar patch was needed in history.c to completely fix the problem. We have been running this for about a month and it appears to working ok.
? root_perm.diff
Index: history.c
===================================================================
RCS file: /home2/cvsroot/ccvs/src/history.c,v
retrieving revision 1.47
diff -r1.47 history.c
739c739
< char *pwdir;
---
> char *pwdir = NULL;
740a741,744
> #ifdef SERVER_SUPPORT
> if (!server_active)
> #endif
> {
741a746,747
> }
>
Index: ignore.c
===================================================================
RCS file: /home2/cvsroot/ccvs/src/ignore.c,v
retrieving revision 1.32
diff -r1.32 ignore.c
56c56
< char *home_dir;
---
> char *home_dir = NULL;
83c83,88
< /* Then add entries found in home dir, (if user has one) and file exists */
---
> #ifdef SERVER_SUPPORT
> if (!server_active)
> /* Don't try to use a ~/.cvsignore file in server mode. */
> #endif
> {
> /* Then add entries found in home dir, (if user has one) and file exists */
89a95,96
> }
>
Index: wrapper.c
===================================================================
RCS file: /home2/cvsroot/ccvs/src/wrapper.c,v
retrieving revision 1.26
diff -r1.26 wrapper.c
91c91
< char *homedir;
---
> char *homedir = NULL;
117a118,121
> #ifdef SERVER_SUPPORT
> if (!server_active)
> #endif
> {
125a130,131
> }
>
