Ejemplo n.º 1
0
Archivo: job.c Proyecto: ddk50/gfarm_v2
gfarm_error_t
gfj_server_unregister(struct peer *peer, gfp_xdr_xid_t xid, size_t *sizep,
	int from_client, int skip)
{
	char *user = peer_get_username(peer);
	gfarm_error_t e;
	gfarm_int32_t error;
	gfarm_int32_t job_id;
	static const char diag[] = "GFJ_PROTO_UNREGISTER";

	e = gfj_server_get_request(peer, sizep, diag, "i", &job_id);
	if (e != GFARM_ERR_NO_ERROR) {
		gflog_debug(GFARM_MSG_1001692,
			"unregister request failure");
		return (e);
	}
	if (skip)
		return (GFARM_ERR_NO_ERROR);
	if (!from_client) {
		error = GFARM_ERR_OPERATION_NOT_PERMITTED;
		gflog_debug(GFARM_MSG_1001693,
			"operation is not permitted for from_client");
	} else {
		giant_lock();
		error = job_table_remove(job_id, user,
		    peer_get_jobs_ref(peer));
		giant_unlock();
	}
	return (gfj_server_put_reply(peer, xid, sizep, diag, error, ""));
}
Ejemplo n.º 2
0
int
file_table_close(int fd)
{
	static char m1[] = "(";
	static char m2[] = "@";
	static char m3[] = ") disconnected";
	char *msg;

	if (fd < 0 || fd >= file_table_size || file_table[fd].conn == NULL)
		return (EBADF);

	/* disconnect, do logging */
	msg = malloc(sizeof(m1) - 1 + strlen(file_table[fd].user) +
	    sizeof(m2) - 1 + strlen(file_table[fd].host) + sizeof(m3));
	if (msg == NULL) {
		gflog_notice("(:@not enough memory) disconnected",
		    file_table[fd].user);
	} else {
		sprintf(msg, "%s%s%s%s%s", m1, file_table[fd].user,
		    m2, file_table[fd].host, m3);
		gflog_notice(msg, NULL);
		free(msg);
	}

	while (file_table[fd].jobs != NULL)
		job_table_remove(file_table[fd].jobs->id, file_table[fd].user,
				 &file_table[fd].jobs);
	file_table[fd].jobs = NULL;

	free(file_table[fd].user);
	file_table[fd].user = NULL;

	free(file_table[fd].host);
	file_table[fd].host = NULL;

	xxx_connection_free(file_table[fd].conn);
	file_table[fd].conn = NULL;

	if (fd == file_table_max) {
		while (--file_table_max >= 0)
			if (file_table[file_table_max].conn != NULL)
				break;
	}
	return (0);
}
Ejemplo n.º 3
0
char *
gfj_server_unregister(int client_socket)
{
	struct xxx_connection *client = file_table[client_socket].conn;
	char *user = file_table[client_socket].user;
	char *e;
	gfarm_int32_t error;
	gfarm_int32_t job_id;

	e = gfj_server_get_request(client, "unregister", "i",
				   &job_id);
	if (e != NULL)
		return (e);
	error = job_table_remove(job_id, user,
				 &file_table[client_socket].jobs);
	return (gfj_server_put_reply(client, "unregister",
	    error, ""));
}
Ejemplo n.º 4
0
gfarm_error_t
gfj_server_unregister(struct peer *peer, int from_client, int skip)
{
	char *user = peer_get_username(peer);
	gfarm_error_t e;
	gfarm_int32_t error;
	gfarm_int32_t job_id;

	e = gfj_server_get_request(peer, "unregister", "i", &job_id);
	if (e != GFARM_ERR_NO_ERROR)
		return (e);
	if (skip)
		return (GFARM_ERR_NO_ERROR);
	if (!from_client) {
		error = GFARM_ERR_OPERATION_NOT_PERMITTED;
	} else {
		giant_lock();
		error = job_table_remove(job_id, user,
		    peer_get_jobs_ref(peer));
		giant_unlock();
	}
	return (gfj_server_put_reply(peer, "unregister",
	    error, ""));
}