Exemplo n.º 1
0
as_status
aerospike_query_role(aerospike* as, as_error* err, const as_policy_admin* policy, const char* role_name, as_role** role)
{
    uint8_t buffer[AS_STACK_BUF_SIZE];
    uint8_t* p = buffer + 8;

    p = as_admin_write_header(p, QUERY_ROLES, 1);
    p = as_admin_write_field_string(p, ROLE, role_name);

    as_vector list;
    as_vector_inita(&list, sizeof(as_role*), 1);
    as_status status = as_admin_read_list(as, err, policy, buffer, p, as_parse_roles, &list);

    if (status == AEROSPIKE_OK) {
        if (list.size == 1) {
            *role = as_vector_get_ptr(&list, 0);
        }
        else if (list.size <= 0) {
            *role = 0;
            as_free_roles(&list, 0);
        }
        else {
            *role = as_vector_get_ptr(&list, 0);
            // Delete excess users.
            as_free_roles(&list, 1);
        }
    }
    else {
        *role = 0;
        as_free_roles(&list, 0);
    }
    return status;
}
Exemplo n.º 2
0
static void
as_free_roles(as_vector* roles, int offset)
{
    for (uint32_t i = offset; i < roles->size; i++) {
        as_role* role = as_vector_get_ptr(roles, i);
        cf_free(role);
    }
    as_vector_destroy(roles);
}
Exemplo n.º 3
0
static void
as_free_users(as_vector* users, int offset)
{
    for (uint32_t i = offset; i < users->size; i++) {
        as_user* user = as_vector_get_ptr(users, i);
        cf_free(user);
    }
    as_vector_destroy(users);
}
Exemplo n.º 4
0
as_status
aerospike_query_user(aerospike* as, as_error* err, const as_policy_admin* policy, const char* user_name, as_user** user)
{
    as_error_reset(err);

    if (! user_name) {
        user_name = as->cluster->user;

        if (! user_name) {
            return AEROSPIKE_INVALID_USER;
        }
    }
    uint8_t buffer[AS_STACK_BUF_SIZE];
    uint8_t* p = buffer + 8;

    p = as_admin_write_header(p, QUERY_USERS, 1);
    p = as_admin_write_field_string(p, USER, user_name);

    as_vector list;
    as_vector_inita(&list, sizeof(as_user*), 1);
    as_status status = as_admin_read_list(as, err, policy, buffer, p, as_parse_users, &list);

    if (status == AEROSPIKE_OK) {
        if (list.size == 1) {
            *user = as_vector_get_ptr(&list, 0);
        }
        else if (list.size <= 0) {
            *user = 0;
            as_free_users(&list, 0);
        }
        else {
            *user = as_vector_get_ptr(&list, 0);
            // Delete excess users.
            as_free_users(&list, 1);
        }
    }
    else {
        *user = 0;
        as_free_users(&list, 0);
    }
    return status;
}
Exemplo n.º 5
0
static void print_users(as_vector* /*<as_user_roles*>*/ users)
{
	for (uint32_t i = 0; i < users->size; i++) {
		as_user_roles* urs = as_vector_get_ptr(users, i);
		printf("User %s Roles ", urs->user);
		
		for (uint32_t j = 0; j < urs->roles_size; j++) {
			printf("%s", urs->roles[j]);
		}
		printf("\n");
	}
}
Exemplo n.º 6
0
static as_node*
as_cluster_find_node_in_vector(as_vector* nodes, const char* name)
{
	as_node* node;

	for (uint32_t i = 0; i < nodes->size; i++) {
		node = as_vector_get_ptr(nodes, i);
		
		if (strcmp(node->name, name) == 0) {
			return node;
		}
	}
	return NULL;
}
Exemplo n.º 7
0
int
aerospike_query_user(aerospike* as, const as_policy_admin* policy, const char* user, as_user_roles** user_roles)
{
	if (! user) {
		user = as->cluster->user;
	}
	uint8_t buffer[STACK_BUF_SZ];
	uint8_t* p = buffer + 8;
	
	p = write_header(p, QUERY_USERS, 1);
	p = write_field_string(p, USER, user);
	
	as_vector users;
	as_vector_inita(&users, sizeof(as_user_roles*), 1);
	int status = as_read_users(as, policy, buffer, p, &users);
	
	if (status == 0) {
		if (users.size == 1) {
			*user_roles = as_vector_get_ptr(&users, 0);
		}
		else if (users.size <= 0) {
			*user_roles = 0;
			as_free_users(&users, 0);
		}
		else {
			*user_roles = as_vector_get_ptr(&users, 0);
			// Delete excess users.
			as_free_users(&users, 1);
		}
	}
	else {
		*user_roles = 0;
		as_free_users(&users, 0);
	}
	return status;
}