On Tue, Nov 27, 2012 at 10:38:22AM +0900, Satoru Takeuchi wrote: > Hi Dave and all, > > (2012/11/26 17:48), Satoru Takeuchi wrote: > > (2012/11/23 8:37), Dave Chinner wrote: > >> On Thu, Nov 22, 2012 at 02:05:03PM +0900, Satoru Takeuchi wrote: > >>> Hi, > >>> > >>> Current xfs_quota (I pulled xfsprogs today) seems not be able to the users > >>> managed by LDAP. There is no patch since I'm not good at LDAP and don't know > >>> the root cause yet ;-( > >>> > >>> Step to reproduce(in this case, "sat" is the user managed by LDAP): > >>> =============================================================================== > >>> # uname -r > >>> 3.7.0-rc5 > >>> # mount -o loop,usrquota xfs.img mnt > >>> # xfsprogs/quota/xfs_quota -xc "limit bsoft=10M bhard=10M sat" /dev/loop0 > >>> xfs_quota: invalid user name: sat # denied > >>> # su sat > >>> $ # But this user acutally exists. > >>> =============================================================================== > >>> > >>> The kernel is a bit old, but I suspect this is a userland problem. > >> > >> Yes, userland. > >> > >> However, xfs_quota is not supposed to know about LDAP, or NIS, or > >> any other user database. It uses the getpwnam() to convert the user > >> name to a UID, and that call is failing to find "sat". This is > >> supposed to work with LDAP (as mentioned in the man page), and if it > >> isn't it generally means something is broken with your LDAP setup > >> (/etc/nsswitch.conf not correct?) rather than there being something > >> wrong with xfs_quota.... > > > > Probably this behaivor comes from the difference between the test machine > > and the build machine which I built the upstream xfsprogs. > > > > I made the following simple program which just calls getpwnam(). > > > > =============================================================================== > > #include <sys/types.h> > > #include <pwd.h> > > #include <err.h> > > #include <stdio.h> > > #include <stdlib.h> > > > > int main(void) > > { > > struct passwd *p; > > if ((p = getpwnam("sat")) == NULL) > > err(EXIT_FAILURE, "getpwnam() failed."); > > printf("name = %s, id = %d\n", p->pw_name, p->pw_uid); > > exit(EXIT_SUCCESS); > > } > > =============================================================================== > > > > Here is the result of this problem at the test machine. > > > > - SUCCEEDED: build at the test machine > > - FAILED: built at the build machine > > > > I will build xfsprogs at the test machine and confirm whether this behavior > > (getpwnam() fails) happens or not again. > > I retried the step to reproduce and encountered the anotehr behavior with the > newest xfsprogs built at the test machine. In this test, getpwnam() > worked fine, but quota didn't work for LDAP user. > > test result("testquota" is local user and "sat" is LDAP user here): > =============================================================================== > # mount -t xfs -o loop,usrquota xfs.img mnt > # ~sat/src/xfsprogs/quota/xfs_quota -xc "report -h" /dev/loop0 > User quota on /home/sat/work/xfs/mnt (/dev/loop0) > Blocks > User ID Used Soft Hard Warn/Grace > ---------- --------------------------------- > root 0 0 0 00 [------] # There is no limit yet > > # ~sat/src/xfsprogs/quota/xfs_quota -xc "limit bsoft=10M bhard=10M testquota" /dev/loop0 > # echo $? > 0 > # ~sat/src/xfsprogs/quota/xfs_quota -xc "report -h" /dev/loop0 > User quota on /home/sat/work/xfs/mnt (/dev/loop0) > Blocks > User ID Used Soft Hard Warn/Grace > ---------- --------------------------------- > root 0 0 0 00 [------] > testquota 0 10M 10M 00 [------] # limit to local user works fine > # ~sat/src/xfsprogs/quota/xfs_quota -xc "limit bsoft=10M bhard=10M sat" /dev/loop0 > # echo $? > 0 > # ~sat/src/xfsprogs/quota/xfs_quota -xc "report -h" /dev/loop0 > User quota on /home/sat/work/xfs/mnt (/dev/loop0) > Blocks > User ID Used Soft Hard Warn/Grace > ---------- --------------------------------- > root 0 0 0 00 [------] > testquota 0 10M 10M 00 [------] # limit to LDAP user does not work although xfs_quota returns 0 > =============================================================================== > > I tried it with real partition rather than loopback device, but the result > was the same. Can you strace the limit set and report of the ldap user and attach it? that will tell us directly whether xfs_quota saw the ldap user or not as we'll see a quotactl() being issued. Also, instead of using a user name, can you find out the user ID of "sat" and use "report -U <uid + 1> -h" so avoid the getpwent lookup and just report raw quota ids? Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs