auth: eliminate pointless retries in ktc_ListTokensEx 98/13598/5
authorMark Vitale <mvitale@sinenomine.net>
Thu, 23 May 2019 03:03:11 +0000 (23:03 -0400)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 5 Jul 2019 20:04:51 +0000 (16:04 -0400)
ktc_ListTokensEx is an iterator to provide the names of each cell for
which a user has a token set.  It does this by looking for the 1 through
nth token set for a given user.  However, as currently implemented,
it always continues searching up to the 100x safety limit even when
there are no more token sets for the user.

Instead, return immediately when VIOC_GETTOK2 returns EDOM (no more
tokens for this user).

Introduced by commit a86ad262d2a8be36f43ab0885a84dde37ddfc464 'auth: Add
the ktc_ListTokensEx function'.

Change-Id: I880edc80fc6c5580e5919b74b0b561317a1455f0
Reviewed-on: https://gerrit.openafs.org/13598
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/auth/ktc.c

index 34abc5e..0c24908 100644 (file)
@@ -794,6 +794,9 @@ ktc_ListTokensEx(int prevIndex, int *newIndex, char **cellName) {
 
        code = PIOCTL(0, VIOC_GETTOK2, &iob, 0);
 
+       if (code == -1 && errno == EDOM)
+           return KTC_NOENT;   /* no more tokens to be found */
+
        /* Can't use new pioctl, so must use old one */
        if (code == -1 && errno == EINVAL) {
            struct ktc_principal server;