All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] nfs-utils: Add nfsidmap (take 2)
@ 2010-11-19 17:39 Steve Dickson
  2010-11-19 17:39 ` [PATCH 1/2] Add the new nfsidmap program Steve Dickson
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Steve Dickson @ 2010-11-19 17:39 UTC (permalink / raw)
  To: Linux NFS Mailing List

The is a re-post of Bryan origin patches that added
in the new nfsidmap program. I tweaked them in the
following ways:

Rename the binary from nfs.idmap to nfsidmap to maintain
conformity with the rest of the binary names.

Since do not like to commit patches that do not compile,
I moved all the autoconfig setting to the second patch.
Then I re-wrote Trond's patch to not compile the nfsidmap
code when libnfsidmap does not have the updated support
instead of failing the compilation.

Bryan Schumaker (1):
  Add the new nfsidmap program

Steve Dickson (1):
  Enable nfsidmap to compile

 aclocal/keyutils.m4         |   11 ++++
 aclocal/libnfsidmap.m4      |    4 ++
 configure.ac                |    7 +++
 utils/Makefile.am           |    3 +
 utils/nfsidmap/Makefile.am  |    9 +++
 utils/nfsidmap/nfsidmap.c   |  118 +++++++++++++++++++++++++++++++++++++++++++
 utils/nfsidmap/nfsidmap.man |   60 ++++++++++++++++++++++
 7 files changed, 212 insertions(+), 0 deletions(-)
 create mode 100644 aclocal/keyutils.m4
 create mode 100644 utils/nfsidmap/Makefile.am
 create mode 100644 utils/nfsidmap/nfsidmap.c
 create mode 100644 utils/nfsidmap/nfsidmap.man

-- 
1.7.3.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] Add the new nfsidmap program
  2010-11-19 17:39 [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson
@ 2010-11-19 17:39 ` Steve Dickson
  2010-11-19 17:39 ` [PATCH 2/2] Enable nfsidmap to compile Steve Dickson
  2010-11-22 17:15 ` [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson
  2 siblings, 0 replies; 4+ messages in thread
From: Steve Dickson @ 2010-11-19 17:39 UTC (permalink / raw)
  To: Linux NFS Mailing List

From: Bryan Schumaker <bjschuma@netapp.com>

This patch adds the nfsidmap program to nfs-utils.  This program is
called by the nfs idmapper through request-keys to map between
uid / user name and gid / group name.

Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
---
 aclocal/keyutils.m4         |   11 ++++
 configure.ac                |    4 ++
 utils/nfsidmap/Makefile.am  |    9 +++
 utils/nfsidmap/nfsidmap.c   |  118 +++++++++++++++++++++++++++++++++++++++++++
 utils/nfsidmap/nfsidmap.man |   60 ++++++++++++++++++++++
 5 files changed, 202 insertions(+), 0 deletions(-)
 create mode 100644 aclocal/keyutils.m4
 create mode 100644 utils/nfsidmap/Makefile.am
 create mode 100644 utils/nfsidmap/nfsidmap.c
 create mode 100644 utils/nfsidmap/nfsidmap.man

diff --git a/aclocal/keyutils.m4 b/aclocal/keyutils.m4
new file mode 100644
index 0000000..84bc112
--- /dev/null
+++ b/aclocal/keyutils.m4
@@ -0,0 +1,11 @@
+dnl Checks for keyutils library and headers
+dnl
+AC_DEFUN([AC_KEYUTILS], [
+
+  dnl Check for libkeyutils; do not add to LIBS if found
+  AC_CHECK_LIB([keyutils], [keyctl_instantiate], [LIBKEYUTILS=-lkeyutils], ,)
+  AC_SUBST(LIBKEYUTILS)
+
+  AC_CHECK_HEADERS([keyutils.h], ,
+  		   [AC_MSG_ERROR([keyutils.h header not found.])])
+])dnl
diff --git a/configure.ac b/configure.ac
index 5408e85..b39dbcd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -247,6 +247,9 @@ if test "$enable_nfsv4" = yes; then
   dnl check for nfsidmap libraries and headers
   AC_LIBNFSIDMAP
 
+  dnl check for the keyutils libraries and headers
+  AC_KEYUTILS
+
   dnl librpcsecgss already has a dependency on libgssapi,
   dnl but we need to make sure we get the right version
   if test "$enable_gss" = yes; then
@@ -435,6 +438,7 @@ AC_CONFIG_FILES([
 	utils/mountd/Makefile
 	utils/nfsd/Makefile
 	utils/nfsstat/Makefile
+	utils/nfsidmap/Makefile
 	utils/showmount/Makefile
 	utils/statd/Makefile
 	tests/Makefile
diff --git a/utils/nfsidmap/Makefile.am b/utils/nfsidmap/Makefile.am
new file mode 100644
index 0000000..f837b91
--- /dev/null
+++ b/utils/nfsidmap/Makefile.am
@@ -0,0 +1,9 @@
+## Process this file with automake to produce Makefile.in
+
+man8_MANS = nfsidmap.man
+
+sbin_PROGRAMS	= nfsidmap
+nfsidmap_SOURCES = nfsidmap.c
+nfsidmap_LDADD = -lnfsidmap -lkeyutils
+
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/utils/nfsidmap/nfsidmap.c b/utils/nfsidmap/nfsidmap.c
new file mode 100644
index 0000000..2d87381
--- /dev/null
+++ b/utils/nfsidmap/nfsidmap.c
@@ -0,0 +1,118 @@
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <pwd.h>
+#include <grp.h>
+#include <keyutils.h>
+#include <nfsidmap.h>
+
+#include <syslog.h>
+
+/* gcc nfsidmap.c -o nfsidmap -l nfsidmap -l keyutils */
+
+#define MAX_ID_LEN   11
+#define IDMAP_NAMESZ 128
+#define USER  1
+#define GROUP 0
+
+
+/*
+ * Find either a user or group id based on the name@domain string
+ */
+int id_lookup(char *name_at_domain, key_serial_t key, int type)
+{
+	char id[MAX_ID_LEN];
+	uid_t uid = 0;
+	gid_t gid = 0;
+	int rc;
+
+	if (type == USER) {
+		rc = nfs4_owner_to_uid(name_at_domain, &uid);
+		sprintf(id, "%u", uid);
+	} else {
+		rc = nfs4_group_owner_to_gid(name_at_domain, &gid);
+		sprintf(id, "%u", gid);
+	}
+
+	if (rc == 0)
+		rc = keyctl_instantiate(key, id, strlen(id) + 1, 0);
+
+	return rc;
+}
+
+/*
+ * Find the name@domain string from either a user or group id
+ */
+int name_lookup(char *id, key_serial_t key, int type)
+{
+	char name[IDMAP_NAMESZ];
+	char domain[NFS4_MAX_DOMAIN_LEN];
+	uid_t uid;
+	gid_t gid;
+	int rc;
+
+	rc = nfs4_get_default_domain(NULL, domain, NFS4_MAX_DOMAIN_LEN);
+	if (rc != 0) {
+		rc = -1;
+		goto out;
+	}
+
+	if (type == USER) {
+		uid = atoi(id);
+		rc = nfs4_uid_to_name(uid, domain, name, IDMAP_NAMESZ);
+	} else {
+		gid = atoi(id);
+		rc = nfs4_gid_to_name(gid, domain, name, IDMAP_NAMESZ);
+	}
+
+	if (rc == 0)
+		rc = keyctl_instantiate(key, &name, strlen(name), 0);
+
+out:
+	return rc;
+}
+
+int main(int argc, char **argv)
+{
+	char *arg;
+	char *value;
+	char *type;
+	int rc = 1;
+	int timeout = 600;
+	key_serial_t key;
+
+	if (argc < 3)
+		return 1;
+
+	arg = malloc(sizeof(char) * strlen(argv[2]) + 1);
+	strcpy(arg, argv[2]);
+	type = strtok(arg, ":");
+	value = strtok(NULL, ":");
+
+	if (argc == 4) {
+		timeout = atoi(argv[3]);
+		if (timeout < 0)
+			timeout = 0;
+	}
+
+	key = strtol(argv[1], NULL, 10);
+
+	if (strcmp(type, "uid") == 0)
+		rc = id_lookup(value, key, USER);
+	else if (strcmp(type, "gid") == 0)
+		rc = id_lookup(value, key, GROUP);
+	else if (strcmp(type, "user") == 0)
+		rc = name_lookup(value, key, USER);
+	else if (strcmp(type, "group") == 0)
+		rc = name_lookup(value, key, GROUP);
+
+	/* Set timeout to 5 (600 seconds) minutes */
+	if (rc == 0)
+		keyctl_set_timeout(key, timeout);
+
+	free(arg);
+	return rc;
+}
diff --git a/utils/nfsidmap/nfsidmap.man b/utils/nfsidmap/nfsidmap.man
new file mode 100644
index 0000000..6c1a2d4
--- /dev/null
+++ b/utils/nfsidmap/nfsidmap.man
@@ -0,0 +1,60 @@
+.\"
+.\"@(#)nfsidmap(8) - The NFS idmapper upcall program
+.\"
+.\" Copyright (C) 2010 Bryan Schumaker <bjschuma@netapp.com>
+.TH nfsidmap 5 "1 October 2010"
+.SH NAME
+nfsidmap \- The NFS idmapper upcall program
+.SH DESCRIPTION
+The file
+.I /usr/sbin/nfsidmap
+is used by the NFS idmapper to translate user and group ids into names, and to
+translate user and group names into ids. Idmapper uses request-key to perform
+the upcall and cache the result.
+.I /usr/sbin/nfsidmap
+should only be called by request-key, and will perform the translation and
+initialize a key with the resulting information.
+.PP
+NFS_USE_NEW_IDMAPPER must be selected when configuring the kernel to use this
+feature.
+.SH CONFIGURING
+The file
+.I /etc/request-key.conf
+will need to be modified so
+.I /sbin/request-key
+can properly direct the upcall. The following line should be added before a call
+to keyctl negate:
+.PP
+create	nfs_idmap	*	*	/usr/sbin/nfsidmap %k %d 600
+.PP
+This will direct all nfs_idmap requests to the program
+.I /usr/sbin/nfsidmap
+The last parameter, 600, defines how many seconds into the future the key will
+expire.  This is an optional parameter for
+.I /usr/sbin/nfsidmap
+and will default to 600 seconds when not specified.
+.PP
+The idmapper system uses four key descriptions:
+.PP
+	  uid: Find the UID for the given user
+.br
+	  gid: Find the GID for the given group
+.br
+	 user: Find the user name for the given UID
+.br
+	group: Find the group name for the given GID
+.PP
+You can choose to handle any of these individually, rather than using the
+generic upcall program.  If you would like to use your own program for a uid
+lookup then you would edit your request-key.conf so it looks similar to this:
+.PP
+create	nfs_idmap	uid:*	*	/some/other/program %k %d 600
+.br
+create	nfs_idmap	*		*	/usr/sbin/nfsidmap %k %d 600
+.PP
+Notice that the new line was added above the line for the generic program.
+request-key will find the first matching line and run the corresponding program.
+In this case, /some/other/program will handle all uid lookups, and
+/usr/sbin/nfsidmap will handle gid, user, and group lookups.
+.SH AUTHOR
+Bryan Schumaker, <bjschuma@netapp.com>
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] Enable nfsidmap to compile
  2010-11-19 17:39 [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson
  2010-11-19 17:39 ` [PATCH 1/2] Add the new nfsidmap program Steve Dickson
@ 2010-11-19 17:39 ` Steve Dickson
  2010-11-22 17:15 ` [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson
  2 siblings, 0 replies; 4+ messages in thread
From: Steve Dickson @ 2010-11-19 17:39 UTC (permalink / raw)
  To: Linux NFS Mailing List

Only enable the compilation of nfsidmap when libnfsidmap support it.

Signed-off-by: Steve Dickson <steved@redhat.com>
---
 aclocal/libnfsidmap.m4 |    4 ++++
 configure.ac           |    3 +++
 utils/Makefile.am      |    3 +++
 3 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/aclocal/libnfsidmap.m4 b/aclocal/libnfsidmap.m4
index cfcde2f..e636604 100644
--- a/aclocal/libnfsidmap.m4
+++ b/aclocal/libnfsidmap.m4
@@ -14,4 +14,8 @@ AC_DEFUN([AC_LIBNFSIDMAP], [
                [AC_DEFINE([HAVE_NFS4_SET_DEBUG], 1,
                           [Define to 1 if you have the `nfs4_set_debug' function.])])
 
+  dnl only enable nfsidmap when libnfsidmap supports it
+  AC_CHECK_LIB([nfsidmap], [nfs4_owner_to_uid], [enable_nfsidmap=1],
+               [enable_nfsidmap=0])
+
 ])dnl
diff --git a/configure.ac b/configure.ac
index b39dbcd..92833e3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -247,6 +247,9 @@ if test "$enable_nfsv4" = yes; then
   dnl check for nfsidmap libraries and headers
   AC_LIBNFSIDMAP
 
+  dnl enable nfsidmap when its support by libnfsidmap
+  AM_CONDITIONAL(CONFIG_NFSIDMAP, [test "$enable_nfsidmap" = "yes"])
+
   dnl check for the keyutils libraries and headers
   AC_KEYUTILS
 
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 8665183..a0ea116 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -4,6 +4,9 @@ OPTDIRS =
 
 if CONFIG_NFSV4
 OPTDIRS += idmapd
+if CONFIG_NFSIDMAP
+OPTDIRS += nfsidmap
+endif
 endif
 
 if CONFIG_GSS
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] nfs-utils: Add nfsidmap (take 2)
  2010-11-19 17:39 [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson
  2010-11-19 17:39 ` [PATCH 1/2] Add the new nfsidmap program Steve Dickson
  2010-11-19 17:39 ` [PATCH 2/2] Enable nfsidmap to compile Steve Dickson
@ 2010-11-22 17:15 ` Steve Dickson
  2 siblings, 0 replies; 4+ messages in thread
From: Steve Dickson @ 2010-11-22 17:15 UTC (permalink / raw)
  To: Steve Dickson; +Cc: Linux NFS Mailing List



On 11/19/2010 12:39 PM, Steve Dickson wrote:
> The is a re-post of Bryan origin patches that added
> in the new nfsidmap program. I tweaked them in the
> following ways:
> 
> Rename the binary from nfs.idmap to nfsidmap to maintain
> conformity with the rest of the binary names.
> 
> Since do not like to commit patches that do not compile,
> I moved all the autoconfig setting to the second patch.
> Then I re-wrote Trond's patch to not compile the nfsidmap
> code when libnfsidmap does not have the updated support
> instead of failing the compilation.
> 
> Bryan Schumaker (1):
>   Add the new nfsidmap program
> 
> Steve Dickson (1):
>   Enable nfsidmap to compile
> 
>  aclocal/keyutils.m4         |   11 ++++
>  aclocal/libnfsidmap.m4      |    4 ++
>  configure.ac                |    7 +++
>  utils/Makefile.am           |    3 +
>  utils/nfsidmap/Makefile.am  |    9 +++
>  utils/nfsidmap/nfsidmap.c   |  118 +++++++++++++++++++++++++++++++++++++++++++
>  utils/nfsidmap/nfsidmap.man |   60 ++++++++++++++++++++++
>  7 files changed, 212 insertions(+), 0 deletions(-)
>  create mode 100644 aclocal/keyutils.m4
>  create mode 100644 utils/nfsidmap/Makefile.am
>  create mode 100644 utils/nfsidmap/nfsidmap.c
>  create mode 100644 utils/nfsidmap/nfsidmap.man
> 
Committed...

steved.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-11-22 17:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-19 17:39 [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson
2010-11-19 17:39 ` [PATCH 1/2] Add the new nfsidmap program Steve Dickson
2010-11-19 17:39 ` [PATCH 2/2] Enable nfsidmap to compile Steve Dickson
2010-11-22 17:15 ` [PATCH 0/2] nfs-utils: Add nfsidmap (take 2) Steve Dickson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.