Linux Audio

Check our new training course

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