aboutsummaryrefslogtreecommitdiffstats
path: root/main/nfs-utils/0003-gssd-talk-to-kernel-using-file-descriptors-instead-o.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/nfs-utils/0003-gssd-talk-to-kernel-using-file-descriptors-instead-o.patch')
-rw-r--r--main/nfs-utils/0003-gssd-talk-to-kernel-using-file-descriptors-instead-o.patch222
1 files changed, 0 insertions, 222 deletions
diff --git a/main/nfs-utils/0003-gssd-talk-to-kernel-using-file-descriptors-instead-o.patch b/main/nfs-utils/0003-gssd-talk-to-kernel-using-file-descriptors-instead-o.patch
deleted file mode 100644
index 735cc0d3b3..0000000000
--- a/main/nfs-utils/0003-gssd-talk-to-kernel-using-file-descriptors-instead-o.patch
+++ /dev/null
@@ -1,222 +0,0 @@
-From e2a56ac1aeaaca0d02fa4eae24bbd4d27e361e32 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
-Date: Thu, 2 Oct 2014 16:09:46 +0300
-Subject: [PATCH v2 3/5] gssd: talk to kernel using file descriptors instead of
- FILE
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Timo Teräs <timo.teras@iki.fi>
----
- utils/gssd/gssd_proc.c | 9 +++++---
- utils/gssd/svcgssd.h | 2 +-
- utils/gssd/svcgssd_main_loop.c | 9 ++++----
- utils/gssd/svcgssd_proc.c | 51 ++++++++++++++++++++++--------------------
- 4 files changed, 38 insertions(+), 33 deletions(-)
-
-diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c
-index 121feb1..1d8e6a7 100644
---- a/utils/gssd/gssd_proc.c
-+++ b/utils/gssd/gssd_proc.c
-@@ -78,6 +78,7 @@
- #include "nfsrpc.h"
- #include "nfslib.h"
- #include "gss_names.h"
-+#include "misc.h"
-
- /*
- * pollarray:
-@@ -1250,7 +1251,7 @@ void
- handle_gssd_upcall(struct clnt_info *clp)
- {
- uid_t uid;
-- char *lbuf = NULL;
-+ char lbuf[RPC_CHAN_BUF_SIZE];
- int lbuflen = 0;
- char *p;
- char *mech = NULL;
-@@ -1260,11 +1261,14 @@ handle_gssd_upcall(struct clnt_info *clp)
-
- printerr(1, "handling gssd upcall (%s)\n", clp->dirname);
-
-- if (readline(clp->gssd_fd, &lbuf, &lbuflen) != 1) {
-+ lbuflen = read(clp->gssd_fd, lbuf, sizeof(lbuf));
-+ if (lbuflen <= 0 || lbuf[lbuflen-1] != '\n') {
- printerr(0, "WARNING: handle_gssd_upcall: "
- "failed reading request\n");
- return;
- }
-+ lbuf[lbuflen-1] = 0;
-+
- printerr(2, "%s: '%s'\n", __func__, lbuf);
-
- /* find the mechanism name */
-@@ -1362,7 +1366,6 @@ handle_gssd_upcall(struct clnt_info *clp)
- }
-
- out:
-- free(lbuf);
- free(mech);
- free(enctypes);
- free(target);
-diff --git a/utils/gssd/svcgssd.h b/utils/gssd/svcgssd.h
-index 9a2e2e8..02b5c7a 100644
---- a/utils/gssd/svcgssd.h
-+++ b/utils/gssd/svcgssd.h
-@@ -35,7 +35,7 @@
- #include <sys/queue.h>
- #include <gssapi/gssapi.h>
-
--void handle_nullreq(FILE *f);
-+void handle_nullreq(int f);
- void gssd_run(void);
-
- #define GSSD_SERVICE_NAME "nfs"
-diff --git a/utils/gssd/svcgssd_main_loop.c b/utils/gssd/svcgssd_main_loop.c
-index 2b4111c..b5681ce 100644
---- a/utils/gssd/svcgssd_main_loop.c
-+++ b/utils/gssd/svcgssd_main_loop.c
-@@ -54,19 +54,18 @@ void
- gssd_run()
- {
- int ret;
-- FILE *f;
-+ int f;
- struct pollfd pollfd;
-
- #define NULLRPC_FILE "/proc/net/rpc/auth.rpcsec.init/channel"
-
-- f = fopen(NULLRPC_FILE, "rw");
--
-- if (!f) {
-+ f = open(NULLRPC_FILE, O_RDWR);
-+ if (f < 0) {
- printerr(0, "failed to open %s: %s\n",
- NULLRPC_FILE, strerror(errno));
- exit(1);
- }
-- pollfd.fd = fileno(f);
-+ pollfd.fd = f;
- pollfd.events = POLLIN;
- while (1) {
- int save_err;
-diff --git a/utils/gssd/svcgssd_proc.c b/utils/gssd/svcgssd_proc.c
-index 5bdb438..72ec254 100644
---- a/utils/gssd/svcgssd_proc.c
-+++ b/utils/gssd/svcgssd_proc.c
-@@ -73,36 +73,35 @@ struct svc_cred {
- int cr_ngroups;
- gid_t cr_groups[NGROUPS];
- };
--static char vbuf[RPC_CHAN_BUF_SIZE];
-
- static int
- do_svc_downcall(gss_buffer_desc *out_handle, struct svc_cred *cred,
- gss_OID mech, gss_buffer_desc *context_token,
- int32_t endtime, char *client_name)
- {
-- FILE *f;
-- int i;
-+ char buf[RPC_CHAN_BUF_SIZE], *bp;
-+ int i, f, err, blen;
- char *fname = NULL;
-- int err;
-
- printerr(1, "doing downcall\n");
- if ((fname = mech2file(mech)) == NULL)
- goto out_err;
-- f = fopen(SVCGSSD_CONTEXT_CHANNEL, "w");
-- if (f == NULL) {
-+
-+ f = open(SVCGSSD_CONTEXT_CHANNEL, O_WRONLY);
-+ if (f < 0) {
- printerr(0, "WARNING: unable to open downcall channel "
- "%s: %s\n",
- SVCGSSD_CONTEXT_CHANNEL, strerror(errno));
- goto out_err;
- }
-- setvbuf(f, vbuf, _IOLBF, RPC_CHAN_BUF_SIZE);
-- qword_printhex(f, out_handle->value, out_handle->length);
-+ bp = buf, blen = sizeof(buf);
-+ qword_addhex(&bp, &blen, out_handle->value, out_handle->length);
- /* XXX are types OK for the rest of this? */
- /* For context cache, use the actual context endtime */
-- qword_printint(f, endtime);
-- qword_printint(f, cred->cr_uid);
-- qword_printint(f, cred->cr_gid);
-- qword_printint(f, cred->cr_ngroups);
-+ qword_addint(&bp, &blen, endtime);
-+ qword_addint(&bp, &blen, cred->cr_uid);
-+ qword_addint(&bp, &blen, cred->cr_gid);
-+ qword_addint(&bp, &blen, cred->cr_ngroups);
- printerr(2, "mech: %s, hndl len: %d, ctx len %d, timeout: %d (%d from now), "
- "clnt: %s, uid: %d, gid: %d, num aux grps: %d:\n",
- fname, out_handle->length, context_token->length,
-@@ -110,19 +109,21 @@ do_svc_downcall(gss_buffer_desc *out_handle, struct svc_cred *cred,
- client_name ? client_name : "<null>",
- cred->cr_uid, cred->cr_gid, cred->cr_ngroups);
- for (i=0; i < cred->cr_ngroups; i++) {
-- qword_printint(f, cred->cr_groups[i]);
-+ qword_addint(&bp, &blen, cred->cr_groups[i]);
- printerr(2, " (%4d) %d\n", i+1, cred->cr_groups[i]);
- }
-- qword_print(f, fname);
-- qword_printhex(f, context_token->value, context_token->length);
-+ qword_add(&bp, &blen, fname);
-+ qword_addhex(&bp, &blen, context_token->value, context_token->length);
- if (client_name)
-- qword_print(f, client_name);
-- err = qword_eol(f);
-- if (err) {
-+ qword_add(&bp, &blen, client_name);
-+ qword_addeol(&bp, &blen);
-+ err = 0;
-+ if (blen <= 0 || write(f, buf, bp - buf) != bp - buf) {
- printerr(1, "WARNING: error writing to downcall channel "
- "%s: %s\n", SVCGSSD_CONTEXT_CHANNEL, strerror(errno));
-+ err = -1;
- }
-- fclose(f);
-+ close(f);
- return err;
- out_err:
- printerr(1, "WARNING: downcall failed\n");
-@@ -317,7 +318,7 @@ print_hexl(const char *description, unsigned char *cp, int length)
- #endif
-
- void
--handle_nullreq(FILE *f) {
-+handle_nullreq(int f) {
- /* XXX initialize to a random integer to reduce chances of unnecessary
- * invalidation of existing ctx's on restarting svcgssd. */
- static u_int32_t handle_seq = 0;
-@@ -339,19 +340,21 @@ handle_nullreq(FILE *f) {
- u_int32_t maj_stat = GSS_S_FAILURE, min_stat = 0;
- u_int32_t ignore_min_stat;
- struct svc_cred cred;
-- static char *lbuf = NULL;
-- static int lbuflen = 0;
-- static char *cp;
-+ char lbuf[RPC_CHAN_BUF_SIZE];
-+ int lbuflen = 0;
-+ char *cp;
- int32_t ctx_endtime;
- char *hostbased_name = NULL;
-
- printerr(1, "handling null request\n");
-
-- if (readline(fileno(f), &lbuf, &lbuflen) != 1) {
-+ lbuflen = read(f, lbuf, sizeof(lbuf));
-+ if (lbuflen <= 0 || lbuf[lbuflen-1] != '\n') {
- printerr(0, "WARNING: handle_nullreq: "
- "failed reading request\n");
- return;
- }
-+ lbuf[lbuflen-1] = 0;
-
- cp = lbuf;
-
---
-2.1.2
-