From b5bcef683b2ee457ccec41bcf9bd8bb91531375e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 9 May 1999 00:54:30 +0000 Subject: [PATCH] Fix some miscellaneous places that were using raw open() or fopen(), instead of going through fd.c ... naughty naughty. --- src/backend/libpq/be-fsstubs.c | 67 +++++++++++++++++++++---------- src/backend/libpq/crypt.c | 4 +- src/backend/libpq/hba.c | 8 ++-- src/backend/utils/init/miscinit.c | 8 ++-- 4 files changed, 56 insertions(+), 31 deletions(-) diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c index 46c75f932e..2ac4db6330 100644 --- a/src/backend/libpq/be-fsstubs.c +++ b/src/backend/libpq/be-fsstubs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.29 1999/05/03 19:09:39 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.30 1999/05/09 00:54:30 tgl Exp $ * * NOTES * This should be moved to a more appropriate place. It is here @@ -99,7 +99,7 @@ lo_close(int fd) { MemoryContext currentContext; - if (fd >= MAX_LOBJ_FDS) + if (fd < 0 || fd >= MAX_LOBJ_FDS) { elog(ERROR, "lo_close: large obj descriptor (%d) out of range", fd); return -2; @@ -131,14 +131,34 @@ lo_close(int fd) int lo_read(int fd, char *buf, int len) { - Assert(cookies[fd] != NULL); + if (fd < 0 || fd >= MAX_LOBJ_FDS) + { + elog(ERROR, "lo_read: large obj descriptor (%d) out of range", fd); + return -2; + } + if (cookies[fd] == NULL) + { + elog(ERROR, "lo_read: invalid large obj descriptor (%d)", fd); + return -3; + } + return inv_read(cookies[fd], buf, len); } int lo_write(int fd, char *buf, int len) { - Assert(cookies[fd] != NULL); + if (fd < 0 || fd >= MAX_LOBJ_FDS) + { + elog(ERROR, "lo_write: large obj descriptor (%d) out of range", fd); + return -2; + } + if (cookies[fd] == NULL) + { + elog(ERROR, "lo_write: invalid large obj descriptor (%d)", fd); + return -3; + } + return inv_write(cookies[fd], buf, len); } @@ -149,11 +169,16 @@ lo_lseek(int fd, int offset, int whence) MemoryContext currentContext; int ret; - if (fd >= MAX_LOBJ_FDS) + if (fd < 0 || fd >= MAX_LOBJ_FDS) { - elog(ERROR, "lo_seek: large obj descriptor (%d) out of range", fd); + elog(ERROR, "lo_lseek: large obj descriptor (%d) out of range", fd); return -2; } + if (cookies[fd] == NULL) + { + elog(ERROR, "lo_lseek: invalid large obj descriptor (%d)", fd); + return -3; + } currentContext = MemoryContextSwitchTo((MemoryContext) fscxt); @@ -197,7 +222,7 @@ lo_creat(int mode) int lo_tell(int fd) { - if (fd >= MAX_LOBJ_FDS) + if (fd < 0 || fd >= MAX_LOBJ_FDS) { elog(ERROR, "lo_tell: large object descriptor (%d) out of range", fd); return -2; @@ -255,7 +280,7 @@ lowrite(int fd, struct varlena * wbuf) Oid lo_import(text *filename) { - int fd; + File fd; int nbytes, tmp; @@ -269,13 +294,13 @@ lo_import(text *filename) */ StrNCpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ + 1); #ifndef __CYGWIN32__ - fd = open(fnamebuf, O_RDONLY, 0666); + fd = PathNameOpenFile(fnamebuf, O_RDONLY, 0666); #else - fd = open(fnamebuf, O_RDONLY | O_BINARY, 0666); + fd = PathNameOpenFile(fnamebuf, O_RDONLY | O_BINARY, 0666); #endif if (fd < 0) { /* error */ - elog(ERROR, "be_lo_import: can't open unix file\"%s\"\n", + elog(ERROR, "be_lo_import: can't open unix file \"%s\"\n", fnamebuf); } @@ -298,7 +323,7 @@ lo_import(text *filename) /* * read in from the Unix file and write to the inversion file */ - while ((nbytes = read(fd, buf, BUFSIZE)) > 0) + while ((nbytes = FileRead(fd, buf, BUFSIZE)) > 0) { tmp = inv_write(lobj, buf, nbytes); if (tmp < nbytes) @@ -308,7 +333,7 @@ lo_import(text *filename) } } - close(fd); + FileClose(fd); inv_close(lobj); return lobjOid; @@ -321,7 +346,7 @@ lo_import(text *filename) int4 lo_export(Oid lobjId, text *filename) { - int fd; + File fd; int nbytes, tmp; @@ -331,7 +356,7 @@ lo_export(Oid lobjId, text *filename) mode_t oumask; /* - * create an inversion "object" + * open the inversion "object" */ lobj = inv_open(lobjId, INV_READ); if (lobj == NULL) @@ -343,17 +368,17 @@ lo_export(Oid lobjId, text *filename) /* * open the file to be written to */ - oumask = umask((mode_t) 0); StrNCpy(fnamebuf, VARDATA(filename), VARSIZE(filename) - VARHDRSZ + 1); + oumask = umask((mode_t) 0); #ifndef __CYGWIN32__ - fd = open(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC, 0666); + fd = PathNameOpenFile(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC, 0666); #else - fd = open(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, 0666); + fd = PathNameOpenFile(fnamebuf, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, 0666); #endif umask(oumask); if (fd < 0) { /* error */ - elog(ERROR, "lo_export: can't open unix file\"%s\"", + elog(ERROR, "lo_export: can't open unix file \"%s\"", fnamebuf); } @@ -362,7 +387,7 @@ lo_export(Oid lobjId, text *filename) */ while ((nbytes = inv_read(lobj, buf, BUFSIZE)) > 0) { - tmp = write(fd, buf, nbytes); + tmp = FileWrite(fd, buf, nbytes); if (tmp < nbytes) { elog(ERROR, "lo_export: error while writing \"%s\"", @@ -371,7 +396,7 @@ lo_export(Oid lobjId, text *filename) } inv_close(lobj); - close(fd); + FileClose(fd); return 1; } diff --git a/src/backend/libpq/crypt.c b/src/backend/libpq/crypt.c index d3326eb2e6..ac8b373387 100644 --- a/src/backend/libpq/crypt.c +++ b/src/backend/libpq/crypt.c @@ -9,7 +9,7 @@ * Dec 17, 1997 - Todd A. Brandys * Orignal Version Completed. * - * $Id: crypt.c,v 1.15 1999/02/13 23:15:42 momjian Exp $ + * $Id: crypt.c,v 1.16 1999/05/09 00:54:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -174,7 +174,7 @@ crypt_loadpwdfile() pwd_cache = (char **) realloc((void *) pwd_cache, sizeof(char *) * (pwd_cache_count + 1)); pwd_cache[pwd_cache_count++] = pstrdup(buffer); } - fclose(pwd_file); + FreeFile(pwd_file); /* * Now sort the entries in the cache for faster searching later. diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index cb0e9fc549..f5dddcdb26 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -5,7 +5,7 @@ * wherein you authenticate a user by seeing what IP address the system * says he comes from and possibly using ident). * - * $Id: hba.c,v 1.40 1999/04/16 04:59:03 tgl Exp $ + * $Id: hba.c,v 1.41 1999/05/09 00:54:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -966,9 +966,9 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir) map_file = (char *) palloc(bufsize); snprintf(map_file, bufsize, "%s/%s", DataDir, CHARSET_FILE); #ifndef __CYGWIN32__ - file = fopen(map_file, "r"); + file = AllocateFile(map_file, "r"); #else - file = fopen(map_file, "rb"); + file = AllocateFile(map_file, "rb"); #endif if (file == NULL) { @@ -1049,7 +1049,7 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir) } } } - fclose(file); + FreeFile(file); pfree(map_file); for (i = 0; i < ChIndex; i++) diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 640b16beb2..dfbca1c7e1 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.26 1999/02/13 23:20:01 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.27 1999/05/09 00:54:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -339,9 +339,9 @@ SetCharSet() strlen(p) + 2) * sizeof(char)); sprintf(map_file, "%s/%s", DataDir, p); #ifndef __CYGWIN32__ - file = fopen(map_file, "r"); + file = AllocateFile(map_file, "r"); #else - file = fopen(map_file, "rb"); + file = AllocateFile(map_file, "rb"); #endif if (file == NULL) return; @@ -376,7 +376,7 @@ SetCharSet() } } } - fclose(file); + FreeFile(file); free(map_file); } }