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
14 #include <afs/afsconfig.h>
15 #include <afs/param.h>
20 #include <WINNT/afsapplib.h>
21 #include "al_dynlink.h"
25 * LIBRARIES __________________________________________________________________
29 #define cszLIBRARY_UTIL TEXT("AfsAdminUtil.dll")
30 #define cszLIBRARY_KAS TEXT("AfsKasAdmin.dll")
31 #define cszLIBRARY_CLIENT TEXT("AfsClientAdmin.dll")
35 * ADMIN ______________________________________________________________________
39 static size_t g_cReqUtilLibrary = 0;
40 static HINSTANCE g_hiUtilLibrary = NULL;
42 util_AdminErrorCodeTranslate_t util_AdminErrorCodeTranslateP = NULL;
45 BOOL OpenUtilLibrary (ULONG *pStatus)
48 ULONG status = ERROR_DLL_NOT_FOUND;
50 if ((++g_cReqUtilLibrary) == 1)
52 if ( ((g_hiUtilLibrary = LoadLibrary (cszLIBRARY_UTIL)) == NULL) ||
53 ((util_AdminErrorCodeTranslateP = (util_AdminErrorCodeTranslate_t)GetProcAddress (g_hiUtilLibrary, "util_AdminErrorCodeTranslate")) == NULL) )
55 status = GetLastError();
70 void CloseUtilLibrary (void)
72 if ((--g_cReqUtilLibrary) == 0)
75 FreeLibrary (g_hiUtilLibrary);
76 g_hiUtilLibrary = NULL;
82 * KAS ________________________________________________________________________
86 static size_t g_cReqKasLibrary = 0;
87 static HINSTANCE g_hiKasLibrary = NULL;
89 kas_PrincipalGetBegin_t kas_PrincipalGetBeginP = NULL;
90 kas_PrincipalGetNext_t kas_PrincipalGetNextP = NULL;
91 kas_PrincipalGetDone_t kas_PrincipalGetDoneP = NULL;
92 kas_PrincipalGet_t kas_PrincipalGetP = NULL;
95 BOOL OpenKasLibrary (ULONG *pStatus)
98 ULONG status = ERROR_DLL_NOT_FOUND;
100 if ((++g_cReqKasLibrary) == 1)
102 if ( ((g_hiKasLibrary = LoadLibrary (cszLIBRARY_KAS)) == NULL) ||
103 ((kas_PrincipalGetBeginP = (kas_PrincipalGetBegin_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGetBegin")) == NULL) ||
104 ((kas_PrincipalGetNextP = (kas_PrincipalGetNext_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGetNext")) == NULL) ||
105 ((kas_PrincipalGetDoneP = (kas_PrincipalGetDone_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGetDone")) == NULL) ||
106 ((kas_PrincipalGetP = (kas_PrincipalGet_t)GetProcAddress (g_hiKasLibrary, "kas_PrincipalGet")) == NULL) )
108 status = GetLastError();
123 void CloseKasLibrary (void)
125 if ((--g_cReqKasLibrary) == 0)
128 FreeLibrary (g_hiKasLibrary);
129 g_hiKasLibrary = NULL;
135 * CLIENT _____________________________________________________________________
139 static size_t g_cReqClientLibrary = 0;
140 static HINSTANCE g_hiClientLibrary = NULL;
142 typedef int (ADMINAPI *afsclient_Init_t)(afs_status_p st);
144 afsclient_TokenGetExisting_t afsclient_TokenGetExistingP = NULL;
145 afsclient_TokenGetNew_t afsclient_TokenGetNewP = NULL;
146 afsclient_TokenClose_t afsclient_TokenCloseP = NULL;
147 afsclient_TokenQuery_t afsclient_TokenQueryP = NULL;
148 afsclient_CellOpen_t afsclient_CellOpenP = NULL;
149 afsclient_CellClose_t afsclient_CellCloseP = NULL;
150 afsclient_LocalCellGet_t afsclient_LocalCellGetP = NULL;
151 afsclient_Init_t afsclient_InitP = NULL;
154 BOOL OpenClientLibrary (ULONG *pStatus)
157 ULONG status = ERROR_DLL_NOT_FOUND;
159 if ((++g_cReqClientLibrary) == 1)
161 if ( ((g_hiClientLibrary = LoadLibrary (cszLIBRARY_CLIENT)) == NULL) ||
162 ((afsclient_TokenGetExistingP = (afsclient_TokenGetExisting_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenGetExisting")) == NULL) ||
163 ((afsclient_TokenGetNewP = (afsclient_TokenGetNew_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenGetNew")) == NULL) ||
164 ((afsclient_TokenCloseP = (afsclient_TokenClose_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenClose")) == NULL) ||
165 ((afsclient_TokenQueryP = (afsclient_TokenQuery_t)GetProcAddress (g_hiClientLibrary, "afsclient_TokenQuery")) == NULL) ||
166 ((afsclient_CellOpenP = (afsclient_CellOpen_t)GetProcAddress (g_hiClientLibrary, "afsclient_CellOpen")) == NULL) ||
167 ((afsclient_CellCloseP = (afsclient_CellClose_t)GetProcAddress (g_hiClientLibrary, "afsclient_CellClose")) == NULL) ||
168 ((afsclient_LocalCellGetP = (afsclient_LocalCellGet_t)GetProcAddress (g_hiClientLibrary, "afsclient_LocalCellGet")) == NULL) ||
169 ((afsclient_InitP = (afsclient_Init_t)GetProcAddress (g_hiClientLibrary, "afsclient_Init")) == NULL) )
171 status = GetLastError();
172 CloseClientLibrary();
174 else if (!(*afsclient_InitP)((afs_status_p)&status))
176 CloseClientLibrary();
179 if (g_hiClientLibrary)
190 void CloseClientLibrary (void)
192 if ((--g_cReqClientLibrary) == 0)
194 if (g_hiClientLibrary)
195 FreeLibrary (g_hiClientLibrary);
196 g_hiClientLibrary = NULL;