summaryrefslogtreecommitdiffstats
path: root/utils/gssd
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2007-01-11 12:45:48 +1100
committerNeil Brown <neilb@suse.de>2007-01-11 12:45:48 +1100
commit8fd9fad1ea4b25b8962d70133f476650ef0637b0 (patch)
treeebc6a359e751f4dcc7167ed1cbe83c86d3a9e0c2 /utils/gssd
parent95b414a6038d1d4efb1b1ec90c2da17def7064b2 (diff)
downloadnfs-utils-8fd9fad1ea4b25b8962d70133f476650ef0637b0.tar.gz
nfs-utils-8fd9fad1ea4b25b8962d70133f476650ef0637b0.tar.xz
nfs-utils-8fd9fad1ea4b25b8962d70133f476650ef0637b0.zip
Error check messages sent to the kernel.
And make sure that if we fail to export a filesystem in mountd, then we don't try to get a filehandle on it, or a deadlock might occur.
Diffstat (limited to 'utils/gssd')
-rw-r--r--utils/gssd/cacheio.c6
-rw-r--r--utils/gssd/cacheio.h2
-rw-r--r--utils/gssd/svcgssd_proc.c5
3 files changed, 8 insertions, 5 deletions
diff --git a/utils/gssd/cacheio.c b/utils/gssd/cacheio.c
index 75c7a5d..f2f2960 100644
--- a/utils/gssd/cacheio.c
+++ b/utils/gssd/cacheio.c
@@ -173,11 +173,13 @@ void qword_printint(FILE *f, int num)
printerr(2, "%d ", num);
}
-void qword_eol(FILE *f)
+int qword_eol(FILE *f)
{
+ int err;
fprintf(f,"\n");
- fflush(f);
+ err = fflush(f);
printerr(2, "\n");
+ return err;
}
diff --git a/utils/gssd/cacheio.h b/utils/gssd/cacheio.h
index cc97b36..dfff258 100644
--- a/utils/gssd/cacheio.h
+++ b/utils/gssd/cacheio.h
@@ -40,7 +40,7 @@ void qword_addeol(char **bpp, int *lp);
void qword_print(FILE *f, char *str);
void qword_printhex(FILE *f, char *str, int slen);
void qword_printint(FILE *f, int num);
-void qword_eol(FILE *f);
+int qword_eol(FILE *f);
int readline(int fd, char **buf, int *lenp);
int qword_get(char **bpp, char *dest, int bufsize);
int qword_get_int(char **bpp, int *anint);
diff --git a/utils/gssd/svcgssd_proc.c b/utils/gssd/svcgssd_proc.c
index 7981399..4037159 100644
--- a/utils/gssd/svcgssd_proc.c
+++ b/utils/gssd/svcgssd_proc.c
@@ -72,6 +72,7 @@ do_svc_downcall(gss_buffer_desc *out_handle, struct svc_cred *cred,
FILE *f;
int i;
char *fname = NULL;
+ int err;
printerr(1, "doing downcall\n");
if ((fname = mech2file(mech)) == NULL)
@@ -93,9 +94,9 @@ do_svc_downcall(gss_buffer_desc *out_handle, struct svc_cred *cred,
qword_printint(f, cred->cr_groups[i]);
qword_print(f, fname);
qword_printhex(f, context_token->value, context_token->length);
- qword_eol(f);
+ err = qword_eol(f);
fclose(f);
- return 0;
+ return err;
out_err:
printerr(0, "WARNING: downcall failed\n");
return -1;