1 /*
2 * The Initial Developer of the Original Code is International
3 * Business Machines Corporation. Portions created by IBM
4 * Corporation are Copyright (C) 2005 International Business
5 * Machines Corporation. All Rights Reserved.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the Common Public License as published by
9 * IBM Corporation; either version 1 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * Common Public License for more details.
16 *
17 * You should have received a copy of the Common Public License
18 * along with this program; if not, a copy can be viewed at
19 * http://www.opensource.org/licenses/cpl1.0.php.
20 */
21
22 #include "tpm_utils.h"
23
24 int iLogLevel = LOG_LEVEL_ERROR;
25
logHex(int a_iLen,void * a_pData)26 int logHex(int a_iLen, void *a_pData)
27 {
28
29 int i, iByte;
30 char *pData = a_pData;
31
32 for (i = 0; i < a_iLen; i++) {
33 if ((i % 32) == 0) {
34 if (a_iLen > 32) {
35 logMsg("\n\t");
36 }
37 } else if ((i % 4) == 0) {
38 logMsg(" ");
39 }
40
41 iByte = pData[i];
42 iByte &= 0x000000ff;
43 logMsg("%02x", iByte);
44 }
45
46 logMsg("\n");
47
48 return a_iLen;
49 }
50
logMsg(const char * a_szFormat,...)51 int logMsg(const char *a_szFormat, ...)
52 {
53
54 int iCount;
55 va_list vaArgs;
56
57 va_start(vaArgs, a_szFormat);
58 iCount = logIt(stdout, a_szFormat, vaArgs);
59 va_end(vaArgs);
60
61 return iCount;
62 }
63
logDebug(const char * a_szFormat,...)64 int logDebug(const char *a_szFormat, ...)
65 {
66
67 int iCount;
68 va_list vaArgs;
69
70 if (iLogLevel < LOG_LEVEL_DEBUG)
71 return 0;
72
73 va_start(vaArgs, a_szFormat);
74 iCount = logProcess(stdout, a_szFormat, vaArgs);
75 va_end(vaArgs);
76
77 return iCount;
78 }
79
logInfo(const char * a_szFormat,...)80 int logInfo(const char *a_szFormat, ...)
81 {
82
83 int iCount;
84 va_list vaArgs;
85
86 if (iLogLevel < LOG_LEVEL_INFO)
87 return 0;
88
89 va_start(vaArgs, a_szFormat);
90 iCount = logProcess(stdout, a_szFormat, vaArgs);
91 va_end(vaArgs);
92
93 return iCount;
94 }
95
logError(const char * a_szFormat,...)96 int logError(const char *a_szFormat, ...)
97 {
98
99 int iCount;
100 va_list vaArgs;
101
102 if (iLogLevel < LOG_LEVEL_ERROR)
103 return 0;
104
105 va_start(vaArgs, a_szFormat);
106 iCount = logProcess(stderr, a_szFormat, vaArgs);
107 va_end(vaArgs);
108
109 return iCount;
110 }
111
logProcess(FILE * a_sStream,const char * a_szFormat,va_list a_vaArgs)112 int logProcess(FILE * a_sStream, const char *a_szFormat, va_list a_vaArgs)
113 {
114
115 return logIt(a_sStream, a_szFormat, a_vaArgs);
116 }
117
logIt(FILE * a_sStream,const char * a_szFormat,va_list a_vaArgs)118 int logIt(FILE * a_sStream, const char *a_szFormat, va_list a_vaArgs)
119 {
120
121 return vfprintf(a_sStream, a_szFormat, a_vaArgs);
122 }
123
logSuccess(const char * a_cmd)124 void logSuccess(const char *a_cmd)
125 {
126 logInfo(_("%s succeeded\n"), a_cmd);
127 }
128
logCmdOption(const char * aOption,const char * aDescr)129 void logCmdOption(const char *aOption, const char *aDescr)
130 {
131 logMsg("\t%s\n\t\t%s\n", aOption, aDescr);
132 }
133
logGenericOptions()134 void logGenericOptions()
135 {
136 char *lOpt = NULL;
137
138 lOpt = malloc(16+strlen(LOG_NONE)+strlen(LOG_ERROR)+
139 strlen(LOG_INFO)+strlen(LOG_DEBUG));
140 if ( lOpt )
141 sprintf( lOpt, "-l, --log [%s|%s|%s|%s]", LOG_NONE, LOG_ERROR, LOG_INFO, LOG_DEBUG );
142
143 logCmdOption("-h, --help", _("Display command usage info."));
144 logCmdOption("-v, --version", _("Display command version info."));
145 logCmdOption( lOpt, _("Set logging level."));
146 free ( lOpt );
147 }
148
logUnicodeCmdOption()149 void logUnicodeCmdOption()
150 {
151 logCmdOption("-u, --unicode", _("Use TSS UNICODE encoding for passwords to comply with applications using TSS popup boxes"));
152 }
153
logOwnerPassCmdOption()154 void logOwnerPassCmdOption()
155 {
156 logCmdOption("-o, --pwdo", _("Owner password"));
157 }
158
logNVIndexCmdOption()159 void logNVIndexCmdOption()
160 {
161 logCmdOption("-i, --index", _("Index of the NVRAM area"));
162 }
163
logCmdHelp(const char * aCmd)164 void logCmdHelp(const char *aCmd)
165 {
166 logMsg(_("Usage: %s [options]\n"), aCmd);
167 logGenericOptions();
168 }
169
logCmdHelpEx(const char * aCmd,char * aArgs[],char * aArgDescs[])170 void logCmdHelpEx(const char *aCmd, char *aArgs[], char *aArgDescs[])
171 {
172 int i;
173
174 logMsg(_("Usage: %s [options]"), aCmd);
175 for (i = 0; aArgs[i]; i++)
176 logMsg(" %s", aArgs[i]);
177 logMsg("\n");
178 for (i = 0; aArgDescs[i]; i++)
179 logMsg("%s\n", aArgDescs[i]);
180 logGenericOptions();
181 }
182
logBool(BOOL aValue)183 char *logBool(BOOL aValue)
184 {
185 return aValue ? _("true") : _("false");
186 }
187