Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / linux / sunrpc / auth.h
index 4eea2ac..b27c818 100644 (file)
@@ -36,8 +36,7 @@ struct auth_cred {
  * Client user credentials
  */
 struct rpc_cred {
-       struct list_head        cr_hash;        /* hash chain */
-       struct rpc_auth *       cr_auth;
+       struct hlist_node       cr_hash;        /* hash chain */
        struct rpc_credops *    cr_ops;
        unsigned long           cr_expire;      /* when to gc */
        atomic_t                cr_count;       /* ref count */
@@ -50,9 +49,8 @@ struct rpc_cred {
 
        /* per-flavor data */
 };
-#define RPCAUTH_CRED_LOCKED    0x0001
+#define RPCAUTH_CRED_NEW       0x0001
 #define RPCAUTH_CRED_UPTODATE  0x0002
-#define RPCAUTH_CRED_DEAD      0x0004
 
 #define RPCAUTH_CRED_MAGIC     0x0f4aa4f0
 
@@ -61,12 +59,20 @@ struct rpc_cred {
  */
 #define RPC_CREDCACHE_NR       8
 #define RPC_CREDCACHE_MASK     (RPC_CREDCACHE_NR - 1)
+struct rpc_cred_cache {
+       struct hlist_head       hashtable[RPC_CREDCACHE_NR];
+       unsigned long           nextgc;         /* next garbage collection */
+       unsigned long           expire;         /* cache expiry interval */
+};
+
 struct rpc_auth {
-       struct list_head        au_credcache[RPC_CREDCACHE_NR];
-       unsigned long           au_expire;      /* cache expiry interval */
-       unsigned long           au_nextgc;      /* next garbage collection */
        unsigned int            au_cslack;      /* call cred size estimate */
-       unsigned int            au_rslack;      /* reply verf size guess */
+                               /* guess at number of u32's auth adds before
+                                * reply data; normally the verifier size: */
+       unsigned int            au_rslack;
+                               /* for gss, used to calculate au_rslack: */
+       unsigned int            au_verfsize;
+
        unsigned int            au_flags;       /* various flags */
        struct rpc_authops *    au_ops;         /* operations */
        rpc_authflavor_t        au_flavor;      /* pseudoflavor (note may
@@ -75,11 +81,13 @@ struct rpc_auth {
                                                 * case) */
        atomic_t                au_count;       /* Reference counter */
 
+       struct rpc_cred_cache * au_credcache;
        /* per-flavor data */
 };
-#define RPC_AUTH_PROC_CREDS    0x0010          /* process creds (including
-                                                * uid/gid, fs[ug]id, gids)
-                                                */
+
+/* Flags for rpcauth_lookupcred() */
+#define RPCAUTH_LOOKUP_NEW             0x01    /* Accept an uninitialised cred */
+#define RPCAUTH_LOOKUP_ROOTCREDS       0x02    /* This really ought to go! */
 
 /*
  * Client authentication ops
@@ -93,14 +101,17 @@ struct rpc_authops {
        struct rpc_auth *       (*create)(struct rpc_clnt *, rpc_authflavor_t);
        void                    (*destroy)(struct rpc_auth *);
 
+       struct rpc_cred *       (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
        struct rpc_cred *       (*crcreate)(struct rpc_auth*, struct auth_cred *, int);
 };
 
 struct rpc_credops {
+       const char *            cr_name;        /* Name of the auth flavour */
+       int                     (*cr_init)(struct rpc_auth *, struct rpc_cred *);
        void                    (*crdestroy)(struct rpc_cred *);
 
        int                     (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
-       u32 *                   (*crmarshal)(struct rpc_task *, u32 *, int);
+       u32 *                   (*crmarshal)(struct rpc_task *, u32 *);
        int                     (*crrefresh)(struct rpc_task *);
        u32 *                   (*crvalidate)(struct rpc_task *, u32 *);
        int                     (*crwrap_req)(struct rpc_task *, kxdrproc_t,
@@ -115,8 +126,6 @@ extern struct rpc_authops   authnull_ops;
 extern struct rpc_authops      authdes_ops;
 #endif
 
-u32                    pseudoflavor_to_flavor(rpc_authflavor_t);
-
 int                    rpcauth_register(struct rpc_authops *);
 int                    rpcauth_unregister(struct rpc_authops *);
 struct rpc_auth *      rpcauth_create(rpc_authflavor_t, struct rpc_clnt *);
@@ -134,8 +143,7 @@ int                 rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp,
 int                    rpcauth_refreshcred(struct rpc_task *);
 void                   rpcauth_invalcred(struct rpc_task *);
 int                    rpcauth_uptodatecred(struct rpc_task *);
-int                    rpcauth_deadcred(struct rpc_task *);
-void                   rpcauth_init_credcache(struct rpc_auth *);
+int                    rpcauth_init_credcache(struct rpc_auth *, unsigned long);
 void                   rpcauth_free_credcache(struct rpc_auth *);
 
 static inline