Pass type of requested key in the callback credential set
This commit is contained in:
@@ -689,12 +689,18 @@ typedef struct {
|
|||||||
* Callback function to receive Passphrases
|
* Callback function to receive Passphrases
|
||||||
*/
|
*/
|
||||||
static shared_key_t* passphrase_cb(passphrase_cb_data_t *data,
|
static shared_key_t* passphrase_cb(passphrase_cb_data_t *data,
|
||||||
|
shared_key_type_t type,
|
||||||
identification_t *me, identification_t *other,
|
identification_t *me, identification_t *other,
|
||||||
id_match_t *match_me, id_match_t *match_other)
|
id_match_t *match_me, id_match_t *match_other)
|
||||||
{
|
{
|
||||||
chunk_t secret;
|
chunk_t secret;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
|
if (type != SHARED_ANY && type != SHARED_PRIVATE_KEY_PASS)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (data->try > 1)
|
if (data->try > 1)
|
||||||
{
|
{
|
||||||
if (data->try > 5)
|
if (data->try > 5)
|
||||||
@@ -744,13 +750,18 @@ typedef struct {
|
|||||||
/**
|
/**
|
||||||
* Callback function to receive PINs
|
* Callback function to receive PINs
|
||||||
*/
|
*/
|
||||||
static shared_key_t* pin_cb(pin_cb_data_t *data,
|
static shared_key_t* pin_cb(pin_cb_data_t *data, shared_key_type_t type,
|
||||||
identification_t *me, identification_t *other,
|
identification_t *me, identification_t *other,
|
||||||
id_match_t *match_me, id_match_t *match_other)
|
id_match_t *match_me, id_match_t *match_other)
|
||||||
{
|
{
|
||||||
chunk_t secret;
|
chunk_t secret;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
|
if (type != SHARED_ANY && type != SHARED_PIN)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!me || !chunk_equals(me->get_encoding(me), data->keyid))
|
if (!me || !chunk_equals(me->get_encoding(me), data->keyid))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ typedef struct {
|
|||||||
enumerator_t public;
|
enumerator_t public;
|
||||||
/* backref to this */
|
/* backref to this */
|
||||||
private_callback_cred_t *this;
|
private_callback_cred_t *this;
|
||||||
|
/* type if requested key */
|
||||||
|
shared_key_type_t type;
|
||||||
/* own identity to match */
|
/* own identity to match */
|
||||||
identification_t *me;
|
identification_t *me;
|
||||||
/* other identity to match */
|
/* other identity to match */
|
||||||
@@ -62,7 +64,7 @@ METHOD(enumerator_t, shared_enumerate, bool,
|
|||||||
id_match_t *match_me, id_match_t *match_other)
|
id_match_t *match_me, id_match_t *match_other)
|
||||||
{
|
{
|
||||||
DESTROY_IF(this->current);
|
DESTROY_IF(this->current);
|
||||||
this->current = this->this->cb.shared(this->this->data,
|
this->current = this->this->cb.shared(this->this->data, this->type,
|
||||||
this->me, this->other, match_me, match_other);
|
this->me, this->other, match_me, match_other);
|
||||||
if (this->current)
|
if (this->current)
|
||||||
{
|
{
|
||||||
@@ -91,6 +93,7 @@ METHOD(credential_set_t, create_shared_enumerator, enumerator_t*,
|
|||||||
.destroy = _shared_destroy,
|
.destroy = _shared_destroy,
|
||||||
},
|
},
|
||||||
.this = this,
|
.this = this,
|
||||||
|
.type = type,
|
||||||
.me = me,
|
.me = me,
|
||||||
.other = other,
|
.other = other,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -28,12 +28,14 @@ typedef struct callback_cred_t callback_cred_t;
|
|||||||
/**
|
/**
|
||||||
* Callback function to get shared keys.
|
* Callback function to get shared keys.
|
||||||
*
|
*
|
||||||
|
* @param type type of requested shared key
|
||||||
* @param me own identity
|
* @param me own identity
|
||||||
* @param other other identity
|
* @param other other identity
|
||||||
* @param match_me match result of own identity
|
* @param match_me match result of own identity
|
||||||
* @param match_other match result of other identity
|
* @param match_other match result of other identity
|
||||||
*/
|
*/
|
||||||
typedef shared_key_t* (*callback_cred_shared_cb_t)(void *data,
|
typedef shared_key_t* (*callback_cred_shared_cb_t)(
|
||||||
|
void *data, shared_key_type_t type,
|
||||||
identification_t *me, identification_t *other,
|
identification_t *me, identification_t *other,
|
||||||
id_match_t *match_me, id_match_t *match_other);
|
id_match_t *match_me, id_match_t *match_other);
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -554,12 +554,17 @@ typedef struct {
|
|||||||
/**
|
/**
|
||||||
* Passphrase callback to read from whack fd
|
* Passphrase callback to read from whack fd
|
||||||
*/
|
*/
|
||||||
static shared_key_t* whack_pass_cb(prompt_pass_t *pass,
|
static shared_key_t* whack_pass_cb(prompt_pass_t *pass, shared_key_type_t type,
|
||||||
identification_t *me, identification_t *other,
|
identification_t *me, identification_t *other,
|
||||||
id_match_t *match_me, id_match_t *match_other)
|
id_match_t *match_me, id_match_t *match_other)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
if (type != SHARED_ANY && type != SHARED_PRIVATE_KEY_PASS)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (pass->try > MAX_PROMPT_PASS_TRIALS)
|
if (pass->try > MAX_PROMPT_PASS_TRIALS)
|
||||||
{
|
{
|
||||||
whack_log(RC_LOG_SERIOUS, "invalid passphrase, too many trials");
|
whack_log(RC_LOG_SERIOUS, "invalid passphrase, too many trials");
|
||||||
|
|||||||
Reference in New Issue
Block a user