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/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