mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-12 06:42:12 +00:00
![Ilya Dryomov](/assets/img/avatar_default.png)
Back in 2013, commit 4b8e8b5d78b8 ("libceph: fix authorizer invalidation") tried to fix authorizer invalidation issues by clearing validity field. However, nothing ever consults this field, so it doesn't force us to request any new secrets in any way and therefore we never get out of the exponential backoff mode: [ 129.973812] libceph: osd2 192.168.122.1:6810 connect authorization failure [ 130.706785] libceph: osd2 192.168.122.1:6810 connect authorization failure [ 131.710088] libceph: osd2 192.168.122.1:6810 connect authorization failure [ 133.708321] libceph: osd2 192.168.122.1:6810 connect authorization failure [ 137.706598] libceph: osd2 192.168.122.1:6810 connect authorization failure ... AFAICT this was the case at the time 4b8e8b5d78b8 was merged, too. Using timespec solely as a bool isn't nice, so introduce a new have_key flag, specifically for this purpose. Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Sage Weil <sage@redhat.com>
54 lines
921 B
C
54 lines
921 B
C
#ifndef _FS_CEPH_AUTH_X_H
|
|
#define _FS_CEPH_AUTH_X_H
|
|
|
|
#include <linux/rbtree.h>
|
|
|
|
#include <linux/ceph/auth.h>
|
|
|
|
#include "crypto.h"
|
|
#include "auth_x_protocol.h"
|
|
|
|
/*
|
|
* Handle ticket for a single service.
|
|
*/
|
|
struct ceph_x_ticket_handler {
|
|
struct rb_node node;
|
|
unsigned int service;
|
|
|
|
struct ceph_crypto_key session_key;
|
|
struct ceph_timespec validity;
|
|
bool have_key;
|
|
|
|
u64 secret_id;
|
|
struct ceph_buffer *ticket_blob;
|
|
|
|
unsigned long renew_after, expires;
|
|
};
|
|
|
|
|
|
struct ceph_x_authorizer {
|
|
struct ceph_crypto_key session_key;
|
|
struct ceph_buffer *buf;
|
|
unsigned int service;
|
|
u64 nonce;
|
|
u64 secret_id;
|
|
char reply_buf[128]; /* big enough for encrypted blob */
|
|
};
|
|
|
|
struct ceph_x_info {
|
|
struct ceph_crypto_key secret;
|
|
|
|
bool starting;
|
|
u64 server_challenge;
|
|
|
|
unsigned int have_keys;
|
|
struct rb_root ticket_handlers;
|
|
|
|
struct ceph_x_authorizer auth_authorizer;
|
|
};
|
|
|
|
int ceph_x_init(struct ceph_auth_client *ac);
|
|
|
|
#endif
|
|
|