示例#1
0
int ldap_connection_init(struct ldap_client *client,
			 const struct ldap_client_settings *set,
			 struct ldap_connection **conn_r, const char **error_r)
{
	i_assert(set->uri != NULL);

	if (set->require_ssl &&
	    !set->start_tls &&
	    strncmp("ldaps://",set->uri,8) != 0) {
		*error_r = t_strdup_printf("ldap_connection_init(uri=%s) failed: %s", set->uri,
			"uri does not start with ldaps and ssl required without start TLS");
		return -1;
	}

	pool_t pool = pool_alloconly_create("ldap connection", 1024);
	struct ldap_connection *conn = p_new(pool, struct ldap_connection, 1);
	conn->pool = pool;

	conn->client = client;
	conn->set = *set;
	/* deep copy relevant strings */
	conn->set.uri = p_strdup(pool, set->uri);
	conn->set.bind_dn = p_strdup(pool, set->bind_dn);
	if (set->password != NULL) {
		conn->set.password = p_strdup(pool, set->password);
		ber_str2bv(conn->set.password, strlen(conn->set.password), 0, &(conn->cred));
	}
	/* cannot use these */
	conn->ssl_set.ca = NULL;
	conn->ssl_set.key_password = NULL;
	conn->ssl_set.cert_username_field = NULL;
	conn->ssl_set.crypto_device = NULL;

	if (set->ssl_set != NULL) {
		/* keep in sync with ldap_connection_have_settings() */
		conn->set.ssl_set = &conn->ssl_set;
		conn->ssl_set.protocols = p_strdup(pool, set->ssl_set->protocols);
		conn->ssl_set.cipher_list = p_strdup(pool, set->ssl_set->cipher_list);
		conn->ssl_set.ca_file = p_strdup(pool, set->ssl_set->ca_file);
		conn->ssl_set.cert = p_strdup(pool, set->ssl_set->cert);
		conn->ssl_set.key = p_strdup(pool, set->ssl_set->key);
	}
	i_assert(ldap_connection_have_settings(conn, set));

	if (ldap_connection_setup(conn, error_r) < 0) {
		ldap_connection_deinit(&conn);
		return -1;
	}

	p_array_init(&(conn->request_array), conn->pool, 10);
	conn->request_queue = aqueue_init(&(conn->request_array.arr));

	*conn_r = conn;
	return 0;
}
static struct dsync_mailbox_tree_bfs_iter *
dsync_mailbox_tree_bfs_iter_init(struct dsync_mailbox_tree *tree)
{
	struct dsync_mailbox_tree_bfs_iter *iter;

	iter = i_new(struct dsync_mailbox_tree_bfs_iter, 1);
	iter->tree = tree;
	i_array_init(&iter->queue_arr, 32);
	iter->queue = aqueue_init(&iter->queue_arr.arr);
	iter->cur = tree->root.first_child;
	return iter;
}
示例#3
0
static char const* test_aqueue(void) {
    Aqueue aq;
    Aqueue* const p = &aq;

    aqueue_init(p, sizeof(int), MAX_CAPACITY, NULL);
    MIN_UNIT_ASSERT("aqueue_init is wrong.", aqueue_is_empty(p) == true);
    MIN_UNIT_ASSERT("aqueue_init is wrong.", aqueue_get_capacity(p) == MAX_CAPACITY);
    MIN_UNIT_ASSERT("aqueue_init is wrong.", aqueue_get_size(p) == 0);

    for (int i = 0; i < MAX_CAPACITY; i++) {
        aqueue_insert(p, &i);
        MIN_UNIT_ASSERT("aqueue_insert is wrong.", aqueue_get(int, p) == 0);
    }
    MIN_UNIT_ASSERT("aqueue_insert result is wrong.", aqueue_get_size(p) == MAX_CAPACITY);

    for (int i = 0; i < MAX_CAPACITY; i++) {
        int* t = (int*)aqueue_get_first(p);
        MIN_UNIT_ASSERT("aqueue_get is wrong.", *t == i);
        aqueue_delete_first(p);
    }
    MIN_UNIT_ASSERT("aqueue_delete_first is wrong", aqueue_is_empty(p) == true);
    aqueue_destruct(p);

    aqueue_init(p, sizeof(char*), MAX_CAPACITY, release_str);
    for (int i = 0; i < STR_NUM; i++) {
        aqueue_insert(p, &sample_str_data[i]);
        MIN_UNIT_ASSERT("aqueue_insert is wrong", 0 == strcmp(sample_str_data[0], aqueue_get(char const*, p)));
    }
    MIN_UNIT_ASSERT("aqueue_insert result is wrong.", aqueue_get_size(p) == STR_NUM);
    MIN_UNIT_ASSERT("aqueue_insert result is wrong.", aqueue_is_empty(p) == false);

    aqueue_destruct(p);
    MIN_UNIT_ASSERT("aqueue_destruct is wrong.", p->data != NULL);

    printf("All Test Passed.\n");

    return NULL;
}
示例#4
0
struct worker_connection *
worker_connection_create(const char *socket_path,
			 indexer_status_callback_t *callback)
{
	struct worker_connection *conn;

	conn = i_new(struct worker_connection, 1);
	conn->refcount = 1;
	conn->socket_path = i_strdup(socket_path);
	conn->callback = callback;
	conn->fd = -1;
	i_array_init(&conn->request_contexts, 32);
	conn->request_queue = aqueue_init(&conn->request_contexts.arr);
	return conn;
}
示例#5
0
文件: test-aqueue.c 项目: bdraco/core
static const char *test_aqueue2(unsigned int initial_size)
{
	ARRAY(unsigned int) aqueue_array;
	unsigned int i, j, k;

	for (i = 0; i < N_ELEMENTS(aqueue_input); i++) {
		for (k = 0; k < N_ELEMENTS(aqueue_input); k++) {
			struct aqueue *aqueue;

			t_array_init(&aqueue_array, initial_size);
			aqueue = aqueue_init(&aqueue_array.arr);
			aqueue->head = aqueue->tail = initial_size - 1;
			for (j = 0; j < k; j++) {
				aqueue_append(aqueue, &aqueue_input[j]);
				if (aqueue_count(aqueue) != j + 1) {
					return t_strdup_printf("Wrong count after append %u vs %u)",
							       aqueue_count(aqueue), j + 1);
				}
				if (!aqueue_is_ok(aqueue, UINT_MAX))
					return "Invalid data after append";
			}

			if (k != 0 && i < k) {
				aqueue_delete(aqueue, i);
				if (aqueue_count(aqueue) != k - 1)
					return "Wrong count after delete";
				if (!aqueue_is_ok(aqueue, i))
					return "Invalid data after delete";
			}
			aqueue_clear(aqueue);
			if (aqueue_count(aqueue) != 0)
				return "aqueue_clear() broken";
			aqueue_deinit(&aqueue);
		}
	}
	return NULL;
}