From 5c61cdba435096ee6e65cee4dc9a473430643c07 Mon Sep 17 00:00:00 2001 From: Elio Maldonado Date: Tue, 12 Apr 2011 09:31:48 -0700 Subject: [PATCH] Bug 695011 PEM logging Use NSPR logging facilities for PEM logging to fix a segmenation violation caused when user cannot for write a log file created by root --- mozilla/security/nss/lib/ckfw/pem/ckpem.h | 7 ++++- mozilla/security/nss/lib/ckfw/pem/util.c | 30 ++++++++++++++++------------ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/mozilla/security/nss/lib/ckfw/pem/ckpem.h b/mozilla/security/nss/lib/ckfw/pem/ckpem.h index 839d40b..720525e 100644 --- a/mozilla/security/nss/lib/ckfw/pem/ckpem.h +++ b/mozilla/security/nss/lib/ckfw/pem/ckpem.h @@ -1,3 +1,6 @@ +#ifndef CKPEM_H +#define CKPEM_H + #include "nssckmdt.h" #include "nssckfw.h" #include "ckfwtm.h" @@ -254,8 +257,8 @@ unsigned int pem_PrivateModulusLen(pemLOWKEYPrivateKey *privk); /* ptoken.c */ NSSCKMDToken * pem_NewToken(NSSCKFWInstance *fwInstance, CK_RV *pError); +/* util.c */ void open_log(); -void close_log(); void plog(const char *fmt, ...); -#define PEM_H 1 +#endif /* CKPEM_H */ diff --git a/mozilla/security/nss/lib/ckfw/pem/util.c b/mozilla/security/nss/lib/ckfw/pem/util.c index 853f418..fafb924 100644 --- a/mozilla/security/nss/lib/ckfw/pem/util.c +++ b/mozilla/security/nss/lib/ckfw/pem/util.c @@ -41,6 +41,7 @@ #include "prtime.h" #include "prlong.h" #include "prerror.h" +#include "prlog.h" #include "prprf.h" #include "plgetopt.h" #include "prenv.h" @@ -51,6 +52,9 @@ #include "cryptohi.h" #include "secpkcs7.h" #include "secerr.h" + +#include "ckpem.h" + #include #define CHUNK_SIZE 512 @@ -267,34 +271,34 @@ ReadDERFromFile(SECItem *** derlist, char *filename, PRBool ascii, return -1; } -FILE *plogfile; +#ifdef DEBUG +#define LOGGING_BUFFER_SIZE 400 +#define PEM_DEFAULT_LOG_FILE "/tmp/pkcs11.log" +static const char *pemLogModuleName = "PEM"; +static PRLogModuleInfo* pemLogModule; +#endif void open_log() { #ifdef DEBUG - plogfile = fopen("/tmp/pkcs11.log", "a"); -#endif + const char *nsprLogFile = PR_GetEnv("NSPR_LOG_FILE"); - return; -} + pemLogModule = PR_NewLogModule(pemLogModuleName); -void close_log() -{ -#ifdef DEBUG - fclose(plogfile); + (void) PR_SetLogFile(nsprLogFile ? nsprLogFile : PEM_DEFAULT_LOG_FILE); + /* If false, the log file will remain what it was before */ #endif - return; } void plog(const char *fmt, ...) { #ifdef DEBUG + char buf[LOGGING_BUFFER_SIZE]; va_list ap; va_start(ap, fmt); - vfprintf(plogfile, fmt, ap); + PR_vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); - - fflush(plogfile); + PR_LOG(pemLogModule, PR_LOG_DEBUG, ("%s", buf)); #endif } -- 1.7.4.2