int find_radius_options(rlm_mongo_t *data, char *username, char *mac, char *password) { bson_buffer bb; bson query; bson field; bson result; bson_buffer_init(&bb); bson_append_string(&bb, data->search_field, username); if (strcmp(data->mac_field, "") != 0) { bson_append_string(&bb, data->mac_field, mac); } if (strcmp(data->enable_field, "") != 0) { bson_append_bool(&bb, data->enable_field, 1); } bson_from_buffer(&query, &bb); bson_buffer_destroy(&bb); bson_empty(&field); bson_empty(&result); MONGO_TRY{ if (mongo_find_one(conn, data->base, &query, &field, &result) == 0) { return 0; } }MONGO_CATCH{ mongo_start(data); return 0; } bson_iterator it; bson_iterator_init(&it, result.data); find_in_array(&it, data->username_field, username, data->password_field, password); bson_destroy(&result); return 1; }
/** * Build perfSONAR data block. */ bson *nlcali_psdata(T self, const char *event, const char *m_id, int32_t sample_num) { struct timeval now; bson_buffer bb; bson *bp = NULL; assert(self && event && m_id); gettimeofday(&now, NULL); if (self->dirty) { nlcali_calc(self); } bson_buffer_init(&bb); bson_ensure_space(&bb, LOG_BUFSZ); bson_append_string(&bb, "mid", m_id); bson_append_start_array(&bb, "data"); bson_append_double(&bb, "ts", now.tv_sec + now.tv_usec/1e6); bson_append_int(&bb, "_sample", sample_num); bson_append_double(&bb, "sum_v", self->vsm.sum); bson_append_double(&bb, "min_v", self->vsm.min); bson_append_double(&bb, "max_v", self->vsm.max); bson_append_double(&bb, "mean_v", self->vsm.mean); bson_append_double(&bb, "sd_v", self->vsm.sd); bson_append_double(&bb, "sum_r", self->rsm.sum); bson_append_double(&bb, "min_r", self->rsm.min); bson_append_double(&bb, "max_r", self->rsm.max); bson_append_double(&bb, "sd_r", self->rsm.sd); bson_append_double(&bb, "sum_g", self->gsm.sum); bson_append_double(&bb, "min_g", self->gsm.min); bson_append_double(&bb, "max_g", self->gsm.max); bson_append_double(&bb, "sd_g", self->gsm.sd); bson_append_int(&bb, "count", self->vsm.count); bson_append_double(&bb, "dur", self->dur); bson_append_double(&bb, "dur_inst", self->dur_sum); /* add histogram data, if being recorded */ if (NL_HIST_HAS_DATA(self)) { int i; char idx[16]; /* rate hist */ bson_append_double(&bb, "h_rm", self->h_rmin); bson_append_double(&bb, "h_rw", self->h_rwidth); bson_append_start_array(&bb, "h_rd"); for (i=0; i < self->h_num; i++) { sprintf(idx, "%d", i); bson_append_int(&bb, idx, self->h_rdata[i]); } bson_append_finish_object(&bb); /* gap hist */ bson_append_double(&bb, "h_gm", self->h_gmin); bson_append_double(&bb, "h_gw", self->h_gwidth); bson_append_start_array(&bb, "h_gd"); for (i=0; i < self->h_num; i++) { sprintf(idx, "%d", i); bson_append_int(&bb, idx, self->h_gdata[i]); } bson_append_finish_object(&bb); } bson_append_finish_object(&bb); bp = malloc(sizeof(bson)); bson_from_buffer(bp, &bb); return(bp); error: if (bp) { bson_destroy(bp); free(bp); } bson_buffer_destroy(&bb); return(NULL); }