MCPcopy Create free account
hub / github.com/ClusterLabs/pacemaker / cib_process_replace

Function cib_process_replace

lib/cib/cib_ops.c:167–274  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

165}
166
167int
168cib_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");

Callers 1

cib_process_replace_svrFunction · 0.85

Calls 9

cib_process_xpathFunction · 0.85
crm_element_valueFunction · 0.85
safe_str_neqFunction · 0.85
cib_version_detailsFunction · 0.85
free_xmlFunction · 0.85
copy_xmlFunction · 0.85
get_object_rootFunction · 0.85
replace_xml_childFunction · 0.85

Tested by

no test coverage detected