~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/ceph/auth_none.c

Version: ~ [ linux-5.4-rc3 ] ~ [ linux-5.3.6 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.79 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.149 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.196 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.196 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.75 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 14 static void reset(struct ceph_auth_client *ac)
 15 {
 16         struct ceph_auth_none_info *xi = ac->private;
 17 
 18         xi->starting = true;
 19 }
 20 
 21 static void destroy(struct ceph_auth_client *ac)
 22 {
 23         kfree(ac->private);
 24         ac->private = NULL;
 25 }
 26 
 27 static int is_authenticated(struct ceph_auth_client *ac)
 28 {
 29         struct ceph_auth_none_info *xi = ac->private;
 30 
 31         return !xi->starting;
 32 }
 33 
 34 static 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 
 41 static 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_auth_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 
 58 e_range:
 59         return -ERANGE;
 60 }
 61 
 62 static 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  */
 71 static 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 
 80 static void ceph_auth_none_destroy_authorizer(struct ceph_authorizer *a)
 81 {
 82         kfree(a);
 83 }
 84 
 85 /*
 86  * build an 'authorizer' with our entity_name and global_id.  it is
 87  * identical for all services we connect to.
 88  */
 89 static int ceph_auth_none_create_authorizer(
 90         struct ceph_auth_client *ac, int peer_type,
 91         struct ceph_auth_handshake *auth)
 92 {
 93         struct ceph_none_authorizer *au;
 94         int ret;
 95 
 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;
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;
115 }
116 
117 static 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,
126 };
127 
128 int 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;
138 
139         ac->protocol = CEPH_AUTH_NONE;
140         ac->private = xi;
141         ac->ops = &ceph_auth_none_ops;
142         return 0;
143 }
144 
145 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp