[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