auth_none.c (e5451c8f8330e03ad3cfa16048b4daf961af434f) | auth_none.c (6c1ea260f89709e0021d2c59f8fd2a104b5b1123) |
---|---|
1 2#include <linux/ceph/ceph_debug.h> 3 4#include <linux/err.h> 5#include <linux/module.h> 6#include <linux/random.h> 7#include <linux/slab.h> 8 9#include <linux/ceph/decode.h> 10#include <linux/ceph/auth.h> 11 12#include "auth_none.h" 13 14static void reset(struct ceph_auth_client *ac) 15{ 16 struct ceph_auth_none_info *xi = ac->private; 17 18 xi->starting = true; | 1 2#include <linux/ceph/ceph_debug.h> 3 4#include <linux/err.h> 5#include <linux/module.h> 6#include <linux/random.h> 7#include <linux/slab.h> 8 9#include <linux/ceph/decode.h> 10#include <linux/ceph/auth.h> 11 12#include "auth_none.h" 13 14static void reset(struct ceph_auth_client *ac) 15{ 16 struct ceph_auth_none_info *xi = ac->private; 17 18 xi->starting = true; |
19 xi->built_authorizer = false; | |
20} 21 22static void destroy(struct ceph_auth_client *ac) 23{ 24 kfree(ac->private); 25 ac->private = NULL; 26} 27 --- 6 unchanged lines hidden (view full) --- 34 35static int should_authenticate(struct ceph_auth_client *ac) 36{ 37 struct ceph_auth_none_info *xi = ac->private; 38 39 return xi->starting; 40} 41 | 19} 20 21static void destroy(struct ceph_auth_client *ac) 22{ 23 kfree(ac->private); 24 ac->private = NULL; 25} 26 --- 6 unchanged lines hidden (view full) --- 33 34static int should_authenticate(struct ceph_auth_client *ac) 35{ 36 struct ceph_auth_none_info *xi = ac->private; 37 38 return xi->starting; 39} 40 |
41static int ceph_auth_none_build_authorizer(struct ceph_auth_client *ac, 42 struct ceph_none_authorizer *au) 43{ 44 void *p = au->buf; 45 void *const end = p + sizeof(au->buf); 46 int ret; 47 48 ceph_encode_8_safe(&p, end, 1, e_range); 49 ret = ceph_entity_name_encode(ac->name, &p, end); 50 if (ret < 0) 51 return ret; 52 53 ceph_encode_64_safe(&p, end, ac->global_id, e_range); 54 au->buf_len = p - (void *)au->buf; 55 dout("%s built authorizer len %d\n", __func__, au->buf_len); 56 return 0; 57 58e_range: 59 return -ERANGE; 60} 61 |
|
42static int build_request(struct ceph_auth_client *ac, void *buf, void *end) 43{ 44 return 0; 45} 46 47/* 48 * the generic auth code decode the global_id, and we carry no actual 49 * authenticate state, so nothing happens here. 50 */ 51static int handle_reply(struct ceph_auth_client *ac, int result, 52 void *buf, void *end) 53{ 54 struct ceph_auth_none_info *xi = ac->private; 55 56 xi->starting = false; 57 return result; 58} 59 | 62static int build_request(struct ceph_auth_client *ac, void *buf, void *end) 63{ 64 return 0; 65} 66 67/* 68 * the generic auth code decode the global_id, and we carry no actual 69 * authenticate state, so nothing happens here. 70 */ 71static int handle_reply(struct ceph_auth_client *ac, int result, 72 void *buf, void *end) 73{ 74 struct ceph_auth_none_info *xi = ac->private; 75 76 xi->starting = false; 77 return result; 78} 79 |
80static void ceph_auth_none_destroy_authorizer(struct ceph_authorizer *a) 81{ 82 kfree(a); 83} 84 |
|
60/* | 85/* |
61 * build an 'authorizer' with our entity_name and global_id. we can 62 * reuse a single static copy since it is identical for all services 63 * we connect to. | 86 * build an 'authorizer' with our entity_name and global_id. it is 87 * identical for all services we connect to. |
64 */ 65static int ceph_auth_none_create_authorizer( 66 struct ceph_auth_client *ac, int peer_type, 67 struct ceph_auth_handshake *auth) 68{ | 88 */ 89static int ceph_auth_none_create_authorizer( 90 struct ceph_auth_client *ac, int peer_type, 91 struct ceph_auth_handshake *auth) 92{ |
69 struct ceph_auth_none_info *ai = ac->private; 70 struct ceph_none_authorizer *au = &ai->au; 71 void *p, *end; | 93 struct ceph_none_authorizer *au; |
72 int ret; 73 | 94 int ret; 95 |
74 if (!ai->built_authorizer) { 75 p = au->buf; 76 end = p + sizeof(au->buf); 77 ceph_encode_8(&p, 1); 78 ret = ceph_entity_name_encode(ac->name, &p, end - 8); 79 if (ret < 0) 80 goto bad; 81 ceph_decode_need(&p, end, sizeof(u64), bad2); 82 ceph_encode_64(&p, ac->global_id); 83 au->buf_len = p - (void *)au->buf; 84 ai->built_authorizer = true; 85 dout("built authorizer len %d\n", au->buf_len); | 96 au = kmalloc(sizeof(*au), GFP_NOFS); 97 if (!au) 98 return -ENOMEM; 99 100 au->base.destroy = ceph_auth_none_destroy_authorizer; 101 102 ret = ceph_auth_none_build_authorizer(ac, au); 103 if (ret) { 104 kfree(au); 105 return ret; |
86 } 87 88 auth->authorizer = (struct ceph_authorizer *) au; 89 auth->authorizer_buf = au->buf; 90 auth->authorizer_buf_len = au->buf_len; 91 auth->authorizer_reply_buf = au->reply_buf; 92 auth->authorizer_reply_buf_len = sizeof (au->reply_buf); 93 94 return 0; | 106 } 107 108 auth->authorizer = (struct ceph_authorizer *) au; 109 auth->authorizer_buf = au->buf; 110 auth->authorizer_buf_len = au->buf_len; 111 auth->authorizer_reply_buf = au->reply_buf; 112 auth->authorizer_reply_buf_len = sizeof (au->reply_buf); 113 114 return 0; |
95 96bad2: 97 ret = -ERANGE; 98bad: 99 return ret; | |
100} 101 | 115} 116 |
102static void ceph_auth_none_destroy_authorizer(struct ceph_auth_client *ac, 103 struct ceph_authorizer *a) 104{ 105 /* nothing to do */ 106} 107 | |
108static const struct ceph_auth_client_ops ceph_auth_none_ops = { 109 .name = "none", 110 .reset = reset, 111 .destroy = destroy, 112 .is_authenticated = is_authenticated, 113 .should_authenticate = should_authenticate, 114 .build_request = build_request, 115 .handle_reply = handle_reply, 116 .create_authorizer = ceph_auth_none_create_authorizer, | 117static const struct ceph_auth_client_ops ceph_auth_none_ops = { 118 .name = "none", 119 .reset = reset, 120 .destroy = destroy, 121 .is_authenticated = is_authenticated, 122 .should_authenticate = should_authenticate, 123 .build_request = build_request, 124 .handle_reply = handle_reply, 125 .create_authorizer = ceph_auth_none_create_authorizer, |
117 .destroy_authorizer = ceph_auth_none_destroy_authorizer, | |
118}; 119 120int ceph_auth_none_init(struct ceph_auth_client *ac) 121{ 122 struct ceph_auth_none_info *xi; 123 124 dout("ceph_auth_none_init %p\n", ac); 125 xi = kzalloc(sizeof(*xi), GFP_NOFS); 126 if (!xi) 127 return -ENOMEM; 128 129 xi->starting = true; | 126}; 127 128int ceph_auth_none_init(struct ceph_auth_client *ac) 129{ 130 struct ceph_auth_none_info *xi; 131 132 dout("ceph_auth_none_init %p\n", ac); 133 xi = kzalloc(sizeof(*xi), GFP_NOFS); 134 if (!xi) 135 return -ENOMEM; 136 137 xi->starting = true; |
130 xi->built_authorizer = false; | |
131 132 ac->protocol = CEPH_AUTH_NONE; 133 ac->private = xi; 134 ac->ops = &ceph_auth_none_ops; 135 return 0; 136} 137 | 138 139 ac->protocol = CEPH_AUTH_NONE; 140 ac->private = xi; 141 ac->ops = &ceph_auth_none_ops; 142 return 0; 143} 144 |