mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-05-02 10:04:31 -04:00
SUNRPC: Add enum svc_auth_status
In addition to the benefits of using an enum rather than a set of macros, we now have a named type that can improve static type checking of function return values. As part of this change, I removed a stale comment from svcauth.h; the return values from current implementations of the auth_ops::release method are all zero/negative errno, not the SVC_OK enum values as the old comment suggested. Suggested-by: NeilBrown <neilb@suse.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
@@ -83,6 +83,19 @@ struct auth_domain {
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
enum svc_auth_status {
|
||||
SVC_GARBAGE = 1,
|
||||
SVC_SYSERR,
|
||||
SVC_VALID,
|
||||
SVC_NEGATIVE,
|
||||
SVC_OK,
|
||||
SVC_DROP,
|
||||
SVC_CLOSE,
|
||||
SVC_DENIED,
|
||||
SVC_PENDING,
|
||||
SVC_COMPLETE,
|
||||
};
|
||||
|
||||
/*
|
||||
* Each authentication flavour registers an auth_ops
|
||||
* structure.
|
||||
@@ -98,6 +111,8 @@ struct auth_domain {
|
||||
* is (probably) already in place. Certainly space is
|
||||
* reserved for it.
|
||||
* DROP - simply drop the request. It may have been deferred
|
||||
* CLOSE - like SVC_DROP, but request is definitely lost.
|
||||
* If there is a tcp connection, it should be closed.
|
||||
* GARBAGE - rpc garbage_args error
|
||||
* SYSERR - rpc system_err error
|
||||
* DENIED - authp holds reason for denial.
|
||||
@@ -111,14 +126,10 @@ struct auth_domain {
|
||||
*
|
||||
* release() is given a request after the procedure has been run.
|
||||
* It should sign/encrypt the results if needed
|
||||
* It should return:
|
||||
* OK - the resbuf is ready to be sent
|
||||
* DROP - the reply should be quitely dropped
|
||||
* DENIED - authp holds a reason for MSG_DENIED
|
||||
* SYSERR - rpc system_err
|
||||
*
|
||||
* domain_release()
|
||||
* This call releases a domain.
|
||||
*
|
||||
* set_client()
|
||||
* Givens a pending request (struct svc_rqst), finds and assigns
|
||||
* an appropriate 'auth_domain' as the client.
|
||||
@@ -127,31 +138,18 @@ struct auth_ops {
|
||||
char * name;
|
||||
struct module *owner;
|
||||
int flavour;
|
||||
int (*accept)(struct svc_rqst *rq);
|
||||
int (*release)(struct svc_rqst *rq);
|
||||
void (*domain_release)(struct auth_domain *);
|
||||
int (*set_client)(struct svc_rqst *rq);
|
||||
};
|
||||
|
||||
#define SVC_GARBAGE 1
|
||||
#define SVC_SYSERR 2
|
||||
#define SVC_VALID 3
|
||||
#define SVC_NEGATIVE 4
|
||||
#define SVC_OK 5
|
||||
#define SVC_DROP 6
|
||||
#define SVC_CLOSE 7 /* Like SVC_DROP, but request is definitely
|
||||
* lost so if there is a tcp connection, it
|
||||
* should be closed
|
||||
*/
|
||||
#define SVC_DENIED 8
|
||||
#define SVC_PENDING 9
|
||||
#define SVC_COMPLETE 10
|
||||
enum svc_auth_status (*accept)(struct svc_rqst *rqstp);
|
||||
int (*release)(struct svc_rqst *rqstp);
|
||||
void (*domain_release)(struct auth_domain *dom);
|
||||
enum svc_auth_status (*set_client)(struct svc_rqst *rqstp);
|
||||
};
|
||||
|
||||
struct svc_xprt;
|
||||
|
||||
extern int svc_authenticate(struct svc_rqst *rqstp);
|
||||
extern enum svc_auth_status svc_authenticate(struct svc_rqst *rqstp);
|
||||
extern int svc_authorise(struct svc_rqst *rqstp);
|
||||
extern int svc_set_client(struct svc_rqst *rqstp);
|
||||
extern enum svc_auth_status svc_set_client(struct svc_rqst *rqstp);
|
||||
extern int svc_auth_register(rpc_authflavor_t flavor, struct auth_ops *aops);
|
||||
extern void svc_auth_unregister(rpc_authflavor_t flavor);
|
||||
|
||||
@@ -161,7 +159,7 @@ extern struct auth_domain *auth_domain_lookup(char *name, struct auth_domain *ne
|
||||
extern struct auth_domain *auth_domain_find(char *name);
|
||||
extern void svcauth_unix_purge(struct net *net);
|
||||
extern void svcauth_unix_info_release(struct svc_xprt *xpt);
|
||||
extern int svcauth_unix_set_client(struct svc_rqst *rqstp);
|
||||
extern enum svc_auth_status svcauth_unix_set_client(struct svc_rqst *rqstp);
|
||||
|
||||
extern int unix_gid_cache_create(struct net *net);
|
||||
extern void unix_gid_cache_destroy(struct net *net);
|
||||
|
||||
Reference in New Issue
Block a user