Разработка приложений в среде 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 */
Одно из немногих изданий на русском языке, которое посвящено старейшей глобальной компьютерной сети "Fidonet". Сатирический справочник о жизни и смерти самого древнего сетевого сообщества, которое до сих пор существует среди нас.
В пособии излагаются основные тенденции развития организационного обеспечения безопасности информационных систем, а также подходы к анализу информационной инфраструктуры организационных систем и решению задач обеспечения безопасности компьютерных систем.Для студентов по направлению подготовки 230400 – Информационные системы и технологии (квалификация «бакалавр»).
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.Для программистов-пользователей операционной системы UNIX.
Книга адресована программистам, работающим в самых разнообразных ОС UNIX. Авторы предлагают шире взглянуть на возможности параллельной организации вычислительного процесса в традиционном программировании. Особый акцент делается на потоках (threads), а именно на тех возможностях и сложностях, которые были привнесены в технику параллельных вычислений этой относительно новой парадигмой программирования. На примерах реальных кодов показываются приемы и преимущества параллельной организации вычислительного процесса.
Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.
Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.