Index: sk-usbhid.c =================================================================== RCS file: /cvs/src/usr.bin/ssh/sk-usbhid.c,v retrieving revision 1.29 diff -u -p -r1.29 sk-usbhid.c --- ssh/sk-usbhid.c 18 Feb 2021 02:15:07 -0000 1.29 +++ ssh/sk-usbhid.c 2 Mar 2021 23:53:55 -0000 @@ -37,6 +37,17 @@ #include #include +/* backwards compat for libfido2 */ +#ifndef HAVE_FIDO_DEV_SUPPORTS_CRED_PROT +#define fido_dev_supports_cred_prot(x) (0) +#endif +#ifndef HAVE_FIDO_DEV_GET_TOUCH_BEGIN +#define fido_dev_get_touch_begin(x) (FIDO_ERR_UNSUPPORTED_OPTION) +#endif +#ifndef HAVE_FIDO_DEV_GET_TOUCH_STATUS +#define fido_dev_get_touch_status(x, y, z) (FIDO_ERR_UNSUPPORTED_OPTION) +#endif + #ifndef SK_STANDALONE # include "log.h" # include "xmalloc.h" @@ -393,6 +404,11 @@ sk_select_by_touch(const fido_dev_info_t } goto out; } +#ifndef HAVE_FIDO_DEV_GET_TOUCH_STATUS + skdebug(__func__, "libfido2 version does not support a feature needed for multiple tokens. Please upgrade to >=1.5.0"); + goto out; +#endif + if (sk_touch_begin(skv, skvcnt) == -1) { skdebug(__func__, "sk_touch_begin failed"); goto out; @@ -708,6 +724,13 @@ sk_enroll(uint32_t alg, const uint8_t *c goto out; } if ((flags & (SSH_SK_RESIDENT_KEY|SSH_SK_USER_VERIFICATION_REQD)) != 0) { +#if !defined(HAVE_FIDO_DEV_SUPPORTS_CRED_PROT) || \ + !defined(HAVE_FIDO_CRED_SET_PROT) + skdebug(__func__, "libfido2 version does not support a feature required for this operation. Please upgrade to >=1.5.0"); + ret = SSH_SK_ERR_UNSUPPORTED; + goto out; + credprot = 0; (void)credprot; /* avoid warning */ +#endif if (!fido_dev_supports_cred_prot(sk->dev)) { skdebug(__func__, "%s does not support credprot, " "refusing to create unprotected "