32 #include "clientpipe.h" 42 #include <libxml/parser.h> 43 #include <libxml/tree.h> 45 static const char* module_str =
"zonelist_import";
55 int do_delete,
const char* zonelist_path)
62 int database_error = 0;
94 client_printf_err(sockfd,
"Unable to fetch all the current zones in the database!\n");
101 client_printf_err(sockfd,
"Memory allocation error!\n");
106 for (zone2 = zones; zone2; zone2 = zones) {
126 client_printf_err(sockfd,
"Unable to validate the zonelist XML!\n");
127 for (zone2 = zones; zone2; zone2 = zones) {
135 if (!(doc = xmlParseFile(zonelist_path))) {
136 client_printf_err(sockfd,
"Unable to read/parse zonelist XML file %s!\n",
138 for (zone2 = zones; zone2; zone2 = zones) {
146 if (!(root = xmlDocGetRootElement(doc))) {
147 client_printf_err(sockfd,
"Unable to get the root element in the zonelist XML!\n");
149 for (zone2 = zones; zone2; zone2 = zones) {
157 for (; root; root = root->next) {
158 if (root->type != XML_ELEMENT_NODE) {
162 if (!strcmp((
char*)root->name,
"ZoneList")) {
163 for (node = root->children; node; node = node->next) {
164 if (node->type != XML_ELEMENT_NODE) {
167 if (strcmp((
char*)node->name,
"Zone")) {
171 if (!(name = xmlGetProp(node, (
const xmlChar*)
"name"))) {
172 client_printf_err(sockfd,
"Invalid Zone element in zonelist XML!\n");
174 for (zone2 = zones; zone2; zone2 = zones) {
183 client_printf_err(sockfd,
"Memory allocation error!\n");
186 for (zone2 = zones; zone2; zone2 = zones) {
200 client_printf_err(sockfd,
201 "Unable to create zone %s from XML, XML content may be invalid!\n",
210 client_printf_err(sockfd,
211 "Unable to create zone %s in the database!\n",
221 client_printf_err(sockfd,
"WARNING: The input file %s for zone %s does not currently exist. The zone will be added to the database anyway.\n",
zone_db_input_adapter_uri(zone),
zone_db_name(zone));
222 ods_log_warning(
"[%s] WARNING: The input file %s for zone %s does not currently exist. The zone will be added to the database anyway.", module_str,
zone_db_input_adapter_uri(zone),
zone_db_name(zone));
230 ods_log_info(
"[%s] zone %s created", module_str, (
char*)name);
231 client_printf(sockfd,
"Zone %s created successfully\n",
239 for (zone2 = zones; zone2; zone2 = zone2->
next) {
243 if (!strcmp(zone2->
name, (
char*)name)) {
254 client_printf_err(sockfd,
255 "Unable to update zone %s from XML, XML content may be invalid!\n",
260 for (zone2 = zones; zone2; zone2 = zones) {
273 client_printf_err(sockfd,
"Unable to update zone %s in database!\n",
281 ods_log_info(
"[%s] zone %s updated", module_str, (
char*)name);
282 client_printf(sockfd,
"Updated zone %s successfully\n",
287 client_printf(sockfd,
"Zone %s already up-to-date\n",
301 for (zone2 = zones; zone2; zone2 = zone2->
next) {
307 client_printf_err(sockfd,
"Memory allocation error!\n");
309 for (zone2 = zones; zone2; zone2 = zones) {
326 client_printf_err(sockfd,
"Unable to get key data for zone %s from database!\n", zone2->
name);
334 client_printf_err(sockfd,
"Unable to get key states for key data %s of zone %s from database!\n",
key_data_role_text(key_data), zone2->
name);
351 client_printf_err(sockfd,
"Unable to delete key data %s of zone %s from database!\n",
key_data_role_text(key_data), zone2->
name);
358 client_printf_err(sockfd,
"Unable to release HSM key for key data %s of zone %s from database!\n",
key_data_role_text(key_data), zone2->
name);
370 client_printf_err(sockfd,
"Unable to delete zone %s from database!\n", zone2->
name);
376 ods_log_info(
"[%s] zone %s deleted", module_str, zone2->
name);
377 client_printf(sockfd,
"Deleted zone %s successfully\n", zone2->
name);
380 client_printf_err(sockfd,
"Unable to delete zone %s from database!\n", zone2->
name);
391 for (zone2 = zones; zone2; zone2 = zones) {
397 if (database_error) {
const char * key_data_role_text(const key_data_t *key_data)
void zone_db_free(zone_db_t *zone)
#define ZONELIST_IMPORT_OK
#define ZONELIST_IMPORT_ERR_DATABASE
int key_state_delete(const key_state_t *key_state)
int zonelist_import(int sockfd, engine_type *engine, db_connection_t *dbconn, int do_delete, const char *zonelist_path)
const char * key_state_type_text(const key_state_t *key_state)
const char * zonelist_filename
key_state_t * key_state_list_get_next(key_state_list_t *key_state_list)
const db_value_t * key_data_id(const key_data_t *key_data)
int check_zonelist(const char *zonelist, int verbose, char **policy_names, int policy_count)
#define ZONELIST_IMPORT_ERR_ARGS
int zone_db_create_from_xml(zone_db_t *zone, xmlNodePtr zone_node)
key_data_t * key_data_list_get_next(key_data_list_t *key_data_list)
void zone_list_db_free(zone_list_db_t *zone_list)
const zone_db_t * zone_list_db_next(zone_list_db_t *zone_list)
int zone_db_create(zone_db_t *zone)
engineconfig_type * config
void key_state_free(key_state_t *key_state)
#define ZONELIST_IMPORT_ERR_MEMORY
const char * zone_db_input_adapter_uri(const zone_db_t *zone)
const char * zone_db_name(const zone_db_t *zone)
int hsm_key_factory_schedule_generate_all(engine_type *engine, time_t duration)
void key_state_list_free(key_state_list_t *key_state_list)
struct __zonelist_import_zone * next
int zone_db_delete(zone_db_t *zone)
zone_list_db_t * zone_list_db_new_get(const db_connection_t *connection)
void key_data_list_free(key_data_list_t *key_data_list)
const db_value_t * key_data_hsm_key_id(const key_data_t *key_data)
void key_data_free(key_data_t *key_data)
int zone_db_get_by_name(zone_db_t *zone, const char *name)
key_data_list_t * key_data_list_new_get_by_zone_id(const db_connection_t *connection, const db_value_t *zone_id)
int zone_db_update_from_xml(zone_db_t *zone, xmlNodePtr zone_node, int *updated)
int zone_db_update(zone_db_t *zone)
const db_value_t * zone_db_id(const zone_db_t *zone)
#define ZONELIST_IMPORT_NO_CHANGE
int key_data_delete(key_data_t *key_data)
const char * zone_db_input_adapter_type(const zone_db_t *zone)
#define ZONELIST_IMPORT_ERR_XML
int hsm_key_factory_release_key_id(const db_value_t *hsm_key_id, const db_connection_t *connection)
key_state_list_t * key_state_list_new_get_by_key_data_id(const db_connection_t *connection, const db_value_t *key_data_id)
zone_db_t * zone_db_new(const db_connection_t *connection)