This source file includes following definitions.
- init_svc_cred
- free_svc_cred
- hash_str
- hash_mem
1
2
3
4
5
6
7
8
9
10 #ifndef _LINUX_SUNRPC_SVCAUTH_H_
11 #define _LINUX_SUNRPC_SVCAUTH_H_
12
13 #ifdef __KERNEL__
14
15 #include <linux/string.h>
16 #include <linux/sunrpc/msg_prot.h>
17 #include <linux/sunrpc/cache.h>
18 #include <linux/sunrpc/gss_api.h>
19 #include <linux/hash.h>
20 #include <linux/stringhash.h>
21 #include <linux/cred.h>
22
23 struct svc_cred {
24 kuid_t cr_uid;
25 kgid_t cr_gid;
26 struct group_info *cr_group_info;
27 u32 cr_flavor;
28
29
30 char *cr_raw_principal;
31
32
33 char *cr_principal;
34 char *cr_targ_princ;
35 struct gss_api_mech *cr_gss_mech;
36 };
37
38 static inline void init_svc_cred(struct svc_cred *cred)
39 {
40 cred->cr_group_info = NULL;
41 cred->cr_raw_principal = NULL;
42 cred->cr_principal = NULL;
43 cred->cr_targ_princ = NULL;
44 cred->cr_gss_mech = NULL;
45 }
46
47 static inline void free_svc_cred(struct svc_cred *cred)
48 {
49 if (cred->cr_group_info)
50 put_group_info(cred->cr_group_info);
51 kfree(cred->cr_raw_principal);
52 kfree(cred->cr_principal);
53 kfree(cred->cr_targ_princ);
54 gss_mech_put(cred->cr_gss_mech);
55 init_svc_cred(cred);
56 }
57
58 struct svc_rqst;
59 struct in6_addr;
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 struct auth_domain {
81 struct kref ref;
82 struct hlist_node hash;
83 char *name;
84 struct auth_ops *flavour;
85 struct rcu_head rcu_head;
86 };
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 struct auth_ops {
129 char * name;
130 struct module *owner;
131 int flavour;
132 int (*accept)(struct svc_rqst *rq, __be32 *authp);
133 int (*release)(struct svc_rqst *rq);
134 void (*domain_release)(struct auth_domain *);
135 int (*set_client)(struct svc_rqst *rq);
136 };
137
138 #define SVC_GARBAGE 1
139 #define SVC_SYSERR 2
140 #define SVC_VALID 3
141 #define SVC_NEGATIVE 4
142 #define SVC_OK 5
143 #define SVC_DROP 6
144 #define SVC_CLOSE 7
145
146
147
148 #define SVC_DENIED 8
149 #define SVC_PENDING 9
150 #define SVC_COMPLETE 10
151
152 struct svc_xprt;
153
154 extern int svc_authenticate(struct svc_rqst *rqstp, __be32 *authp);
155 extern int svc_authorise(struct svc_rqst *rqstp);
156 extern int svc_set_client(struct svc_rqst *rqstp);
157 extern int svc_auth_register(rpc_authflavor_t flavor, struct auth_ops *aops);
158 extern void svc_auth_unregister(rpc_authflavor_t flavor);
159
160 extern struct auth_domain *unix_domain_find(char *name);
161 extern void auth_domain_put(struct auth_domain *item);
162 extern int auth_unix_add_addr(struct net *net, struct in6_addr *addr, struct auth_domain *dom);
163 extern struct auth_domain *auth_domain_lookup(char *name, struct auth_domain *new);
164 extern struct auth_domain *auth_domain_find(char *name);
165 extern struct auth_domain *auth_unix_lookup(struct net *net, struct in6_addr *addr);
166 extern int auth_unix_forget_old(struct auth_domain *dom);
167 extern void svcauth_unix_purge(struct net *net);
168 extern void svcauth_unix_info_release(struct svc_xprt *xpt);
169 extern int svcauth_unix_set_client(struct svc_rqst *rqstp);
170
171 extern int unix_gid_cache_create(struct net *net);
172 extern void unix_gid_cache_destroy(struct net *net);
173
174
175
176
177
178 static inline unsigned long hash_str(char const *name, int bits)
179 {
180 return hashlen_hash(hashlen_string(NULL, name)) >> (32 - bits);
181 }
182
183 static inline unsigned long hash_mem(char const *buf, int length, int bits)
184 {
185 return full_name_hash(NULL, buf, length) >> (32 - bits);
186 }
187
188 #endif
189
190 #endif