Операционные системы - статьи


Делаем собственное PAM-приложение - часть 4


printf("Client done...\n"); }

Ну вот и все. Все просто. Но так и должно быть. пример-то учебный. Для реального воплощения идеи надо не мало потрудиться. Важное замечание. Клиент нигде не использует никаких функций, связанных с аутентификацией в ОС - то чего мы и добивались.

А вот с сервером дела обстоят несколько хуже. Он использует библиотеку PAM, хотя может производить все изменения и вручную. Но только зачем нам изобретать велосипед?

//Масса полезных включений

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <netdb.h>

#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h>

#include <unistd.h> #include <sys/types.h>

#include <security/pam_appl.h> #include <security/pam_misc.h>

#define USERNAME "stas" #define PASSWORD "1234" #define PORTNUM 1500

// А это нужно для PAM. Так описывается функция диалога между программой и пользователем. // Путем этого диалога определяется что и как спрашивать. Диалог задает программа. Это весьма разумно, ибо с РАМ могут // работать как консольные программы, так и программы с графическим интерфейсом.

static struct pam_conv conv = { misc_conv, NULL };

//Тут мы сохраним все самое дорогое char username[80] = USERNAME; /* имя пользователя */ char newPassword[80] = PASSWORD; /* его пароль*/ int s, ns; /*идентификаторы сокетов*/ struct sockaddr_in serv_addr, clnt_addr; /*структуры описатели адресов*/

//Итак, сначала инициализируем серверную часть

server_init() { int pid; int nport; int nbytes; int fout; int addrlen;

struct hostent *hp;

char hname[80];

nport=PORTNUM; nport=htons((u_short)nport);

if((s=socket(AF_INET, SOCK_STREAM, 0))==-1){ perror("socket()"); exit(1); }

bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=INADDR_ANY; serv_addr.sin_port=nport;

if( bind(s, (struct sockaddr_in *)&serv_addr, sizeof(serv_addr))==-1){ perror("bind()"); exit(1); }




Начало  Назад  Вперед



Книжный магазин