Skip to content

Commit 7a161ac

Browse files
committed
Clean up comments, organize code snippets added at different times into
a slightly less random order.
1 parent 249fe81 commit 7a161ac

File tree

1 file changed

+79
-48
lines changed

1 file changed

+79
-48
lines changed

src/backend/main/main.c

Lines changed: 79 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
/*-------------------------------------------------------------------------
22
*
33
* main.c
4-
* Stub main() routine for the postgres backend.
4+
* Stub main() routine for the postgres executable.
5+
*
6+
* This does some essential startup tasks for any incarnation of postgres
7+
* (postmaster, standalone backend, or standalone bootstrap mode) and then
8+
* dispatches to the proper FooMain() routine for the incarnation.
9+
*
510
*
611
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
712
* Portions Copyright (c) 1994, Regents of the University of California
813
*
914
*
1015
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.34 2000/11/16 05:51:00 momjian Exp $
16+
* $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.35 2000/11/25 03:45:47 tgl Exp $
1217
*
1318
*-------------------------------------------------------------------------
1419
*/
1520
#include "postgres.h"
1621

1722
#include <pwd.h>
1823
#include <unistd.h>
24+
#ifdef USE_LOCALE
25+
#include <locale.h>
26+
#endif
1927

2028
#if defined(__alpha) && !defined(linux) && !defined(__FreeBSD__)
2129
#include <sys/sysinfo.h>
@@ -25,23 +33,35 @@
2533
#undef ASSEMBLER
2634
#endif
2735

28-
#ifdef USE_LOCALE
29-
#include <locale.h>
30-
#endif
3136
#include "miscadmin.h"
3237
#include "bootstrap/bootstrap.h"
3338
#include "tcop/tcopprot.h"
3439

40+
3541
#define NOROOTEXEC "\
36-
\n\"root\" execution of the PostgreSQL backend is not permitted.\n\n\
37-
The backend must be started under its own userid to prevent\n\
42+
\n\"root\" execution of the PostgreSQL server is not permitted.\n\n\
43+
The server must be started under an unprivileged userid to prevent\n\
3844
a possible system security compromise. See the INSTALL file for\n\
39-
more information on how to properly start the postmaster.\n\n"
45+
more information on how to properly start the server.\n\n"
46+
4047

4148
int
4249
main(int argc, char *argv[])
4350
{
4451
int len;
52+
struct passwd *pw;
53+
54+
/*
55+
* Place platform-specific startup hacks here. This is the right
56+
* place to put code that must be executed early in launch of either
57+
* a postmaster, a standalone backend, or a standalone bootstrap run.
58+
* Note that this code will NOT be executed when a backend or
59+
* sub-bootstrap run is forked by the postmaster.
60+
*
61+
* XXX The need for code here is proof that the platform in question
62+
* is too brain-dead to provide a standard C execution environment
63+
* without help. Avoid adding more here, if you can.
64+
*/
4565

4666
#if defined(__alpha)
4767
#ifdef NOFIXADE
@@ -52,78 +72,89 @@ main(int argc, char *argv[])
5272
int buffer[] = {SSIN_UACPROC, UAC_NOPRINT};
5373

5474
#endif /* NOPRINTADE */
55-
#endif
75+
#endif /* __alpha */
5676

57-
#ifdef USE_LOCALE
58-
setlocale(LC_CTYPE, ""); /* take locale information from an
59-
* environment */
60-
setlocale(LC_COLLATE, "");
61-
setlocale(LC_MONETARY, "");
62-
#endif
6377
#if defined(NOFIXADE) || defined(NOPRINTADE)
6478

65-
/*
66-
* Must be first so that the bootstrap code calls it, too. (Only
67-
* needed on some RISC architectures.)
68-
*/
69-
7079
#if defined(ultrix4)
7180
syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL);
7281
#endif
7382

7483
#if defined(__alpha)
7584
if (setsysinfo(SSI_NVPAIRS, buffer, 1, (caddr_t) NULL,
7685
(unsigned long) NULL) < 0)
77-
elog(NOTICE, "setsysinfo failed: %d\n", errno);
86+
fprintf(stderr, "setsysinfo failed: %d\n", errno);
7887
#endif
7988

