NAZWA¶
access - sprawdzenie praw użytkownika do pliku
SKŁADNIA¶
#include <unistd.h>
int access(const char *pathname, int mode);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
access sprawdza, czy proces może odczytywać,
zapisywać i sprawdzać istnienie pliku (lub innego obiektu
systemu plików) o nazwie
pathname. Jeśli
pathname
jest dowiązaniem symbolicznym, sprawdzane są prawa do pliku
wskazywanego przez to dowiązanie.
mode jest maską składającą się z
jednego lub więcej znaczników spośród
R_OK,
W_OK,
X_OK i
F_OK.
R_OK,
W_OK i
X_OK sprawdzają, czy plik istnieje i ma
odpowiednio prawa do odczytu, zapisu i uruchamiania.
F_OK sprawdza
tylko, czy plik istnieje.
Testy zależą od praw do katalogów,
występujących na ścieżce do pliku, podanej w
parametrze
pathname, a także od praw do katalogów i
plików wskazywanych przez występujące po drodze
dowiązania symboliczne.
Sprawdzenie jest dokonywane z
prawdziwymi uid i gid procesu, a nie
efektywnymi, jak to się zwykle robi przy wykonywaniu rzeczywistych
operacji. Pozwala to programom z ustawionym bitem set-UID na łatwe
określenie autoryzacji użytkownika wywołującego.
Sprawdzane są jedynie bity dostępu, nie zawartość
pliku czy jego typ. Dlatego, jeśli katalog okazuje się
"zapisywalny", znaczy to prawdopodobnie, że można w
nim tworzyć pliki, a nie, że do katalogu można
pisać jak do pliku. Podobnie, plik DOS-u może zostać
określony jako "wykonywalny", lecz funkcja
execve(2)
mimo to zawiedzie.
Jeśli proces posiada odpowiednie uprawninia, implementacja może
spowodować pomyślne zakończenie dla
X_OK nawet,
gdy nie jest ustawiony żaden z bitów uruchamialności w
prawach dostępu do pliku.
WARTOŚĆ ZWRACANA¶
Gdy wszystko pójdzie dobrze (wszystkie żądane prawa
są zapewnione), zwracane jest zero. W wypadku błędu
(przynajmniej jeden bit z żądanych w
mode
uprawnień nie jest ustawiony lub wystąpiły inne
błędy), zwracane jest -1 i odpowiednio ustawiane jest
errno.
BŁĘDY¶
Funkcja
access musi zakończyć się
niepomyślnie gdy:
- EACCES
- Brak uprawnień dla żądanego dostępu do pliku,
albo brak uprawnień do przeglądania dla
któregoś z katalogów w pathname.
- ELOOP
- Napotkano zbyt wiele dowiązań symbolicznych podczas
rozwiązywania pathname.
- ENAMETOOLONG
- pathname jest zbyt długie.
- ENOENT
- Składnik pathname będący katalogiem
byłby dostępny, ale nie istnieje lub jest wiszącym
dowiązaniem symbolicznym.
- ENOTDIR
- Składnik pathname, który powinien być
katalogiem w rzeczywistości katalogiem nie jest.
- EROFS
- Żądano zapisu do pliku położonego w systemie
plików tylko do odczytu.
- EFAULT
- pathname wskazuje poza dostępną dla
użytkownika przestrzeń adresową.
- EINVAL
- mode zostało nieprawidłowo podane.
- EIO
- Wystąpił błąd
wejścia/wyjścia.
- ENOMEM
- Nie starczyło pamięci kernela. TP ETXTBSY
Wystąpiła próba dostępu z prawem zapisu do
pliku aktualnie uruchomionego programu.
OGRANICZENIA¶
access zwraca błąd, jeśli jakikolwiek z
żądanych w wywołaniu rodzajów dostępu nie
zostanie zapewniony, nawet jeśli reszta zostanie.
access może nie działać prawidłowo na
systemach plików NFS z włączonym mapowaniem UID,
ponieważ mapowanie to jest dokonywane na serwerze i ukryte przed
klientem sprawdzającym prawa dostępu.
Użycie funkcji
access w celu sprawdzenia, czy użytkownik ma
uprawnienia na przykład do otwarcia pliku, przed otwarciem tego pliku
za pomocą
open(2) tworzy dziurę w bezpieczeństwie,
ponieważ użytkownik może wykorzystać krótki
okres czas pomiędzy sprawdzeniem pliku a otwarciem go do manipulacji na
pliku.
ZGODNE Z¶
SVID, AT&T, POSIX, X/OPEN, BSD 4.3
ZOBACZ TAKŻE¶
stat(2),
open(2),
chmod(2),
chown(2),
setuid(2),
setgid(2)
Powyższe tłumaczenie pochodzi z nieistniejącego już
Projektu Tłumaczenia Manuali i
może nie być
aktualne. W razie zauważenia różnic między
powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną
(angielską) wersją strony podręcznika za pomocą
polecenia:
- man --locale=C 2 access
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.