Skip to content

Commit b25d006

Browse files
ikerexxejustin-stephenson
authored andcommitted
passkey: timeout argument refactor
Timeout to search for a device should be imposed by the action that wants to be performed. Thus, refactor the high level functions and list_devices() to take it as an argument. Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
1 parent 5147c95 commit b25d006

File tree

5 files changed

+31
-26
lines changed

5 files changed

+31
-26
lines changed

src/passkey_child/passkey_child.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ int main(int argc, const char *argv[])
6464
fido_init(init_flags);
6565

6666
if (data.action == ACTION_REGISTER) {
67-
ret = register_key(&data);
67+
ret = register_key(&data, TIMEOUT);
6868
if (ret != EOK) {
6969
ERROR("Error registering key.\n");
7070
goto done;
7171
}
7272
} else if (data.action == ACTION_AUTHENTICATE) {
73-
ret = authenticate(&data);
73+
ret = authenticate(&data, TIMEOUT);
7474
if (ret == EOK) {
7575
PRINT("Authentication success.\n");
7676
goto done;
@@ -79,7 +79,7 @@ int main(int argc, const char *argv[])
7979
goto done;
8080
}
8181
} else if (data.action == ACTION_GET_ASSERT) {
82-
ret = get_assert_data(&data);
82+
ret = get_assert_data(&data, TIMEOUT);
8383
if (ret != EOK) {
8484
ERROR("Error getting assertion data.\n");
8585
goto done;

src/passkey_child/passkey_child.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,13 @@ check_arguments(const struct passkey_data *data);
103103
* @brief Register a key for a user
104104
*
105105
* @param[in] data passkey data
106+
* @param[in] timeout Timeout to stop looking for a device
106107
*
107108
* @return 0 if the key was registered properly,
108109
* another value on error.
109110
*/
110111
errno_t
111-
register_key(struct passkey_data *data);
112+
register_key(struct passkey_data *data, int timeout);
112113

113114
/**
114115
* @brief Translate COSE type from string to int
@@ -139,13 +140,14 @@ prepare_credentials(struct passkey_data *data, fido_dev_t *dev,
139140
/**
140141
* @brief List connected passkey devices
141142
*
143+
* @param[in] timeout Timeout to stop looking for a device
142144
* @param[out] dev_list passkey device list
143145
* @param[out] dev_number Number of passkey devices
144146
*
145147
* @return 0 if the list was retrieved properly, another value on error.
146148
*/
147149
errno_t
148-
list_devices(fido_dev_info_t *dev_list, size_t *dev_number);
150+
list_devices(int timeout, fido_dev_info_t *dev_list, size_t *dev_number);
149151

150152
/**
151153
* @brief Select passkey device
@@ -322,18 +324,20 @@ public_key_to_base64(TALLOC_CTX *mem_ctx, const struct passkey_data *data,
322324
* key, request the assert and verify it.
323325
*
324326
* @param[in] data passkey data
327+
* @param[in] timeout Timeout to stop looking for a device
325328
*
326329
* @return 0 if the user was authenticated properly,
327330
* error code otherwise.
328331
*/
329332
errno_t
330-
authenticate(struct passkey_data *data);
333+
authenticate(struct passkey_data *data, int timeout);
331334

332335
/*
333336
* @brief Select authenticator for verification
334337
*
335338
*
336339
* @param[in] data passkey data
340+
* @param[in] timeout Timeout to stop looking for a device
337341
* @param[out] _dev Device information
338342
* @param[out] _assert Assert
339343
* @param[out] _index Index for key handle list
@@ -342,7 +346,7 @@ authenticate(struct passkey_data *data);
342346
* error code otherwise.
343347
*/
344348
errno_t
345-
select_authenticator(struct passkey_data *data, fido_dev_t **_dev,
349+
select_authenticator(struct passkey_data *data, int timeout, fido_dev_t **_dev,
346350
fido_assert_t **_assert, int *_index);
347351

348352
/**
@@ -533,12 +537,13 @@ print_assert_data(const char *key_handle, const char *crypto_challenge,
533537
* and print this all information.
534538
*
535539
* @param[in] data passkey data
540+
* @param[in] timeout Timeout to stop looking for a device
536541
*
537542
* @return 0 if the assertion was obtained properly,
538543
* error code otherwise.
539544
*/
540545
errno_t
541-
get_assert_data(struct passkey_data *data);
546+
get_assert_data(struct passkey_data *data, int timeout);
542547

543548
/**
544549
* @brief Verify assertion data

src/passkey_child/passkey_child_common.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ check_arguments(const struct passkey_data *data)
424424
}
425425

426426
errno_t
427-
register_key(struct passkey_data *data)
427+
register_key(struct passkey_data *data, int timeout)
428428
{
429429
TALLOC_CTX *tmp_ctx = NULL;
430430
fido_cred_t *cred = NULL;
@@ -460,7 +460,7 @@ register_key(struct passkey_data *data)
460460
goto done;
461461
}
462462

463-
ret = list_devices(dev_list, &dev_number);
463+
ret = list_devices(timeout, dev_list, &dev_number);
464464
if (ret != EOK) {
465465
goto done;
466466
}
@@ -571,7 +571,7 @@ public_key_to_base64(TALLOC_CTX *mem_ctx, const struct passkey_data *data,
571571
}
572572

573573
errno_t
574-
select_authenticator(struct passkey_data *data, fido_dev_t **_dev,
574+
select_authenticator(struct passkey_data *data, int timeout, fido_dev_t **_dev,
575575
fido_assert_t **_assert, int *_index)
576576
{
577577
fido_dev_info_t *dev_list = NULL;
@@ -589,7 +589,7 @@ select_authenticator(struct passkey_data *data, fido_dev_t **_dev,
589589
}
590590

591591
DEBUG(SSSDBG_TRACE_FUNC, "Checking for devices.\n");
592-
ret = list_devices(dev_list, &dev_list_len);
592+
ret = list_devices(timeout, dev_list, &dev_list_len);
593593
if (ret != EOK) {
594594
goto done;
595595
}
@@ -706,7 +706,7 @@ public_key_to_libfido2(const char *pem_public_key, struct pk_data_t *_pk_data)
706706
}
707707

708708
errno_t
709-
authenticate(struct passkey_data *data)
709+
authenticate(struct passkey_data *data, int timeout)
710710
{
711711
TALLOC_CTX *tmp_ctx = NULL;
712712
fido_assert_t *assert = NULL;
@@ -721,7 +721,7 @@ authenticate(struct passkey_data *data)
721721
return ENOMEM;
722722
}
723723

724-
ret = select_authenticator(data, &dev, &assert, &index);
724+
ret = select_authenticator(data, timeout, &dev, &assert, &index);
725725
if (ret != EOK) {
726726
goto done;
727727
}
@@ -779,7 +779,7 @@ authenticate(struct passkey_data *data)
779779
}
780780

781781
errno_t
782-
get_assert_data(struct passkey_data *data)
782+
get_assert_data(struct passkey_data *data, int timeout)
783783
{
784784
TALLOC_CTX *tmp_ctx = NULL;
785785
fido_dev_t *dev = NULL;
@@ -795,7 +795,7 @@ get_assert_data(struct passkey_data *data)
795795
return ENOMEM;
796796
}
797797

798-
ret = select_authenticator(data, &dev, &assert, &index);
798+
ret = select_authenticator(data, timeout, &dev, &assert, &index);
799799
if (ret != EOK) {
800800
goto done;
801801
}

src/passkey_child/passkey_child_devices.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
#include "passkey_child.h"
2929

3030
errno_t
31-
list_devices(fido_dev_info_t *dev_list, size_t *dev_number)
31+
list_devices(int timeout, fido_dev_info_t *dev_list, size_t *dev_number)
3232
{
3333
errno_t ret;
3434

35-
for (int i = 0; i < TIMEOUT; i += FREQUENCY) {
35+
for (int i = 0; i < timeout; i += FREQUENCY) {
3636
ret = fido_dev_info_manifest(dev_list, DEVLIST_SIZE, dev_number);
3737
if (ret != FIDO_OK) {
3838
DEBUG(SSSDBG_OP_FAILURE,
@@ -45,7 +45,7 @@ list_devices(fido_dev_info_t *dev_list, size_t *dev_number)
4545
break;
4646
}
4747

48-
if (i < (TIMEOUT - 1)) {
48+
if (i < (timeout - 1)) {
4949
DEBUG(SSSDBG_TRACE_FUNC, "No device available, retrying.\n");
5050
sleep(FREQUENCY);
5151
}

src/tests/cmocka/test_passkey_child.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ void test_list_devices_one_device(void **state)
658658
will_return(__wrap_fido_dev_info_manifest, FIDO_OK);
659659
will_return(__wrap_fido_dev_info_manifest, 1);
660660

661-
ret = list_devices(ts->dev_list, &ts->dev_number);
661+
ret = list_devices(TIMEOUT, ts->dev_list, &ts->dev_number);
662662

663663
assert_int_equal(ret, FIDO_OK);
664664
assert_int_equal(ts->dev_number, 1);
@@ -677,7 +677,7 @@ void test_list_devices_no_device(void **state)
677677
}
678678
}
679679

680-
ret = list_devices(ts->dev_list, &ts->dev_number);
680+
ret = list_devices(TIMEOUT, ts->dev_list, &ts->dev_number);
681681

682682
assert_int_equal(ret, FIDO_OK);
683683
assert_int_equal(ts->dev_number, 0);
@@ -696,7 +696,7 @@ void test_list_devices_error(void **state)
696696
}
697697
}
698698

699-
ret = list_devices(ts->dev_list, &ts->dev_number);
699+
ret = list_devices(TIMEOUT, ts->dev_list, &ts->dev_number);
700700

701701
assert_int_equal(ret, FIDO_ERR_INVALID_ARGUMENT);
702702
}
@@ -907,7 +907,7 @@ void test_register_key_integration(void **state)
907907
will_return(__wrap_fido_cred_pubkey_ptr, TEST_ES256_HEX_PUBLIC_KEY);
908908
will_return(__wrap_fido_cred_pubkey_len, 64);
909909

910-
ret = register_key(&data);
910+
ret = register_key(&data, TIMEOUT);
911911

912912
assert_int_equal(ret, EOK);
913913
}
@@ -941,7 +941,7 @@ void test_select_authenticator(void **state)
941941
will_return(__wrap_fido_dev_is_fido2, true);
942942
will_return(__wrap_fido_dev_get_assert, FIDO_OK);
943943

944-
ret = select_authenticator(&data, &dev, &assert, &index);
944+
ret = select_authenticator(&data, TIMEOUT, &dev, &assert, &index);
945945

946946
assert_int_equal(ret, FIDO_OK);
947947

@@ -1244,7 +1244,7 @@ void test_authenticate_integration(void **state)
12441244
will_return(__wrap_fido_assert_set_uv, FIDO_OK);
12451245
will_return(__wrap_fido_assert_verify, FIDO_OK);
12461246

1247-
ret = authenticate(&data);
1247+
ret = authenticate(&data, TIMEOUT);
12481248

12491249
assert_int_equal(ret, EOK);
12501250
talloc_free(tmp_ctx);
@@ -1297,7 +1297,7 @@ void test_get_assert_data_integration(void **state)
12971297
will_return(__wrap_fido_assert_sig_ptr, TEST_HEX_SIGNATURE);
12981298
will_return(__wrap_fido_assert_sig_len, TEST_SIGNATURE_LEN);
12991299

1300-
ret = get_assert_data(&data);
1300+
ret = get_assert_data(&data, TIMEOUT);
13011301

13021302
assert_int_equal(ret, EOK);
13031303
talloc_free(tmp_ctx);

0 commit comments

Comments
 (0)