diff -u -r -N util-linux-2.11u-nfsv4/mount/nfs_mount4.h util-linux-2.11u-znfsv3-sec/mount/nfs_mount4.h --- util-linux-2.11u-nfsv4/mount/nfs_mount4.h 2000-10-14 10:20:51.000000000 -0400 +++ util-linux-2.11u-znfsv3-sec/mount/nfs_mount4.h 2002-11-19 18:19:59.000000000 -0500 @@ -36,6 +36,7 @@ int namlen; /* 2 */ unsigned int bsize; /* 3 */ struct nfs3_fh root; /* 4 */ + int pseudoflavor; /* 4 */ }; /* bits in the flags field */ @@ -51,4 +52,4 @@ #define NFS_MOUNT_KERBEROS 0x0100 /* 3 */ #define NFS_MOUNT_NONLM 0x0200 /* 3 */ #define NFS_MOUNT_BROKEN_SUID 0x0400 /* 4 */ - +#define NFS_MOUNT_SECFLAVOR 0x2000 /* 4 */ diff -u -r -N util-linux-2.11u-nfsv4/mount/nfsmount.c util-linux-2.11u-znfsv3-sec/mount/nfsmount.c --- util-linux-2.11u-nfsv4/mount/nfsmount.c 2002-04-05 06:35:53.000000000 -0500 +++ util-linux-2.11u-znfsv3-sec/mount/nfsmount.c 2002-11-19 18:31:50.000000000 -0500 @@ -72,6 +72,16 @@ #define NFS_FHSIZE 32 #endif +#define RPC_AUTH_GSS_KRB5 390003 +#define RPC_AUTH_GSS_KRB5I 390004 +#define RPC_AUTH_GSS_KRB5P 390005 +#define RPC_AUTH_GSS_LKEY 390006 +#define RPC_AUTH_GSS_LKEYI 390007 +#define RPC_AUTH_GSS_LKEYP 390008 +#define RPC_AUTH_GSS_SPKM 390009 +#define RPC_AUTH_GSS_SPKMI 390010 +#define RPC_AUTH_GSS_SPKMP 390011 + static char *nfs_strerror(int stat); #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) @@ -223,6 +233,7 @@ time_t t; time_t prevt; time_t timeout; + unsigned int pseudoflavor; /* The version to try is either specified or 0 In case it is 0 we tell the caller what we tried */ @@ -326,6 +337,7 @@ mountport = 0; nfsprog = NFS_PROGRAM; nfsvers = 0; + pseudoflavor = 0; /* parse options */ @@ -389,9 +401,28 @@ printf(_("Warning: Option namlen is not supported.\n")); } else if (!strcmp(opt, "addr")) { /* ignore */; + } else if (!strcmp(opt, "sec")) { + if (!strncmp(opteq+1, "krb5", 4)) + pseudoflavor = RPC_AUTH_GSS_KRB5; + else if (!strncmp(opteq+1, "krb5i", 5)) + pseudoflavor = RPC_AUTH_GSS_KRB5I; + else if (!strncmp(opteq+1, "krb5p", 5)) + pseudoflavor=RPC_AUTH_GSS_KRB5P; + else if (!strncmp(opteq+1, "lkey", 4)) + pseudoflavor=RPC_AUTH_GSS_LKEY; + else if (!strncmp(opteq+1, "lkeyi", 5)) + pseudoflavor=RPC_AUTH_GSS_LKEYI; + else if (!strncmp(opteq+1, "lkeyp", 5)) + pseudoflavor=RPC_AUTH_GSS_LKEYP; + else if (!strncmp(opteq+1, "spkm", 4)) + pseudoflavor=RPC_AUTH_GSS_SPKM; + else if (!strncmp(opteq+1, "spkmi", 5)) + pseudoflavor=RPC_AUTH_GSS_SPKMI; + else if (!strncmp(opteq+1, "spkmp", 5)) + pseudoflavor=RPC_AUTH_GSS_SPKMP; } else { printf(_("unknown nfs mount parameter: " - "%s=%d\n"), opt, val); + "%s=%d\n"), opt, val); goto fail; } } else { @@ -430,7 +461,7 @@ } else { if (!sloppy) { printf(_("unknown nfs mount option: " - "%s%s\n"), val ? "" : "no", opt); + "%s%s\n"), val ? "" : "no", opt); goto fail; } } @@ -472,6 +503,11 @@ if (!data.timeo) data.timeo = tcp ? 70 : 7; + if (pseudoflavor) { + data.flags |= NFS_MOUNT_SECFLAVOR; + data.pseudoflavor = pseudoflavor; + } + #ifdef NFS_MOUNT_DEBUG printf("rsize = %d, wsize = %d, timeo = %d, retrans = %d\n", data.rsize, data.wsize, data.timeo, data.retrans); @@ -487,6 +523,8 @@ (data.flags & NFS_MOUNT_POSIX) != 0, (data.flags & NFS_MOUNT_NOCTO) != 0, (data.flags & NFS_MOUNT_NOAC) != 0); + if (flavor) + printf("pseudoflavor = %d\n", pseudoflavor); #if NFS_MOUNT_VERSION >= 2 printf("tcp = %d\n", (data.flags & NFS_MOUNT_TCP) != 0);