Опубликован: 04.07.2008 | Уровень: профессионал | Доступ: платный
Дополнительный материал 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
Антон Чурков
Антон Чурков
Россия, Владимир, Владимирский государственный университет, 2002
Елена Коппалина
Елена Коппалина
Россия, г. Губкинский