PostgreSQL Source Code: src/bin/pg_dump/dumputils.h File Reference (original) (raw)
70{
71 bool ok = true;
72 char **aclitems = NULL;
73 char **baseitems = NULL;
74 char **grantitems = NULL;
75 char **revokeitems = NULL;
76 int naclitems = 0;
77 int nbaseitems = 0;
78 int ngrantitems = 0;
79 int nrevokeitems = 0;
80 int i;
82 grantor,
83 privs,
84 privswgo;
86 secondsql;
87
88
89
90
91
92
93 if (acls == NULL || *acls == '\0')
94 return true;
95
96
97 if (owner && *owner == '\0')
98 owner = NULL;
99
100
101 if ((acls, &aclitems, &naclitems))
102 {
103 free(aclitems);
104 return false;
105 }
106
107
108 if ((baseacls, &baseitems, &nbaseitems))
109 {
110 free(aclitems);
111 free(baseitems);
112 return false;
113 }
114
115
116
117
118
119
120
121
122
123
124
125 grantitems = (char **) pg_malloc(naclitems * sizeof(char *));
126 for (i = 0; i < naclitems; i++)
127 {
128 bool found = false;
129
130 for (int j = 0; j < nbaseitems; j++)
131 {
132 if (strcmp(aclitems[i], baseitems[j]) == 0)
133 {
134 found = true;
135 break;
136 }
137 }
138 if (!found)
139 grantitems[ngrantitems++] = aclitems[i];
140 }
141 revokeitems = (char **) pg_malloc(nbaseitems * sizeof(char *));
142 for (i = 0; i < nbaseitems; i++)
143 {
144 bool found = false;
145
146 for (int j = 0; j < naclitems; j++)
147 {
148 if (strcmp(baseitems[i], aclitems[j]) == 0)
149 {
150 found = true;
151 break;
152 }
153 }
154 if (!found)
155 revokeitems[nrevokeitems++] = baseitems[i];
156 }
157
158
163
164
165
166
169
170
171
172
173 for (i = 0; i < nrevokeitems; i++)
174 {
177 grantee, grantor, privs, NULL))
178 {
179 ok = false;
180 break;
181 }
182
183 if (privs->len > 0)
184 {
187 if (nspname && *nspname)
192 if (grantee->len == 0)
194 else
197 }
198 }
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223 for (i = 0; i < ngrantitems; i++)
224 {
226 grantee, grantor, privs, privswgo))
227 {
228
229
230
231
232
233 if (privs->len > 0 || privswgo->len > 0)
234 {
236
237
238 if (grantor->len == 0 && owner)
240
241
242 if (owner &&
243 strcmp(grantee->data, owner) == 0 &&
244 strcmp(grantor->data, owner) == 0)
245 thissql = firstsql;
246 else
247 thissql = secondsql;
248
249 if (grantor->len > 0
250 && (!owner || strcmp(owner, grantor->data) != 0))
253
254 if (privs->len > 0)
255 {
258 if (nspname && *nspname)
263 if (grantee->len == 0)
265 else
267 }
268 if (privswgo->len > 0)
269 {
271 prefix, privswgo->data, type);
272 if (nspname && *nspname)
277 if (grantee->len == 0)
279 else
282 }
283
284 if (grantor->len > 0
285 && (!owner || strcmp(owner, grantor->data) != 0))
287 }
288 }
289 else
290 {
291
292 ok = false;
293 break;
294 }
295 }
296
301
305
306 free(aclitems);
307 free(baseitems);
308 free(grantitems);
309 free(revokeitems);
310
311 return ok;
312}
static bool parseAclItem(const char *item, const char *type, const char *name, const char *subname, int remoteVersion, PQExpBuffer grantee, PQExpBuffer grantor, PQExpBuffer privs, PQExpBuffer privswgo)
void * pg_malloc(size_t size)
void printfPQExpBuffer(PQExpBuffer str, const char *fmt,...)
PQExpBuffer createPQExpBuffer(void)
void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
void destroyPQExpBuffer(PQExpBuffer str)
void appendPQExpBufferStr(PQExpBuffer str, const char *data)
const char * fmtId(const char *rawid)
bool parsePGArray(const char *atext, char ***itemarray, int *nitems)