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 (parsePGArray(acls, &aclitems, &naclitems))

102 {

103 free(aclitems);

104 return false;

105 }

106

107

108 if (parsePGArray(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)