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


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


if(listen(s,5)==-1){ perror("listen()"); exit(1); }

printf("server ready:%s\n", inet_ntoa(serv_addr.sin_addr));

}

server_read() {

/*это в последствии и должно стать рабочим циклом при обмене с клиентом*/

int addrlen; bzero(&clnt_addr,sizeof(clnt_addr)); addrlen=sizeof(clnt_addr);

if((ns=accept(s, (struct sockaddr_in *)&clnt_addr, &addrlen))==-1){ perror("accept()"); exit(1); }

printf("Client: %s\n", inet_ntoa(clnt_addr.sin_addr));

/*Вот и пожаловал клиент*/ close(s); printf("Receiving data ...\n"); recv(ns, username, sizeof(username), 0); recv(ns, newPassword, sizeof(newPassword), 0); //Приняли от него имя пользователя и пароль }

//По окончании всей работы не забудьте выключить свет и сообщить клиенту результат //обработки server_done() { printf("Sending data...\n"); send(ns, username, sizeof(username), 0); close(ns); printf("Server done...\n"); }

// А это главная и хитрейшая функция // Именно она олицетворяет собой диалог человека с машиной. Только у нас она вырожденная // Просто копирует в формируемый специальный ответ имеющиесяф данные. // А вообще-то она может помимо всего этого // выводить всяуие радостные окна и приветствия

static int stdin_conv(int num_msg, const struct pam_message **msgm, struct pam_response **response, void *appdata_ptr) { struct pam_response *reply; int count;

if (num_msg <= 0) return PAM_CONV_ERR;

reply = (struct pam_response *) calloc(num_msg, sizeof(struct pam_response)); if (reply == NULL) { return PAM_CONV_ERR; }

for (count=0; count < num_msg; ++count) { reply[count].resp_retcode = 0; reply[count].resp = strdup(appdata_ptr); }

*response = reply; reply = NULL;

return PAM_SUCCESS; }

int main(int argc, char * const argv[]) // Последняя, но не по значимости функция

{ int retval; pam_handle_t *pamh=NULL;

int i; /*прочтем, то что нам хотел бы сказать клиент*/

server_init(); server_read();

/*И не долго думая установим новые значения*/ / Важно: PAM теперь работает совсем по другому. //Так как раньше он не позволил бы простому пользователю ввести себе //слабый пароль, а теперь нет проблем - администратору это можно.




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



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