OpenDNSSEC-enforcer 2.1.13
key_dependency.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014 Jerry Lundström <lundstrom.jerry@gmail.com>
3 * Copyright (c) 2014 .SE (The Internet Infrastructure Foundation).
4 * Copyright (c) 2014 OpenDNSSEC AB (svb)
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
24 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#include "key_dependency.h"
31#include "db_error.h"
32
33
34#include <string.h>
35
43
49static db_object_t* __key_dependency_new_object(const db_connection_t* connection) {
50 db_object_field_list_t* object_field_list;
51 db_object_field_t* object_field;
52 db_object_t* object;
53
54 if (!(object = db_object_new())
55 || db_object_set_connection(object, connection)
56 || db_object_set_table(object, "keyDependency")
57 || db_object_set_primary_key_name(object, "id")
58 || !(object_field_list = db_object_field_list_new()))
59 {
60 db_object_free(object);
61 return NULL;
62 }
63
64 if (!(object_field = db_object_field_new())
65 || db_object_field_set_name(object_field, "id")
67 || db_object_field_list_add(object_field_list, object_field))
68 {
69 db_object_field_free(object_field);
70 db_object_field_list_free(object_field_list);
71 db_object_free(object);
72 return NULL;
73 }
74
75 if (!(object_field = db_object_field_new())
76 || db_object_field_set_name(object_field, "rev")
78 || db_object_field_list_add(object_field_list, object_field))
79 {
80 db_object_field_free(object_field);
81 db_object_field_list_free(object_field_list);
82 db_object_free(object);
83 return NULL;
84 }
85
86 if (!(object_field = db_object_field_new())
87 || db_object_field_set_name(object_field, "zoneId")
89 || db_object_field_list_add(object_field_list, object_field))
90 {
91 db_object_field_free(object_field);
92 db_object_field_list_free(object_field_list);
93 db_object_free(object);
94 return NULL;
95 }
96
97 if (!(object_field = db_object_field_new())
98 || db_object_field_set_name(object_field, "fromKeyDataId")
100 || db_object_field_list_add(object_field_list, object_field))
101 {
102 db_object_field_free(object_field);
103 db_object_field_list_free(object_field_list);
104 db_object_free(object);
105 return NULL;
106 }
107
108 if (!(object_field = db_object_field_new())
109 || db_object_field_set_name(object_field, "toKeyDataId")
110 || db_object_field_set_type(object_field, DB_TYPE_ANY)
111 || db_object_field_list_add(object_field_list, object_field))
112 {
113 db_object_field_free(object_field);
114 db_object_field_list_free(object_field_list);
115 db_object_free(object);
116 return NULL;
117 }
118
119 if (!(object_field = db_object_field_new())
120 || db_object_field_set_name(object_field, "type")
121 || db_object_field_set_type(object_field, DB_TYPE_ENUM)
123 || db_object_field_list_add(object_field_list, object_field))
124 {
125 db_object_field_free(object_field);
126 db_object_field_list_free(object_field_list);
127 db_object_free(object);
128 return NULL;
129 }
130
131 if (db_object_set_object_field_list(object, object_field_list)) {
132 db_object_field_list_free(object_field_list);
133 db_object_free(object);
134 return NULL;
135 }
136
137 return object;
138}
139
140/* KEY DEPENDENCY */
141
142
143
146 (key_dependency_t*)calloc(1, sizeof(key_dependency_t));
147
148 if (key_dependency) {
149 if (!(key_dependency->dbo = __key_dependency_new_object(connection))) {
150 free(key_dependency);
151 return NULL;
152 }
159 }
160
161 return key_dependency;
162}
163
165 key_dependency_t* new_key_dependency;
166
167 if (!key_dependency) {
168 return NULL;
169 }
170 if (!key_dependency->dbo) {
171 return NULL;
172 }
173
174 if (!(new_key_dependency = key_dependency_new(db_object_connection(key_dependency->dbo)))
175 || key_dependency_copy(new_key_dependency, key_dependency))
176 {
177 key_dependency_free(new_key_dependency);
178 return NULL;
179 }
180 return new_key_dependency;
181}
182
205
207 if (!key_dependency) {
208 return DB_ERROR_UNKNOWN;
209 }
210 if (!key_dependency_copy) {
211 return DB_ERROR_UNKNOWN;
212 }
213
215 return DB_ERROR_UNKNOWN;
216 }
218 return DB_ERROR_UNKNOWN;
219 }
221 return DB_ERROR_UNKNOWN;
222 }
226 }
227 if (key_dependency_copy->private_zone_id
229 {
230 return DB_ERROR_UNKNOWN;
231 }
233 if (!key_dependency_copy->private_zone_id
234 && key_dependency_copy->associated_zone_id
236 {
237 return DB_ERROR_UNKNOWN;
238 }
239 if (db_value_copy(&(key_dependency->from_key_data_id), &(key_dependency_copy->from_key_data_id))) {
240 return DB_ERROR_UNKNOWN;
241 }
245 }
246 if (key_dependency_copy->private_from_key_data_id
248 {
249 return DB_ERROR_UNKNOWN;
250 }
252 if (!key_dependency_copy->private_from_key_data_id
253 && key_dependency_copy->associated_from_key_data_id
255 {
256 return DB_ERROR_UNKNOWN;
257 }
258 if (db_value_copy(&(key_dependency->to_key_data_id), &(key_dependency_copy->to_key_data_id))) {
259 return DB_ERROR_UNKNOWN;
260 }
264 }
265 if (key_dependency_copy->private_to_key_data_id
267 {
268 return DB_ERROR_UNKNOWN;
269 }
271 if (!key_dependency_copy->private_to_key_data_id
272 && key_dependency_copy->associated_to_key_data_id
274 {
275 return DB_ERROR_UNKNOWN;
276 }
278 return DB_OK;
279}
280
282 const db_value_set_t* value_set;
283 int type;
284
285 if (!key_dependency) {
286 return DB_ERROR_UNKNOWN;
287 }
288 if (!result) {
289 return DB_ERROR_UNKNOWN;
290 }
291
297 if (!(value_set = db_result_value_set(result))
298 || db_value_set_size(value_set) != 6
299 || db_value_copy(&(key_dependency->id), db_value_set_at(value_set, 0))
300 || db_value_copy(&(key_dependency->rev), db_value_set_at(value_set, 1))
305 {
306 return DB_ERROR_UNKNOWN;
307 }
308
311 }
314 }
317 }
320 }
321 else {
322 return DB_ERROR_UNKNOWN;
323 }
324
325 return DB_OK;
326}
327
329 if (!key_dependency) {
330 return NULL;
331 }
332
333 return &(key_dependency->zone_id);
334}
335
337 if (!key_dependency) {
338 return NULL;
339 }
340
342}
343
345 key_data_t* from_key_data_id = NULL;
346
347 if (!key_dependency) {
348 return NULL;
349 }
350 if (!key_dependency->dbo) {
351 return NULL;
352 }
354 return NULL;
355 }
356
357 if (!(from_key_data_id = key_data_new(db_object_connection(key_dependency->dbo)))) {
358 return NULL;
359 }
361 if (key_data_copy(from_key_data_id, key_dependency->private_from_key_data_id)) {
362 key_data_free(from_key_data_id);
363 return NULL;
364 }
365 }
368 key_data_free(from_key_data_id);
369 return NULL;
370 }
371 }
372 else {
373 if (key_data_get_by_id(from_key_data_id, &(key_dependency->from_key_data_id))) {
374 key_data_free(from_key_data_id);
375 return NULL;
376 }
377 }
378
379 return from_key_data_id;
380}
381
383 if (!key_dependency) {
384 return NULL;
385 }
386
388}
389
397
399 if (!key_dependency) {
400 return DB_ERROR_UNKNOWN;
401 }
402 if (!zone_id) {
403 return DB_ERROR_UNKNOWN;
404 }
405 if (db_value_not_empty(zone_id)) {
406 return DB_ERROR_UNKNOWN;
407 }
408
410 if (db_value_copy(&(key_dependency->zone_id), zone_id)) {
411 return DB_ERROR_UNKNOWN;
412 }
413
414 return DB_OK;
415}
416
418 if (!key_dependency) {
419 return DB_ERROR_UNKNOWN;
420 }
421 if (!from_key_data_id) {
422 return DB_ERROR_UNKNOWN;
423 }
424 if (db_value_not_empty(from_key_data_id)) {
425 return DB_ERROR_UNKNOWN;
426 }
427
429 if (db_value_copy(&(key_dependency->from_key_data_id), from_key_data_id)) {
430 return DB_ERROR_UNKNOWN;
431 }
432
433 return DB_OK;
434}
435
437 if (!key_dependency) {
438 return DB_ERROR_UNKNOWN;
439 }
440 if (!to_key_data_id) {
441 return DB_ERROR_UNKNOWN;
442 }
443 if (db_value_not_empty(to_key_data_id)) {
444 return DB_ERROR_UNKNOWN;
445 }
446
448 if (db_value_copy(&(key_dependency->to_key_data_id), to_key_data_id)) {
449 return DB_ERROR_UNKNOWN;
450 }
451
452 return DB_OK;
453}
454
456 if (!key_dependency) {
457 return DB_ERROR_UNKNOWN;
458 }
459 if (type == KEY_DEPENDENCY_TYPE_INVALID) {
460 return DB_ERROR_UNKNOWN;
461 }
462
463 key_dependency->type = type;
464
465 return DB_OK;
466}
467
469 db_object_field_list_t* object_field_list;
470 db_object_field_t* object_field;
471 db_value_set_t* value_set;
472 int ret;
473
474 if (!key_dependency) {
475 return DB_ERROR_UNKNOWN;
476 }
477 if (!key_dependency->dbo) {
478 return DB_ERROR_UNKNOWN;
479 }
481 return DB_ERROR_UNKNOWN;
482 }
484 return DB_ERROR_UNKNOWN;
485 }
487 return DB_ERROR_UNKNOWN;
488 }
490 return DB_ERROR_UNKNOWN;
491 }
493 return DB_ERROR_UNKNOWN;
494 }
495 /* TODO: validate content more */
496
497 if (!(object_field_list = db_object_field_list_new())) {
498 return DB_ERROR_UNKNOWN;
499 }
500
501 if (!(object_field = db_object_field_new())
502 || db_object_field_set_name(object_field, "zoneId")
503 || db_object_field_set_type(object_field, DB_TYPE_ANY)
504 || db_object_field_list_add(object_field_list, object_field))
505 {
506 db_object_field_free(object_field);
507 db_object_field_list_free(object_field_list);
508 return DB_ERROR_UNKNOWN;
509 }
510
511 if (!(object_field = db_object_field_new())
512 || db_object_field_set_name(object_field, "fromKeyDataId")
513 || db_object_field_set_type(object_field, DB_TYPE_ANY)
514 || db_object_field_list_add(object_field_list, object_field))
515 {
516 db_object_field_free(object_field);
517 db_object_field_list_free(object_field_list);
518 return DB_ERROR_UNKNOWN;
519 }
520
521 if (!(object_field = db_object_field_new())
522 || db_object_field_set_name(object_field, "toKeyDataId")
523 || db_object_field_set_type(object_field, DB_TYPE_ANY)
524 || db_object_field_list_add(object_field_list, object_field))
525 {
526 db_object_field_free(object_field);
527 db_object_field_list_free(object_field_list);
528 return DB_ERROR_UNKNOWN;
529 }
530
531 if (!(object_field = db_object_field_new())
532 || db_object_field_set_name(object_field, "type")
533 || db_object_field_set_type(object_field, DB_TYPE_ENUM)
535 || db_object_field_list_add(object_field_list, object_field))
536 {
537 db_object_field_free(object_field);
538 db_object_field_list_free(object_field_list);
539 return DB_ERROR_UNKNOWN;
540 }
541
542 if (!(value_set = db_value_set_new(4))) {
543 db_object_field_list_free(object_field_list);
544 return DB_ERROR_UNKNOWN;
545 }
546
551 {
552 db_value_set_free(value_set);
553 db_object_field_list_free(object_field_list);
554 return DB_ERROR_UNKNOWN;
555 }
556
557 ret = db_object_create(key_dependency->dbo, object_field_list, value_set);
558 db_value_set_free(value_set);
559 db_object_field_list_free(object_field_list);
560 return ret;
561}
562
564 db_clause_list_t* clause_list;
565 db_clause_t* clause;
566 db_result_list_t* result_list;
567 const db_result_t* result;
568
569 if (!key_dependency) {
570 return DB_ERROR_UNKNOWN;
571 }
572 if (!key_dependency->dbo) {
573 return DB_ERROR_UNKNOWN;
574 }
575 if (!id) {
576 return DB_ERROR_UNKNOWN;
577 }
578 if (db_value_not_empty(id)) {
579 return DB_ERROR_UNKNOWN;
580 }
581
582 if (!(clause_list = db_clause_list_new())) {
583 return DB_ERROR_UNKNOWN;
584 }
585 if (!(clause = db_clause_new())
586 || db_clause_set_field(clause, "id")
588 || db_value_copy(db_clause_get_value(clause), id)
589 || db_clause_list_add(clause_list, clause))
590 {
591 db_clause_free(clause);
592 db_clause_list_free(clause_list);
593 return DB_ERROR_UNKNOWN;
594 }
595
596 result_list = db_object_read(key_dependency->dbo, NULL, clause_list);
597 db_clause_list_free(clause_list);
598
599 if (result_list) {
600 result = db_result_list_next(result_list);
601 if (result) {
603 db_result_list_free(result_list);
604 return DB_ERROR_UNKNOWN;
605 }
606
607 db_result_list_free(result_list);
608 return DB_OK;
609 }
610 }
611
612 db_result_list_free(result_list);
613 return DB_ERROR_UNKNOWN;
614}
615
617 db_clause_list_t* clause_list;
618 db_clause_t* clause;
619 int ret;
620
621 if (!key_dependency) {
622 return DB_ERROR_UNKNOWN;
623 }
624 if (!key_dependency->dbo) {
625 return DB_ERROR_UNKNOWN;
626 }
628 return DB_ERROR_UNKNOWN;
629 }
630
631 if (!(clause_list = db_clause_list_new())) {
632 return DB_ERROR_UNKNOWN;
633 }
634
635 if (!(clause = db_clause_new())
636 || db_clause_set_field(clause, "id")
639 || db_clause_list_add(clause_list, clause))
640 {
641 db_clause_free(clause);
642 db_clause_list_free(clause_list);
643 return DB_ERROR_UNKNOWN;
644 }
645
646 if (!(clause = db_clause_new())
647 || db_clause_set_field(clause, "rev")
650 || db_clause_list_add(clause_list, clause))
651 {
652 db_clause_free(clause);
653 db_clause_list_free(clause_list);
654 return DB_ERROR_UNKNOWN;
655 }
656
657 ret = db_object_delete(key_dependency->dbo, clause_list);
658 db_clause_list_free(clause_list);
659 return ret;
660}
661
662/* KEY DEPENDENCY LIST */
663
664
665
668 (key_dependency_list_t*)calloc(1, sizeof(key_dependency_list_t));
669
671 if (!(key_dependency_list->dbo = __key_dependency_new_object(connection))) {
673 return NULL;
674 }
675 }
676
677 return key_dependency_list;
678}
679
682
683 if (!from_key_dependency_list) {
684 return NULL;
685 }
686 if (!from_key_dependency_list->dbo) {
687 return NULL;
688 }
689
690 if (!(key_dependency_list = key_dependency_list_new(db_object_connection(from_key_dependency_list->dbo)))
691 || key_dependency_list_copy(key_dependency_list, from_key_dependency_list))
692 {
694 return NULL;
695 }
696 return key_dependency_list;
697}
698
708
742
744 size_t i;
745
746 if (!key_dependency_list) {
747 return DB_ERROR_UNKNOWN;
748 }
749 if (!from_key_dependency_list) {
750 return DB_ERROR_UNKNOWN;
751 }
752 if (from_key_dependency_list->object_list && !from_key_dependency_list->object_list_size) {
753 return DB_ERROR_UNKNOWN;
754 }
755
759 }
760 if (from_key_dependency_list->result_list
761 && !(key_dependency_list->result_list = db_result_list_new_copy(from_key_dependency_list->result_list)))
762 {
763 return DB_ERROR_UNKNOWN;
764 }
765
766 key_dependency_list->object_store = from_key_dependency_list->object_store;
767 for (i = 0; i < key_dependency_list->object_list_size; i++) {
770 }
771 }
776 }
777 if (from_key_dependency_list->object_list) {
778 if (!(key_dependency_list->object_list = (key_dependency_t**)calloc(from_key_dependency_list->object_list_size, sizeof(key_dependency_t*)))) {
779 return DB_ERROR_UNKNOWN;
780 }
781 key_dependency_list->object_list_size = from_key_dependency_list->object_list_size;
782 for (i = 0; i < from_key_dependency_list->object_list_size; i++) {
783 if (!from_key_dependency_list->object_list[i]) {
784 continue;
785 }
786 if (!(key_dependency_list->object_list[i] = key_dependency_new_copy(from_key_dependency_list->object_list[i]))) {
787 return DB_ERROR_UNKNOWN;
788 }
789 }
790 }
793 key_dependency_list->associated_fetch = from_key_dependency_list->associated_fetch;
794
795 if (from_key_dependency_list->zone_id_list
796 && !(key_dependency_list->zone_id_list = zone_list_db_new_copy(from_key_dependency_list->zone_id_list)))
797 {
798 return DB_ERROR_UNKNOWN;
799 }
800
801 if (from_key_dependency_list->from_key_data_id_list
803 {
804 return DB_ERROR_UNKNOWN;
805 }
806
807 if (from_key_dependency_list->to_key_data_id_list
809 {
810 return DB_ERROR_UNKNOWN;
811 }
812
813 return DB_OK;
814}
815
816static int key_dependency_list_get_associated(key_dependency_list_t* key_dependency_list) {
817 const db_clause_t* clause_walk;
818 const zone_db_t* zone_zone_id;
819 const key_data_t* key_data_from_key_data_id;
820 const key_data_t* key_data_to_key_data_id;
821 int cmp;
822 size_t i;
823 db_clause_list_t* clause_list;
824 db_clause_t* clause;
826
827 if (!key_dependency_list) {
828 return DB_ERROR_UNKNOWN;
829 }
830 if (!key_dependency_list->dbo) {
831 return DB_ERROR_UNKNOWN;
832 }
834 return DB_ERROR_UNKNOWN;
835 }
837 return DB_ERROR_UNKNOWN;
838 }
840 return DB_ERROR_UNKNOWN;
841 }
842
846 }
850 }
854 }
855
856 if (!(clause_list = db_clause_list_new())) {
857 return DB_ERROR_UNKNOWN;
858 }
860 while (key_dependency) {
861 cmp = 1;
862 clause_walk = db_clause_list_begin(clause_list);
863 while (clause_walk) {
865 db_clause_list_free(clause_list);
866 return DB_ERROR_UNKNOWN;
867 }
868 if (!cmp) {
869 break;
870 }
871 clause_walk = db_clause_next(clause_walk);
872 }
873 if (cmp) {
874 if (!(clause = db_clause_new())
875 || db_clause_set_field(clause, "id")
879 || db_clause_list_add(clause_list, clause))
880 {
881 db_clause_free(clause);
882 db_clause_list_free(clause_list);
883 return DB_ERROR_UNKNOWN;
884 }
885 }
886
888 }
889
893 {
897 }
898 db_clause_list_free(clause_list);
899 return DB_ERROR_UNKNOWN;
900 }
901 db_clause_list_free(clause_list);
902
903 for (i = 0; i < key_dependency_list->object_list_size; i++) {
904 if (!(key_dependency_list->object_list[i])) {
905 return DB_ERROR_UNKNOWN;
906 }
907
909 while (zone_zone_id) {
911 return DB_ERROR_UNKNOWN;
912 }
913 if (!cmp) {
915 }
916
918 }
919 }
920
921 if (!(clause_list = db_clause_list_new())) {
922 return DB_ERROR_UNKNOWN;
923 }
925 while (key_dependency) {
926 cmp = 1;
927 clause_walk = db_clause_list_begin(clause_list);
928 while (clause_walk) {
930 db_clause_list_free(clause_list);
931 return DB_ERROR_UNKNOWN;
932 }
933 if (!cmp) {
934 break;
935 }
936 clause_walk = db_clause_next(clause_walk);
937 }
938 if (cmp) {
939 if (!(clause = db_clause_new())
940 || db_clause_set_field(clause, "id")
944 || db_clause_list_add(clause_list, clause))
945 {
946 db_clause_free(clause);
947 db_clause_list_free(clause_list);
948 return DB_ERROR_UNKNOWN;
949 }
950 }
951
953 }
954
958 {
962 }
963 db_clause_list_free(clause_list);
964 return DB_ERROR_UNKNOWN;
965 }
966 db_clause_list_free(clause_list);
967
968 for (i = 0; i < key_dependency_list->object_list_size; i++) {
969 if (!(key_dependency_list->object_list[i])) {
970 return DB_ERROR_UNKNOWN;
971 }
972
974 while (key_data_from_key_data_id) {
975 if (db_value_cmp(key_dependency_from_key_data_id(key_dependency_list->object_list[i]), key_data_id(key_data_from_key_data_id), &cmp)) {
976 return DB_ERROR_UNKNOWN;
977 }
978 if (!cmp) {
979 key_dependency_list->object_list[i]->associated_from_key_data_id = key_data_from_key_data_id;
980 }
981
983 }
984 }
985
986 if (!(clause_list = db_clause_list_new())) {
987 return DB_ERROR_UNKNOWN;
988 }
990 while (key_dependency) {
991 cmp = 1;
992 clause_walk = db_clause_list_begin(clause_list);
993 while (clause_walk) {
995 db_clause_list_free(clause_list);
996 return DB_ERROR_UNKNOWN;
997 }
998 if (!cmp) {
999 break;
1000 }
1001 clause_walk = db_clause_next(clause_walk);
1002 }
1003 if (cmp) {
1004 if (!(clause = db_clause_new())
1005 || db_clause_set_field(clause, "id")
1009 || db_clause_list_add(clause_list, clause))
1010 {
1011 db_clause_free(clause);
1012 db_clause_list_free(clause_list);
1013 return DB_ERROR_UNKNOWN;
1014 }
1015 }
1016
1018 }
1019
1023 {
1027 }
1028 db_clause_list_free(clause_list);
1029 return DB_ERROR_UNKNOWN;
1030 }
1031 db_clause_list_free(clause_list);
1032
1033 for (i = 0; i < key_dependency_list->object_list_size; i++) {
1034 if (!(key_dependency_list->object_list[i])) {
1035 return DB_ERROR_UNKNOWN;
1036 }
1037
1039 while (key_data_to_key_data_id) {
1040 if (db_value_cmp(key_dependency_to_key_data_id(key_dependency_list->object_list[i]), key_data_id(key_data_to_key_data_id), &cmp)) {
1041 return DB_ERROR_UNKNOWN;
1042 }
1043 if (!cmp) {
1044 key_dependency_list->object_list[i]->associated_to_key_data_id = key_data_to_key_data_id;
1045 }
1046
1048 }
1049 }
1050
1052 return DB_OK;
1053}
1054
1056 size_t i;
1057
1058 if (!key_dependency_list) {
1059 return DB_ERROR_UNKNOWN;
1060 }
1061 if (!clause_list) {
1062 return DB_ERROR_UNKNOWN;
1063 }
1064 if (!key_dependency_list->dbo) {
1065 return DB_ERROR_UNKNOWN;
1066 }
1067
1070 }
1072 for (i = 0; i < key_dependency_list->object_list_size; i++) {
1075 }
1076 }
1079 }
1083 }
1086 {
1087 return DB_ERROR_UNKNOWN;
1088 }
1090 && key_dependency_list_get_associated(key_dependency_list))
1091 {
1092 return DB_ERROR_UNKNOWN;
1093 }
1094 return DB_OK;
1095}
1096
1098 db_clause_list_t* clause_list;
1099 db_clause_t* clause;
1100 size_t i;
1101
1102 if (!key_dependency_list) {
1103 return DB_ERROR_UNKNOWN;
1104 }
1105 if (!key_dependency_list->dbo) {
1106 return DB_ERROR_UNKNOWN;
1107 }
1108 if (!zone_id) {
1109 return DB_ERROR_UNKNOWN;
1110 }
1111 if (db_value_not_empty(zone_id)) {
1112 return DB_ERROR_UNKNOWN;
1113 }
1114
1115 if (!(clause_list = db_clause_list_new())) {
1116 return DB_ERROR_UNKNOWN;
1117 }
1118 if (!(clause = db_clause_new())
1119 || db_clause_set_field(clause, "zoneId")
1121 || db_value_copy(db_clause_get_value(clause), zone_id)
1122 || db_clause_list_add(clause_list, clause))
1123 {
1124 db_clause_free(clause);
1125 db_clause_list_free(clause_list);
1126 return DB_ERROR_UNKNOWN;
1127 }
1128
1131 }
1133 for (i = 0; i < key_dependency_list->object_list_size; i++) {
1136 }
1137 }
1140 }
1144 }
1147 {
1148 db_clause_list_free(clause_list);
1149 return DB_ERROR_UNKNOWN;
1150 }
1151 db_clause_list_free(clause_list);
1153 && key_dependency_list_get_associated(key_dependency_list))
1154 {
1155 return DB_ERROR_UNKNOWN;
1156 }
1157 return DB_OK;
1158}
1159
1162
1163 if (!connection) {
1164 return NULL;
1165 }
1166 if (!zone_id) {
1167 return NULL;
1168 }
1169 if (db_value_not_empty(zone_id)) {
1170 return NULL;
1171 }
1172
1173 if (!(key_dependency_list = key_dependency_list_new(connection))
1175 {
1177 return NULL;
1178 }
1179
1180 return key_dependency_list;
1181}
1182
1184 const db_result_t* result;
1185
1186 if (!key_dependency_list) {
1187 return NULL;
1188 }
1189
1193 return NULL;
1194 }
1196 return NULL;
1197 }
1199 return NULL;
1200 }
1202 }
1203 if (!(key_dependency_list->object_list[0])) {
1205 return NULL;
1206 }
1208 return NULL;
1209 }
1211 return NULL;
1212 }
1214 return NULL;
1215 }
1216 }
1219 }
1220
1222 return NULL;
1223 }
1224
1226 return NULL;
1227 }
1230 return NULL;
1231 }
1232 }
1234 return NULL;
1235 }
1237}
1238
1240 const db_result_t* result;
1242
1243 if (!key_dependency_list) {
1244 return NULL;
1245 }
1246
1249 return NULL;
1250 }
1253 return NULL;
1254 }
1255 return key_dependency;
1256 }
1257
1259 return NULL;
1260 }
1261
1263 return NULL;
1264 }
1266 return NULL;
1267 }
1270 return NULL;
1271 }
1272 return key_dependency;
1273}
1274
1276 const db_result_t* result;
1277
1278 if (!key_dependency_list) {
1279 return NULL;
1280 }
1281
1285 return NULL;
1286 }
1288 return NULL;
1289 }
1291 return NULL;
1292 }
1295 }
1299 }
1300 else {
1302 }
1304 return NULL;
1305 }
1308 return NULL;
1309 }
1311 return NULL;
1312 }
1314 return NULL;
1315 }
1317 return NULL;
1318 }
1319 }
1321 }
1322
1324 return NULL;
1325 }
1326
1328 return NULL;
1329 }
1332 return NULL;
1333 }
1334 }
1336 return NULL;
1337 }
1339}
1340
1342 const db_result_t* result;
1344
1345 if (!key_dependency_list) {
1346 return NULL;
1347 }
1348
1351 return NULL;
1352 }
1355 return NULL;
1356 }
1357 return key_dependency;
1358 }
1359
1361 return NULL;
1362 }
1363
1365 return NULL;
1366 }
1368 return NULL;
1369 }
1372 return NULL;
1373 }
1374 return key_dependency;
1375}
1376
1378 if (!key_dependency_list) {
1379 return 0;
1380 }
1381
1384 {
1386 }
1387
1389 return 0;
1390 }
1391
1393}
const db_value_t * db_clause_value(const db_clause_t *clause)
Definition db_clause.c:85
void db_clause_free(db_clause_t *clause)
Definition db_clause.c:56
db_clause_list_t * db_clause_list_new(void)
Definition db_clause.c:202
db_clause_t * db_clause_new(void)
Definition db_clause.c:43
const db_clause_t * db_clause_next(const db_clause_t *clause)
Definition db_clause.c:179
db_value_t * db_clause_get_value(db_clause_t *clause)
Definition db_clause.c:187
int db_clause_list_add(db_clause_list_t *clause_list, db_clause_t *clause)
Definition db_clause.c:226
void db_clause_list_free(db_clause_list_t *clause_list)
Definition db_clause.c:209
int db_clause_set_operator(db_clause_t *clause, db_clause_operator_t clause_operator)
Definition db_clause.c:142
int db_clause_set_field(db_clause_t *clause, const char *field)
Definition db_clause.c:109
const db_clause_t * db_clause_list_begin(const db_clause_list_t *clause_list)
Definition db_clause.c:255
int db_clause_set_type(db_clause_t *clause, db_clause_type_t type)
Definition db_clause.c:130
@ DB_CLAUSE_OPERATOR_OR
Definition db_clause.h:101
@ DB_CLAUSE_EQUAL
Definition db_clause.h:44
#define DB_ERROR_UNKNOWN
Definition db_error.h:40
#define DB_OK
Definition db_error.h:36
const db_connection_t * db_object_connection(const db_object_t *object)
Definition db_object.c:320
db_object_field_t * db_object_field_new(void)
Definition db_object.c:40
int db_object_field_list_add(db_object_field_list_t *object_field_list, db_object_field_t *object_field)
Definition db_object.c:254
db_object_t * db_object_new(void)
Definition db_object.c:304
int db_object_set_table(db_object_t *object, const char *table)
Definition db_object.c:356
int db_object_field_set_name(db_object_field_t *object_field, const char *name)
Definition db_object.c:110
int db_object_set_connection(db_object_t *object, const db_connection_t *connection)
Definition db_object.c:341
db_result_list_t * db_object_read(const db_object_t *object, const db_join_list_t *join_list, const db_clause_list_t *clause_list)
Definition db_object.c:424
int db_object_field_set_type(db_object_field_t *object_field, db_type_t type)
Definition db_object.c:122
int db_object_field_set_enum_set(db_object_field_t *object_field, const db_enum_t *enum_set)
Definition db_object.c:134
void db_object_free(db_object_t *object)
Definition db_object.c:311
db_object_field_list_t * db_object_field_list_new(void)
Definition db_object.c:174
int db_object_set_object_field_list(db_object_t *object, db_object_field_list_t *object_field_list)
Definition db_object.c:386
void db_object_field_free(db_object_field_t *object_field)
Definition db_object.c:69
int db_object_create(const db_object_t *object, const db_object_field_list_t *object_field_list, const db_value_set_t *value_set)
Definition db_object.c:401
int db_object_delete(const db_object_t *object, const db_clause_list_t *clause_list)
Definition db_object.c:464
void db_object_field_list_free(db_object_field_list_t *object_field_list)
Definition db_object.c:199
int db_object_set_primary_key_name(db_object_t *object, const char *primary_key_name)
Definition db_object.c:371
int db_result_list_fetch_all(db_result_list_t *result_list)
Definition db_result.c:341
size_t db_result_list_size(const db_result_list_t *result_list)
Definition db_result.c:333
const db_result_t * db_result_list_next(db_result_list_t *result_list)
Definition db_result.c:310
const db_result_t * db_result_list_begin(db_result_list_t *result_list)
Definition db_result.c:290
void db_result_list_free(db_result_list_t *result_list)
Definition db_result.c:160
db_result_list_t * db_result_list_new_copy(const db_result_list_t *from_result_list)
Definition db_result.c:142
const db_value_set_t * db_result_value_set(const db_result_t *result)
Definition db_result.c:97
@ DB_TYPE_PRIMARY_KEY
Definition db_type.h:62
@ DB_TYPE_REVISION
Definition db_type.h:97
@ DB_TYPE_ENUM
Definition db_type.h:86
@ DB_TYPE_ANY
Definition db_type.h:90
const db_value_t * db_value_set_at(const db_value_set_t *value_set, size_t at)
Definition db_value.c:742
int db_value_from_enum_value(db_value_t *value, int enum_value, const db_enum_t *enum_set)
Definition db_value.c:572
db_value_t * db_value_set_get(db_value_set_t *value_set, size_t at)
Definition db_value.c:756
void db_value_set_free(db_value_set_t *value_set)
Definition db_value.c:697
db_value_set_t * db_value_set_new(size_t size)
Definition db_value.c:622
int db_value_copy(db_value_t *value, const db_value_t *from_value)
Definition db_value.c:77
int db_value_cmp(const db_value_t *value_a, const db_value_t *value_b, int *result)
Definition db_value.c:102
size_t db_value_set_size(const db_value_set_t *value_set)
Definition db_value.c:734
int db_value_not_empty(const db_value_t *value)
Definition db_value.c:347
int db_value_to_enum_value(const db_value_t *value, int *to_int, const db_enum_t *enum_set)
Definition db_value.c:438
void db_value_reset(db_value_t *value)
Definition db_value.c:60
key_data_list_t * key_data_list_new_copy(const key_data_list_t *from_key_data_list)
Definition key_data.c:1665
const db_value_t * key_data_id(const key_data_t *key_data)
Definition key_data.c:553
int key_data_get_by_id(key_data_t *key_data, const db_value_t *id)
Definition key_data.c:1296
void key_data_free(key_data_t *key_data)
Definition key_data.c:304
int key_data_list_get_by_clauses(key_data_list_t *key_data_list, const db_clause_list_t *clause_list)
Definition key_data.c:2119
int key_data_copy(key_data_t *key_data, const key_data_t *key_data_copy)
Definition key_data.c:326
void key_data_list_free(key_data_list_t *key_data_list)
Definition key_data.c:1694
const key_data_t * key_data_list_begin(key_data_list_t *key_data_list)
Definition key_data.c:2267
int key_data_list_object_store(key_data_list_t *key_data_list)
Definition key_data.c:1684
key_data_list_t * key_data_list_new(const db_connection_t *connection)
Definition key_data.c:1651
key_data_t * key_data_new(const db_connection_t *connection)
Definition key_data.c:264
const key_data_t * key_data_list_next(key_data_list_t *key_data_list)
Definition key_data.c:2359
key_data_t * key_data_new_copy(const key_data_t *key_data)
Definition key_data.c:285
int key_dependency_list_object_store(key_dependency_list_t *key_dependency_list)
int key_dependency_get_by_id(key_dependency_t *key_dependency, const db_value_t *id)
void key_dependency_free(key_dependency_t *key_dependency)
const db_enum_t key_dependency_enum_set_type[]
int key_dependency_set_zone_id(key_dependency_t *key_dependency, const db_value_t *zone_id)
key_dependency_list_t * key_dependency_list_new_get_by_zone_id(const db_connection_t *connection, const db_value_t *zone_id)
key_dependency_t * key_dependency_new(const db_connection_t *connection)
key_data_t * key_dependency_get_from_key_data(const key_dependency_t *key_dependency)
const db_value_t * key_dependency_zone_id(const key_dependency_t *key_dependency)
const key_dependency_t * key_dependency_list_next(key_dependency_list_t *key_dependency_list)
int key_dependency_set_type(key_dependency_t *key_dependency, key_dependency_type_t type)
int key_dependency_list_get_by_zone_id(key_dependency_list_t *key_dependency_list, const db_value_t *zone_id)
int key_dependency_copy(key_dependency_t *key_dependency, const key_dependency_t *key_dependency_copy)
const key_dependency_t * key_dependency_list_begin(key_dependency_list_t *key_dependency_list)
key_dependency_t * key_dependency_list_get_next(key_dependency_list_t *key_dependency_list)
const db_value_t * key_dependency_to_key_data_id(const key_dependency_t *key_dependency)
int key_dependency_list_get_by_clauses(key_dependency_list_t *key_dependency_list, const db_clause_list_t *clause_list)
key_dependency_t * key_dependency_new_copy(const key_dependency_t *key_dependency)
void key_dependency_list_free(key_dependency_list_t *key_dependency_list)
const db_value_t * key_dependency_from_key_data_id(const key_dependency_t *key_dependency)
size_t key_dependency_list_size(key_dependency_list_t *key_dependency_list)
int key_dependency_set_from_key_data_id(key_dependency_t *key_dependency, const db_value_t *from_key_data_id)
int key_dependency_delete(key_dependency_t *key_dependency)
int key_dependency_create(key_dependency_t *key_dependency)
key_dependency_list_t * key_dependency_list_new_copy(const key_dependency_list_t *from_key_dependency_list)
int key_dependency_list_copy(key_dependency_list_t *key_dependency_list, const key_dependency_list_t *from_key_dependency_list)
key_dependency_list_t * key_dependency_list_new(const db_connection_t *connection)
int key_dependency_set_to_key_data_id(key_dependency_t *key_dependency, const db_value_t *to_key_data_id)
int key_dependency_from_result(key_dependency_t *key_dependency, const db_result_t *result)
key_dependency_t * key_dependency_list_get_begin(key_dependency_list_t *key_dependency_list)
enum key_dependency_type key_dependency_type_t
key_dependency_type
@ KEY_DEPENDENCY_TYPE_INVALID
@ KEY_DEPENDENCY_TYPE_DNSKEY
@ KEY_DEPENDENCY_TYPE_RRSIGDNSKEY
@ KEY_DEPENDENCY_TYPE_DS
@ KEY_DEPENDENCY_TYPE_RRSIG
key_data_list_t * from_key_data_id_list
key_dependency_t * key_dependency
db_result_list_t * result_list
key_data_list_t * to_key_data_id_list
key_dependency_t ** object_list
zone_list_db_t * zone_id_list
const zone_db_t * associated_zone_id
key_data_t * private_from_key_data_id
db_value_t zone_id
db_object_t * dbo
db_value_t from_key_data_id
key_dependency_type_t type
db_value_t to_key_data_id
const key_data_t * associated_to_key_data_id
zone_db_t * private_zone_id
const key_data_t * associated_from_key_data_id
key_data_t * private_to_key_data_id
int zone_list_db_object_store(zone_list_db_t *zone_list)
Definition zone_db.c:1979
void zone_db_free(zone_db_t *zone)
Definition zone_db.c:325
zone_list_db_t * zone_list_db_new_copy(const zone_list_db_t *from_zone_list)
Definition zone_db.c:1960
const zone_db_t * zone_list_db_begin(zone_list_db_t *zone_list)
Definition zone_db.c:2547
zone_list_db_t * zone_list_db_new(const db_connection_t *connection)
Definition zone_db.c:1946
int zone_list_db_get_by_clauses(zone_list_db_t *zone_list, const db_clause_list_t *clause_list)
Definition zone_db.c:2419
const db_value_t * zone_db_id(const zone_db_t *zone)
Definition zone_db.c:728
const zone_db_t * zone_list_db_next(zone_list_db_t *zone_list)
Definition zone_db.c:2603
void zone_list_db_free(zone_list_db_t *zone_list)
Definition zone_db.c:1989
zone_db_t * zone_db_new_copy(const zone_db_t *zone)
Definition zone_db.c:306