extern crate libc;
-use nom::IResult;
+use nom::{IResult, be_u32};
use core::*;
use log::*;
use nfs::nfs_records::*;
use nfs::nfs4_records::*;
+use kerberos;
+
+named!(parse_req_gssapi<kerberos::Kerberos5Ticket>,
+ do_parse!(
+ len: be_u32
+ >> ap: flat_map!(take!(len), call!(kerberos::parse_kerberos5_request))
+ >> ( ap )
+));
+
impl NFSState {
/* normal write: PUTFH (file handle), WRITE (write opts/data). File handle
* is not part of the write record itself so we pass it in here. */
let mut xidmap = NFSRequestXidMap::new(r.progver, r.procedure, 0);
- if r.procedure == NFSPROC4_COMPOUND {
+ if r.procedure == NFSPROC4_NULL {
+ if let RpcRequestCreds::GssApi(ref creds) = r.creds {
+ if creds.procedure == 1 {
+ let _x = parse_req_gssapi(r.prog_data);
+ SCLogDebug!("RPCSEC_GSS_INIT {:?}", _x);
+ }
+ }
+ } else if r.procedure == NFSPROC4_COMPOUND {
match parse_nfs4_request_compound(r.prog_data) {
IResult::Done(_, rd) => {
SCLogDebug!("NFSPROC4_COMPOUND: {:?}", rd);