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