As an experiment try setting /home/richard 755.

You also might add calls to:

uid_t getuid(void);

uid_t geteuid(void);

gid_t getgid(void);

gid_t getegid(void);

just before the call to getcwd.

The following should *not* be relevant, but circa 1998, Sun made a change such 
that getcwd would set errno even though the call succeeded.  This broke code 
I'd written 6 years earlier that ran on AIX, Irix, Clix, Ultrix, HP-UX and 
Solaris and required no maintenance during that time.  The friend who fixed it 
related this over lunch one day.  His solution was to modify the failure test 
to check for a null pointer being returned instead of the traditional clearing 
and testing of errno that I used.

Have Fun!
Reg


--- On Fri, 3/22/13, Richard PALO <[email protected]> wrote:

> From: Richard PALO <[email protected]>
> Subject: [discuss] getcwd on a nfs mounted home directory subdir
> To: [email protected]
> Date: Friday, March 22, 2013, 1:40 PM
> scratching my head trying to debug an
> issue with getcwd on an nfs mount, and I'm at a loss already
> as to the failure case with the following butt-simple
> program:
> 
> > #include <unistd.h>
> > #include <sys/param.h>
> > #include <stdio.h>
> > #include <errno.h>
> > int main (void)
> > {
> >     char cwd[MAXPATHLEN+1];
> >     int errsv = 0;
> > 
> >     if (getcwd(cwd, sizeof(cwd)) ==
> NULL)
> >     {
> >         errsv = errno;
> >         perror("pwd");
> >     }
> >     else
> >         printf("Current
> path is %s\n", cwd);
> >     return errsv;
> > }
> 
> ==============================
> 
> 
> > richard@omni1:~/src/tcov$ ./a.out
> > Current path is /home/richard/src/tcov
> ok
> 
> > richard@omni1:~/src/tcov$ sudo ./a.out
> > Current path is /home/richard/src/tcov
> ok
> 
> > richard@omni1:~/src/tcov$ pfexec ./a.out
> > Current path is /home/richard/src/tcov
> ok
> 
> > richard@omni1:~/src/tcov$ truss ./a.out
> > execve("a.out", 0x08047D44, 0x08047D4C)  argc = 1
> > sysinfo(SI_MACHINE, "i86pc", 257)   
>     = 6
> > mmap(0x00000000, 32, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEFB0000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEFA0000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEF90000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEF80000
> > memcntl(0xFEFB6000, 47484, MC_ADVISE, MADV_WILLNEED, 0,
> 0) = 0
> > memcntl(0x08050000, 2880, MC_ADVISE, MADV_WILLNEED, 0,
> 0) = 0
> > resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) =
> 12
> > getcwd("/home/richard/src/tcov",
> 1017)        = 0
> > resolvepath("/home/richard/src/tcov/a.out",
> "/home/richard/src/tcov/a.out", 1023) = 28
> > stat64("/home/richard/src/tcov/a.out", 0x080479D8) = 0
> > open("/var/ld/ld.config", O_RDONLY)   
>     Err#2 ENOENT
> > sysconfig(_CONFIG_PAGESIZE)   
>         = 4096
> > stat64("/lib/libc.so.1", 0x080471F8)   
>     = 0
> > resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) =
> 14
> > open("/lib/libc.so.1", O_RDONLY)   
>     = 3
> > mmapobj(3, MMOBJ_INTERPRET, 0xFEFA0A28, 0x08047264,
> 0x00000000) = 0
> > close(3)       
>             =
> 0
> > memcntl(0xFEE30000, 244408, MC_ADVISE, MADV_WILLNEED,
> 0, 0) = 0
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEE20000
> > mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFEE10000
> > getcontext(0x08047818)
> > getrlimit(RLIMIT_STACK, 0x08047810)   
>     = 0
> > getpid()       
>             =
> 1157 [1156]
> > lwp_private(0, 1, 0xFEE12A40)   
>         = 0x000001C3
> > setustack(0xFEE12AA0)
> > sysi86(SI86FPSTART, 0xFEF7CF8C, 0x0000133F, 0x00001F80)
> = 0x00000001
> > getcwd("/home/richard/src/tcov",
> 1025)        = 0
> > ioctl(1, TCGETA, 0x08046A3E)   
>         = 0
> > fstat64(1, 0x08046980)   
>             =
> 0
> > Current path is /home/richard/src/tcov
> > write(1, " C u r r e n t   p a t h"..,
> 39)    = 39
> > _exit(0)
> 
> ok
> 
> > richard@omni1:~/src/tcov$ sudo truss ./a.out
> > execve("a.out", 0x08047E10, 0x08047E18)  argc = 1
> > sysinfo(SI_MACHINE, "i86pc", 257)   
>     = 6
> > mmap(0x00000000, 32, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEFB0000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEFA0000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEF90000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEF80000
> > memcntl(0xFEFB6000, 47484, MC_ADVISE, MADV_WILLNEED, 0,
> 0) = 0
> > memcntl(0x08050000, 2880, MC_ADVISE, MADV_WILLNEED, 0,
> 0) = 0
> > resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) =
> 12
> > getcwd("/home/richard/src/tcov",
> 1017)        = 0
> > resolvepath("/home/richard/src/tcov/a.out",
> "/home/richard/src/tcov/a.out", 1023) = 28
> > stat64("/home/richard/src/tcov/a.out", 0x08047AA4) = 0
> > open("/var/ld/ld.config", O_RDONLY)   
>     Err#2 ENOENT
> > sysconfig(_CONFIG_PAGESIZE)   
>         = 4096
> > stat64("/lib/libc.so.1", 0x080472C4)   
>     = 0
> > resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) =
> 14
> > open("/lib/libc.so.1", O_RDONLY)   
>     = 3
> > mmapobj(3, MMOBJ_INTERPRET, 0xFEFA0A28, 0x08047330,
> 0x00000000) = 0
> > close(3)       
>             =
> 0
> > memcntl(0xFEE30000, 244408, MC_ADVISE, MADV_WILLNEED,
> 0, 0) = 0
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEE20000
> > mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFEE10000
> > getcontext(0x080478E4)
> > getrlimit(RLIMIT_STACK, 0x080478DC)   
>     = 0
> > getpid()       
>             =
> 1162 [1161]
> > lwp_private(0, 1, 0xFEE12A40)   
>         = 0x000001C3
> > setustack(0xFEE12AA0)
> > sysi86(SI86FPSTART, 0xFEF7CF8C, 0x0000133F, 0x00001F80)
> = 0x00000001
> > getcwd("/home/richard/src/tcov",
> 1025)        = 0
> > ioctl(1, TCGETA, 0x08046B0E)   
>         = 0
> > fstat64(1, 0x08046A50)   
>             =
> 0
> > Current path is /home/richard/src/tcov
> > write(1, " C u r r e n t   p a t h"..,
> 39)    = 39
> > _exit(0)
> 
> ok
> 
> > richard@omni1:~/src/tcov$ pfexec truss ./a.out
> > execve("a.out", 0x08047D44, 0x08047D4C)  argc = 1
> > sysinfo(SI_MACHINE, "i86pc", 257)   
>     = 6
> > mmap(0x00000000, 32, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEFB0000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEFA0000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEF90000
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEF80000
> > memcntl(0xFEFB6000, 47484, MC_ADVISE, MADV_WILLNEED, 0,
> 0) = 0
> > memcntl(0x08050000, 2880, MC_ADVISE, MADV_WILLNEED, 0,
> 0) = 0
> > resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) =
> 12
> 
> > getcwd(0x08047658, 1017)   
>         Err#13 EACCES
> 
> > resolvepath("a.out", "a.out", 1023)   
>     = 5
> > sysconfig(_CONFIG_PAGESIZE)   
>         = 4096
> > stat64("a.out", 0x080479D8)   
>         = 0
> > open("/var/ld/ld.config", O_RDONLY)   
>     Err#2 ENOENT
> > stat64("/lib/libc.so.1", 0x080471F8)   
>     = 0
> > resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) =
> 14
> > open("/lib/libc.so.1", O_RDONLY)   
>     = 3
> > mmapobj(3, MMOBJ_INTERPRET, 0xFEFA0A28, 0x08047264,
> 0x00000000) = 0
> > close(3)       
>             =
> 0
> > memcntl(0xFEE30000, 244408, MC_ADVISE, MADV_WILLNEED,
> 0, 0) = 0
> > mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFEE20000
> > mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
> MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFEE10000
> > getcontext(0x08047818)
> > getrlimit(RLIMIT_STACK, 0x08047810)   
>     = 0
> > getpid()       
>             =
> 1166 [1165]
> > lwp_private(0, 1, 0xFEE12A40)   
>         = 0x000001C3
> > setustack(0xFEE12AA0)
> > sysi86(SI86FPSTART, 0xFEF7CF8C, 0x0000133F, 0x00001F80)
> = 0x00000001
> 
> > getcwd(0x0804790B, 1025)   
>         Err#13 EACCES
> 
> > brk(0x080611C0)       
>             =
> 0
> > brk(0x080631C0)       
>             =
> 0
> > pwdwrite(2, " p w d", 3)   
>             =
> 3
> > : write(2, " :  ", 2)   
>             =
> 2
> > Permission deniedwrite(2, " P e r m i s s i o
> n   d".., 17)    = 17
> > 
> > write(2, "\n", 1)       
>         = 1
> > _exit(13)
> 
> WTF?  there must be some insidious reason to this.
> 
> pfexec seems to use the short path, and sudo the full
> path...
> 
> the nfs environment
> simple /etc/auto_home containing the following extract
> > richard   
> x3200:/dpool/export/home/&
> 
> extract from mount
> > /home/richard on x3200:/dpool/export/home/richard
> remote/read/write/setuid/devices/xattr/dev=8600001 on ven.
> mars 22 18:03:00 2013
> > /home/richard/src on
> x3200:/dpool/export/home/richard/src
> remote/read/write/setuid/devices/xattr/dev=8600003 on ven.
> mars 22 18:41:41 2013
> from /etc/user_attr
> > richard::::type=normal;profiles=Primary Administrator
> 
> root is NOT a role but still a normal account.
> /etc/security/exec_attr is stock standard with Primary
> Administrator having
> > Primary Administrator:solaris:cmd:::*:uid=0;gid=0
> 
> and
> > richard@omni1:~/src/tcov$ df -gh .
> > Filesystem         
>    Size   Used  Available
> Capacity  Mounted on
> > x3200:/dpool/export/home/richard/src
> >               
>         190G    17G 
>      174G 
>    9%    /home/richard/src
> > richard@omni1:~/src/tcov$ ls -lahd /home /home/richard
> /home/richard/src
> > dr-xr-xr-x   2 root 
>    root       
>    2 mars 22 17:53 /home/
> > drwxr-x--x  90 richard  staff   
>     314 mars 22 18:44 /home/richard/
> > drwxrwxrwx  48 richard  staff   
>      73 mars 17 09:59
> /home/richard/src/
> 
> 
> is this because Primary Administrator is really not enough
> for this operation?  if so, why? what profile
> specifically needs to be added?
> 
> 
> 
> -------------------------------------------
> illumos-discuss
> Archives: https://www.listbox.com/member/archive/182180/=now
> RSS Feed: https://www.listbox.com/member/archive/rss/182180/23998448-902cecc3
> Modify Your Subscription: https://www.listbox.com/member/?&;
> Powered by Listbox: http://www.listbox.com
>


-------------------------------------------
illumos-discuss
Archives: https://www.listbox.com/member/archive/182180/=now
RSS Feed: https://www.listbox.com/member/archive/rss/182180/21175430-2e6923be
Modify Your Subscription: 
https://www.listbox.com/member/?member_id=21175430&id_secret=21175430-6a77cda4
Powered by Listbox: http://www.listbox.com

Reply via email to