Whamcloud - gitweb
LU-5560 security: send file security context for creates
[fs/lustre-release.git] / lustre / ptlrpc / gss / gss_svc_upcall.c
index 8944ef8..01fa71e 100644 (file)
@@ -182,7 +182,7 @@ static void rsi_free(struct rsi *rsi)
         rawobj_free(&rsi->out_token);
 }
 
-/* See handle_req() userspace for where the upcall data is read */
+/* See handle_channel_req() userspace for where the upcall data is read */
 static void rsi_request(struct cache_detail *cd,
                         struct cache_head *h,
                         char **bpp, int *blen)
@@ -1017,8 +1017,11 @@ cache_check:
         if (!rsci) {
                 CERROR("authentication failed\n");
 
-                if (!gss_pack_err_notify(req, GSS_S_FAILURE, 0))
-                        rc = SECSVC_COMPLETE;
+               /* gss mechanism returned major and minor code so we return
+                * those in error message */
+               if (!gss_pack_err_notify(req, rsip->major_status,
+                                        rsip->minor_status))
+                       rc = SECSVC_COMPLETE;
 
                 GOTO(out, rc);
         } else {
@@ -1076,24 +1079,23 @@ cache_check:
         rc = SECSVC_OK;
 
 out:
-        /* it looks like here we should put rsip also, but this mess up
-         * with NFS cache mgmt code... FIXME */
-#if 0
-        if (rsip)
-                rsi_put(&rsip->h, &rsi_cache);
-#endif
-
-        if (rsci) {
-                /* if anything went wrong, we don't keep the context too */
-                if (rc != SECSVC_OK)
+       /* it looks like here we should put rsip also, but this mess up
+        * with NFS cache mgmt code... FIXME
+        * something like:
+        * if (rsip)
+        *     rsi_put(&rsip->h, &rsi_cache); */
+
+       if (rsci) {
+               /* if anything went wrong, we don't keep the context too */
+               if (rc != SECSVC_OK)
                        set_bit(CACHE_NEGATIVE, &rsci->h.flags);
-                else
-                        CDEBUG(D_SEC, "create rsc with idx "LPX64"\n",
-                               gss_handle_to_u64(&rsci->handle));
+               else
+                       CDEBUG(D_SEC, "create rsc with idx "LPX64"\n",
+                              gss_handle_to_u64(&rsci->handle));
 
-                COMPAT_RSC_PUT(&rsci->h, &rsc_cache);
-        }
-        RETURN(rc);
+               COMPAT_RSC_PUT(&rsci->h, &rsc_cache);
+       }
+       RETURN(rc);
 }
 
 struct gss_svc_ctx *gss_svc_upcall_get_ctx(struct ptlrpc_request *req,