main.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * main.c
  4.  *   Stub main() routine for the postgres backend.
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/main/main.c,v 1.23 1999/02/13 23:15:51 momjian Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <unistd.h>
  17. #if defined(__alpha) && !defined(linux)
  18. #include <sys/sysinfo.h>
  19. #include <machine/hal_sysinfo.h>
  20. #define ASSEMBLER
  21. #include <sys/proc.h>
  22. #undef ASSEMBLER
  23. #endif
  24. #include "postgres.h"
  25. #ifdef USE_LOCALE
  26. #include <locale.h>
  27. #endif
  28. #include "miscadmin.h"
  29. #include "bootstrap/bootstrap.h"/* for BootstrapMain() */
  30. #include "tcop/tcopprot.h" /* for PostgresMain() */
  31. #define NOROOTEXEC "
  32. n"root" execution of the PostgreSQL backend is not permitted.nn
  33. The backend must be started under it's own userid to preventn
  34. a possible system security compromise. See the INSTALL file forn
  35. more information on how to properly start the postmaster.nn"
  36. int
  37. main(int argc, char *argv[])
  38. {
  39. int len;
  40. #if defined(__alpha)
  41. #ifdef NOFIXADE
  42. int buffer[] = {SSIN_UACPROC, UAC_SIGBUS};
  43. #endif  /* NOFIXADE */
  44. #ifdef NOPRINTADE
  45. int buffer[] = {SSIN_UACPROC, UAC_NOPRINT};
  46. #endif  /* NOPRINTADE */
  47. #endif
  48. #ifdef USE_LOCALE
  49. setlocale(LC_CTYPE, ""); /* take locale information from an
  50.  * environment */
  51. setlocale(LC_COLLATE, "");
  52. setlocale(LC_MONETARY, "");
  53. #endif
  54. #if defined(NOFIXADE) || defined(NOPRINTADE)
  55. /*
  56.  * Must be first so that the bootstrap code calls it, too. (Only
  57.  * needed on some RISC architectures.)
  58.  */
  59. #if defined(ultrix4)
  60. syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL);
  61. #endif
  62. #if defined(__alpha)
  63. if (setsysinfo(SSI_NVPAIRS, buffer, 1, (caddr_t) NULL,
  64.    (unsigned long) NULL) < 0)
  65. elog(NOTICE, "setsysinfo failed: %dn", errno);
  66. #endif
  67. #endif  /* NOFIXADE || NOPRINTADE */
  68. /*
  69.  * use one executable for both postgres and postmaster, invoke one or
  70.  * the other depending on the name of the executable
  71.  */
  72. len = strlen(argv[0]);
  73. if (!geteuid())
  74. {
  75. fprintf(stderr, "%s", NOROOTEXEC);
  76. exit(1);
  77. }
  78. if (len >= 10 && !strcmp(argv[0] + len - 10, "postmaster"))
  79. exit(PostmasterMain(argc, argv));
  80. /*
  81.  * if the first argument is "-boot", then invoke the backend in
  82.  * bootstrap mode
  83.  */
  84. if (argc > 1 && strcmp(argv[1], "-boot") == 0)
  85. exit(BootstrapMain(argc - 1, argv + 1)); /* remove the -boot arg
  86.  * from the command line */
  87. else
  88. exit(PostgresMain(argc, argv, argc, argv));
  89. }