auth.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/include/linux/auth.h
  3.  *
  4.  * Declarations for the RPC authentication machinery.
  5.  *
  6.  * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
  7.  */
  8. #ifndef _LINUX_SUNRPC_AUTH_H
  9. #define _LINUX_SUNRPC_AUTH_H
  10. #ifdef __KERNEL__
  11. #include <linux/config.h>
  12. #include <linux/sunrpc/sched.h>
  13. #include <asm/atomic.h>
  14. /* size of the nodename buffer */
  15. #define UNX_MAXNODENAME 32
  16. /*
  17.  * Client user credentials
  18.  */
  19. struct rpc_cred {
  20. struct rpc_cred * cr_next; /* linked list */
  21. struct rpc_auth * cr_auth;
  22. struct rpc_credops * cr_ops;
  23. unsigned long cr_expire; /* when to gc */
  24. atomic_t cr_count; /* ref count */
  25. unsigned short cr_flags; /* various flags */
  26. #ifdef RPC_DEBUG
  27. unsigned long cr_magic; /* 0x0f4aa4f0 */
  28. #endif
  29. uid_t cr_uid;
  30. /* per-flavor data */
  31. };
  32. #define RPCAUTH_CRED_LOCKED 0x0001
  33. #define RPCAUTH_CRED_UPTODATE 0x0002
  34. #define RPCAUTH_CRED_DEAD 0x0004
  35. #define RPCAUTH_CRED_MAGIC 0x0f4aa4f0
  36. /*
  37.  * Client authentication handle
  38.  */
  39. #define RPC_CREDCACHE_NR 8
  40. #define RPC_CREDCACHE_MASK (RPC_CREDCACHE_NR - 1)
  41. struct rpc_auth {
  42. struct rpc_cred * au_credcache[RPC_CREDCACHE_NR];
  43. unsigned long au_expire; /* cache expiry interval */
  44. unsigned long au_nextgc; /* next garbage collection */
  45. unsigned int au_cslack; /* call cred size estimate */
  46. unsigned int au_rslack; /* reply verf size guess */
  47. unsigned int au_flags; /* various flags */
  48. struct rpc_authops * au_ops; /* operations */
  49. /* per-flavor data */
  50. };
  51. #define RPC_AUTH_PROC_CREDS 0x0010 /* process creds (including
  52.  * uid/gid, fs[ug]id, gids)
  53.  */
  54. /*
  55.  * Client authentication ops
  56.  */
  57. struct rpc_authops {
  58. unsigned int au_flavor; /* flavor (RPC_AUTH_*) */
  59. #ifdef RPC_DEBUG
  60. char * au_name;
  61. #endif
  62. struct rpc_auth * (*create)(struct rpc_clnt *);
  63. void (*destroy)(struct rpc_auth *);
  64. struct rpc_cred * (*crcreate)(int);
  65. };
  66. struct rpc_credops {
  67. void (*crdestroy)(struct rpc_cred *);
  68. int (*crmatch)(struct rpc_cred *, int);
  69. u32 * (*crmarshal)(struct rpc_task *, u32 *, int);
  70. int (*crrefresh)(struct rpc_task *);
  71. u32 * (*crvalidate)(struct rpc_task *, u32 *);
  72. };
  73. extern struct rpc_authops authunix_ops;
  74. extern struct rpc_authops authnull_ops;
  75. #ifdef CONFIG_SUNRPC_SECURE
  76. extern struct rpc_authops authdes_ops;
  77. #endif
  78. int rpcauth_register(struct rpc_authops *);
  79. int rpcauth_unregister(struct rpc_authops *);
  80. struct rpc_auth * rpcauth_create(unsigned int, struct rpc_clnt *);
  81. void rpcauth_destroy(struct rpc_auth *);
  82. struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int);
  83. struct rpc_cred * rpcauth_bindcred(struct rpc_task *);
  84. void rpcauth_holdcred(struct rpc_task *);
  85. void put_rpccred(struct rpc_cred *);
  86. void rpcauth_unbindcred(struct rpc_task *);
  87. int rpcauth_matchcred(struct rpc_auth *,
  88.   struct rpc_cred *, int);
  89. u32 * rpcauth_marshcred(struct rpc_task *, u32 *);
  90. u32 * rpcauth_checkverf(struct rpc_task *, u32 *);
  91. int rpcauth_refreshcred(struct rpc_task *);
  92. void rpcauth_invalcred(struct rpc_task *);
  93. int rpcauth_uptodatecred(struct rpc_task *);
  94. void rpcauth_init_credcache(struct rpc_auth *);
  95. void rpcauth_free_credcache(struct rpc_auth *);
  96. void rpcauth_insert_credcache(struct rpc_auth *,
  97. struct rpc_cred *);
  98. static inline
  99. struct rpc_cred * get_rpccred(struct rpc_cred *cred)
  100. {
  101. atomic_inc(&cred->cr_count);
  102. return cred;
  103. }
  104. #endif /* __KERNEL__ */
  105. #endif /* _LINUX_SUNRPC_AUTH_H */