Branch data Line data Source code
1 : : /*
2 : : * linux/net/sunrpc/auth_null.c
3 : : *
4 : : * AUTH_NULL authentication. Really :-)
5 : : *
6 : : * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
7 : : */
8 : :
9 : : #include <linux/types.h>
10 : : #include <linux/module.h>
11 : : #include <linux/sunrpc/clnt.h>
12 : :
13 : : #ifdef RPC_DEBUG
14 : : # define RPCDBG_FACILITY RPCDBG_AUTH
15 : : #endif
16 : :
17 : : static struct rpc_auth null_auth;
18 : : static struct rpc_cred null_cred;
19 : :
20 : : static struct rpc_auth *
21 : 0 : nul_create(struct rpc_auth_create_args *args, struct rpc_clnt *clnt)
22 : : {
23 : : atomic_inc(&null_auth.au_count);
24 : 0 : return &null_auth;
25 : : }
26 : :
27 : : static void
28 : 0 : nul_destroy(struct rpc_auth *auth)
29 : : {
30 : 0 : }
31 : :
32 : : /*
33 : : * Lookup NULL creds for current process
34 : : */
35 : : static struct rpc_cred *
36 : 0 : nul_lookup_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
37 : : {
38 : 0 : return get_rpccred(&null_cred);
39 : : }
40 : :
41 : : /*
42 : : * Destroy cred handle.
43 : : */
44 : : static void
45 : 0 : nul_destroy_cred(struct rpc_cred *cred)
46 : : {
47 : 0 : }
48 : :
49 : : /*
50 : : * Match cred handle against current process
51 : : */
52 : : static int
53 : 0 : nul_match(struct auth_cred *acred, struct rpc_cred *cred, int taskflags)
54 : : {
55 : 0 : return 1;
56 : : }
57 : :
58 : : /*
59 : : * Marshal credential.
60 : : */
61 : : static __be32 *
62 : 0 : nul_marshal(struct rpc_task *task, __be32 *p)
63 : : {
64 : 0 : *p++ = htonl(RPC_AUTH_NULL);
65 : 0 : *p++ = 0;
66 : 0 : *p++ = htonl(RPC_AUTH_NULL);
67 : 0 : *p++ = 0;
68 : :
69 : 0 : return p;
70 : : }
71 : :
72 : : /*
73 : : * Refresh credential. This is a no-op for AUTH_NULL
74 : : */
75 : : static int
76 : 0 : nul_refresh(struct rpc_task *task)
77 : : {
78 : 0 : set_bit(RPCAUTH_CRED_UPTODATE, &task->tk_rqstp->rq_cred->cr_flags);
79 : 0 : return 0;
80 : : }
81 : :
82 : : static __be32 *
83 : 0 : nul_validate(struct rpc_task *task, __be32 *p)
84 : : {
85 : : rpc_authflavor_t flavor;
86 : : u32 size;
87 : :
88 : 0 : flavor = ntohl(*p++);
89 [ # # ]: 0 : if (flavor != RPC_AUTH_NULL) {
90 : 0 : printk("RPC: bad verf flavor: %u\n", flavor);
91 : 0 : return ERR_PTR(-EIO);
92 : : }
93 : :
94 : 0 : size = ntohl(*p++);
95 [ # # ]: 0 : if (size != 0) {
96 : 0 : printk("RPC: bad verf size: %u\n", size);
97 : 0 : return ERR_PTR(-EIO);
98 : : }
99 : :
100 : 0 : return p;
101 : : }
102 : :
103 : : const struct rpc_authops authnull_ops = {
104 : : .owner = THIS_MODULE,
105 : : .au_flavor = RPC_AUTH_NULL,
106 : : .au_name = "NULL",
107 : : .create = nul_create,
108 : : .destroy = nul_destroy,
109 : : .lookup_cred = nul_lookup_cred,
110 : : };
111 : :
112 : : static
113 : : struct rpc_auth null_auth = {
114 : : .au_cslack = 4,
115 : : .au_rslack = 2,
116 : : .au_ops = &authnull_ops,
117 : : .au_flavor = RPC_AUTH_NULL,
118 : : .au_count = ATOMIC_INIT(0),
119 : : };
120 : :
121 : : static
122 : : const struct rpc_credops null_credops = {
123 : : .cr_name = "AUTH_NULL",
124 : : .crdestroy = nul_destroy_cred,
125 : : .crbind = rpcauth_generic_bind_cred,
126 : : .crmatch = nul_match,
127 : : .crmarshal = nul_marshal,
128 : : .crrefresh = nul_refresh,
129 : : .crvalidate = nul_validate,
130 : : };
131 : :
132 : : static
133 : : struct rpc_cred null_cred = {
134 : : .cr_lru = LIST_HEAD_INIT(null_cred.cr_lru),
135 : : .cr_auth = &null_auth,
136 : : .cr_ops = &null_credops,
137 : : .cr_count = ATOMIC_INIT(1),
138 : : .cr_flags = 1UL << RPCAUTH_CRED_UPTODATE,
139 : : #ifdef RPC_DEBUG
140 : : .cr_magic = RPCAUTH_CRED_MAGIC,
141 : : #endif
142 : : };
|