[Pcsclite-cvs-commit] CVS PKCS11/src
CVS User rousseau
ludovic.rousseau at free.fr
Mon Jul 25 08:42:49 UTC 2005
Update of /cvsroot/muscleapps/PKCS11/src
In directory haydn:/tmp/cvs-serv21486
Modified Files:
p11x_prefs.c
Log Message:
uses Windows registry to allow a installation dir
based and system wide pkcs11rc file
Thanks to Martin Leung for the patch
--- /cvsroot/muscleapps/PKCS11/src/p11x_prefs.c 2005/07/25 08:31:08 1.11
+++ /cvsroot/muscleapps/PKCS11/src/p11x_prefs.c 2005/07/25 08:42:49 1.12
@@ -1,6 +1,6 @@
/******************************************************************************
**
-** $Id: p11x_prefs.c,v 1.11 2005/07/25 08:31:08 rousseau Exp $
+** $Id: p11x_prefs.c,v 1.12 2005/07/25 08:42:49 rousseau Exp $
**
** Package: PKCS-11
** Author : Chris Osgood <oznet at mac.com>
@@ -21,6 +21,45 @@
#ifdef WIN32
#define strcasecmp stricmp
+
+#define HKLM HKEY_LOCAL_MACHINE
+#define MSC_ROOT_KEY "Software\\M.U.S.C.L.E.\\MUSCLE For Window 2000"
+#define MSC_DEFAULT_DIR "C:\\Program Files\\Muscle"
+#define MSC_RC_FILE "pkcs11rc"
+#endif
+
+#ifdef WIN32
+/*----------------------------------------
+ Read registry value
+*/
+
+CK_RV
+RegRead
+(
+ HKEY hKey,
+ CHAR *SubKey,
+ CHAR *ValName,
+ DWORD *ValType,
+ BYTE *Buf,
+ DWORD *BufLen
+)
+{
+ CK_RV rv = CKR_FUNCTION_FAILED;
+ LONG lRet;
+ HKEY hSubKey=0;
+
+ lRet=RegOpenKeyExA (hKey,SubKey,0,KEY_QUERY_VALUE,&hSubKey);
+ if (lRet != ERROR_SUCCESS) return rv;
+
+ lRet=RegQueryValueExA (hSubKey, ValName, 0, ValType, Buf, BufLen);
+ if (hSubKey) RegCloseKey (hSubKey);
+
+ if (lRet != ERROR_SUCCESS) return rv;
+
+ rv = CKR_OK;
+
+ return rv;
+}
#endif
/******************************************************************************
@@ -328,6 +367,12 @@
** that most of the time users will not have one unless debug/logging
** or other special settings are required.
**
+** On Windows, looks for pkcs11rc in the following sequence:
+** 1. directory containing application. Allow per application
+** rc file. If not found, then:
+** 2. path specified in registry key MSC_ROOT_KEY, if not defined, then:
+** 3. default Muscle setup directory
+**
** Parameters:
** none
**
@@ -357,57 +402,54 @@
return rv;
}
-#else
-
-/* 0 == success, 1 == failure */
-static CK_RV
-tryReadPrefs(const char*dir)
-{
- FILE *fp;
- char buf[1024];
- char *path = NULL;
- const char *rcfilename = "pkcs11rc";
- CK_RV rv = CKR_FUNCTION_FAILED;
-
- path = (char*) malloc(strlen(dir) + strlen(rcfilename) + 1);
- if( path != NULL ) {
- sprintf(path, "%s%s", dir, rcfilename);
- fp = fopen(path, "rb");
- if (fp) {
- while (fgets(buf, sizeof(buf), fp)) {
- util_ParsePreference(buf, sizeof(buf));
- }
- fclose(fp);
- rv = CKR_OK;
- }
- }
-
- if(path) {
- free(path);
- }
- return rv;
-}
-
+#else /* WIN32 */
CK_RV util_ReadPreferences()
{
- CK_RV rv = CKR_FUNCTION_FAILED;
- const char *hardcodedDir = "C:\\Program Files\\Muscle\\";
- char *relDir = NULL;
-
- relDir = getDLLDirectory();
- if( relDir != NULL ) {
- rv = tryReadPrefs(relDir);
- }
- if( rv != CKR_OK ) {
- rv = tryReadPrefs(hardcodedDir);
- }
-
- if( relDir ) {
- free(relDir);
+ CK_RV rv = CKR_OK;
+ FILE *fp=NULL;
+ char rcpathdef[]= MSC_DEFAULT_DIR ;
+ char rcfn[] = MSC_RC_FILE;
+
+ char rcfilepath[MAX_PATH];
+
+ unsigned long buflen=MAX_PATH;
+ unsigned long ValType;
+
+ char buf[1024];
+ char *relDir = getDLLDirectory();
+
+ do {
+ if (relDir)
+ {
+ strcpy (rcfilepath, relDir);
+ free (relDir);
+ strcat (rcfilepath, rcfn);
+ if (fp = fopen(rcfilepath, "rb")) break;
+ }
+
+ if ( CKR_OK != RegRead (HKLM, MSC_ROOT_KEY, NULL, &ValType, (BYTE *) rcfilepath, &buflen) || buflen == 0 || strlen(rcfilepath) == 0)
+ {
+ /* use default setup dir */
+ strcpy (rcfilepath,rcpathdef);
+ }
+
+ if (rcfilepath[strlen(rcfilepath)-1] != '\\') strcat (rcfilepath,"\\");
+ strcat (rcfilepath, rcfn);
+
+ fp = fopen(rcfilepath, "rb");
+
+ } while (0);
+
+ if (fp)
+ {
+ while (fgets(buf, sizeof(buf), fp))
+ util_ParsePreference(buf, sizeof(buf));
+
+ fclose(fp);
}
- return rv;
-
- }
+ return rv;
+
+}
#endif
More information about the Pcsclite-cvs-commit
mailing list