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