V unixu je nekolik zakladnich souboru nutnych pro beh systemu: soubor hesel /etc/passwd a soubor skupin /etc/group. Tyto soubory jsou casto pouzivany ostatnimi programy. Napr. soubor hesel je pouzit pri kazdem prihlaseni uzivatele nebo pri spusteni prikazu ls -l.
POSIX.1 definuje soubor nazyvany databaze uzivatelu, ktery obsahuje nasledujici informace -- viz tab. 11
Popis | struct passwd | POSIX.1 |
---|---|---|
uzivatelske jmeno | char *pw_name | |
sifrovane heslo | char *pw_passwd | |
user ID | uid_t pw_uid | |
group ID | gid_t pw_gid | |
komentar | char *pw_gecos | |
pocatecni pracovni adresar | char *pw_dir | |
pocatecni shell (ci jakykoli program) | char *pw_shell |
Historicky jsou tyto informace ulozeny v ASCII souboru /etc/passwd. Priklad tohoto souboru muzete nalezt v kap. "Prihlaseni do systemu".
POSIX.1 definuje pouze dve operace nad temito zaznamy. Prvni funkce vyhleda polozku podle UID a druha podle uzivatelskeho jmena.
#include <sys/types.h> #include <pwd.h> |
struct passwd *getpwuid (uid_t uid); struct passwd *getpwnam (const char name); |
Obe vraci: ukazatel kdyz OK, NULL pri chybe |
Tyto funkce vsak vrati jen jeden zaznam. Pro prochazeni celeho souboru slouzi nasledujici funkce.
#include <sys/types.h> #include <pwd.h> |
void setpwent(void); |
void endpwent(void); |
struct passwd *getpwent (void); |
Vraci: ukazatel kdyz OK, NULL pri chybe |
getpwent vrati dalsi polozku v poradi a ostatni funkce slouzi jen k otevreni a uzavreni souboru. Vse je nejlepe patrne na prikladu.
Priklad:
#include <sys/types.h> #include <pwd.h> #include <stddef.h> #include <string.h> struct passwd * getpwnam(const char *name) { struct passwd *ptr; setpwent(); while ( (ptr = getpwent()) != NULL) { if (strcmp(name, ptr->pw_name) == 0) break; /* found a match */ } endpwent(); return(ptr); /* ptr is NULL if no match found */ }
Informace o skupinach lze nalezt v souboru se skupinami, ktery POSIX nazyva databaze skupin. Tento soubor obsahuje polozky vypsane v tabulce 12.
Popis | struct group | POSIX.1 |
---|---|---|
jmeno skupiny | char *gr_name | |
sifrovane heslo | char *gr_passwd | |
group ID | gid_t gr_gid | |
pole ukazatelu na jmena uzivatelu | char **gr_mem |
Pole uzivatelu je ukonceno NULL. V tomto souboru opet muzeme vyhledavat pomoci dvojice funkci.
#include <sys/types.h> #include <grp.h> | ||
struct group *getgrgid (gid_t gid);struct group *getgrnam (const char name); |
Obe vraci: ukazatel kdyz OK, NULL pri chybe
| |
Tyto funkce vsak vrati jen jeden zaznam. Pro prochazeni celeho souboru slouzi nasledujici funkce.
#include <sys/types.h> #include <grp.h> |
void setgrent(void); |
void endgrent(void); |
struct group *getgrent (void); |
Vraci: ukazatel kdyz OK, NULL pri chybe |
POSIX.1 poskytuje funkce pro identifikaci hostitelskeho pocitace a operacniho systemu:
#include <sys/utsname.h> |
int uname (struct utsname *name); |
Vraci: nezaporne cislo kdyz OK, -1 pri chybe |
Funkce vyplni danou strukturu. Ta ma nasledujici tvar:
struct utsname { char sysname[9]; /* nazev operacniho systemu */ char nodename[9]; /* nazev uzlu */ char release[9]; /* release operacniho systemu */ char version[9]; /* verze release */ char machine[9]; /* nazev typu hardware */ };
Ladislav Dobias