Ejemplo n.º 1
0
/** Establish connection to the db
 *
 */
static int sql_init_socket(rlm_sql_handle_t *handle, rlm_sql_config_t *config) {
	rlm_sql_firebird_sock	*firebird_sock;
	
	long res;

	if (!handle->conn) {
		handle->conn = rad_malloc(sizeof(rlm_sql_firebird_sock));
		if (!handle->conn) {
			return -1;
		}
	}

	firebird_sock = handle->conn;

	res = fb_init_socket(firebird_sock);
	if (res) {
		return -1;
	}
	
	if (fb_connect(firebird_sock,config)) {
		radlog(L_ERR, "rlm_sql_firebird: Connection failed %s\n",
		       firebird_sock->lasterror);
		       
		return SQL_DOWN;
	}

	return 0;
}
/** Establish connection to the db
 *
 */
static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *config) {
	rlm_sql_firebird_conn_t	*conn;

	long res;

	MEM(conn = handle->conn = talloc_zero(handle, rlm_sql_firebird_conn_t));
	talloc_set_destructor(conn, _sql_socket_destructor);

	res = fb_init_socket(conn);
	if (res) {
		return -1;
	}

	if (fb_connect(conn, config)) {
		ERROR("rlm_sql_firebird: Connection failed: %s", conn->error);

		return RLM_SQL_RECONNECT;
	}

	return 0;
}
Ejemplo n.º 3
0
/*************************************************************************
 *
 *	Function: sql_init_socket
 *
 *	Purpose: Establish connection to the db
 *
 *************************************************************************/
static int sql_init_socket(SQLSOCK *sqlsocket, SQL_CONFIG *config) {
    rlm_sql_firebird_sock *firebird_sock;
    long res;


    if (!sqlsocket->conn) {
	sqlsocket->conn = (rlm_sql_firebird_sock *)rad_malloc(sizeof(rlm_sql_firebird_sock));
	if (!sqlsocket->conn) return -1;
    }

    firebird_sock = sqlsocket->conn;

    res=fb_init_socket(firebird_sock);
    if (res)  return -1;

    if (fb_connect(firebird_sock,config)) {
     radlog(L_ERR, "rlm_sql_firebird: Connection failed %s\n", firebird_sock->lasterror);
     return SQL_DOWN;
    }

    return 0;
}
/** Establish connection to the db
 *
 */
static int sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *config) {
	rlm_sql_firebird_conn_t	*conn;
	
	long res;

	MEM(conn = handle->conn = talloc_zero(handle, rlm_sql_firebird_conn_t));
	talloc_set_destructor((void *) conn, sql_socket_destructor);

	res = fb_init_socket(conn);
	if (res) {
		return -1;
	}
	
	if (fb_connect(conn,config)) {
		radlog(L_ERR, "rlm_sql_firebird: Connection failed %s\n",
		       conn->lasterror);
		
		return SQL_DOWN;
	}

	return 0;
}
Ejemplo n.º 5
0
int fb_open_socket(){
	int listen_fd, i, conn_fd;
	socklen_t client_addr_len;
	pid_t child_pid;
	fb_sockaddr_in sockaddr;
	fb_sockaddr_in client_addr;
	
	if((listen_fd = fb_socket(AF_INET, SOCK_STREAM, 0)) == -1) return _FB_ERROR_;
	i = 1;
	if(setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, (void*) &i, sizeof(i) ) < 0) return _FB_ERROR_;

	/*init memory*/
	memset(&sockaddr, 0, sizeof(sockaddr));
	memset(&client_addr, 0, sizeof(client_addr));
	client_addr_len = sizeof(client_addr);
	
	sockaddr.sin_family = AF_INET;
	sockaddr.sin_port = htons(_FB_LISTENED_FD_);
	sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);

	if(bind(listen_fd, (struct sockaddr *) &sockaddr, sizeof(sockaddr)) == -1) return _FB_ERROR_;
	if(listen(listen_fd, 10) == -1) return _FB_ERROR_;

	/*regist signal SIGCHLD*/
	if(signal(SIGCHLD, sig_child) == SIG_ERR){
		printf("SIGCHLD error\n");
		return -1;
	}
	
	/*daemonize process*/
	//fb_daemonize();

	while(1){
		conn_fd = accept(listen_fd, (struct sockaddr *) &client_addr, &client_addr_len);
		if(conn_fd < 0){
			printf("connect error\n");
			break;
		}

		/*fork child process*/
		if((child_pid = fork()) < 0){
			printf("fork error\n");
			break;
		}else if(child_pid == 0){
			/*child process*/

			/*close listen_fd copied from father*/
			if(close(listen_fd) < 0){
				printf("child close listen_fd error\n");
			}

			/*if(signal(SIGCHLD, SIG_DFL) == SIG_ERR){
				printf("RESET SIGCHLD ERROR\n");
				exit(1);
			}*/

			/*process connection*/
			fb_connect(conn_fd, client_addr);

			if(close(conn_fd) < 0){
				printf("child close conn_fd error\n");
			}
			exit(0);
		}

		if(close(conn_fd) < 0){
			printf("parent close conn_fd error\n");
		}
	}

	close(listen_fd);
	return 0;
}