Bug 124 - config file validation

This commit is contained in:
Mark Riddoch
2013-09-25 16:25:12 +01:00
parent 44d424adb4
commit ed7c32fb88

View File

@ -125,7 +125,7 @@ int rval;
} }
/** /**
* Relooad the configuration file for the gateway * Reload the configuration file for the gateway
* *
*/ */
int int
@ -160,6 +160,7 @@ static int
process_config_context(CONFIG_CONTEXT *context) process_config_context(CONFIG_CONTEXT *context)
{ {
CONFIG_CONTEXT *obj; CONFIG_CONTEXT *obj;
int error_count = 0;
/** /**
* Process the data and create the services and servers defined * Process the data and create the services and servers defined
@ -170,7 +171,10 @@ CONFIG_CONTEXT *obj;
{ {
char *type = config_get_value(obj->parameters, "type"); char *type = config_get_value(obj->parameters, "type");
if (type == NULL) if (type == NULL)
skygw_log_write( LOGFILE_ERROR, "Object %s has no type\n", obj->object); {
skygw_log_write( LOGFILE_ERROR, "Configuration object %s has no type\n", obj->object);
error_count++;
}
else if (!strcmp(type, "service")) else if (!strcmp(type, "service"))
{ {
char *router = config_get_value(obj->parameters, "router"); char *router = config_get_value(obj->parameters, "router");
@ -183,8 +187,11 @@ CONFIG_CONTEXT *obj;
serviceSetUser(obj->element, user, auth); serviceSetUser(obj->element, user, auth);
} }
else else
skygw_log_write( LOGFILE_ERROR, "No router define for service '%s'\n", {
skygw_log_write( LOGFILE_ERROR, "No router defined for service '%s'\n",
obj->object); obj->object);
error_count++;
}
} }
else if (!strcmp(type, "server")) else if (!strcmp(type, "server"))
{ {
@ -195,8 +202,15 @@ CONFIG_CONTEXT *obj;
char *monpw = config_get_value(obj->parameters, "monitorpw"); char *monpw = config_get_value(obj->parameters, "monitorpw");
if (address && port && protocol) if (address && port && protocol)
obj->element = server_alloc(address, protocol, atoi(port)); obj->element = server_alloc(address, protocol, atoi(port));
else
{
skygw_log_write(LOGFILE_ERROR, "Server '%s' is missing a required configuration parameter. A server must have address, port and protocol defined.\n", obj->object);
error_count++;
}
if (obj->element && monuser && monpw) if (obj->element && monuser && monpw)
serverAddMonUser(obj->element, monuser, monpw); serverAddMonUser(obj->element, monuser, monpw);
else
skygw_log_write(LOGFILE_ERROR, "Warning: server '%s' has no valid monitor user defined. The server may not be monitored.\n", obj->object);
} }
obj = obj->next; obj = obj->next;
@ -231,6 +245,11 @@ CONFIG_CONTEXT *obj;
s = strtok(NULL, ","); s = strtok(NULL, ",");
} }
} }
else if (servers == NULL)
{
skygw_log_write(LOGFILE_ERROR, "The service '%s' is missing a definition of the servers within the service.\n", obj->object);
error_count++;
}
if (roptions && obj->element) if (roptions && obj->element)
{ {
char *s = strtok(roptions, ","); char *s = strtok(roptions, ",");
@ -254,6 +273,11 @@ CONFIG_CONTEXT *obj;
if (ptr && ptr->element) if (ptr && ptr->element)
serviceAddProtocol(ptr->element, protocol, atoi(port)); serviceAddProtocol(ptr->element, protocol, atoi(port));
} }
else
{
skygw_log_write(LOGFILE_ERROR, "Listern '%s' is misisng a required parameter. A Listener must have a service, port and protocol defined.\n", obj->object);
error_count++;
}
} }
else if (!strcmp(type, "monitor")) else if (!strcmp(type, "monitor"))
{ {
@ -284,11 +308,26 @@ CONFIG_CONTEXT *obj;
monitorAddUser(obj->element, user, passwd); monitorAddUser(obj->element, user, passwd);
} }
} }
else
{
skygw_log_write(LOGFILE_ERROR, "Monitor '%s' is missing a require module parameter.\n", obj->object);
error_count++;
}
}
else if (strcmp(type, "server") != 0)
{
skygw_log_write(LOGFILE_ERROR, "Configuration object %s has an invalid type specified", obj->object);
error_count++;
} }
obj = obj->next; obj = obj->next;
} }
if (error_count)
{
skygw_log_write(LOGFILE_ERROR, "%d errors where encountered processing the configuration file '%s'.\n", error_count, config_file);
}
return 1; return 1;
} }
@ -400,7 +439,7 @@ SERVER *server;
{ {
char *type = config_get_value(obj->parameters, "type"); char *type = config_get_value(obj->parameters, "type");
if (type == NULL) if (type == NULL)
skygw_log_write( LOGFILE_ERROR, "Object %s has no type\n", obj->object); skygw_log_write( LOGFILE_ERROR, "Configuration object %s has no type\n", obj->object);
else if (!strcmp(type, "service")) else if (!strcmp(type, "service"))
{ {
char *router = config_get_value(obj->parameters, "router"); char *router = config_get_value(obj->parameters, "router");
@ -448,6 +487,8 @@ SERVER *server;
serverAddMonUser(obj->element, monuser, monpw); serverAddMonUser(obj->element, monuser, monpw);
} }
} }
else
skygw_log_write(LOGFILE_ERROR, "Server '%s' is missing a required configuration parameter. A server must have address, port and protocol defined.\n", obj->object);
} }
obj = obj->next; obj = obj->next;
@ -511,6 +552,10 @@ SERVER *server;
} }
} }
} }
else if (strcmp(type, "server") != 0 && strcmp(type, "monitor") != 0)
{
skygw_log_write(LOGFILE_ERROR, "Configuration object %s has an invalid type specified", obj->object);
}
obj = obj->next; obj = obj->next;
} }