char* _join_elements(apr_pool_t* pool, char sep, set* the_set) { set_element** members = set_members(the_set); set_element** p = members; int total; char* result; char* p_res; total = 0; while (*p) { total += strlen((*p)->name) + 1; ++p; } if (!total) return NULL; p = members; p_res = result = apr_palloc(pool, total); while (*p) { int len = strlen((*p)->name); strcpy(p_res, (*p)->name); ++p; p_res += len; *p_res++ = sep; } *--p_res = '\0'; return result; }
const char* range_request_warnings(range_request* rr) { /* for each of the different warning types, create a * warning of the type NO_CLUSTER: ks321-9 | NO_IP: pain,haides */ char* result = NULL; if (!rr->warnings && !rr->warn_type) return ""; if (rr->warn_type) { set_element** members = set_members(rr->warn_type); while (*members) { if (result) result = apr_psprintf(rr->pool, "%s | %s: %s", result, (*members)->name, do_range_compress(rr, (*members)->data)); else result = apr_psprintf(rr->pool, "%s: %s", (*members)->name, do_range_compress(rr, (*members)->data)); members++; } } if (!rr->warnings) return result; if (result) result = apr_psprintf(rr->pool, "%s | %s", result, rr->warnings); else result = rr->warnings; return result; }
OpMeta::OpMeta(const OpId& oid, const VUINT64& servers): oid_(oid), file_size_(0), server_size_(0), done_server_size_(0), ref_count_(0) { start_time_ = Func::get_monotonic_time_us(); last_update_time_ = Func::get_monotonic_time(); set_members(servers); }
range* range_from_braces(range_request* rr, const range* r1, const range* r2, const range* r3) { int i, j, k; set_element** m1; set_element** m2; set_element** m3; set* temp = NULL; range* bigrange; char* bundle; apr_pool_t* pool = range_request_pool(rr); if(r1->nodes->members == 0) { if(!temp) { temp = set_new(pool, 1); set_add(temp, "", NULL); } m1 = set_members(temp); } else m1 = set_members(r1->nodes); if(r2->nodes->members == 0) { if(!temp) { temp = set_new(pool, 1); set_add(temp, "", NULL); } m2 = set_members(temp); } else m2 = set_members(r2->nodes); if(r3->nodes->members == 0) { if(!temp) { temp = set_new(pool, 1); set_add(temp, "", NULL); } m3 = set_members(temp); } else m3 = set_members(r3->nodes); bigrange = range_new(rr); for(i = 0; m1[i]; i++) for(j = 0; m2[j]; j++) for(k = 0; m3[k]; k++) { bundle = apr_pstrcat(pool, m1[i]->name, m2[j]->name, m3[k]->name, NULL); range_add(bigrange, bundle); } if (temp) set_destroy(temp); bigrange->quoted = r1->quoted || r2->quoted || r3->quoted; return bigrange; }
// LCOV_EXCL_START - The components of this function are tested separately /// authenticate_request /// Authenticates a request based on the IMPU and authorization request HTTPCode HTTPDigestAuthenticate::authenticate_request(const std::string impu, std::string authorization_header, std::string& www_auth_header, std::string method, SAS::TrailId trail) { set_members(impu, method, "", trail); Response* response = new Response(); // Check whether the request contains authorization information bool auth_info = false; HTTPCode rc = check_auth_header(authorization_header, auth_info, response); // The authorization header was invalid if (rc != HTTP_OK) { return rc; } // If there's a full authorization header, attempt to retrieve the digest // from memcached. If not, request the digest from Homestead. if (auth_info) { SAS::Event event(trail, SASEvent::AUTHENTICATION_PRESENT, 0); event.add_var_param(authorization_header); SAS::report_event(event); rc = retrieve_digest_from_store(www_auth_header, response); } else { SAS::Event event(trail, SASEvent::NO_AUTHENTICATION_PRESENT, 0); SAS::report_event(event); rc = request_digest_and_store(www_auth_header, false, response); } delete response; response = NULL; return rc; }