X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_connect.c;h=de87143f047ff3f9dc6be0eb51df4c66b2743fd9;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=f43e13d3c7cf3d0effac1a17e7c36dfa8d1972c5;hpb=3aff28a0144848f416058ac40bbdb7e0d9567a49;p=silc.git diff --git a/lib/silcclient/client_connect.c b/lib/silcclient/client_connect.c index f43e13d3..de87143f 100644 --- a/lib/silcclient/client_connect.c +++ b/lib/silcclient/client_connect.c @@ -176,7 +176,6 @@ static void silc_client_ke_completion(SilcSKE ske, silc_ske_map_status(status)); conn->internal->status = SILC_CLIENT_CONN_ERROR_KE; - conn->internal->error = status; silc_ske_free_rekey_material(rekey); silc_fsm_next(fsm, silc_client_st_connect_error); @@ -281,14 +280,18 @@ static void silc_client_rekey_completion(SilcSKE ske, /* Callback called by application to return authentication data */ static void silc_client_connect_auth_method(SilcAuthMethod auth_meth, - void *auth, SilcUInt32 auth_len, + const void *auth, + SilcUInt32 auth_len, void *context) { SilcFSMThread fsm = context; SilcClientConnection conn = silc_fsm_get_context(fsm); conn->internal->params.auth_method = auth_meth; - conn->internal->params.auth = auth; + if (auth_meth == SILC_AUTH_PASSWORD) + conn->internal->params.auth = silc_memdup(auth, auth_len); + else + conn->internal->params.auth = (void *)auth; conn->internal->params.auth_len = auth_len; SILC_FSM_CALL_CONTINUE(fsm); @@ -677,6 +680,13 @@ SILC_FSM_STATE(silc_client_st_connected) silc_ske_free(conn->internal->ske); conn->internal->ske = NULL; + if (!conn->internal->params.auth_set && + conn->internal->params.auth_method == SILC_AUTH_PASSWORD && + conn->internal->params.auth) { + silc_free(conn->internal->params.auth); + conn->internal->params.auth = NULL; + } + if (conn->internal->disconnected) { /** Disconnected */ silc_fsm_next(fsm, silc_client_st_connect_error); @@ -779,9 +789,8 @@ SILC_FSM_STATE(silc_client_st_rekey) /* Allocate SKE */ conn->internal->ske = - silc_ske_alloc(client->rng, conn->internal->schedule, - conn->internal->params.repository, - conn->public_key, conn->private_key, fsm); + silc_ske_alloc(client->rng, conn->internal->schedule, NULL, + conn->public_key, NULL, fsm); if (!conn->internal->ske) return SILC_FSM_FINISH;