Blame view

net/sunrpc/auth_null.c 2.64 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
  /*
   * linux/net/sunrpc/auth_null.c
   *
   * AUTH_NULL authentication. Really :-)
   *
   * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
   */
  
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
  #include <linux/module.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
  #include <linux/sunrpc/clnt.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12

f895b252d   Jeff Layton   sunrpc: eliminate...
13
  #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
15
16
17
18
19
20
  # define RPCDBG_FACILITY	RPCDBG_AUTH
  #endif
  
  static struct rpc_auth null_auth;
  static struct rpc_cred null_cred;
  
  static struct rpc_auth *
c21906610   Trond Myklebust   SUNRPC: Replace c...
21
  nul_create(struct rpc_auth_create_args *args, struct rpc_clnt *clnt)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  {
  	atomic_inc(&null_auth.au_count);
  	return &null_auth;
  }
  
  static void
  nul_destroy(struct rpc_auth *auth)
  {
  }
  
  /*
   * Lookup NULL creds for current process
   */
  static struct rpc_cred *
  nul_lookup_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
  {
bd9560805   NeilBrown   sunrpc/auth: allo...
38
39
  	if (flags & RPCAUTH_LOOKUP_RCU)
  		return &null_cred;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  	return get_rpccred(&null_cred);
  }
  
  /*
   * Destroy cred handle.
   */
  static void
  nul_destroy_cred(struct rpc_cred *cred)
  {
  }
  
  /*
   * Match cred handle against current process
   */
  static int
  nul_match(struct auth_cred *acred, struct rpc_cred *cred, int taskflags)
  {
  	return 1;
  }
  
  /*
   * Marshal credential.
   */
d8ed029d6   Alexey Dobriyan   [SUNRPC]: trivial...
63
64
  static __be32 *
  nul_marshal(struct rpc_task *task, __be32 *p)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  {
  	*p++ = htonl(RPC_AUTH_NULL);
  	*p++ = 0;
  	*p++ = htonl(RPC_AUTH_NULL);
  	*p++ = 0;
  
  	return p;
  }
  
  /*
   * Refresh credential. This is a no-op for AUTH_NULL
   */
  static int
  nul_refresh(struct rpc_task *task)
  {
a17c2153d   Trond Myklebust   SUNRPC: Move the ...
80
  	set_bit(RPCAUTH_CRED_UPTODATE, &task->tk_rqstp->rq_cred->cr_flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
81
82
  	return 0;
  }
d8ed029d6   Alexey Dobriyan   [SUNRPC]: trivial...
83
84
  static __be32 *
  nul_validate(struct rpc_task *task, __be32 *p)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
85
86
87
88
89
90
91
92
  {
  	rpc_authflavor_t	flavor;
  	u32			size;
  
  	flavor = ntohl(*p++);
  	if (flavor != RPC_AUTH_NULL) {
  		printk("RPC: bad verf flavor: %u
  ", flavor);
35fa5f7b3   Andy Adamson   SUNRPC refactor r...
93
  		return ERR_PTR(-EIO);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
97
98
99
  	}
  
  	size = ntohl(*p++);
  	if (size != 0) {
  		printk("RPC: bad verf size: %u
  ", size);
35fa5f7b3   Andy Adamson   SUNRPC refactor r...
100
  		return ERR_PTR(-EIO);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
102
103
104
  	}
  
  	return p;
  }
f1c0a8615   Trond Myklebust   SUNRPC: Mark auth...
105
  const struct rpc_authops authnull_ops = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106
107
  	.owner		= THIS_MODULE,
  	.au_flavor	= RPC_AUTH_NULL,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
  	.au_name	= "NULL",
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109
110
111
112
113
114
115
116
117
118
  	.create		= nul_create,
  	.destroy	= nul_destroy,
  	.lookup_cred	= nul_lookup_cred,
  };
  
  static
  struct rpc_auth null_auth = {
  	.au_cslack	= 4,
  	.au_rslack	= 2,
  	.au_ops		= &authnull_ops,
81039f1f2   Trond Myklebust   NFS: Display the ...
119
120
  	.au_flavor	= RPC_AUTH_NULL,
  	.au_count	= ATOMIC_INIT(0),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
121
122
123
  };
  
  static
f1c0a8615   Trond Myklebust   SUNRPC: Mark auth...
124
  const struct rpc_credops null_credops = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
125
126
  	.cr_name	= "AUTH_NULL",
  	.crdestroy	= nul_destroy_cred,
5c691044e   Trond Myklebust   SUNRPC: Add an rp...
127
  	.crbind		= rpcauth_generic_bind_cred,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
129
130
131
132
133
134
135
  	.crmatch	= nul_match,
  	.crmarshal	= nul_marshal,
  	.crrefresh	= nul_refresh,
  	.crvalidate	= nul_validate,
  };
  
  static
  struct rpc_cred null_cred = {
e092bdcd9   Trond Myklebust   SUNRPC: cleanup r...
136
  	.cr_lru		= LIST_HEAD_INIT(null_cred.cr_lru),
4a8c1344d   Trond Myklebust   SUNRPC: Add a bac...
137
  	.cr_auth	= &null_auth,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138
139
  	.cr_ops		= &null_credops,
  	.cr_count	= ATOMIC_INIT(1),
fc432dd90   Trond Myklebust   SUNRPC: Enforce a...
140
  	.cr_flags	= 1UL << RPCAUTH_CRED_UPTODATE,
f895b252d   Jeff Layton   sunrpc: eliminate...
141
  #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
143
144
  	.cr_magic	= RPCAUTH_CRED_MAGIC,
  #endif
  };