PostgreSQL Source Code: src/bin/pg_verifybackup/astreamer_verify.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
16
20
22{
23
28
29
38
45
49 const char *data, int len);
53 const char *data, int len);
56
61};
62
63
64
65
68 char *archive_name, Oid tblspc_oid)
69{
71
75
77 streamer->context = context;
80
83
84 return &streamer->base;
85}
86
87
88
89
90static void
94{
96
98
99 switch (context)
100 {
102
104 break;
105
107
112 break;
113
115
120
121
123 break;
124
126 break;
127
128 default:
129
130 pg_fatal("unexpected state while parsing tar archive");
131 }
132}
133
134
135
136
137static void
139{
141}
142
143
144
145
146static void
148{
150
153
155}
156
157
158
159
160static void
162{
166
167
169 return;
170
171
172
173
174
175
176
177
178
179
180
181
185 else
188
189
191 return;
192
193
195 if (m == NULL)
196 {
198 "file \"%s\" is present in archive \"%s\" but not in the manifest",
200 return;
201 }
202 mystreamer->mfile = m;
203
204
206
207
209 {
211 "file \"%s\" has size %llu in archive \"%s\" but size %" PRIu64 " in the manifest",
213 (unsigned long long) member->size,
216 m->bad = true;
217 return;
218 }
219
220
221
222
223
224
230
231
234 {
236 "%s: could not initialize checksum of file \"%s\"",
238
239
240
241
242
244 }
245}
246
247
248
249
250
251
252
253static void
255 const char *data, int len)
256{
260
263
264
265
266
267
269
270
272 {
274 "could not update checksum of file \"%s\"",
277 }
278}
279
280
281
282
283
284static void
286{
290 int checksumlen;
291
293
294
295
296
298 {
300 "file \"%s\" in archive \"%s\" should contain %" PRIu64 " bytes, but %" PRIu64 " bytes were read",
304 return;
305 }
306
307
309 if (checksumlen < 0)
310 {
312 "could not finalize checksum of file \"%s\"",
314 return;
315 }
316
317
320 "file \"%s\" in archive \"%s\" has checksum of length %d, but expected %d",
323 else if (memcmp(checksumbuf, m->checksum_payload, checksumlen) != 0)
325 "checksum mismatch for file \"%s\" in archive \"%s\"",
327}
328
329
330
331
332
333static void
335 const char *data, int len)
336{
338
339
341
342
343
344
345
346
347
349 {
351
356 }
357
358
360}
361
362
363
364
365
366static void
368{
372
373
376
377
378
379
380
381
382
383
384
385
390
391
396
397
402
403
408
409
410 if (manifest->system_identifier !=
412 report_fatal_error("%s: %s: manifest system identifier is %" PRIu64 ", but control file has %" PRIu64,
417}
418
419
420
421
422static void
424{
426
427 mystreamer->mfile = NULL;
432}
astreamer_archive_context
@ ASTREAMER_MEMBER_HEADER
@ ASTREAMER_MEMBER_CONTENTS
@ ASTREAMER_MEMBER_TRAILER
@ ASTREAMER_ARCHIVE_TRAILER
static void member_copy_control_data(astreamer *streamer, astreamer_member *member, const char *data, int len)
static void member_verify_header(astreamer *streamer, astreamer_member *member)
static void astreamer_verify_finalize(astreamer *streamer)
static void member_compute_checksum(astreamer *streamer, astreamer_member *member, const char *data, int len)
static void astreamer_verify_content(astreamer *streamer, astreamer_member *member, const char *data, int len, astreamer_archive_context context)
astreamer * astreamer_verify_content_new(astreamer *next, verifier_context *context, char *archive_name, Oid tblspc_oid)
static void member_reset_info(astreamer *streamer)
struct astreamer_verify astreamer_verify
static void member_verify_control_data(astreamer *streamer)
static const astreamer_ops astreamer_verify_ops
static void astreamer_verify_free(astreamer *streamer)
static void member_verify_checksum(astreamer *streamer)
#define OidIsValid(objectId)
int pg_checksum_final(pg_checksum_context *context, uint8 *output)
int pg_checksum_update(pg_checksum_context *context, const uint8 *input, size_t len)
int pg_checksum_init(pg_checksum_context *context, pg_checksum_type type)
#define PG_CHECKSUM_MAX_LENGTH
void * pg_malloc(size_t size)
Assert(PointerIsAligned(start, uint64))
void pfree(void *pointer)
void * palloc0(Size size)
struct ControlFileData ControlFileData
#define PG_CONTROL_VERSION
#define PG_CONTROL_FILE_SIZE
#define COMP_CRC32C(crc, data, len)
#define EQ_CRC32C(c1, c2)
void report_fatal_error(const char *pg_restrict fmt,...)
bool should_ignore_relpath(verifier_context *context, const char *relpath)
void report_backup_error(verifier_context *context, const char *pg_restrict fmt,...)
#define should_verify_checksum(m)
void canonicalize_path(char *path)
uint32 pg_control_version
void(* content)(astreamer *streamer, astreamer_member *member, const char *data, int len, astreamer_archive_context context)
verifier_context * context
ControlFileData control_file
uint64 control_file_bytes
pg_checksum_context * checksum_ctx
const astreamer_ops * bbs_ops
manifest_files_hash * files
pg_checksum_type checksum_type
#define XLOG_CONTROL_FILE