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