1 /***************************************************************************
2 begin : Tue May 03 2005
3 copyright : (C) 2018 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13
14 #include <gwenhywfar/gwenhywfar.h>
15 #include <gwenhywfar/db.h>
16 #include <gwenhywfar/debug.h>
17
18 #include "globals_l.h"
19
20
21
showVersions()22 static void showVersions()
23 {
24 int vmajor, vminor, vpatchLevel, vbuild;
25
26 fprintf(stdout, "Versions:\n");
27 GWEN_Version(&vmajor,
28 &vminor,
29 &vpatchLevel,
30 &vbuild);
31 fprintf(stdout, " Gwenhywfar : %d.%d.%d.%d\n",
32 vmajor, vminor, vpatchLevel, vbuild);
33
34 AB_Banking_GetVersion(&vmajor,
35 &vminor,
36 &vpatchLevel,
37 &vbuild);
38 fprintf(stdout, " AqBanking : %d.%d.%d.%d\n",
39 vmajor, vminor, vpatchLevel, vbuild);
40
41 }
42
43
44
showUsage(const char * prgName)45 static void showUsage(const char *prgName)
46 {
47 GWEN_BUFFER *ubuf;
48
49 ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
50 GWEN_Buffer_AppendString(ubuf,
51 I18N("Usage: "));
52 GWEN_Buffer_AppendString(ubuf, prgName);
53 GWEN_Buffer_AppendString(ubuf, I18N(" COMMAND [LOCAL OPTIONS]\n"));
54 GWEN_Buffer_AppendString(ubuf,
55 I18N("\nCommands:\n\n"));
56 GWEN_Buffer_AppendString(ubuf,
57 I18N(" mkpinlist:\n"
58 " This command creates an empty PIN "
59 "file\n\n"));
60 GWEN_Buffer_AppendString(ubuf,
61 I18N(" adduser:\n"
62 " Adds a user "
63 "(-> setup HBCI for a bank)\n\n"));
64 GWEN_Buffer_AppendString(ubuf,
65 I18N(" deluser:\n"
66 " Deletes a user.\n\n"));
67 GWEN_Buffer_AppendString(ubuf,
68 I18N(" getkeys:\n"
69 " Requests the server's key\n\n"));
70 GWEN_Buffer_AppendString(ubuf,
71 I18N(" getcert:\n"
72 " Requests the server's SSL certificate\n\n"));
73 GWEN_Buffer_AppendString(ubuf,
74 I18N(" createkeys:\n"
75 " Create user keys.\n\n"));
76 GWEN_Buffer_AppendString(ubuf,
77 I18N(" sendkeys:\n"
78 " Send the user keys to the bank.\n\n"));
79 GWEN_Buffer_AppendString(ubuf,
80 I18N(" changekeys:\n"
81 " Change user keys (and media).\n\n"));
82 GWEN_Buffer_AppendString(ubuf,
83 I18N(" getbankinfo:\n"
84 " Request bank information\n\n"));
85 GWEN_Buffer_AppendString(ubuf,
86 I18N(" getaccounts:\n"
87 " Requests account list for a "
88 "user\n\n"));
89 GWEN_Buffer_AppendString(ubuf,
90 I18N(" getaccsepa:\n"
91 " Requests SEPA account list for a "
92 "user\n\n"));
93 GWEN_Buffer_AppendString(ubuf,
94 I18N(" getsysid:\n"
95 " Requests a system id for the given "
96 "user\n\n"));
97 GWEN_Buffer_AppendString(ubuf,
98 I18N(" getitanmodes:\n"
99 " Requests supported iTAN modes for the given "
100 "user\n\n"));
101 GWEN_Buffer_AppendString(ubuf,
102 I18N(" listitanmodes:\n"
103 " Show a list of supported iTAN modes for the given "
104 "user\n\n"));
105 GWEN_Buffer_AppendString(ubuf,
106 I18N(" setitanmode:\n"
107 " Select an iTAN mode for the given user\n\n"));
108 GWEN_Buffer_AppendString(ubuf,
109 I18N(" listusers:\n"
110 " List the users\n\n"));
111 GWEN_Buffer_AppendString(ubuf,
112 I18N(" listaccounts:\n"
113 " List the accounts\n\n"));
114 GWEN_Buffer_AppendString(ubuf,
115 I18N(" changepin:\n"
116 " Change the PIN of a key file\n\n"));
117 GWEN_Buffer_AppendString(ubuf,
118 I18N(" unblockpin:\n"
119 " Unblock the PIN in PIN TAN mode.\n\n"));
120 GWEN_Buffer_AppendString(ubuf,
121 I18N(" iniletter:\n"
122 " Print the INI letter for a given "
123 "user\n\n"));
124 GWEN_Buffer_AppendString(ubuf,
125 I18N(" addaccount:\n"
126 " Manually add account \n\n"));
127 GWEN_Buffer_AppendString(ubuf,
128 I18N(" delaccount:\n"
129 " Deletes account \n\n"));
130
131 GWEN_Buffer_AppendString(ubuf,
132 I18N(" sethbciversion:\n"
133 " Set the HBCI protocol version to be used\n\n"));
134
135 GWEN_Buffer_AppendString(ubuf,
136 I18N(" setMaxTransfers:\n"
137 " Set the maximum number of transfers/debit notes per job \n\n"));
138
139 GWEN_Buffer_AppendString(ubuf,
140 I18N(" setsepaprofile:\n"
141 " Set the SEPA profile for transfers/debit notes\n\n"));
142
143 GWEN_Buffer_AppendString(ubuf,
144 I18N(" setTanMediumId:\n"
145 " Set the medium id for some PIN/TAN methods (like mTAN) \n\n"));
146 GWEN_Buffer_AppendString(ubuf,
147 I18N(" setTanMechanism:\n"
148 " Overwrite TAN mechanism to use \n\n"));
149 GWEN_Buffer_AppendString(ubuf,
150 I18N(" adduserflags:\n"
151 " Set special flags for the given user\n\n"));
152 GWEN_Buffer_AppendString(ubuf,
153 I18N(" subuserflags:\n"
154 " Unset special flags for the given user\n\n"));
155 GWEN_Buffer_AppendString(ubuf,
156 I18N(" addaccountflags:\n"
157 " Set special flags for the given account\n\n"));
158 GWEN_Buffer_AppendString(ubuf,
159 I18N(" subaccountflags:\n"
160 " Reset special flags for the given account\n\n"));
161 GWEN_Buffer_AppendString(ubuf,
162 I18N(" logfile:\n"
163 " Make an AqBanking log file anonymous\n\n"));
164 GWEN_Buffer_AppendString(ubuf,
165 I18N(" versions:\n"
166 " Print the program and library versions"));
167
168 fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
169 GWEN_Buffer_free(ubuf);
170 }
171
172
173
AH_Control(AB_PROVIDER * pro,int argc,char ** argv)174 int AH_Control(AB_PROVIDER *pro, int argc, char **argv)
175 {
176 GWEN_DB_NODE *db;
177 const char *cmd;
178 int rv;
179
180 db=GWEN_DB_Group_new("arguments");
181 if (argc<1) {
182 showUsage(argv[0]);
183 GWEN_DB_Group_free(db);
184 return 0;
185 } /* if too few args */
186
187 cmd=argv[0];
188 if (!(cmd && *cmd)) {
189 fprintf(stderr, "ERROR: Command needed.\n");
190 GWEN_DB_Group_free(db);
191 return 1;
192 }
193
194 if (strcasecmp(cmd, "help")==0) {
195 showUsage(argv[0]);
196 rv=0;
197 }
198 else if (strcasecmp(cmd, "mkpinlist")==0) {
199 rv=AH_Control_MkPinList(pro, db, argc, argv);
200 }
201 else if (strcasecmp(cmd, "adduser")==0) {
202 rv=AH_Control_AddUser(pro, db, argc, argv);
203 }
204 else if (strcasecmp(cmd, "deluser")==0) {
205 rv=AH_Control_DelUser(pro, db, argc, argv);
206 }
207 else if (strcasecmp(cmd, "getaccounts")==0) {
208 rv=AH_Control_GetAccounts(pro, db, argc, argv);
209 }
210 else if (strcasecmp(cmd, "addaccount")==0) {
211 rv=AH_Control_AddAccount(pro, db, argc, argv);
212 }
213 else if (strcasecmp(cmd, "delaccount")==0) {
214 rv=AH_Control_DelAccount(pro, db, argc, argv);
215 }
216 else if (strcasecmp(cmd, "getsysid")==0) {
217 rv=AH_Control_GetSysId(pro, db, argc, argv);
218 }
219 else if (strcasecmp(cmd, "getcert")==0) {
220 rv=AH_Control_GetCert(pro, db, argc, argv);
221 }
222 else if (strcasecmp(cmd, "getkeys")==0) {
223 rv=AH_Control_GetKeys(pro, db, argc, argv);
224 }
225 else if (strcasecmp(cmd, "createkeys")==0) {
226 rv=AH_Control_CreateKeys(pro, db, argc, argv);
227 }
228 else if (strcasecmp(cmd, "sendkeys")==0) {
229 rv=AH_Control_SendKeys(pro, db, argc, argv);
230 }
231 else if (strcasecmp(cmd, "changekeys")==0) {
232 rv=AH_Control_ChangeKeys(pro, db, argc, argv);
233 }
234 else if (strcasecmp(cmd, "listusers")==0) {
235 rv=AH_Control_ListUsers(pro, db, argc, argv);
236 }
237 else if (strcasecmp(cmd, "listaccounts")==0) {
238 rv=AH_Control_ListAccounts(pro, db, argc, argv);
239 }
240 else if (strcasecmp(cmd, "iniletter")==0) {
241 rv=AH_Control_IniLetter(pro, db, argc, argv);
242 }
243 else if (strcasecmp(cmd, "getitanmodes")==0) {
244 rv=AH_Control_GetItanModes(pro, db, argc, argv);
245 }
246 else if (strcasecmp(cmd, "listitanmodes")==0) {
247 rv=AH_Control_ListItanModes(pro, db, argc, argv);
248 }
249 else if (strcasecmp(cmd, "setitanmode")==0) {
250 rv=AH_Control_SetItanMode(pro, db, argc, argv);
251 }
252 else if (strcasecmp(cmd, "changepin")==0) {
253 rv=AH_Control_ChangePin(pro, db, argc, argv);
254 }
255 else if (strcasecmp(cmd, "unblockpin")==0) {
256 rv=AH_Control_UnblockPin(pro, db, argc, argv);
257 }
258 else if (strcasecmp(cmd, "sethbciversion")==0) {
259 rv=AH_Control_SetHbciVersion(pro, db, argc, argv);
260 }
261 else if (strcasecmp(cmd, "adduserflags")==0) {
262 rv=AH_Control_AddsubUserFlags(pro, db, argc, argv, 1);
263 }
264 else if (strcasecmp(cmd, "subuserflags")==0) {
265 rv=AH_Control_AddsubUserFlags(pro, db, argc, argv, 0);
266 }
267 else if (strcasecmp(cmd, "addaccountflags")==0) {
268 rv=AH_Control_AddsubAccountFlags(pro, db, argc, argv, 1);
269 }
270 else if (strcasecmp(cmd, "subaccountflags")==0) {
271 rv=AH_Control_AddsubAccountFlags(pro, db, argc, argv, 0);
272 }
273 else if (strcasecmp(cmd, "setmaxtransfers")==0) {
274 rv=AH_Control_SetMaxTransfers(pro, db, argc, argv);
275 }
276 else if (strcasecmp(cmd, "setTanMediumId")==0) {
277 rv=AH_Control_SetTanMediumId(pro, db, argc, argv);
278 }
279 else if (strcasecmp(cmd, "logfile")==0) {
280 rv=AH_Control_LogFile(pro, db, argc, argv);
281 }
282 else if (strcasecmp(cmd, "getaccsepa")==0) {
283 rv=AH_Control_GetAccSepa(pro, db, argc, argv);
284 }
285 else if (strcasecmp(cmd, "setsepaprofile")==0) {
286 rv=AH_Control_SetSepaProfile(pro, db, argc, argv);
287 }
288 else if (strcasecmp(cmd, "getbankinfo")==0) {
289 rv=AH_Control_GetBankInfo(pro, db, argc, argv);
290 }
291 else if (strcasecmp(cmd, "setTanMechanism")==0) {
292 rv=AH_Control_SetTanMechanism(pro, db, argc, argv);
293 }
294 else if (strcasecmp(cmd, "versions")==0) {
295 showVersions();
296 rv=0;
297 }
298 else if (strcasecmp(cmd, "test1")==0) {
299 rv=AH_Control_Test1(pro, db, argc, argv);
300 }
301 else {
302 fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd);
303 rv=1;
304 }
305
306 GWEN_DB_Group_free(db);
307 return rv;
308 }
309
310
311
312