Читаем Разработка приложений в среде Linux. Второе издание полностью

 72:    fprintf(stderr, "%s: %s\n",

 73:    poptBadOption(optCon, POPT_BADOPTION_NOALIAS),

 74:    poptStrerror(c));

 75:    return 1;

 76:   }

 77:   poptFreeContext(optCon);

 78:

 79:   if (!service) {

 80:    /* Обратите внимание, что обычное приложение не должно предоставлять

 81:     * этот параметр пользователю; он присутствует здесь, чтобы можно было

 82:     * проверить это приложение, не производя изменений в системе,

 83:     * требующих доступа root.

 84:     */

 85:   service = "pamexample";

 86:  }

 87:

 88:  if (!username) {

 89:   /* по умолчанию для текущего пользователя */

 90:   if (!(pw = getpwuid (getuid())) ) {

 91:    fprintf(stderr, "Имя пользователя не существует");

 92:    exit(1);

 93:   }

 94:   username = strdup(pw->pw_name);

 95:  }

 96:

 97:  с = pam_start(service, username, &my_conv, &pamh);

 98:  check_success(pamh, c);

 99:

100:  с = pam_authenticate(pamh, 0);

101:  check_success(pamh, c);

102:

103:  if (account) {

104:   /* если аутентификация не была закончена, управление

105:    * учетной записью не определено

106:    */

107:   с = pam_acct_mgmt(pamh, 0);

108:   check_success(pamh, с);

109:  }

110:

111:  if (session) {

112:   /* В случае необходимости мы могли бы организовывать здесь ветвление */

113:   с = pam_open_session(pamh, 0);

114:   check_success(pamh, с);

115:

116:   /* Обратите внимание, что здесь не устанавливается uid, gid

117:      или дополнительные группы */

118:   с = pam_setcred(pamh, 0);

119:

120:   /* В случае необходимости мы могли бы закрыть здесь полномочия */

121:

122:   /* Вызов оболочки, которая была "аутентифицирована" */

123:   printf("Запуск оболочки...\n");

124:   system("exec bash -");

125:

126:   /* Здесь мы могли бы использовать wait4(), если бы организовывали

127:      ветвление вместо вызова system() */

128:   с = pam_close_session(pamh, 0);

129:   check_success(pamh, с);

130:  }

131:

132:  /* Реальные приложения могли бы сообщать о сбое вместо

133:   * выхода, что мы и делали в check_success на каждой стадии,

134:   * поэтому в таких случаях с может иметь значения, отличные

135:   * от PAM_SUCCESS.

136:   */

137:  с = pam_end(pamh, с);

138:  check_success(pamh, с);

139:

140:  return 0;

141: }

<p>Приложения</p><p>Приложение A</p><p>Заголовочные файлы</p>

В этом приложении показаны все локальные заголовочные файлы для исходного кода, рассмотренного в книге.

1: /* libhello.h */

2:

3: #ifndef LIBHELLO_H_

4: #define LIBHELLO_H_

5:

6: void print_hello(void);

7:

8: #endif /* LIBHELLO_H_ */

1: /* ptypair.h */

2:

3: #ifndef _PTYPAIR_H

4: #define _PTYPAIR_H

5: int get_master_pty(char **name);

6: int get_slave_pty(char *name);

7: #endif /* _PTYPAIR_H */

1: /* sockutil.h */

2:

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных