OpenDNSSEC-enforcer 2.1.10
policy_purge_cmd.c
Go to the documentation of this file.
1#include "daemon/engine.h"
2#include "cmdhandler.h"
4#include "log.h"
5#include "str.h"
6#include "clientpipe.h"
8#include "db/policy.h"
9
11
12static const char *module_str = "policy_purge_cmd";
13
14static void
15usage(int sockfd)
16{
17 client_printf(sockfd,
18 "policy purge\n"
19 );
20}
21
22static void
23help(int sockfd)
24{
25 client_printf(sockfd,
26 "This command will remove any policies from the database which have no\n"
27 "associated zones. Use with caution.\n\n"
28 );
29}
30
37static int
38purge_policies(int sockfd, db_connection_t *dbconn)
39{
42 zone_list_db_t* zonelist;
43 const char* name;
44 size_t listsize;
45 int result = 0;
46
47 client_printf(sockfd, "Purging policies\n");
48
50 if (!policy_list) return 1;
51
53 name = policy_name(policy);
54 /*fetch zonelist from db, owned by policy*/
56 result = 1;
57 client_printf(sockfd, "Error fetching zones\n");
58 break;
59 }
60 zonelist = policy_zone_list(policy);
61 listsize = zone_list_db_size(zonelist);
62 if (listsize == 0) {
63 ods_log_info("[%s] No zones on policy %s; purging...", module_str, name);
64 client_printf(sockfd, "No zones on policy %s; purging...\n", name);
65 if (policy_delete(policy)) {
66 ods_log_crit("[%s] Error while purging policy from database", module_str);
67 client_printf(sockfd, "Error while updating database\n", name);
68 result++;
69 }
70 }
72 }
74 return result;
75}
76
77static int
78run(int sockfd, cmdhandler_ctx_type* context, const char *cmd)
79{
80 db_connection_t* dbconn = getconnectioncontext(context);;
81 engine_type* engine = getglobalcontext(context);
82 (void) cmd;
83
84 ods_log_debug("[%s] %s command", module_str, policy_purge_funcblock.cmdname);
85 return purge_policies(sockfd, dbconn);
86}
87
88struct cmd_func_block policy_purge_funcblock = {
89 "policy purge", &usage, &help, NULL, &run
90};
db_connection_t * getconnectioncontext(cmdhandler_ctx_type *context)
engine_type * getglobalcontext(cmdhandler_ctx_type *context)
zone_list_db_t * policy_zone_list(policy_t *policy)
Definition: policy.c:1093
void policy_list_free(policy_list_t *policy_list)
Definition: policy.c:2664
policy_list_t * policy_list_new_get(const db_connection_t *connection)
Definition: policy.c:3079
const char * policy_name(const policy_t *policy)
Definition: policy.c:813
int policy_retrieve_zone_list(policy_t *policy)
Definition: policy.c:1111
policy_t * policy_list_get_next(policy_list_t *policy_list)
Definition: policy.c:3280
int policy_delete(policy_t *policy)
Definition: policy.c:2571
void policy_free(policy_t *policy)
Definition: policy.c:518
struct cmd_func_block policy_purge_funcblock
Definition: policy.h:60
size_t zone_list_db_size(zone_list_db_t *zone_list)
Definition: zone_db.c:2705