2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 #include <afs/param.h>
15 #include <WINNT/afsapplib.h>
16 #include "al_dynlink.h"
20 * LIBRARIES __________________________________________________________________
24 #define cszLIBRARY_UTIL TEXT("AfsAdminUtil.dll")
25 #define cszLIBRARY_KAS TEXT("AfsKasAdmin.dll")
26 #define cszLIBRARY_CLIENT TEXT("AfsClientAdmin.dll")
30 * ADMIN ______________________________________________________________________
34 static size_t g_cReqUtilLibrary = 0;
35 static HINSTANCE g_hiUtilLibrary = NULL;
37 util_AdminErrorCodeTranslate_t util_AdminErrorCodeTranslateP = NULL;
40 BOOL OpenUtilLibrary (ULONG *pStatus)
43 ULONG status = ERROR_DLL_NOT_FOUND;
45 if ((++g_cReqUtilLibrary) == 1)
47 if ( ((g_hiUtilLibrary = LoadLibrary (cszLIBRARY_UTIL)) == NULL) ||
48 ((util_AdminErrorCodeTranslateP = (util_AdminErrorCodeTranslate_t)GetProcAddress (g_hiUtilLibrary, "util_AdminErrorCodeTranslate")) == NULL) )
50 status = GetLastError();
65 void CloseUtilLibrary (void)
67 if ((--g_cReqUtilLibrary) == 0)
70 FreeLibrary (g_hiUtilLibrary);
71 g_hiUtilLibrary = NULL;
77 * KAS ________________________________________________________________________
81 static size_t g_cReqKasLibrary = 0;
82 static HINSTANCE g_hiKasLibrary = NULL;
84 kas_PrincipalGetBegin_t kas_PrincipalGetBeginP = NULL;
85 kas_PrincipalGetNext_t kas_PrincipalGetNextP = NULL;
86 kas_PrincipalGetDone_t kas_PrincipalGetDoneP = NULL;
87 kas_PrincipalGet_t kas_PrincipalGetP = NULL;
90 BOOL OpenKasLibrary (ULONG *pStatus)
93 ULONG status = ERROR_DLL_NOT_FOUND;
95 if ((++g_cReqKasLibrary) == 1)
97 if ( ((g_hiKasLibrary = LoadLibrary (cszLIBRARY_KAS)) == NULL) ||
98 ((kas_PrincipalGetBeginP = (kas_PrincipalGetBegin_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGetBegin")) == NULL) ||
99 ((kas_PrincipalGetNextP = (kas_PrincipalGetNext_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGetNext")) == NULL) ||
100 ((kas_PrincipalGetDoneP = (kas_PrincipalGetDone_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGetDone")) == NULL) ||
101 ((kas_PrincipalGetP = (kas_PrincipalGet_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGet")) == NULL) )
103 status = GetLastError();
118 void CloseKasLibrary (void)
120 if ((--g_cReqKasLibrary) == 0)
123 FreeLibrary (g_hiKasLibrary);
124 g_hiKasLibrary = NULL;
130 * CLIENT _____________________________________________________________________
134 static size_t g_cReqClientLibrary = 0;
135 static HINSTANCE g_hiClientLibrary = NULL;
137 typedef int (ADMINAPI *afsclient_Init_t)(afs_status_p st);
139 afsclient_TokenGetExisting_t afsclient_TokenGetExistingP = NULL;
140 afsclient_TokenGetNew_t afsclient_TokenGetNewP = NULL;
141 afsclient_TokenClose_t afsclient_TokenCloseP = NULL;
142 afsclient_TokenQuery_t afsclient_TokenQueryP = NULL;
143 afsclient_CellOpen_t afsclient_CellOpenP = NULL;
144 afsclient_CellClose_t afsclient_CellCloseP = NULL;
145 afsclient_LocalCellGet_t afsclient_LocalCellGetP = NULL;
146 afsclient_Init_t afsclient_InitP = NULL;
149 BOOL OpenClientLibrary (ULONG *pStatus)
152 ULONG status = ERROR_DLL_NOT_FOUND;
154 if ((++g_cReqClientLibrary) == 1)
156 if ( ((g_hiClientLibrary = LoadLibrary (cszLIBRARY_CLIENT)) == NULL) ||
157 ((afsclient_TokenGetExistingP = (afsclient_TokenGetExisting_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenGetExisting")) == NULL) ||
158 ((afsclient_TokenGetNewP = (afsclient_TokenGetNew_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenGetNew")) == NULL) ||
159 ((afsclient_TokenCloseP = (afsclient_TokenClose_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenClose")) == NULL) ||
160 ((afsclient_TokenQueryP = (afsclient_TokenQuery_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenQuery")) == NULL) ||
161 ((afsclient_CellOpenP = (afsclient_CellOpen_t)GetProcAddress (g_hiClientLibrary, "afsclient_CellOpen")) == NULL) ||
162 ((afsclient_CellCloseP = (afsclient_CellClose_t)GetProcAddress (g_hiClientLibrary, "afsclient_CellClose")) == NULL) ||
163 ((afsclient_LocalCellGetP = (afsclient_LocalCellGet_t)GetProcAddress (g_hiClientLibrary, "afsclient_LocalCellGet")) == NULL) ||
164 ((afsclient_InitP = (afsclient_Init_t)GetProcAddress (g_hiClientLibrary, "afsclient_Init")) == NULL) )
166 status = GetLastError();
167 CloseClientLibrary();
169 else if (!(*afsclient_InitP)((afs_status_p)&status))
171 CloseClientLibrary();
174 if (g_hiClientLibrary)
185 void CloseClientLibrary (void)
187 if ((--g_cReqClientLibrary) == 0)
189 if (g_hiClientLibrary)
190 FreeLibrary (g_hiClientLibrary);
191 g_hiClientLibrary = NULL;