X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_connect.c;h=de87143f047ff3f9dc6be0eb51df4c66b2743fd9;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=f1aedcbb8c563481eb50b485283fec5c60852814;hpb=54756d9cd19d09d28e1b317810faa961a6ff5d51;p=silc.git diff --git a/lib/silcclient/client_connect.c b/lib/silcclient/client_connect.c index f1aedcbb..de87143f 100644 --- a/lib/silcclient/client_connect.c +++ b/lib/silcclient/client_connect.c @@ -280,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); @@ -676,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); @@ -778,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;