patch-2.1.32 linux/net/sunrpc/auth_null.c

Next file: linux/net/sunrpc/auth_unix.c
Previous file: linux/net/sunrpc/auth.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.31/linux/net/sunrpc/auth_null.c linux/net/sunrpc/auth_null.c
@@ -0,0 +1,131 @@
+/*
+ * linux/net/sunrpc/rpcauth_null.c
+ *
+ * AUTH_NULL authentication. Really :-)
+ *
+ * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
+ */
+
+#include <linux/types.h>
+#include <linux/malloc.h>
+#include <linux/socket.h>
+#include <linux/in.h>
+#include <linux/utsname.h>
+#include <linux/sunrpc/clnt.h>
+
+#ifdef RPC_DEBUG
+# define RPCDBG_FACILITY	RPCDBG_AUTH
+#endif
+
+static struct rpc_auth *
+nul_create(struct rpc_clnt *clnt)
+{
+	struct rpc_auth	*auth;
+
+	dprintk("RPC: creating NULL authenticator for client %p\n", clnt);
+	if (!(auth = (struct rpc_auth *) rpc_allocate(0, sizeof(*auth))))
+		return NULL;
+	auth->au_cslack = 4;
+	auth->au_rslack = 2;
+	auth->au_ops = &authnull_ops;
+	auth->au_expire = 1800 * HZ;
+	rpcauth_init_credcache(auth);
+
+	return (struct rpc_auth *) auth;
+}
+
+static void
+nul_destroy(struct rpc_auth *auth)
+{
+	dprintk("RPC: destroying NULL authenticator %p\n", auth);
+	rpc_free(auth);
+}
+
+/*
+ * Create NULL creds for current process
+ */
+static struct rpc_cred *
+nul_create_cred(struct rpc_task *task)
+{
+	struct rpc_cred	*cred;
+
+	if (!(cred = (struct rpc_cred *) rpc_malloc(task, sizeof(*cred))))
+		return NULL;
+	cred->cr_count = 0;
+	cred->cr_flags = RPCAUTH_CRED_UPTODATE;
+
+	return cred;
+}
+
+/*
+ * Destroy cred handle.
+ */
+static void
+nul_destroy_cred(struct rpc_cred *cred)
+{
+	rpc_free(cred);
+}
+
+/*
+ * Match cred handle against current process
+ */
+static int
+nul_match(struct rpc_task *task, struct rpc_cred *cred)
+{
+	return 1;
+}
+
+/*
+ * Marshal credential.
+ */
+static u32 *
+nul_marshal(struct rpc_task *task, u32 *p, int ruid)
+{
+	*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)
+{
+	return task->tk_status = -EACCES;
+}
+
+static u32 *
+nul_validate(struct rpc_task *task, u32 *p)
+{
+	u32		n = ntohl(*p++);
+
+	if (n != RPC_AUTH_NULL) {
+		printk("RPC: bad verf flavor: %ld\n", (unsigned long) n);
+		return NULL;
+	}
+	if ((n = ntohl(*p++)) != 0) {
+		printk("RPC: bad verf size: %ld\n", (unsigned long) n);
+		return NULL;
+	}
+
+	return p;
+}
+
+struct rpc_authops	authnull_ops = {
+	RPC_AUTH_NULL,
+#ifdef RPC_DEBUG
+	"NULL",
+#endif
+	nul_create,
+	nul_destroy,
+	nul_create_cred,
+	nul_destroy_cred,
+	nul_match,
+	nul_marshal,
+	nul_refresh,
+	nul_validate
+};

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov