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