=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/server.c,v retrieving revision 1.13 retrieving revision 1.14 diff -c -r1.13 -r1.14 *** src/usr.bin/cvs/server.c 2005/04/12 14:58:40 1.13 --- src/usr.bin/cvs/server.c 2005/05/18 20:24:19 1.14 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.13 2005/04/12 14:58:40 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.14 2005/05/18 20:24:19 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. *************** *** 25,30 **** --- 25,31 ---- */ #include + #include #include #include *************** *** 47,52 **** --- 48,55 ---- struct cvs_cmd_info cmd_server = { NULL, NULL, NULL, NULL, NULL, 0, 0, 0 }; + char cvs_server_tmpdir[MAXPATHLEN]; + /* * cvs_server() * *************** *** 61,66 **** --- 64,70 ---- int cvs_server(int argc, char **argv) { + int l, ret; size_t len; char reqbuf[512]; *************** *** 72,77 **** --- 76,102 ---- (void)setvbuf(stdin, NULL, _IOLBF, 0); (void)setvbuf(stdout, NULL, _IOLBF, 0); + /* create the temporary directory */ + l = snprintf(cvs_server_tmpdir, sizeof(cvs_server_tmpdir), + "%scvs-serv%d", _PATH_TMP, getpid()); + if (l == -1 || l >= (int)sizeof(cvs_server_tmpdir)) { + errno = ENAMETOOLONG; + cvs_log(LP_ERRNO, "%s", cvs_server_tmpdir); + return (CVS_EX_DATA); + } + + if (mkdir(cvs_server_tmpdir, 0700) == -1) { + cvs_log(LP_ERRNO, "failed to create temporary directory '%s'", + cvs_server_tmpdir); + return (CVS_EX_DATA); + } + + if (chdir(cvs_server_tmpdir) == -1) { + cvs_log(LP_ERRNO, "failed to change to temporary directory '%s'" + , cvs_server_tmpdir); + return (CVS_EX_DATA); + } + for (;;) { if (fgets(reqbuf, sizeof(reqbuf), stdin) == NULL) { if (feof(stdin)) *************** *** 94,98 **** } ! return (0); } --- 119,126 ---- } ! /* cleanup the temporary tree */ ! ret = cvs_remove_dir(cvs_server_tmpdir); ! ! return (ret); }