X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fcommand.c;h=baddfb1896bb9c82aed0ac3168d8c6aa2829787d;hb=c077f32b9139acbbd3f33d1a3c6293b5788337e6;hp=02ec6d1d6aefaf07681f48562db78c15108bf5f7;hpb=f56f45aa509dde80443f6bf642f7fed0891c082e;p=silc.git diff --git a/apps/silcd/command.c b/apps/silcd/command.c index 02ec6d1d..baddfb18 100644 --- a/apps/silcd/command.c +++ b/apps/silcd/command.c @@ -4583,6 +4583,7 @@ SILC_SERVER_CMD_FUNC(oper) SilcServerConfigAdmin *admin; SilcIDListData idata = (SilcIDListData)client; bool result = FALSE; + SilcPublicKey cached_key; SILC_SERVER_COMMAND_CHECK(SILC_COMMAND_OPER, cmd, 1, 2); @@ -4624,10 +4625,14 @@ SILC_SERVER_CMD_FUNC(oper) result = silc_auth_verify_data(auth, tmp_len, SILC_AUTH_PASSWORD, admin->passphrase, admin->passphrase_len, idata->hash, client->id, SILC_ID_CLIENT); - if (!result && admin->publickey) + if (!result && admin->publickeys) { + cached_key = silc_server_get_public_key(server, admin->publickeys); + if (!cached_key) + goto out; result = silc_auth_verify_data(auth, tmp_len, SILC_AUTH_PUBLIC_KEY, - admin->publickey, 0, - idata->hash, client->id, SILC_ID_CLIENT); + cached_key, 0, idata->hash, + client->id, SILC_ID_CLIENT); + } if (!result) { /* Authentication failed */ silc_server_command_send_status_reply(cmd, SILC_COMMAND_OPER, @@ -4670,6 +4675,7 @@ SILC_SERVER_CMD_FUNC(silcoper) SilcServerConfigAdmin *admin; SilcIDListData idata = (SilcIDListData)client; bool result = FALSE; + SilcPublicKey cached_key; SILC_SERVER_COMMAND_CHECK(SILC_COMMAND_SILCOPER, cmd, 1, 2); @@ -4717,10 +4723,14 @@ SILC_SERVER_CMD_FUNC(silcoper) result = silc_auth_verify_data(auth, tmp_len, SILC_AUTH_PASSWORD, admin->passphrase, admin->passphrase_len, idata->hash, client->id, SILC_ID_CLIENT); - if (!result && admin->publickey) + if (!result && admin->publickeys) { + cached_key = silc_server_get_public_key(server, admin->publickeys); + if (!cached_key) + goto out; result = silc_auth_verify_data(auth, tmp_len, SILC_AUTH_PUBLIC_KEY, - admin->publickey, 0, - idata->hash, client->id, SILC_ID_CLIENT); + cached_key, 0, idata->hash, + client->id, SILC_ID_CLIENT); + } if (!result) { /* Authentication failed */ silc_server_command_send_status_reply(cmd, SILC_COMMAND_OPER,