OpenDNSSEC-enforcer
2.1.5
src
policy
policy_purge_cmd.c
Go to the documentation of this file.
1
#include "
daemon/engine.h
"
2
#include "cmdhandler.h"
3
#include "
daemon/enforcercommands.h
"
4
#include "log.h"
5
#include "str.h"
6
#include "clientpipe.h"
7
#include "
enforcer/enforce_task.h
"
8
#include "
db/policy.h
"
9
10
#include "
policy/policy_purge_cmd.h
"
11
12
static
const
char
*module_str =
"policy_purge_cmd"
;
13
14
static
void
15
usage(
int
sockfd)
16
{
17
client_printf(sockfd,
18
"policy purge\n"
19
);
20
}
21
22
static
void
23
help(
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
37
static
int
38
purge_policies(
int
sockfd,
db_connection_t
*dbconn)
39
{
40
policy_list_t
*
policy_list
;
41
policy_t
*
policy
;
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
49
policy_list
=
policy_list_new_get
(dbconn);
50
if
(!
policy_list
)
return
1;
51
52
while
((
policy
=
policy_list_get_next
(
policy_list
))) {
53
name =
policy_name
(
policy
);
54
/*fetch zonelist from db, owned by policy*/
55
if
(
policy_retrieve_zone_list
(
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
}
71
policy_free
(
policy
);
72
}
73
policy_list_free
(
policy_list
);
74
return
result;
75
}
76
77
static
int
78
run(
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
88
struct
cmd_func_block
policy_purge_funcblock
= {
89
"policy purge"
, &usage, &help, NULL, &run
90
};
policy.h
policy_list_free
void policy_list_free(policy_list_t *policy_list)
Definition:
policy.c:2664
policy_name
const char * policy_name(const policy_t *policy)
Definition:
policy.c:813
enforcercommands.h
policy_purge_funcblock
struct cmd_func_block policy_purge_funcblock
Definition:
policy_purge_cmd.c:88
policy_delete
int policy_delete(policy_t *policy)
Definition:
policy.c:2571
policy_zone_list
zone_list_db_t * policy_zone_list(policy_t *policy)
Definition:
policy.c:1093
policy_purge_cmd.h
policy_retrieve_zone_list
int policy_retrieve_zone_list(policy_t *policy)
Definition:
policy.c:1111
policy_free
void policy_free(policy_t *policy)
Definition:
policy.c:518
policy_list_get_next
policy_t * policy_list_get_next(policy_list_t *policy_list)
Definition:
policy.c:3280
policy_list_new_get
policy_list_t * policy_list_new_get(const db_connection_t *connection)
Definition:
policy.c:3079
getconnectioncontext
db_connection_t * getconnectioncontext(cmdhandler_ctx_type *context)
Definition:
enforcercommands.c:108
zone_list_db
Definition:
zone_db.h:466
engine_struct
Definition:
engine.h:47
policy
Definition:
policy.h:60
zone_list_db_size
size_t zone_list_db_size(zone_list_db_t *zone_list)
Definition:
zone_db.c:2705
policy_list
Definition:
policy.h:733
engine.h
db_connection
Definition:
db_connection.h:46
getglobalcontext
engine_type * getglobalcontext(cmdhandler_ctx_type *context)
Definition:
enforcercommands.c:102
enforce_task.h
Generated by
1.8.17