From 13312a007ddb91c94d24cbc5e9a861e5d9e7f7cf Mon Sep 17 00:00:00 2001 From: Bryan Henderson Date: Tue, 19 Nov 1996 02:55:37 +0000 Subject: [PATCH] The routines in magic.c have moved to the more accessible version.c. --- src/backend/utils/init/magic.c | 167 --------------------------------- 1 file changed, 167 deletions(-) delete mode 100644 src/backend/utils/init/magic.c diff --git a/src/backend/utils/init/magic.c b/src/backend/utils/init/magic.c deleted file mode 100644 index 83404be039..0000000000 --- a/src/backend/utils/init/magic.c +++ /dev/null @@ -1,167 +0,0 @@ -/*------------------------------------------------------------------------- - * - * magic.c-- - * magic number management routines - * - * Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/magic.c,v 1.3 1996/11/06 10:31:56 scrappy Exp $ - * - * NOTES - * XXX eventually, should be able to handle version identifiers - * of length != 4. - * - * STANDALONE CODE - do not use error routines as this code is linked with - * stuff that does not cinterface.a - *------------------------------------------------------------------------- - */ -#include -#include -#include -#include -#include -#include -#include - -#include "postgres.h" - -#include "miscadmin.h" /* for global decls */ - -#include "storage/fd.h" /* for O_ */ - -static char Pg_verfile[] = PG_VERFILE; - - -/* - * private function prototypes - */ -static void PathSetVersionFilePath(const char *path, char *filepathbuf); - -/* - * DatabaseMetaGunkIsConsistent - * - * Returns 1 iff all version numbers and ownerships are consistent. - * - * Note that we have to go through the whole rigmarole of generating the path - * and checking the existence of the database whether Noversion is set or not. - */ -int -DatabaseMetaGunkIsConsistent(const char *database, char *path) -{ - int isValid; -#ifndef WIN32 - struct stat statbuf; -#else - struct _stat statbuf; -#endif - - /* XXX We haven't changed PG_VERSION since 1.1! */ -#ifndef WIN32 - isValid = ValidPgVersion(DataDir); - sprintf(path, "%s/base/%s", DataDir, database); - isValid = ValidPgVersion(path) || isValid; -#endif /* WIN32 */ - - if (stat(path, &statbuf) < 0) - elog(FATAL, "database %s does not exist, bailing out...", - database); - - return(isValid); -} - - -/* - * ValidPgVersion - verifies the consistency of the database - * - * Returns 1 iff the catalog version number (from the version number file - * in the directory specified in "path") is consistent with the backend - * version number. - */ -int -ValidPgVersion(const char *path) -{ - int fd; - char version[4], buf[MAXPGPATH+1]; -#ifndef WIN32 - struct stat statbuf; -#else - struct _stat statbuf; -#endif - u_short my_euid = geteuid(); - - PathSetVersionFilePath(path, buf); - - if (stat(buf, &statbuf) >= 0) { - if (statbuf.st_uid != my_euid && my_euid != 0) - elog(FATAL, - "process userid (%d) != database owner (%d)", - my_euid, statbuf.st_uid); - } else - return(0); - - if ((fd = open(buf, O_RDONLY, 0)) < 0) { - if (!Noversion) - elog(DEBUG, "ValidPgVersion: %s: %m", buf); - return(0); - } - - if (read(fd, version, 4) < 4 || - !isascii(version[0]) || !isdigit(version[0]) || - version[1] != '.' || - !isascii(version[2]) || !isdigit(version[2]) || - version[3] != '\n') - elog(FATAL, "ValidPgVersion: %s: bad format", buf); - if (version[2] != '0' + PG_VERSION || - version[0] != '0' + PG_RELEASE) { - if (!Noversion) - elog(DEBUG, - "ValidPgVersion: should be %d.%d not %c.%c", - PG_RELEASE, PG_VERSION, version[0], version[2]); - close(fd); - return(0); - } - close(fd); - return(1); -} - - -/* - * SetPgVersion - writes the version to a database directory - */ -void -SetPgVersion(const char *path) -{ - int fd; - char version[4], buf[MAXPGPATH+1]; - - PathSetVersionFilePath(path, buf); - - if ((fd = open(buf, O_WRONLY|O_CREAT|O_EXCL, 0666)) < 0) - elog(FATAL, "SetPgVersion: %s: %m", buf); - - version[0] = '0' + PG_RELEASE; - version[1] = '.'; - version[2] = '0' + PG_VERSION; - version[3] = '\n'; - if (write(fd, version, 4) != 4) - elog(WARN, "SetPgVersion: %s: %m", buf); - - close(fd); -} - - -/* - * PathSetVersionFilePath - * - * Destructively change "filepathbuf" to contain the concatenation of "path" - * and the name of the version file name. - */ -static void -PathSetVersionFilePath(const char *path, char *filepathbuf) -{ - if (strlen(path) > (MAXPGPATH - sizeof(Pg_verfile) - 1)) - elog(FATAL, "PathSetVersionFilePath: %s: path too long"); - sprintf(filepathbuf, "%s%c%s", path, SEP_CHAR, Pg_verfile); -} -- GitLab