Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
  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);
 }
Example #4
0
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;
}