diff options
author | Daiki Ueno <ueno@gnu.org> | 2023-05-05 21:00:12 +0000 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2023-05-05 21:00:12 +0000 |
commit | 0263dec937e02ab71fd9cb158fa69acf7c374481 (patch) | |
tree | 1e84b4e61a611894f264ceb5e9e2ef9a51dacfd0 /lib/auth/psk_passwd.c | |
parent | 643342325a15e652fedac27b7bcb4614a242ab0d (diff) | |
parent | 4fe788cc172e6c06f40a42ba516a60f21369018c (diff) | |
download | gnutls-0263dec937e02ab71fd9cb158fa69acf7c374481.tar.gz |
psk: Add basic support for RFC 9258 external PSK importer interface
Closes #1355
See merge request gnutls/gnutls!1741
Diffstat (limited to 'lib/auth/psk_passwd.c')
-rw-r--r-- | lib/auth/psk_passwd.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/auth/psk_passwd.c b/lib/auth/psk_passwd.c index 70f59c7738..eff339dd17 100644 --- a/lib/auth/psk_passwd.c +++ b/lib/auth/psk_passwd.c @@ -149,7 +149,8 @@ static int _randomize_psk(gnutls_datum_t *psk) * If the user doesn't exist a random password is returned instead. */ int _gnutls_psk_pwd_find_entry(gnutls_session_t session, const char *username, - uint16_t username_len, gnutls_datum_t *psk) + uint16_t username_len, gnutls_datum_t *psk, + gnutls_psk_key_flags *flags) { gnutls_psk_server_credentials_t cred; FILE *fp; @@ -170,8 +171,7 @@ int _gnutls_psk_pwd_find_entry(gnutls_session_t session, const char *username, * set, use it. */ if (cred->pwd_callback != NULL) { - ret = cred->pwd_callback(session, &username_datum, psk); - + ret = cred->pwd_callback(session, &username_datum, psk, flags); if (ret == 1) { /* the user does not exist */ ret = _randomize_psk(psk); if (ret < 0) { @@ -212,6 +212,9 @@ int _gnutls_psk_pwd_find_entry(gnutls_session_t session, const char *username, ret = GNUTLS_E_SRP_PWD_ERROR; goto cleanup; } + if (flags) { + *flags = 0; + } ret = 0; goto cleanup; } @@ -224,6 +227,9 @@ int _gnutls_psk_pwd_find_entry(gnutls_session_t session, const char *username, goto cleanup; } + if (flags) { + *flags = 0; + } ret = 0; cleanup: if (fp != NULL) @@ -241,7 +247,7 @@ cleanup: int _gnutls_find_psk_key(gnutls_session_t session, gnutls_psk_client_credentials_t cred, gnutls_datum_t *username, gnutls_datum_t *key, - int *free) + gnutls_psk_key_flags *flags, int *free) { int ret; @@ -252,11 +258,14 @@ int _gnutls_find_psk_key(gnutls_session_t session, username->size = cred->username.size; key->data = cred->key.data; key->size = cred->key.size; + if (flags) { + *flags = 0; + } } else if (cred->get_function != NULL) { - ret = cred->get_function(session, username, key); - - if (ret) + ret = cred->get_function(session, username, key, flags); + if (ret) { return gnutls_assert_val(ret); + } *free = 1; } else |