Разработка приложений в среде Linux - [206]
> 35: misc_conv, /* использование функции диалога TTY из libpam_misc */
> 36: NULL /* у нас нет специальных данных для передачи в misc_conf */
> 37: };
> 38:
> 39: void check_success(pam_handle_t * pamh, int return_code) {
> 40: if (return_code != PAM_SUCCESS) {
> 41: fprintf (stderr, '"%s\n", pam_strerror(pamh, return_code));
> 42: exit(1);
> 43: }
> 44: }
> 45:
> 46: int main(int argc, const char ** argv) {
> 47: pam_handle_t * pamh;
> 48: struct passwd * pw;
> 49: char * username=NULL, * service=NULL;
> 50: int account = 1, session = 0;
> 51: int c;
> 52: poptContext optCon;
> 53: struct poptOption optionsTable[] = {
> 54: { "username", 'u', POPT_ARG_STRING, &username, 0,
> 55: "Имя пользователя для аутентификации", "<имя_пользователя>" },
> 56: { "service", 'S', РОPT_ARG_STRING, &service, 0,
> 57: "Имя службы для инициализации как (pamsample)",
> 58: "<служба>" },
> 59: { "account", 'a', POPT_ARG_NONE|POPT_ARGFLAG_XOR,
> 60: &account, 0,
> 61: "включение/выключение управления учетными записями (включено)", "" },
> 62: { "session", 's', POPT_ARG_NONE|POPT_ARGFLAG_XOR,
> 63: &session, 0,
> 64: "включение/выключение запуска сеанса (выключено)", "" },
> 65: POPT_AUTOHELP
> 66: POPT_TABLEEND
> 67: };
> 68:
> 69: optCon = poptGetContext("pamexample", argc, argv,
> 70: optionsTable, 0);
> 71: if ((c = poptGetNextOpt(optCon)) < -1) {
> 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: }
Приложения
Приложение A
Заголовочные файлы
В этом приложении показаны все локальные заголовочные файлы для исходного кода, рассмотренного в книге.
>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:
>3: void die(char * message);
>4: void copyData(int from, int to);
>5: #ifndef CMSG_DATA
>6: #define CMSG_DATA (cmsg) ((cmsg)->cmsg_data)
>7: #endif
Приложение Б
Исходный код >ladsh
> 1: /* ladsh4.c */
> 2:
> 3: #define _GNU_SOURCE
> 4:
> 5: #include
> 6: #include
> 7: #include
> 8: #include
> 9: #include
> 10: #include
> 11: #include
> 12: #include
> 13: #include
> 14: #include
> 15: #include
> 16:
> 17: #define MAX_COMMAND_LEN 250 /* максимальная длина одной
> 18: командной строки */
> 19: #define JOB_STATUS_FORMAT "[%d] %-22s %.40s\n"
> 20:
> 21: struct jobSet {
> 22: struct job * head; /* заголовок списка выполняющихся заданий */
> 23: struct job * fg; /* текущее высокоприоритетное задание */
> 24: };
> 25:
> 26: enum redirectionType { REDIRECT_INPUT, REDIRECT_OVERWRITE,
> 27: REDIRECT_APPEND };
> 28:
> 29: struct redirectionSpecifier {
> 30: enum redirectionType type; /* тип переадресации */
> 31: int fd; /* переадресация fd */

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.

Эта книга поможет вам разобраться в премудростях операционной системы Windows Vista.Информационная насыщенность учебного материала позволяет утверждать, что мультимедийный курс будет интересен и новичкам, и опытным пользователям.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

Количество персональных компьютеров в нашей стране растет год от года. Сегодня во многих семьях имеется два или даже три компьютера.Чтобы воспользоваться всеми преимуществами такой ситуации, компьютеры в вашей квартире стоит объединить сетью. Это позволит вам играть по сети в компьютерные игры, совместно использовать дисковое пространство, принтеры, модемы и другие устройства, всю сеть можно соединить с Интернетом. А в офисах сеть между компьютерами просто необходима.Открывающиеся перспективы выглядят очень заманчиво.

Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)