| 2499 | } |
| 2500 | |
| 2501 | gboolean validate_xml(xmlNode *xml_blob, const char *validation, gboolean to_logs) |
| 2502 | { |
| 2503 | int lpc = 0; |
| 2504 | |
| 2505 | if(validation == NULL) { |
| 2506 | validation = crm_element_value(xml_blob, XML_ATTR_VALIDATION); |
| 2507 | } |
| 2508 | |
| 2509 | if(validation == NULL) { |
| 2510 | validation = crm_element_value(xml_blob, "ignore-dtd"); |
| 2511 | if(crm_is_true(validation)) { |
| 2512 | validation = "none"; |
| 2513 | } else { |
| 2514 | validation = "pacemaker-1.0"; |
| 2515 | } |
| 2516 | } |
| 2517 | |
| 2518 | if(strcmp(validation, "none") == 0) { |
| 2519 | return TRUE; |
| 2520 | } |
| 2521 | |
| 2522 | for(; lpc < all_schemas; lpc++) { |
| 2523 | if(known_schemas[lpc].name |
| 2524 | && strcmp(validation, known_schemas[lpc].name) == 0) { |
| 2525 | return validate_with(xml_blob, lpc, to_logs); |
| 2526 | } |
| 2527 | } |
| 2528 | |
| 2529 | crm_err("Unknown validator: %s", validation); |
| 2530 | return FALSE; |
| 2531 | } |
| 2532 | |
| 2533 | #if HAVE_LIBXSLT |
| 2534 | static xmlNode *apply_transformation(xmlNode *xml, const char *transform) |