File: ms_pgsql_priv_root.html

package info (click to toggle)
autoconf-archive 20060312-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 4,180 kB
  • ctags: 13
  • sloc: sh: 455; makefile: 44
file content (137 lines) | stat: -rw-r--r-- 3,784 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
 <head>
  <title>
   Autoconf Macro: ms_pgsql_priv_root
  </title>
  <link rel="stylesheet" type="text/css" href="ac-archive.css">
 </head>
 <body>
  <table summary="web navigation" style="width:100%;">
   <tbody>
    <tr>
     <td style="width:50%;" align="center">
      <a href="http://autoconf-archive.cryp.to/ms_pgsql_priv_root.m4">Download
      M4 Source</a>
     </td>
     <td style="width:50%;" align="center">
      <a href="macros-by-category.html">Macro Index Page</a>
     </td>
    </tr>
   </tbody>
  </table>
  <hr>
  <h1>
   ms_pgsql_priv_root
  </h1>
  <h2>
   Synopsis
  </h2>
  <p class="indent" style="white-space:nowrap;">
   <code>MS_PGSQL_PRIV_ROOT(DB, USER, [HOST], [PASSWORD], [ACTION_IF_FAILED],
   [ACTION_IF_OK])</code>
  </p>
  <h2>
   Description
  </h2>
  <div class="indent">
   <p>
    This macro checks wether the given PostgreSQL user has root privileges (can
    create and drop databases) It is recommended to first call
    MS_CHECK_PGSQL_DB, this makes it easier to locate the cause of error. The
    macro MS_PROG_PGCLIENT is required by this one.
   </p>
   <p>
    The variable $pgclient_root_call is set for later use in Makefiles, if
    you'd like to make use of this, you must do
   </p>
   <pre>
    AC_SUBST(pgclient_root_call)
</pre>
   <p>
    after having called MS_CHECK_PGSQL_PRIV_ROOT. You can then do something
    like the following in your Makefile.am:
   </p>
   <pre>
    @pgclient_root_call@ -f file.sql
</pre>
   <p>
    If you want the user to set the data, you should support something like
    these configure options:
   </p>
   <pre>
    AC_ARG_WITH(pgsql-host,
            [  --with-pgsql-host=HOST               server is running on HOST @&lt;:@local socket@:&gt;@],
            [pg_host=$withval], [pg_host=])

    AC_ARG_WITH(pgsql-db,
            [  --with-pgsql-db=DBNAME               use database DBNAME @&lt;:@test@:&gt;@],
            [pg_db=$withval], [pg_db=test])

    AC_ARG_WITH(pgsql-root-user,
            [  --with-pgsql-root-user=USER          use user USER, must have root (all) privileges @&lt;:@postgres@:&gt;@],
            [pg_root_user=$withval], [pg_root_user=postgres])

    AC_ARG_WITH(pgsql-password,
            [  --with-pgsql-password=PASSWORD       use password PASSWORD @&lt;:@none@:&gt;@],
            [pg_password=$withval], [pg_password=""])
</pre>
   <p>
    You can then call the macro like this:
   </p>
   <pre>
    MS_CHECK_PGSQL_PRIV_ROOT([$pg_db], [$pg_root_user], [$pg_host], [$pg_password], [AC_MSG_ERROR([We need root privileges on database!])])
</pre>
  </div>
  <h2>
   Author
  </h2>
  <p class="indent">
   Moritz Sinn &lt;moritz@freesources.org&gt;
  </p>
  <h2>
   Last Modified
  </h2>
  <p class="indent">
   2002-09-25
  </p>
  <h2>
   M4 Source Code
  </h2>
  <div class="indent">
   <pre class="m4source">
AC_DEFUN([MS_CHECK_PGSQL_PRIV_ROOT], [
AC_REQUIRE([MS_PROG_PGCLIENT])dnl
AC_REQUIRE([MS_CHECK_PGSQL_DB])dnl
AC_MSG_CHECKING([if PostgreSQL user $2 has root privileges])

pgclient_root_call="$pgclient"

if test "x$1" != "x"; then
        pgclient_root_call="$pgclient_root_call dbname=$1";
fi
if test "x$2" != "x"; then
        pgclient_root_call="$pgclient_root_call user=$2";
fi
if test "x$3" != "x"; then
        pgclient_root_call="$pgclient_root_call host=$3";
fi
if test "x$4" != "x"; then
        pgclient_root_call="$pgclient_root_call password=$4";
fi

testdb="test`date +%s`"
echo "CREATE DATABASE $testdb; DROP DATABASE $testdb;" | $pgclient_root_call  &gt; /dev/null 2&gt;&amp;1
if test "x$?" = "x0"; then
        AC_MSG_RESULT([yes])
        $6
else
        AC_MSG_RESULT([no])
        $5
fi;
])dnl
</pre>
  </div>
 </body>
</html>