1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef __CELIB_H__ 7 #define __CELIB_H__ 8 9 #include <stdio.h> 10 11 #define CENCODEMAX (64 *1024) 12 13 #define GETBIT(pb,i) ((pb)[(i) / 8] & (1 << ((i) % 8))) 14 #define SETBIT(pb,i) ((pb)[(i) / 8] |= (1 << ((i) % 8))) 15 #define CLEARBIT(pb,i) ((pb)[(i) / 8] &= ~(1 << ((i) % 8))) 16 #define BITSTOBYTES(b) ((int)(((b) + 7) / 8)) 17 18 #define ceCASIGN_KEY_USAGE (CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE) 19 20 #define ARRAYSIZE(a) (sizeof(a)/sizeof((a)[0])) 21 #define WSZARRAYSIZE(a) ((sizeof(a)/sizeof((a)[0])) - 1) 22 23 #define wszCERTENROLLSHAREPATH L"CertSrv\\CertEnroll" 24 25 #define cwcHRESULTSTRING 40 26 #define cwcDWORDSPRINTF (1 + 10 + 1) 27 28 #define SAFE_SUBTRACT_POINTERS(p1,p2) (assert(sizeof((*p1))==sizeof(*(p2))),(DWORD)((p1) - (p2))) 29 #define printf Use_wprintf_Instead_Of_printf 30 #define _LeaveError(hr,pszMessage) _LeaveErrorStr2((hr),(pszMessage),NULL,S_OK) 31 #define _LeaveError2(hr,pszMessage,hr2) _LeaveErrorStr2((hr),(pszMessage),NULL,(hr2)) 32 #define _LeaveErrorStr(hr,pszMessage,pwszData) _LeaveErrorStr2((hr),(pszMessage),(pwszData),S_OK) 33 #define _LeaveErrorStr2(hr,pszMessage,pwszData,hr2) { ceERRORPRINTLINESTR((pszMessage),(pwszData),(hr)); __leave; } 34 #define _LeaveIfError(hr,pszMessage) _LeaveIfErrorStr2((hr),(pszMessage),NULL,S_OK) 35 #define _LeaveIfError2(hr,pszMessage,hr2) _LeaveIfErrorStr2((hr),(pszMessage),NULL,(hr2)) 36 #define _LeaveIfErrorStr(hr,pszMessage,pwszData) _LeaveIfErrorStr2((hr),(pszMessage),(pwszData),S_OK) 37 #define _LeaveIfErrorStr2(hr,pszMessage,pwszData,hr2) { if (S_OK!=(hr)) { ceERRORPRINTLINESTR((pszMessage),(pwszData),(hr)); __leave; } } 38 #define _PrintErrorStr(hr,pszMessage,pwsz) ceERRORPRINTLINESTR((pszMessage),(pwsz),(hr)) 39 #define _PrintErrorStr2(hr,pszMessage,pwsz,hr2) _PrintErrorStr((hr),(pszMessage),(pwsz)) 40 #define _PrintError2(hr,pszMessage,hr2) _PrintErrorStr((hr),(pszMessage),NULL) 41 #define _PrintError(hr,pszMessage) _PrintErrorStr((hr),(pszMessage),NULL) 42 #define _PrintIfErrorStr(hr,pszMessage,pwsz) { if (S_OK!=(hr)) { ceERRORPRINTLINESTR((pszMessage),(pwsz),(hr)); } } 43 #define _PrintIfErrorStr2(hr,pszMessage,pwsz,hr2) _PrintIfErrorStr((hr),(pszMessage),(pwsz)) 44 #define _PrintIfError2(hr,pszMessage,hr2) _PrintIfErrorStr((hr),(pszMessage),NULL) 45 #define _PrintIfError(hr,pszMessage) _PrintIfErrorStr((hr),(pszMessage),NULL) 46 #define _JumpErrorStr(hr,label,pszMessage,pwsz) _JumpError((hr),label,(pszMessage)) 47 #define _JumpError(hr,label,pszMessage) { ceERRORPRINTLINESTR((pszMessage),NULL,(hr)); goto label; } 48 #define _JumpIfErrorStr(hr,label,pszMessage,pwsz) { if (S_OK!=(hr)) { ceERRORPRINTLINESTR((pszMessage),(pwsz),(hr)); goto label; } } 49 #define _JumpIfErrorStr2(hr,label,pszMessage,pwsz,hr2) _JumpIfErrorStr((hr),label,(pszMessage),NULL) 50 #define _JumpIfError2(hr,label,pszMessage,hr2) _JumpIfErrorStr((hr),label,(pszMessage),NULL) 51 #define _JumpIfError(hr,label,pszMessage) _JumpIfErrorStr((hr),label,(pszMessage),NULL) 52 #define ceERRORPRINTLINE(pszMessage,hr) ceErrorPrintLine(__FILE__,__LINE__,(pszMessage),NULL,(hr)) 53 #define ceERRORPRINTLINESTR(pszMessage,pwszData,hr) ceErrorPrintLine(__FILE__,__LINE__,(pszMessage),(pwszData),(hr)) 54 #define DBGPRINT(a) ceDbgPrintf a 55 56 int WINAPIV ceDbgPrintf(WINBOOL fDebug,char const *pszfmt,...); 57 VOID ceErrorPrintLine(char const *pszFile,DWORD line,char const *pszMessage,WCHAR const *pwszData,HRESULT hr); 58 HRESULT ceHLastError(VOID); 59 HRESULT ceHError(HRESULT hr); 60 61 #define chLBRACE '{' 62 #define chRBRACE '}' 63 #define szLBRACE "{" 64 #define szRBRACE "}" 65 #define wcLBRACE L'{' 66 #define wcRBRACE L'}' 67 #define wszLBRACE L"{" 68 #define wszRBRACE L"}" 69 70 #define chLPAREN '(' 71 #define chRPAREN ')' 72 #define szLPAREN "(" 73 #define szRPAREN ")" 74 #define wcLPAREN L'(' 75 #define wcRPAREN L')' 76 #define wszLPAREN L"(" 77 #define wszRPAREN L")" 78 79 #define CVT_WEEKS (7 *CVT_DAYS) 80 #define CVT_DAYS (24 *CVT_HOURS) 81 #define CVT_HOURS (60 *CVT_MINUTES) 82 #define CVT_MINUTES (60 *CVT_SECONDS) 83 #define CVT_SECONDS (1) 84 #define CVT_BASE (1000 *1000 *10) 85 86 enum ENUM_PERIOD { 87 ENUM_PERIOD_INVALID = -1,ENUM_PERIOD_SECONDS = 0,ENUM_PERIOD_MINUTES,ENUM_PERIOD_HOURS,ENUM_PERIOD_DAYS,ENUM_PERIOD_WEEKS, 88 ENUM_PERIOD_MONTHS,ENUM_PERIOD_YEARS 89 }; 90 91 typedef struct _LLFILETIME { 92 __C89_NAMELESS union { 93 LONGLONG ll; 94 FILETIME ft; 95 }; 96 } LLFILETIME; 97 98 static __inline VOID ceAddToFileTime(FILETIME *pft,LONGLONG ll) { 99 LLFILETIME llft; 100 llft.ft = *pft; 101 llft.ll += ll; 102 *pft = llft.ft; 103 } 104 105 static __inline LONGLONG ceSubtractFileTimes(FILETIME const *pft1,FILETIME const *pft2) { 106 LLFILETIME llft1; 107 LLFILETIME llft2; 108 llft1.ft = *pft1; 109 llft2.ft = *pft2; 110 return(llft1.ll - llft2.ll); 111 } 112 113 HRESULT ceMakeExprDate(DATE *pDate,LONG lDelta,enum ENUM_PERIOD enumPeriod); 114 HRESULT ceTranslatePeriodUnits(WCHAR const *pwszPeriod,LONG lCount,enum ENUM_PERIOD *penumPeriod,LONG *plCount); 115 WCHAR const *ceGetOIDNameA(char const *pszObjId); 116 WCHAR const *ceGetOIDName(WCHAR const *pwszObjId); 117 WINBOOL ceDecodeObject(DWORD dwEncodingType,LPCSTR lpszStructType,BYTE const *pbEncoded,DWORD cbEncoded,WINBOOL fCoTaskMemAlloc,VOID **ppvStructInfo,DWORD *pcbStructInfo); 118 WINBOOL ceEncodeObject(DWORD dwEncodingType,LPCSTR lpszStructType,VOID const *pvStructInfo,DWORD dwFlags,WINBOOL fCoTaskMemAlloc,BYTE **ppbEncoded,DWORD *pcbEncoded); 119 WCHAR *ceDuplicateString(WCHAR const *pwsz); 120 HRESULT ceDupString(WCHAR const *pwszIn,WCHAR **ppwszOut); 121 WINBOOL ceConvertWszToSz(char **ppsz,WCHAR const *pwc,LONG cb); 122 WINBOOL ceConvertWszToBstr(BSTR *pbstr,WCHAR const *pwc,LONG cb); 123 WINBOOL ceConvertSzToWsz(WCHAR **ppwsz,char const *pch,LONG cch); 124 WINBOOL ceConvertSzToBstr(BSTR *pbstr,CHAR const *pch,LONG cch); 125 VOID ceFreeBstr(BSTR *pstr); 126 HRESULT ceDateToFileTime(DATE const *pDate,FILETIME *pft); 127 HRESULT ceFileTimeToDate(FILETIME const *pft,DATE *pDate); 128 HRESULT ceVerifyObjIdA(char const *pszObjId); 129 HRESULT ceVerifyObjId(WCHAR const *pwszObjId); 130 HRESULT ceVerifyAltNameString(LONG NameChoice,BSTR strName); 131 HRESULT ceDispatchSetErrorInfo(HRESULT hrError,WCHAR const *pwszDescription,WCHAR const *pwszProgId,IID const *piid); 132 VOID ceInitErrorMessageText(HMODULE hMod,DWORD idsUnexpected,DWORD idsUnknownErrorCode); 133 WCHAR const *ceGetErrorMessageText(HRESULT hr,WINBOOL fHResultString); 134 WCHAR const *ceGetErrorMessageTextEx(HRESULT hr,WINBOOL fHResultString,WCHAR const *const *papwszInsertionText); 135 WCHAR const *ceHResultToString(WCHAR *awchr,HRESULT hr); 136 137 #define cwcFILENAMESUFFIXMAX 20 138 #define cwcSUFFIXMAX (1 + 5 + 1) 139 140 #define wszFCSAPARM_SERVERDNSNAME L"%1" 141 #define wszFCSAPARM_SERVERSHORTNAME L"%2" 142 #define wszFCSAPARM_SANITIZEDCANAME L"%3" 143 #define wszFCSAPARM_CERTFILENAMESUFFIX L"%4" 144 #define wszFCSAPARM_DOMAINDN L"%5" 145 #define wszFCSAPARM_CONFIGDN L"%6" 146 #define wszFCSAPARM_SANITIZEDCANAMEHASH L"%7" 147 #define wszFCSAPARM_CRLFILENAMESUFFIX L"%8" 148 #define wszFCSAPARM_CRLDELTAFILENAMESUFFIX L"%9" 149 #define wszFCSAPARM_DSCRLATTRIBUTE L"%10" 150 #define wszFCSAPARM_DSCACERTATTRIBUTE L"%11" 151 #define wszFCSAPARM_DSUSERCERTATTRIBUTE L"%12" 152 #define wszFCSAPARM_DSKRACERTATTRIBUTE L"%13" 153 #define wszFCSAPARM_DSCROSSCERTPAIRATTRIBUTE L"%14" 154 155 HRESULT ceFormatCertsrvStringArray(WINBOOL fURL,LPCWSTR pwszServerName_p1_2,LPCWSTR pwszSanitizedName_p3_7,DWORD iCert_p4,DWORD iCertTarget_p4,LPCWSTR pwszDomainDN_p5,LPCWSTR pwszConfigDN_p6,DWORD iCRL_p8,WINBOOL fDeltaCRL_p9,WINBOOL fDSAttrib_p10_11,DWORD cStrings,LPCWSTR *apwszStringsIn,LPWSTR *apwszStringsOut); 156 HRESULT ceBuildPathAndExt(WCHAR const *pwszDir,WCHAR const *pwszFile,WCHAR const *pwszExt,WCHAR **ppwszPath); 157 HRESULT ceInternetCanonicalizeUrl(WCHAR const *pwszIn,WCHAR **ppwszOut); 158 int ceWtoI(WCHAR const *pwszDigitString,WINBOOL *pfValid); 159 int celstrcmpiL(WCHAR const *pwsz1,WCHAR const *pwsz2); 160 HRESULT ceIsConfigLocal(WCHAR const *pwszConfig,WCHAR **ppwszMachine,WINBOOL *pfLocal); 161 #endif 162