2005-04-17 02:20:36 +04:00
/*
* linux / net / sunrpc / auth_null . c
*
* AUTH_NULL authentication . Really : - )
*
* Copyright ( C ) 1996 , Olaf Kirch < okir @ monad . swb . de >
*/
# include <linux/types.h>
# include <linux/module.h>
# include <linux/sunrpc/clnt.h>
# ifdef RPC_DEBUG
# define RPCDBG_FACILITY RPCDBG_AUTH
# endif
static struct rpc_auth null_auth ;
static struct rpc_cred null_cred ;
static struct rpc_auth *
nul_create ( struct rpc_clnt * clnt , rpc_authflavor_t flavor )
{
atomic_inc ( & null_auth . au_count ) ;
return & null_auth ;
}
static void
nul_destroy ( struct rpc_auth * auth )
{
}
/*
* Lookup NULL creds for current process
*/
static struct rpc_cred *
nul_lookup_cred ( struct rpc_auth * auth , struct auth_cred * acred , int flags )
{
return get_rpccred ( & null_cred ) ;
}
/*
* Destroy cred handle .
*/
static void
nul_destroy_cred ( struct rpc_cred * cred )
{
}
/*
* Match cred handle against current process
*/
static int
nul_match ( struct auth_cred * acred , struct rpc_cred * cred , int taskflags )
{
return 1 ;
}
/*
* Marshal credential .
*/
2006-09-27 09:29:38 +04:00
static __be32 *
nul_marshal ( struct rpc_task * task , __be32 * p )
2005-04-17 02:20:36 +04:00
{
* p + + = htonl ( RPC_AUTH_NULL ) ;
* p + + = 0 ;
* p + + = htonl ( RPC_AUTH_NULL ) ;
* p + + = 0 ;
return p ;
}
/*
* Refresh credential . This is a no - op for AUTH_NULL
*/
static int
nul_refresh ( struct rpc_task * task )
{
2010-07-31 22:29:08 +04:00
set_bit ( RPCAUTH_CRED_UPTODATE , & task - > tk_rqstp - > rq_cred - > cr_flags ) ;
2005-04-17 02:20:36 +04:00
return 0 ;
}
2006-09-27 09:29:38 +04:00
static __be32 *
nul_validate ( struct rpc_task * task , __be32 * p )
2005-04-17 02:20:36 +04:00
{
rpc_authflavor_t flavor ;
u32 size ;
flavor = ntohl ( * p + + ) ;
if ( flavor ! = RPC_AUTH_NULL ) {
printk ( " RPC: bad verf flavor: %u \n " , flavor ) ;
return NULL ;
}
size = ntohl ( * p + + ) ;
if ( size ! = 0 ) {
printk ( " RPC: bad verf size: %u \n " , size ) ;
return NULL ;
}
return p ;
}
2007-06-24 04:17:58 +04:00
const struct rpc_authops authnull_ops = {
2005-04-17 02:20:36 +04:00
. owner = THIS_MODULE ,
. au_flavor = RPC_AUTH_NULL ,
. au_name = " NULL " ,
. create = nul_create ,
. destroy = nul_destroy ,
. lookup_cred = nul_lookup_cred ,
} ;
static
struct rpc_auth null_auth = {
. au_cslack = 4 ,
. au_rslack = 2 ,
. au_ops = & authnull_ops ,
2006-06-09 17:34:34 +04:00
. au_flavor = RPC_AUTH_NULL ,
. au_count = ATOMIC_INIT ( 0 ) ,
2005-04-17 02:20:36 +04:00
} ;
static
2007-06-24 04:17:58 +04:00
const struct rpc_credops null_credops = {
2005-04-17 02:20:36 +04:00
. cr_name = " AUTH_NULL " ,
. crdestroy = nul_destroy_cred ,
2008-03-12 23:21:07 +03:00
. crbind = rpcauth_generic_bind_cred ,
2005-04-17 02:20:36 +04:00
. crmatch = nul_match ,
. crmarshal = nul_marshal ,
. crrefresh = nul_refresh ,
. crvalidate = nul_validate ,
} ;
static
struct rpc_cred null_cred = {
2007-06-24 03:45:36 +04:00
. cr_lru = LIST_HEAD_INIT ( null_cred . cr_lru ) ,
2007-06-07 18:14:14 +04:00
. cr_auth = & null_auth ,
2005-04-17 02:20:36 +04:00
. cr_ops = & null_credops ,
. cr_count = ATOMIC_INIT ( 1 ) ,
2007-06-25 18:15:15 +04:00
. cr_flags = 1UL < < RPCAUTH_CRED_UPTODATE ,
2005-04-17 02:20:36 +04:00
# ifdef RPC_DEBUG
. cr_magic = RPCAUTH_CRED_MAGIC ,
# endif
} ;