Lines Matching defs:ixfrcr
176 static int create_ixfr_spool_name(struct ixfr_create* ixfrcr,
182 ixfrcr->file_name = strdup(buf);
183 if(!ixfrcr->file_name)
192 struct ixfr_create* ixfrcr = (struct ixfr_create*)calloc(1,
193 sizeof(*ixfrcr));
194 if(!ixfrcr) {
198 ixfrcr->zone_name_len = domain_dname(zone->apex)->name_size;
199 ixfrcr->zone_name = (uint8_t*)malloc(ixfrcr->zone_name_len);
200 if(!ixfrcr->zone_name) {
201 free(ixfrcr);
205 memmove(ixfrcr->zone_name, dname_name(domain_dname(zone->apex)),
206 ixfrcr->zone_name_len);
208 if(!create_ixfr_spool_name(ixfrcr, zfile)) {
209 ixfr_create_free(ixfrcr);
213 ixfrcr->old_serial = zone_get_current_serial(zone);
214 if(!spool_zone_to_file(zone, ixfrcr->file_name, ixfrcr->old_serial)) {
215 ixfr_create_free(ixfrcr);
219 ixfrcr->max_size = (size_t)zone->opts->pattern->ixfr_size;
220 else ixfrcr->max_size = (size_t)ixfr_size;
221 ixfrcr->errorcmdline = errorcmdline;
222 return ixfrcr;
226 void ixfr_create_free(struct ixfr_create* ixfrcr)
228 if(!ixfrcr)
230 free(ixfrcr->file_name);
231 free(ixfrcr->zone_name);
232 free(ixfrcr);
271 static int read_spool_header(FILE* spool, struct ixfr_create* ixfrcr)
279 ixfrcr->file_name, strerror(errno));
285 ixfrcr->file_name, strerror(errno));
290 if(ixfrcr->zone_name_len != dname_len ||
291 memcmp(ixfrcr->zone_name, dname, ixfrcr->zone_name_len) != 0) {
293 ixfrcr->file_name);
296 if(ixfrcr->old_serial != serial) {
298 ixfrcr->file_name);
360 static int process_diff_rrset(FILE* spool, struct ixfr_create* ixfrcr,
375 ixfrcr->file_name, strerror(errno));
385 ixfrcr->file_name, strerror(errno));
431 static int process_spool_delrrset(FILE* spool, struct ixfr_create* ixfrcr,
444 ixfrcr->file_name, strerror(errno));
454 ixfrcr->file_name, strerror(errno));
509 static int process_diff_domain(FILE* spool, struct ixfr_create* ixfrcr,
521 ixfrcr->file_name, strerror(errno));
526 "too large", ixfrcr->file_name);
536 ixfrcr->file_name, strerror(errno));
544 if(!process_spool_delrrset(spool, ixfrcr, store,
554 if(!process_diff_rrset(spool, ixfrcr, store, domain,
581 static int process_domain_del_RRs(struct ixfr_create* ixfrcr,
588 ixfrcr->file_name, strerror(errno));
593 "count too large", ixfrcr->file_name);
602 ixfrcr->file_name, strerror(errno));
607 if(!process_spool_delrrset(spool, ixfrcr, store, dname,
665 static int ixfr_create_too_large(struct ixfr_create* ixfrcr,
670 if(ixfrcr->max_size != 0 &&
671 ixfr_data_size(store->data) > ixfrcr->max_size) {
672 if(ixfrcr->errorcmdline) {
674 wiredname2str(ixfrcr->zone_name),
675 (unsigned)ixfrcr->max_size);
678 wiredname2str(ixfrcr->zone_name),
679 (unsigned)ixfrcr->max_size));
688 static int process_spool_before_domain(FILE* spool, struct ixfr_create* ixfrcr,
693 if(ixfr_create_too_large(ixfrcr, store))
713 if(!process_domain_del_RRs(ixfrcr, store, spool,
722 if(ixfr_create_too_large(ixfrcr, store))
730 static int process_spool_for_domain(FILE* spool, struct ixfr_create* ixfrcr,
736 if(!process_spool_before_domain(spool, ixfrcr, store, domain, iter,
740 if(ixfr_create_too_large(ixfrcr, store))
756 if(!process_diff_domain(spool, ixfrcr, store, zone, domain))
764 static int process_spool_remaining(FILE* spool, struct ixfr_create* ixfrcr,
769 if(ixfr_create_too_large(ixfrcr, store))
780 if(!process_domain_del_RRs(ixfrcr, store, spool, iter->dname,
784 if(ixfr_create_too_large(ixfrcr, store))
791 static int ixfr_create_walk_zone(FILE* spool, struct ixfr_create* ixfrcr,
797 spool_dname_iter_init(&iter, spool, ixfrcr->file_name);
806 if(!process_spool_for_domain(spool, ixfrcr, store, zone,
812 if(ixfr_create_too_large(ixfrcr, store))
815 if(!process_spool_remaining(spool, ixfrcr, store, &iter)) {
860 static int ixfr_create_already_done(struct ixfr_create* ixfrcr,
864 ixfrcr->old_serial, ixfrcr->new_serial);
887 static int ixfr_perform_init(struct ixfr_create* ixfrcr, struct zone* zone,
890 *spool = fopen(ixfrcr->file_name, "r");
893 ixfrcr->file_name, strerror(errno));
896 if(!read_spool_header(*spool, ixfrcr)) {
900 ixfrcr->new_serial = zone_get_current_serial(zone);
946 static void ixfr_create_finishup(struct ixfr_create* ixfrcr,
953 if(store->cancelled || ixfr_create_too_large(ixfrcr, store)) {
964 PACKAGE_VERSION, wiredname2str(ixfrcr->zone_name),
965 (unsigned)ixfrcr->old_serial, (unsigned)ixfrcr->new_serial,
974 wiredname2str(ixfrcr->zone_name), zone->opts->name, zfile,
975 ixfr_number, ixfrcr->max_size, ixfr_data_size(store->data))) {
1008 int ixfr_create_perform(struct ixfr_create* ixfrcr, struct zone* zone,
1014 if(!ixfr_perform_init(ixfrcr, zone, &store_mem, &store, &spool)) {
1015 (void)unlink(ixfrcr->file_name);
1018 if(ixfrcr->new_serial == ixfrcr->old_serial ||
1019 compare_serial(ixfrcr->new_serial, ixfrcr->old_serial)<0) {
1021 wiredname2str(ixfrcr->zone_name),
1022 (unsigned)ixfrcr->old_serial,
1023 (unsigned)ixfrcr->new_serial);
1027 (void)unlink(ixfrcr->file_name);
1033 if(ixfr_create_already_done(ixfrcr, zone, zfile, 1)) {
1037 (void)unlink(ixfrcr->file_name);
1044 if(!ixfr_create_walk_zone(spool, ixfrcr, store, zone)) {
1047 (void)unlink(ixfrcr->file_name);
1055 (void)unlink(ixfrcr->file_name);
1061 (void)unlink(ixfrcr->file_name);
1063 ixfr_create_finishup(ixfrcr, store, zone, append_mem, nsd, zfile,
1068 void ixfr_create_cancel(struct ixfr_create* ixfrcr)
1070 if(!ixfrcr)
1072 (void)unlink(ixfrcr->file_name);
1073 ixfr_create_free(ixfrcr);