Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 637 / 33 | Оценка: 4.83 / 5.00 | Длительность: 42:11:00
Тема: Безопасность
Специальности: Администратор информационных систем, Специалист по безопасности
Теги:
Дополнительный материал 2:
Пример программы DSAPI
/****************************************************************** ПРОГРАММА: SECDOM ФАЙЛ: W_SECDOM.C (код для Windows) НАЗНАЧЕНИЕ: Пример программы C API, демонстрирующей создание библиотеки, выполняющей аутентификацию пользователя Domino через Web с использованием учетной записи пользователя в операционной системе через DSAPI. ******************************************************************/ /* Включаемые файлы W32 */ #include <windows.h> #include <winbase.h> #include <stdlib.h> #include <stdio.h> #include <string.h> /* ************************************************************* */ /* * Windows API для аутентификации ОС. * */ /* ************************************************************* */ int separateUsernameAndDomainname(char *userName,char *separator, char **user, char **domain) {* user=strtok(userName,separator); *domain=strtok(NULL,separator); return 0; }/ * ************************************************************* */ /* * Windows API для аутентификации ОС. * */ /* ************************************************************* */ int winAuthenticate(char *userName, char *domain, char *password) {c har *lpMsgBuf; HANDLE phToken; printf("\n Executing Windows-specific authentication for user %s in domain %s\n",userName,domain); if (LogonUser(userName,domain,password,LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,&phToken)) {p rintf(" ** Successful return from Windows-specific authentication \n"); return NOERROR; }e lse {F ormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); printf("***** Error from Windows-specific authentication: ***\n"); printf(" %s\n",lpMsgBuf); LocalFree(lpMsgBuf); return -1; }}Пример B.2. Код для Windows
/****************************************************************** ПРОГРАММА: SECDOM ФАЙЛ: U_SECDOM.C (код для UNIX) НАЗНАЧЕНИЕ: Пример программы C API, демонстрирующей создание библиотеки, выполняющей аутентификацию пользователя Domino через Web с использованием учетной записи пользователя в операционной системе через DSAPI. ******************************************************************/ /* Включаемые файлы для ввода и вывода */ #include <stdlib.h> #include <stdio.h> #include <string.h> /* Включаемые файлы для аутентификации в UNIX */ #ifdef SOLARIS #include <shadow.h> #endif #ifdef AIX #include <sys/types.h> #include <pwd.h> #endif int unixAuthenticate(char *userName, char *password) {c har buffer[1024]; int error = -1; int success = 0; int unknown = 1; /* Получение UNIX-записи для данного пользователя */ #ifdef SOLARIS struct spwd result; #endif #ifdef AIX struct passwd *result; #endif /* Получение UNIX-записи для данного пользователя */ #ifdef SOLARIS if (getspnam_r(userName, &result, buffer, sizeof(buffer))) { /* Шифрование пароля и проверка его соответствия * зашифрованному паролю в записи пользователя. */ char *thisCrypt = NULL; thisCrypt = (char *)crypt(password, result.sp_pwdp); if (strcmp (result.sp_pwdp, thisCrypt) == 0) { return success; } else { return error; }}# endif #ifdef AIX result = getpwnam(userName); if (result && result->pw_passwd) { /* Шифрование пароля и проверка его соответствия * зашифрованному паролю в записи пользователя. */ char *thisCrypt = NULL; thisCrypt = (char *)crypt(password, result->pw_passwd); if (strcmp (result->pw_passwd, thisCrypt) == 0) { return success; } else { return error; }}# endif return unknown; }Пример B.3. Код для UNIX