Exemple #1
0
static void access_lookup_input(struct access_lookup *lookup)
{
	unsigned char buf[3];
	ssize_t ret;
	bool success = FALSE;

	ret = read(lookup->fd, buf, sizeof(buf));
	if (ret < 0) {
		i_error("read(%s) failed: %m", lookup->path);
	} else if (ret == 0) {
		/* connection close -> no success */
	} else if (ret == 2 && buf[0] == '0' && buf[1] == '\n') {
		/* no success */
	} else if (ret == 2 && buf[0] == '1' && buf[1] == '\n') {
		success = TRUE;
	} else {
		i_error("access(%s): Invalid input", lookup->path);
	}

	lookup->refcount++;
	lookup->callback(success, lookup->context);
	if (lookup->refcount > 1)
		access_lookup_destroy(&lookup);
	access_lookup_destroy(&lookup);
}
Exemple #2
0
static void access_lookup_timeout(struct access_lookup *lookup)
{
	i_error("access(%s): Timed out while waiting for reply", lookup->path);

	lookup->refcount++;
	lookup->callback(FALSE, lookup->context);
	if (lookup->refcount > 1)
		access_lookup_destroy(&lookup);
	access_lookup_destroy(&lookup);
}
Exemple #3
0
static void login_access_lookup_free(struct login_access_lookup *lookup)
{
	if (lookup->io != NULL)
		io_remove(&lookup->io);
	if (lookup->access != NULL)
		access_lookup_destroy(&lookup->access);
	if (lookup->conn.fd != -1) {
		if (close(lookup->conn.fd) < 0)
			i_error("close(client) failed: %m");
		master_service_client_connection_destroyed(master_service);
	}

	p_strsplit_free(default_pool, lookup->sockets);
	i_free(lookup);
}