8089
#endif /* NOFIXADE || NOPRINTADE */
8190

91+
#ifdef __BEOS__
92+
/* BeOS-specific actions on startup */
93+
beos_startup(argc,argv);
94+
#endif
95+
8296
/*
83-
* use one executable for both postgres and postmaster, invoke one or
84-
* the other depending on the name of the executable
97+
* Not-quite-so-platform-specific startup environment checks.
98+
* Still best to minimize these.
8599
*/
86-
len = strlen(argv[0]);
87100

88-
/* OK this is going to seem weird, but BeOS is presently basically
89-
* a single user system. There is work going on, but at present it'll
90-
* say that every user is uid 0, i.e. root. We'll inhibit this check
91-
* until Be get the system working with multiple users!!
92-
*/
101+
/*
102+
* Make sure we are not running as root.
103+
*
104+
* BeOS currently runs everything as root :-(, so this check must
105+
* be temporarily disabled there...
106+
*/
93107
#ifndef __BEOS__
94-
if (!geteuid())
108+
if (geteuid() == 0)
95109
{
96110
fprintf(stderr, "%s", NOROOTEXEC);
97111
exit(1);
98112
}
99113
#endif /* __BEOS__ */
100114

101-
#ifdef __BEOS__
102-
/* Specific beos actions on startup */
103-
beos_startup(argc,argv);
115+
/*
116+
* Set up locale information from environment, in only the categories
117+
* needed by Postgres; leave other categories set to default "C".
118+
* (Note that CTYPE and COLLATE will be overridden later from pg_control
119+
* if we are in an already-initialized database. We set them here so
120+
* that they will be available to fill pg_control during initdb.)
121+
*/
122+
#ifdef USE_LOCALE
123+
setlocale(LC_CTYPE, "");
124+
setlocale(LC_COLLATE, "");
125+
setlocale(LC_MONETARY, "");
104126
#endif
105127

128+
/*
129+
* Now dispatch to one of PostmasterMain, PostgresMain, or BootstrapMain
130+
* depending on the program name (and possibly first argument) we
131+
* were called with. The lack of consistency here is historical.
132+
*/
133+
len = strlen(argv[0]);
106134

107-
if (len >= 10 && !strcmp(argv[0] + len - 10, "postmaster"))
135+
if (len >= 10 && strcmp(argv[0] + len - 10, "postmaster") == 0)
136+
{
137+
/* Called as "postmaster" */
108138
exit(PostmasterMain(argc, argv));
139+
}
109140

110141
/*
111-
* if the first argument is "-boot", then invoke the backend in
112-
* bootstrap mode
142+
* If the first argument is "-boot", then invoke bootstrap mode.
143+
* Note we remove "-boot" from the arguments passed on to BootstrapMain.
113144
*/
114145
if (argc > 1 && strcmp(argv[1], "-boot") == 0)
115-
exit(BootstrapMain(argc - 1, argv + 1)); /* remove the -boot arg
116-
* from the command line */
117-
else
146+
exit(BootstrapMain(argc - 1, argv + 1));
147+
148+
/*
149+
* Otherwise we're a standalone backend. Invoke PostgresMain,
150+
* specifying current userid as the "authenticated" Postgres user name.
151+
*/
152+
pw = getpwuid(geteuid());
153+
if (pw == NULL)
118154
{
119-
struct passwd *pw;
120-
121-
pw = getpwuid(geteuid());
122-
if (!pw)
123-
{
124-
fprintf(stderr, "%s: invalid current euid", argv[0]);
125-
exit(1);
126-
}
127-
exit(PostgresMain(argc, argv, argc, argv, pw->pw_name));
155+
fprintf(stderr, "%s: invalid current euid", argv[0]);
156+
exit(1);
128157
}
158+
159+
exit(PostgresMain(argc, argv, argc, argv, pw->pw_name));
129160
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy