summaryrefslogtreecommitdiffstats
path: root/utils/gssd/gssd_main_loop.c
diff options
context:
space:
mode:
authorOlga Kornievskaia <aglo@citi.umich.edu>2009-11-16 09:25:22 -0500
committerSteve Dickson <steved@redhat.com>2009-11-16 09:25:22 -0500
commit0cfdc66de043a89d2ae2167a624e7d0b56c122eb (patch)
tree5aa58c941db84ffbc9d4cb278fe4cc8f8807ad30 /utils/gssd/gssd_main_loop.c
parente55be8bb33f24561bc68c61909750ca94d52c18c (diff)
downloadnfs-utils-0cfdc66de043a89d2ae2167a624e7d0b56c122eb.tar.gz
nfs-utils-0cfdc66de043a89d2ae2167a624e7d0b56c122eb.tar.xz
nfs-utils-0cfdc66de043a89d2ae2167a624e7d0b56c122eb.zip
gssd: handle new client upcall
Add support for handling the new client-side upcall. The kernel, beginning with 2.6.29, will attempt to use a new pipe, "gssd", which can be used for upcalls for all gss mechanisms. The new upcall is text-based with an <attribute>=<value> format. Attribute/value pairs are separated by a space, and terminated with a new-line character. The intial version has two required attributes, mech=<gss_mechanism_name> and uid=<user's_UID_number>, and two optional attributes, target=<gss_target_name> and service=<value>. Future kernels may add new attribute/value pairs. Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu> Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/gssd/gssd_main_loop.c')
-rw-r--r--utils/gssd/gssd_main_loop.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/utils/gssd/gssd_main_loop.c b/utils/gssd/gssd_main_loop.c
index b5117c5..f1a68d3 100644
--- a/utils/gssd/gssd_main_loop.c
+++ b/utils/gssd/gssd_main_loop.c
@@ -74,6 +74,17 @@ scan_poll_results(int ret)
for (clp = clnt_list.tqh_first; clp != NULL; clp = clp->list.tqe_next)
{
+ i = clp->gssd_poll_index;
+ if (i >= 0 && pollarray[i].revents) {
+ if (pollarray[i].revents & POLLHUP)
+ dir_changed = 1;
+ if (pollarray[i].revents & POLLIN)
+ handle_gssd_upcall(clp);
+ pollarray[clp->gssd_poll_index].revents = 0;
+ ret--;
+ if (!ret)
+ break;
+ }
i = clp->krb5_poll_index;
if (i >= 0 && pollarray[i].revents) {
if (pollarray[i].revents & POLLHUP)