2012-03-12 7 views
5

Jestem piaskownica R na Ubuntu 11.10 przy użyciu apparmor. Jedną rzeczą, jaką zauważyłem jest to, że za każdym PNG lub pdf działce że R tworzy, pokazuje ostrzeżenie:R i getpwuid()

(process:4589): GLib-WARNING **: getpwuid_r(): failed due to: Permission denied. 

Jednak mimo odczytu do/etc/passwd odmawia, wszystko wydaje się działać perfekcyjnie. Nie zamierzam udzielać R tych zezwoleń, ponieważ wydaje się, że nie potrzebuję tego, co chcę robić. Jednak powtarzające się ostrzeżenie jest nieco denerwujące.

Szybkie grep z „getpwuid” w R/src pokazuje trzy miejsca, gdzie to się nazywa:

r-base-2.14.2/src/main/platform.c: stpwd = getpwuid(sb.st_uid); 
r-base-2.14.2/src/unix/sys-unix.c: stpwd = getpwuid(getuid()); 
r-base-2.14.2/src/unix/sys-unix.c: stpwd = getpwuid(geteuid()); 

Jednak nie bardzo dla mnie jasne, co to robi.

Pytania:

  • Dlaczego R potrzebują dostępu do pliku passwd tworzenia działkę?
  • Czy jest jakiś sposób, aby uniemożliwić R próbie wywołania getpwuid_r() podczas zapisu do urządzenia png lub pdf (bez rekompilacji R)?
+0

Chciałbym zobaczyć wynik "strace (1)" podczas generowania obrazu; Trudno mi zrozumieć, dlaczego R chciałby znać nazwę użytkownika, katalog macierzysty, GECOS lub powłokę, chociaż powłoka jest najbardziej prawdopodobną rzeczą, o którą chodzi. Czy twój profil R wymaga wykonania dostępu do '/ bin/bash' lub'/bin/dash'? (Zastrzeżenie: jestem częścią zespołu AppArmor.) – sarnold

+0

R czyta dużo plików '~/.R *', nawet z '~/.R/*'. Ale myślałem, że robi to tylko na starcie. OTOH ~/.Rhistory etc zostały dołączone, ale znowu - pełna nazwa pliku jest prawdopodobnie obliczana tylko raz. –

+0

Albo, jeśli mógłbyś zaproponować mi szybką metodę samodzielnego odtworzenia tego, byłoby fajnie. Nie znam prawie nic o R (pomimo kilku nieudanych prób nauki). – sarnold

Odpowiedz

0

Wewnętrzna file.info funkcja R (do_fileinfo w gdb) wydaje się odkryć i powrócić wiele informacji o plikach w tym użytkownika.

Zakładam, że robi to w zasadzie dla każdego pliku załadowanego w R, ale może to być tylko podczas ładowania pakietu.

Używa do tego getpwuid.

Mam problemy z wydajnością teraz w R - ze względu na długie odpowiedzi NIS opóźnienia. Sprawdza tego samego użytkownika wiele razy podczas ładowania pakietu, co powoduje wiele różnych problemów.

Chciałbym, żeby buforował.