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)
INFORMACJE O TŁUMACZENIU
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/.