X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcserver%2Fserver_st_accept.c;h=7ad789a9554dd2e4a71a31190edc254d5b4b743c;hb=9905799a86c606304fd7df2cd401de1740a272a1;hp=b6e638842840f9a830b97d0bf3ea45dc56de8835;hpb=410642a14d4185abd75715cee3f5177cd55b1ceb;p=silc.git diff --git a/lib/silcserver/server_st_accept.c b/lib/silcserver/server_st_accept.c index b6e63884..7ad789a9 100644 --- a/lib/silcserver/server_st_accept.c +++ b/lib/silcserver/server_st_accept.c @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2005 Pekka Riikonen + Copyright (C) 1997 - 2006 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -66,7 +66,7 @@ silc_server_accept_completed(SilcSKE ske, SilcSKEStatus status, ac->rekey = rekey; /* Continue synchronously to take keys into use immediately */ - SILC_FSM_CALL_CONTINUE_SYNC(ac->t); + SILC_FSM_CALL_CONTINUE_SYNC(&ac->t); } /* Authentication data callback */ @@ -129,7 +129,7 @@ silc_server_accept_auth_compl(SilcConnAuth connauth, SilcBool success, { SilcServerAccept ac = context; ac->auth_success = success; - SILC_FSM_CALL_CONTINUE(ac->t); + SILC_FSM_CALL_CONTINUE(&ac->t); } /* Free context */ @@ -146,7 +146,6 @@ void silc_server_accept_connection_dest(SilcFSM fsm, void *fsm_context, void *destructor_context) { SilcServerAccept ac = fsm_context; - silc_fsm_free(fsm); silc_server_accept_free(ac); } @@ -170,7 +169,7 @@ SILC_FSM_STATE(silc_server_st_accept_connection) /** Cannot create packet stream */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } silc_packet_set_context(ac->packet_stream, ac); @@ -181,7 +180,7 @@ SILC_FSM_STATE(silc_server_st_accept_connection) /** Out of memory */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } if (!silc_socket_stream_get_info(ac->stream, NULL, &ac->hostname, @@ -189,7 +188,7 @@ SILC_FSM_STATE(silc_server_st_accept_connection) /** Bad socket stream */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Check whether this connection is denied to connect to us. */ @@ -199,7 +198,7 @@ SILC_FSM_STATE(silc_server_st_accept_connection) SILC_LOG_INFO(("Connection %s (%s) is denied", ac->hostname, ac->ip)); ac->error = SILC_STATUS_ERR_BANNED_FROM_SERVER; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } server->params->refcnt++; @@ -218,7 +217,7 @@ SILC_FSM_STATE(silc_server_st_accept_connection) ac->ip)); ac->error = SILC_STATUS_ERR_BANNED_FROM_SERVER; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_LOG_INFO(("Incoming connection %s (%s)", ac->hostname, ac->ip)); @@ -242,7 +241,7 @@ SILC_FSM_STATE(silc_server_st_accept_connection) /** Out of memory */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } silc_ske_set_callbacks(ac->data.ske, silc_server_accept_verify_key, silc_server_accept_completed, ac); @@ -266,7 +265,7 @@ SILC_FSM_STATE(silc_server_st_accept_set_keys) silc_ske_map_status(ac->status), ac->hostname, ac->ip)); ac->error = SILC_STATUS_ERR_KEY_EXCHANGE_FAILED; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_LOG_DEBUG(("Setting keys into use")); @@ -278,7 +277,7 @@ SILC_FSM_STATE(silc_server_st_accept_set_keys) /** Error setting keys */ ac->error = SILC_STATUS_ERR_KEY_EXCHANGE_FAILED; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } silc_packet_set_ciphers(ac->packet_stream, send_key, receive_key); silc_packet_set_hmacs(ac->packet_stream, hmac_send, hmac_receive); @@ -292,7 +291,7 @@ SILC_FSM_STATE(silc_server_st_accept_set_keys) /** Error allocating auth protocol */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /** Waiting authentication completion */ @@ -322,7 +321,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) SILC_CONNTYPE_STRING(ac->data.type))); ac->error = SILC_STATUS_ERR_AUTH_FAILED; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_LOG_DEBUG(("Checking whether connection is allowed")); @@ -348,7 +347,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) conn_number = server->stat.my_routers; } - silc_fsm_sema_init(&ac->wait_register, silc_fsm_get_machine(fsm), 0); + silc_fsm_event_init(&ac->wait_register, silc_fsm_get_machine(fsm), 0); /* Check version */ l_protocol_version = silc_version_to_num(params && params->version_protocol ? @@ -373,7 +372,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error = SILC_STATUS_ERR_BAD_VERSION; ac->error_string = strdup("You support too old protocol version"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Match software version */ @@ -385,7 +384,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error = SILC_STATUS_ERR_BAD_VERSION; ac->error_string = strdup("You support too old software version"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Regex match vendor version */ @@ -397,7 +396,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error = SILC_STATUS_ERR_BAD_VERSION; ac->error_string = strdup("Your software is not supported"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } silc_free(r_vendor_version); @@ -414,7 +413,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; ac->error_string = strdup("Server is full, try again later"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* XXX */ @@ -426,7 +425,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; ac->error_string = strdup("Too many connections from your host"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* If we are waiting backup router connection, do not accept any other @@ -439,7 +438,7 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error_string = strdup("We do not have connection to backup router " "established, try later"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* If we are backup router and this is incoming server connection @@ -455,10 +454,10 @@ SILC_FSM_STATE(silc_server_st_accept_authenticated) ac->error_string = strdup("We do not have connection to primary router " "established, try later"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_FSM_STATE(silc_server_st_accept_client) @@ -477,7 +476,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) int ret; /* Wait here for the NEW_CLIENT or RESUME_CLIENT packet */ - SILC_FSM_SEMA_TIMEDWAIT(&ac->wait_register, 20, 0, &timedout); + SILC_FSM_EVENT_TIMEDWAIT(&ac->wait_register, 20, 0, &timedout); if (!ac->register_packet || timedout) { /** Client did not register */ @@ -485,7 +484,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) ac->hostname, ac->ip)); ac->error = SILC_STATUS_ERR_NOT_REGISTERED; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_LOG_DEBUG(("Connection %s (%s) is client", ac->hostname, ac->ip)); @@ -495,7 +494,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) if (ac->register_packet->type == SILC_PACKET_RESUME_CLIENT) { /** Resume client connection */ silc_fsm_next(fsm, silc_server_st_accept_resume_client); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Get connection parameters */ @@ -531,7 +530,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) ac->error = SILC_STATUS_ERR_INCOMPLETE_INFORMATION; ac->error_string = strdup("Bad NEW_CLIENT packet"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } if (!username) { @@ -541,7 +540,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) ac->error = SILC_STATUS_ERR_INCOMPLETE_INFORMATION; ac->error_string = strdup("You did not send username"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } if (username_len > 128) { @@ -556,8 +555,8 @@ SILC_FSM_STATE(silc_server_st_accept_client) ret = silc_parse_userfqdn(username, u, 128, h, sizeof(h)); if (ret < 2) { /* Hostname not present, add it */ - snprintf(n, sizeof(n), "%s", u); - snprintf(u, sizeof(u) - 1, "%s@%s", n, ac->hostname); + silc_snprintf(n, sizeof(n), "%s", u); + silc_snprintf(u, sizeof(u) - 1, "%s@%s", n, ac->hostname); } else { /* Verify that hostname is same than resolved hostname */ if (strcmp(ac->hostname, h)) { @@ -567,10 +566,10 @@ SILC_FSM_STATE(silc_server_st_accept_client) ac->error = SILC_STATUS_ERR_INCOMPLETE_INFORMATION; ac->error_string = strdup("You sent wrong hostname string"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } - snprintf(n, sizeof(n), "%s", u); - snprintf(u, sizeof(u) - 1, "%s@%s", n, h); + silc_snprintf(n, sizeof(n), "%s", u); + silc_snprintf(u, sizeof(u) - 1, "%s@%s", n, h); } /* If configured as anonymous, scramble the username and hostname */ @@ -587,7 +586,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) /** Out of memory */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } username_len = strlen(scramble); @@ -611,7 +610,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) ac->error = SILC_STATUS_ERR_BAD_NICKNAME; ac->error_string = strdup("Bad nickname"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Create client entry */ @@ -622,7 +621,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) SILC_LOG_ERROR(("Could not create new client entry")); ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Save entry data */ @@ -637,7 +636,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) /** Out of memory */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Send the new client ID to the client. */ @@ -672,7 +671,7 @@ SILC_FSM_STATE(silc_server_st_accept_client) /** Connection accepted */ silc_fsm_next(fsm, silc_server_st_accept_finish); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_FSM_STATE(silc_server_st_accept_resume_client) @@ -680,7 +679,7 @@ SILC_FSM_STATE(silc_server_st_accept_resume_client) /** Connection accepted */ silc_fsm_next(fsm, silc_server_st_accept_finish); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_FSM_STATE(silc_server_st_accept_server) @@ -704,7 +703,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) #if 0 /* Wait here for the NEW_SERVER packet */ - SILC_FSM_SEMA_TIMEDWAIT(&ac->wait_register, 20, 0, &timedout); + SILC_FSM_EVENT_TIMEDWAIT(&ac->wait_register, 20, 0, &timedout); if (!ac->register_packet || timedout) { /** Server did not register */ @@ -713,7 +712,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) ac->hostname, ac->ip)); ac->error = SILC_STATUS_ERR_NOT_REGISTERED; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Get connection parameters */ @@ -781,7 +780,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) ac->error = SILC_STATUS_ERR_INCOMPLETE_INFORMATION; ac->error_string = strdup("Bad NEW_SERVER packet"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } if (name_len > 256) { @@ -799,7 +798,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) ac->error = SILC_STATUS_ERR_INCOMPLETE_INFORMATION; ac->error_string = strdup("Bad Server ID"); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Check for valid server ID */ @@ -812,7 +811,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) ac->error_string = strdup("Your Server ID is not based on your real " "IP address. Check your configuration."); silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Create server entry */ @@ -826,7 +825,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) SILC_LOG_ERROR(("Could not create new server entry")); ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* Save entry data */ @@ -841,7 +840,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) /** Out of memory */ ac->error = SILC_STATUS_ERR_RESOURCE_LIMIT; silc_fsm_next(fsm, silc_server_st_accept_error); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } /* If the incoming connection is router and marked as backup router @@ -954,7 +953,7 @@ SILC_FSM_STATE(silc_server_st_accept_server) /** Connection accepted */ silc_fsm_next(fsm, silc_server_st_accept_finish); - return SILC_FSM_CONTINUE; + SILC_FSM_CONTINUE; } SILC_FSM_STATE(silc_server_st_accept_finish) @@ -964,7 +963,7 @@ SILC_FSM_STATE(silc_server_st_accept_finish) SILC_LOG_DEBUG(("New connection accepted")); - return SILC_FSM_FINISH; + SILC_FSM_FINISH; } SILC_FSM_STATE(silc_server_st_accept_error) @@ -986,5 +985,5 @@ SILC_FSM_STATE(silc_server_st_accept_error) if (ac->connauth) server->stat.auth_failures++; - return SILC_FSM_FINISH; + SILC_FSM_FINISH; }