| 165 | } |
| 166 | |
| 167 | int |
| 168 | cib_process_replace(const char *op, int options, const char *section, xmlNode * req, |
| 169 | xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib, |
| 170 | xmlNode ** answer) |
| 171 | { |
| 172 | const char *tag = NULL; |
| 173 | int result = pcmk_ok; |
| 174 | |
| 175 | crm_trace("Processing \"%s\" event for section=%s", op, crm_str(section)); |
| 176 | |
| 177 | if (options & cib_xpath) { |
| 178 | return cib_process_xpath(op, options, section, req, input, |
| 179 | existing_cib, result_cib, answer); |
| 180 | } |
| 181 | |
| 182 | *answer = NULL; |
| 183 | |
| 184 | if (input == NULL) { |
| 185 | return -EINVAL; |
| 186 | } |
| 187 | |
| 188 | tag = crm_element_name(input); |
| 189 | |
| 190 | if (safe_str_eq(XML_CIB_TAG_SECTION_ALL, section)) { |
| 191 | section = NULL; |
| 192 | |
| 193 | } else if (safe_str_eq(tag, section)) { |
| 194 | section = NULL; |
| 195 | } |
| 196 | |
| 197 | if (safe_str_eq(tag, XML_TAG_CIB)) { |
| 198 | int updates = 0; |
| 199 | int epoch = 0; |
| 200 | int admin_epoch = 0; |
| 201 | |
| 202 | int replace_updates = 0; |
| 203 | int replace_epoch = 0; |
| 204 | int replace_admin_epoch = 0; |
| 205 | |
| 206 | const char *reason = NULL; |
| 207 | const char *peer = crm_element_value(req, F_ORIG); |
| 208 | const char *digest = crm_element_value(req, XML_ATTR_DIGEST); |
| 209 | |
| 210 | if(digest) { |
| 211 | const char *version = crm_element_value(req, XML_ATTR_CRM_VERSION); |
| 212 | char *digest_verify = calculate_xml_versioned_digest(input, FALSE, TRUE, version?version:CRM_FEATURE_SET); |
| 213 | |
| 214 | if(safe_str_neq(digest_verify, digest)) { |
| 215 | crm_err("Digest mis-match on replace from %s: %s vs. %s (expected)", peer, digest_verify, digest); |
| 216 | reason = "digest mismatch"; |
| 217 | |
| 218 | } else { |
| 219 | crm_info("Digest matched on replace from %s: %s", peer, digest); |
| 220 | } |
| 221 | free(digest_verify); |
| 222 | |
| 223 | } else { |
| 224 | crm_trace("No digest to verify"); |
no test coverage detected