rcmd(3) Library Functions Manual rcmd(3) NUME rcmd, rresvport, iruserok, ruserok, rcmd_af, rresvport_af, iruserok_af, ruserok_af - rutine pentru returnarea unui flux catre o comanda la distana BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include /* Sau pe unele sisteme */ int rcmd(char **restrict ahost, unsigned short inport, const char *restrict locuser, const char *restrict remuser, const char *restrict cmd, int *restrict fd2p); int rresvport(int *port); int iruserok(uint32_t raddr, int superuser, const char *ruser, const char *luser); int ruserok(const char *rhost, int superuser, const char *ruser, const char *luser); int rcmd_af(char **restrict ahost, unsigned short inport, const char *restrict locuser, const char *restrict remuser, const char *restrict cmd, int *restrict fd2p, sa_family_t af); int rresvport_af(int *port, sa_family_t af); int iruserok_af(const void *restrict raddr, int superuser, const char *restrict ruser, const char *restrict luser, sa_family_t af); int ruserok_af(const char *rhost, int superuser, const char *ruser, const char *luser, sa_family_t af); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): rcmd(), rcmd_af(), rresvport(), rresvport_af(), iruserok(), iruserok_af(), ruserok(), ruserok_af(): Incepand cu glibc 2.19: _DEFAULT_SOURCE glibc 2.19 i versiunile anterioare: _BSD_SOURCE DESCRIERE Funcia rcmd() este utilizata de superutilizator pentru a executa o comanda pe o maina la distana utilizand o schema de autentificare bazata pe numere de porturi privilegiate. Funcia rresvport() returneaza un descriptor de fiier catre un soclu cu o adresa in spaiul porturilor privilegiate. Funciile iruserok() i ruserok() sunt utilizate de servere pentru a autentifica clienii care solicita servicii cu rcmd(). Toate cele patru funcii sunt utilizate de serverul rshd(8) (printre altele). rcmd() Funcia rcmd() cauta gazda *ahost folosind gethostbyname(3), returnand -1 daca gazda nu exista. In caz contrar, *ahost este definit la numele standard al gazdei i se stabilete o conexiune la un server care se afla la portul Internet bine cunoscut inport. Daca conexiunea reuete, se returneaza apelantului un soclu in domeniul internet de tip SOCK_STREAM, care este transmis comenzii la distana sub forma stdin i stdout. Daca fd2p este diferit de zero, se va stabili un canal auxiliar catre un proces de control i un descriptor de fiier pentru acesta va fi plasat in *fd2p. Procesul de control va returna ieirea de diagnosticare de la comanda (unitatea 2) pe acest canal i va accepta, de asemenea, octei pe acest canal ca fiind numere de semnal UNIX, pentru a fi transmise grupului de procese al comenzii. Daca fd2p este 0, atunci stderr (unitatea 2 a comenzii de la distana) va fi la fel ca stdout i nu se prevede trimiterea de semnale arbitrare catre procesul de la distana, dei este posibil sa ii atragei atenia folosind date in afara benzii. Protocolul este descris in detaliu in rshd(8). rresvport() Funcia rresvport() este utilizata pentru a obine un soclu cu un port privilegiat asociat acestuia. Acest soclu este potrivit pentru a fi utilizat de rcmd() i de alte cateva funcii. Porturile privilegiate sunt cele din intervalul 0-1023. Numai un proces privilegiat (pe Linux, un proces care are capacitatea CAP_NET_BIND_SERVICE in spaiul de nume al utilizatorului care guverneaza spaiul de nume al reelei sale) este autorizat sa se conecteze la un port privilegiat. In implementarea glibc, aceasta funcie ii limiteaza cautarea la porturile de la 512 la 1023. Argumentul port este valoare-rezultat: valoarea pe care o furnizeaza apelului este utilizata ca punct de plecare pentru o cautare circulara a intervalului de porturi; la returnarea (cu succes), acesta conine numarul portului la care a fost asociat. iruserok() i ruserok() Funciile iruserok() i ruserok() iau adresa IP sau numele unei gazde la distana, respectiv doua nume de utilizator i un indicator care arata daca numele utilizatorului local este cel al superutilizatorului. Apoi, daca utilizatorul nu este superutilizatorul, se verifica fiierul /etc/hosts.equiv. Daca aceasta cautare nu este efectuata sau nu are succes, se verifica .rhosts din directorul local al utilizatorului pentru a vedea daca cererea de serviciu este permisa. Daca acest fiier nu exista, nu este un fiier obinuit, este deinut de oricine altcineva decat utilizatorul sau superutilizatorul, poate fi scris de oricine altcineva decat proprietarul sau este legat printr-o legatura dura oriunde, verificarea eueaza automat. Se returneaza zero daca numele mainii este listat in fiierul hosts.equiv sau daca gazda i numele de utilizator la distana sunt gasite in fiierul .rhosts; in caz contrar, iruserok() i ruserok() returneaza -1. In cazul in care domeniul local (obinut de la gethostname(2)) este acelai cu domeniul la distana, trebuie specificat doar numele mainii. In cazul in care adresa IP a gazdei la distana este cunoscuta, iruserok() ar trebui sa fie utilizat de preferina faa de ruserok(), deoarece nu necesita incredere in serverul DNS pentru domeniul gazdei la distana. *_af() variante Toate funciile descrise mai sus funcioneaza cu socluri IPv4 (AF_INET). Variantele ,,_af" iau un argument suplimentar care permite specificarea familiei de adrese a soclului. Pentru aceste funcii, argumentul af poate fi specificat ca AF_INET sau AF_INET6. In plus, rcmd_af() accepta utilizarea AF_UNSPEC. VALOAREA RETURNATA Funcia rcmd() returneaza un descriptor de soclu valid in caz de succes. Returneaza -1 in caz de eroare i imprima un mesaj de diagnostic la ieirea de eroare standard. Funcia rresvport() returneaza un descriptor de soclu valid i legat in caz de succes. In caz de eec, aceasta returneaza -1 i configureaza errno pentru a indica eroarea. Codul de eroare EAGAIN este supraincarcat pentru a semnifica: ,,Toate porturile de reea sunt utilizate". Pentru informaii privind returnarea de la ruserok() i iruserok(), a se vedea mai sus. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +-------------------------------+---------------------+----------------+ |Interfaa | Atribut | Valoare | +-------------------------------+---------------------+----------------+ |rcmd(), rcmd_af() | Sigurana firelor | MT-Unsafe | +-------------------------------+---------------------+----------------+ |rresvport(), rresvport_af() | Sigurana firelor | MT-Safe | +-------------------------------+---------------------+----------------+ |iruserok(), ruserok(), | Sigurana firelor | MT-Safe locale | |iruserok_af(), ruserok_af() | | | +-------------------------------+---------------------+----------------+ STANDARDE BSD. ISTORIC iruserok_af() rcmd_af() rresvport_af() ruserok_af() glibc 2.2. Solaris, 4.2BSD. Variantele ,,_af" sunt adaugate mai recent i nu sunt prezente pe o gama atat de larga de sisteme. ERORI iruserok() i iruserok_af() sunt declarate in antetele glibc doar de la glibc 2.12. CONSULTAI I rlogin(1), rsh(1), rexec(3), rexecd(8), rlogind(8), rshd(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.18 21 septembrie 2025 rcmd(3)