+ /*
+ * An actionsfile can optionally contain the following blocks.
+ * They *MUST* be in this order, to simplify processing:
+ *
+ * {{settings}}
+ * name=value...
+ *
+ * {{description}}
+ * ...free text, format TBD, but no line may start with a '{'...
+ *
+ * {{alias}}
+ * name=actions...
+ *
+ * The actual actions must be *after* these special blocks.
+ * None of these special blocks may be repeated.
+ *
+ */
+ if (0 == strcmpic(start, "settings"))
+ {
+ /* it's a {{settings}} block */
+ if (mode >= MODE_SETTINGS)
+ {
+ /* {{settings}} must be first thing in file and must only
+ * appear once.
+ */
+ fclose(fp);
+ log_error(LOG_LEVEL_FATAL,
+ "can't load actions file '%s': {{settings}} must only appear once, and it must be before anything else.",
+ csp->config->actions_file);
+ }
+ mode = MODE_SETTINGS;
+ }
+ else if (0 == strcmpic(start, "description"))
+ {
+ /* it's a {{description}} block */
+ if (mode >= MODE_DESCRIPTION)
+ {
+ /* {{description}} is a singleton and only {{settings}} may proceed it
+ */
+ fclose(fp);
+ log_error(LOG_LEVEL_FATAL,
+ "can't load actions file '%s': {{description}} must only appear once, and only a {{settings}} block may be above it.",
+ csp->config->actions_file);
+ }
+ mode = MODE_DESCRIPTION;
+ }
+ else if (0 == strcmpic(start, "alias"))