linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: HABIB Ramzi <ramzi@nomado.eu>
To: linux-nfs@vger.kernel.org
Subject: libnfsidmap: Virtual domains/users handling with at sign in idmap
Date: Tue, 11 May 2010 14:07:56 +0100	[thread overview]
Message-ID: <4BE956AC.3070303@nomado.eu> (raw)

[-- Attachment #1: Type: text/plain, Size: 3127 bytes --]

Subject: libnfsidmap: Virtual domains/users handling with at sign in idmap
Package: libnfsidmap
Version: 0.23
Severity: normal
Tags: patch

*** Please type your report below this line ***

Idmap fails to map uid to localname or vice versa in case an 'at' ( @ ) sign
is included in the localname.
This is particularly the case of virtual domains username where
a user@virtual_domain is in fact the username and its @ sign conflicts with
username@idmap_domain format used by idmap to handle uid/localname 
conversions.
Where username = user@virtual_domain.
Idmap is still able to map uid/localname correctly when the username 
does not
include an @ sign.
Both NFS Server and Client are PAM/NSS clients of an OpenLDAP Server that
handles users & groups. NFSv4 is used and without kerberos and "nsswitch"
Translation method is used rather than umich_ldap.
Idmap looks for the first occurrence of and @ sign in the name string
and assumes that the @ sign is the one of user@virtual_domain rather than
using the one of username@idmap_domain (user@virtual_domain@idmap_domain).
The function "strip_domain" is defined in nss.c file and uses "strchr"
function on line 138 to find the first occurrence of an @ sign from the name
string.
As the name string includes 2 occurrences, the domain resulting from that
(virtual_domain@idmap_domain) fails to match with the configured idmap 
domain
(idmap_domain) and this causes idmap returning a null value.
Switching from "strchr" to "strrchr" simply fix the problem as it would look
for the last occurrence rather than the first one and therefore has a 
resulting
domain that matched the idmap one.
This obviously makes sense as a URI should be read from right to left 
and not
from left to right when handling domains.
The idmap domain is this way the root domain and all virtual domains 
included
in the username it handles will not conflicts with it.

A patch is included here below :

libnfsidmap_0.23_fix_at_sign_user_with_domain.diff

//////////////////////////////////////////////////////////////////

--- libnfsidmap-0.23.orig/nss.c    2009-07-29 22:19:06.000000000 +0200
+++ libnfsidmap-0.23/nss.c    2010-05-11 15:02:13.000000000 +0200
@@ -135,7 +135,7 @@
      char *l = NULL;
      int len;

-    c = strchr(name, '@');
+    c = strrchr(name, '@');
      if (c == NULL && domain != NULL)
          goto out;
      if (c == NULL && domain == NULL) {

//////////////////////////////////////////////////////////////////

The patch applies to all archs.
Versions checked :
Debian :
libnfsidmap2 0.18-0 (oldstable)
libnfsidmap2 0.20-1 (stable)
libnfsidmap2 0.23-2 (testing,unstable)

-- System Information:
Debian Release: 5.0.4
   APT prefers stable
   APT policy: (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.26-2-amd64 (SMP w/1 CPU core)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages libnfsidmap2 depends on:
ii  libc6                       2.7-18lenny2 GNU C Library: Shared libraries
ii  libldap-2.4-2               2.4.11-1+lenny1   OpenLDAP libraries

Ramzi HABIB
ramzi <at> nomado.eu

[-- Attachment #2: libnfsidmap_0.23_fix_at_sign_user_with_domain.diff --]
[-- Type: text/plain, Size: 318 bytes --]

--- libnfsidmap-0.23.orig/nss.c	2009-07-29 22:19:06.000000000 +0200
+++ libnfsidmap-0.23/nss.c	2010-05-11 15:02:13.000000000 +0200
@@ -135,7 +135,7 @@
 	char *l = NULL;
 	int len;
 
-	c = strchr(name, '@');
+	c = strrchr(name, '@');
 	if (c == NULL && domain != NULL)
 		goto out;
 	if (c == NULL && domain == NULL) {

             reply	other threads:[~2010-05-11 13:37 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-11 13:07 HABIB Ramzi [this message]
     [not found] ` <4BE956AC.3070303-nj/97Yry1BOHXe+LvDLADg@public.gmane.org>
2010-05-11 14:07   ` libnfsidmap: Virtual domains/users handling with at sign in idmap Kevin Coffman
2010-05-11 14:36     ` HABIB Ramzi
     [not found]     ` <4BE96A0B.8070000@nomado.eu>
2010-05-11 16:58       ` HABIB Ramzi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BE956AC.3070303@nomado.eu \
    --to=ramzi@nomado.eu \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).