xref: /nrf52832-nimble/rt-thread/components/dfs/filesystems/nfs/rpc/auth.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
1 /*
2  * Copyright (c) 2006-2018, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  */
9 #ifndef __AUTH_H__
10 #define __AUTH_H__
11 
12 #include <rpc/xdr.h>
13 
14 /*
15  * Status returned from authentication check
16  */
17 enum auth_stat {
18 	AUTH_OK=0,
19 	/*
20 	 * failed at remote end
21 	 */
22 	AUTH_BADCRED=1,			/* bogus credentials (seal broken) */
23 	AUTH_REJECTEDCRED=2,		/* client should begin new session */
24 	AUTH_BADVERF=3,			/* bogus verifier (seal broken) */
25 	AUTH_REJECTEDVERF=4,		/* verifier expired or was replayed */
26 	AUTH_TOOWEAK=5,			/* rejected due to security reasons */
27 	/*
28 	 * failed locally
29 	*/
30 	AUTH_INVALIDRESP=6,		/* bogus response verifier */
31 	AUTH_FAILED=7			/* some unknown reason */
32 };
33 
34 union des_block {
35 	struct {
36 		uint32_t high;
37 		uint32_t low;
38 	} key;
39 	char c[8];
40 };
41 typedef union des_block des_block;
42 
43 /*
44  * Authentication info.  Opaque to client.
45  */
46 struct opaque_auth {
47 	enum_t	oa_flavor;		/* flavor of auth */
48 	char*	oa_base;		/* address of more auth stuff */
49 	unsigned int	oa_length;		/* not to exceed MAX_AUTH_BYTES */
50 };
51 
52 /*
53  * Auth handle, interface to client side authenticators.
54  */
55 typedef struct AUTH AUTH;
56 struct AUTH {
57   struct opaque_auth ah_cred;
58   struct opaque_auth ah_verf;
59   union des_block ah_key;
60   struct auth_ops {
61     void (*ah_nextverf) (AUTH *);
62     int  (*ah_marshal) (AUTH *, XDR *);		/* nextverf & serialize */
63     int  (*ah_validate) (AUTH *, struct opaque_auth *);
64 						/* validate verifier */
65     int  (*ah_refresh) (AUTH *);		/* refresh credentials */
66     void (*ah_destroy) (AUTH *); 	    	/* destroy this structure */
67   } *ah_ops;
68   char* ah_private;
69 };
70 
71 extern struct opaque_auth _null_auth;
72 
73 
74 /*
75  * Authentication ops.
76  * The ops and the auth handle provide the interface to the authenticators.
77  *
78  * AUTH	*auth;
79  * XDR	*xdrs;
80  * struct opaque_auth verf;
81  */
82 #define AUTH_NEXTVERF(auth)		\
83 		((*((auth)->ah_ops->ah_nextverf))(auth))
84 #define auth_nextverf(auth)		\
85 		((*((auth)->ah_ops->ah_nextverf))(auth))
86 
87 #define AUTH_MARSHALL(auth, xdrs)	\
88 		((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
89 #define auth_marshall(auth, xdrs)	\
90 		((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
91 
92 #define AUTH_VALIDATE(auth, verfp)	\
93 		((*((auth)->ah_ops->ah_validate))((auth), verfp))
94 #define auth_validate(auth, verfp)	\
95 		((*((auth)->ah_ops->ah_validate))((auth), verfp))
96 
97 #define AUTH_REFRESH(auth)		\
98 		((*((auth)->ah_ops->ah_refresh))(auth))
99 #define auth_refresh(auth)		\
100 		((*((auth)->ah_ops->ah_refresh))(auth))
101 
102 #define AUTH_DESTROY(auth)		\
103 		((*((auth)->ah_ops->ah_destroy))(auth))
104 #define auth_destroy(auth)		\
105 		((*((auth)->ah_ops->ah_destroy))(auth))
106 
107 #define MAX_AUTH_BYTES	400
108 #define MAXNETNAMELEN	255	/* maximum length of network user's name */
109 
110 AUTH *authnone_create(void);
111 
112 #endif
113