int createArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_CreateArchive(sr, aname); if (rv<0) { fprintf(stderr, "ERROR: Error creating archive (%d)\n", rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; }
int add2Archive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; int recursive; int verbosity; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "recursive", /* name */ 0, /* minnum */ 1, /* maxnum */ "r", /* short option */ "recursive", /* long option */ "add folders recursively", /* short description */ "add folders recursively" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbosity", /* name */ 0, /* minnum */ 10, /* maxnum */ "v", /* short option */ NULL, /* long option */ "set verbosity", /* short description */ "set verbosity" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); recursive=GWEN_DB_GetIntValue(db, "recursive", 0, 0); verbosity=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ|GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { int i; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; sl=GWEN_StringList_new(); for (i=0; ; i++) { const char *fname; fname=GWEN_DB_GetCharValue(db, "params", i, 0); if (fname && *fname) { rv=addToList(fname, recursive, sl); if (rv<0) { fprintf(stderr, "ERROR: Error adding entry \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); GWEN_StringList_free(sl); return 2; } } else break; } se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { rv=GWEN_Sar_AddFile(sr, s); if (rv<0) { fprintf(stderr, "ERROR: Error adding file \"%s\" to archive \"%s\" (%d)\n", s, aname, rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } if (verbosity>0) { fprintf(stdout, "added \"%s\"\n", s); } } se=GWEN_StringListEntry_Next(se); } /* while se */ GWEN_StringList_free(sl); rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } }
int addUser(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; GWEN_BUFFER *nameBuffer=NULL; const char *tokenName; const char *tokenType; const char *bankId; const char *userId; const char *customerId; const char *userName; const char *hostName; const char *server; const char *ebicsVersion; int importing; uint32_t cid; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "tokentype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tokenname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "hostName", /* name */ 1, /* minnum */ 1, /* maxnum */ "H", /* short option */ "hostname", /* long option */ "Specify the EBICS hostname", /* short description */ "Specify the EBICS hostname" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the realname of the user", /* short description */ "Specify the realname of the user" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ebicsVersion", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "ebicsversion", /* long option */ "Specify the EBICS version to use (e.g. H002)", /* short description */ "Specify the EBICS version to use (e.g. H002)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "context", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "context", /* long option */ "Select a context on the medium", /* short description */ "Select a context on the medium" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "import", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "import", /* long option */ "Import a user which has already been in use (e.g. with previous versions)", "Import a user which has already been in use (e.g. with previous versions)" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } tokenType=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); tokenName=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); userId=GWEN_DB_GetCharValue(db, "userId", 0, 0); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, 0); hostName=GWEN_DB_GetCharValue(db, "hostName", 0, 0); userName=GWEN_DB_GetCharValue(db, "userName", 0, 0); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, 0); cid=GWEN_DB_GetIntValue(db, "context", 0, 0); importing=GWEN_DB_GetIntValue(db, "import", 0, 0); ebicsVersion=GWEN_DB_GetCharValue(db, "ebicsVersion", 0, "H003"); if (1) { const char *lbankId; const char *luserId; const char *lcustomerId; const char *lserverAddr; GWEN_URL *url; GWEN_CRYPT_TOKEN_CONTEXT *ctx=NULL; AB_USER *user; if (1) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; if (cid==0) { DBG_ERROR(0, "No context given."); return 1; } /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, tokenType); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tokenName); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token (%d)", rv); return 3; } /* get real token name */ nameBuffer=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(nameBuffer, GWEN_Crypt_Token_GetTokenName(ct)); tokenName=GWEN_Buffer_GetStart(nameBuffer); cctx=GWEN_Crypt_Token_GetContext(ct, cid, 0); if (cctx==NULL) { DBG_ERROR(0, "Context %02x not found", cid); return 3; } ctx=GWEN_Crypt_Token_Context_dup(cctx); lbankId=bankId?bankId:GWEN_Crypt_Token_Context_GetServiceId(ctx); luserId=userId?userId:GWEN_Crypt_Token_Context_GetUserId(ctx); lcustomerId=customerId?customerId:luserId; lserverAddr=server?server:GWEN_Crypt_Token_Context_GetAddress(ctx); rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token (%d)", rv); return 3; } GWEN_Crypt_Token_free(ct); } if (!lbankId || !*lbankId) { DBG_ERROR(0, "No bank id stored and none given"); return 3; } if (!luserId || !*luserId) { DBG_ERROR(0, "No user id (Benutzerkennung) stored and none given"); return 3; } /* TODO: Check for existing users to avoid duplicates */ #if 0 user=AB_Banking_FindUser(ab, EBC_PROVIDER_NAME, "de", lbankId, luserId, lcustomerId); if (user) { DBG_ERROR(0, "User %s already exists", luserId); return 3; } #endif user=AB_Provider_CreateUserObject(pro); assert(user); AB_User_SetCountry(user, "de"); AB_User_SetBankCode(user, lbankId); AB_User_SetUserId(user, luserId); AB_User_SetCustomerId(user, lcustomerId); EBC_User_SetPeerId(user, hostName); AB_User_SetUserName(user, userName); EBC_User_SetTokenType(user, tokenType); EBC_User_SetTokenName(user, tokenName); EBC_User_SetTokenContextId(user, cid); if (ebicsVersion) { if (strcasecmp(ebicsVersion, "H002")==0) { EBC_User_SetProtoVersion(user, "H002"); EBC_User_SetSignVersion(user, "A004"); EBC_User_SetAuthVersion(user, "X001"); EBC_User_SetCryptVersion(user, "E001"); } else if (strcasecmp(ebicsVersion, "H003")==0) { EBC_User_SetProtoVersion(user, "H003"); EBC_User_SetSignVersion(user, "A005"); EBC_User_SetAuthVersion(user, "X002"); EBC_User_SetCryptVersion(user, "E002"); } else if (strcasecmp(ebicsVersion, "H004")==0) { EBC_User_SetProtoVersion(user, "H004"); EBC_User_SetSignVersion(user, "A005"); EBC_User_SetAuthVersion(user, "X002"); EBC_User_SetCryptVersion(user, "E002"); } else { fprintf(stderr, "%s", I18N("Invalid protocol version.\n" "Possible versions are H002, H003 and H004.\n")); return 3; } } /* try to get server address from database if still unknown */ if (!lserverAddr || *lserverAddr==0) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (getBankUrl(AB_Provider_GetBanking(pro), lbankId, tbuf)) { DBG_INFO(0, "Could not find server address for \"%s\"", lbankId); } if (GWEN_Buffer_GetUsedBytes(tbuf)==0) { DBG_ERROR(0, "No address given and none available in internal db"); return 3; } url=GWEN_Url_fromString(GWEN_Buffer_GetStart(tbuf)); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\" in internal db", GWEN_Buffer_GetStart(tbuf)); return 3; } GWEN_Buffer_free(tbuf); } else { /* set address */ url=GWEN_Url_fromString(lserverAddr); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\"", lserverAddr); return 3; } } GWEN_Url_SetProtocol(url, "https"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 443); /* set url */ if (1) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Url_toString(url, tbuf); if (rv<0) { DBG_ERROR(0, "Internal error storing URL"); return 3; } EBC_User_SetServerUrl(user, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } GWEN_Url_free(url); if (importing) { EBC_User_AddFlags(user, EBC_USER_FLAGS_INI | EBC_USER_FLAGS_HIA); EBC_User_SetStatus(user, EBC_UserStatus_Enabled); } rv=AB_Provider_AddUser(pro, user); if (rv<0) { DBG_ERROR(AQEBICS_LOGDOMAIN, "Coud not add new user (%d)", rv); AB_User_free(user); return 4; } AB_User_free(user); /* context no longer needed */ GWEN_Crypt_Token_Context_free(ctx); } return 0; }
int addsubAccountFlags(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int is_add ) { GWEN_DB_NODE *db; AB_PROVIDER *pro; AB_ACCOUNT_LIST2 *al; AB_ACCOUNT *a=0; int rv; const char *bankId; const char *accountId; const char *subAccountId; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account id (Kontonummer)", /* short description */ "Specify the account id (Kontonummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "flags", /* name */ 1, /* minnum */ 99, /* maxnum */ "f", /* short option */ "flags", /* long option */ "Specify the user flags", /* short description */ "Specify the user flags" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqhbci"); assert(pro); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, "*"); al=AB_Banking_FindAccounts(ab, AH_PROVIDER_NAME, "de", bankId, accountId, subAccountId); if (al) { if (AB_Account_List2_GetSize(al)!=1) { DBG_ERROR(0, "Ambiguous account specification"); AB_Account_List2_free(al); return 3; } else { AB_ACCOUNT_LIST2_ITERATOR *ait; ait=AB_Account_List2_First(al); assert(ait); a=AB_Account_List2Iterator_Data(ait); AB_Account_List2Iterator_free(ait); } AB_Account_List2_free(al); } if (!a) { DBG_ERROR(0, "No matching customer"); return 3; } else { GWEN_DB_NODE *vn; uint32_t flags, bf, c=0; /* parse flags */ flags=AH_Account_Flags_fromDb(db, "flags"); for (bf=flags; bf; bf>>=1) { if (bf&1) c++; } vn=GWEN_DB_FindFirstVar(db, "flags"); if (GWEN_DB_Values_Count(vn)!=c) { fprintf(stderr, "ERROR: Specified flag(s) unknown\n"); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 4; } /* lock account */ rv=AB_Banking_BeginExclUseAccount(ab, a); if (rv<0) { fprintf(stderr, "ERROR: Could not lock account, maybe it is used in another application? (%d)\n", rv); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 4; } /* modify account */ if( is_add ) { fprintf(stderr, "Adding flags: %08x\n", flags); AH_Account_AddFlags(a, flags); } else { fprintf(stderr, "Removing flags: %08x\n", flags); AH_Account_SubFlags(a, flags); } /* unlock account */ rv=AB_Banking_EndExclUseAccount(ab, a, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock account (%d)\n", rv); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 4; } } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int listItanModes(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; AB_USER_LIST2 *ul; AB_USER *u=0; int rv; const char *bankId; const char *userId; const char *customerId; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqhbci"); assert(pro); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); userId=GWEN_DB_GetCharValue(db, "userId", 0, "*"); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, "*"); ul=AB_Banking_FindUsers(ab, AH_PROVIDER_NAME, "de", bankId, userId, customerId); if (ul) { if (AB_User_List2_GetSize(ul)!=1) { DBG_ERROR(0, "Ambiguous customer specification"); return 3; } else { AB_USER_LIST2_ITERATOR *uit; uit=AB_User_List2_First(ul); assert(uit); u=AB_User_List2Iterator_Data(uit); AB_User_List2Iterator_free(uit); } AB_User_List2_free(ul); } if (!u) { DBG_ERROR(0, "No matching customer"); return 3; } else { const AH_TAN_METHOD_LIST *tl; tl=AH_User_GetTanMethodDescriptions(u); if (tl) { const AH_TAN_METHOD *tm; tm=AH_TanMethod_List_First(tl); fprintf(stdout, "TAN Methods\n"); while(tm) { const char *mid; const char *mname; int combinedVersion; combinedVersion=AH_TanMethod_GetFunction(tm)+(AH_TanMethod_GetGvVersion(tm)*1000); fprintf(stdout, "- %4d (F%3d/V%1d/P%1d)", combinedVersion, AH_TanMethod_GetFunction(tm), AH_TanMethod_GetGvVersion(tm), AH_TanMethod_GetProcess(tm)); mid=AH_TanMethod_GetMethodId(tm); mname=AH_TanMethod_GetMethodName(tm); if (mid && mname) { fprintf(stdout, ": %s (%s)", mid, mname); } else if (mid && !mname) { fprintf(stdout, ": %s", mid); } else if (!mid && mname) { fprintf(stdout, ": %s", mname); } if (AH_User_HasTanMethod(u, AH_TanMethod_GetFunction(tm))) { if (AH_User_GetSelectedTanMethod(u)==combinedVersion) fprintf(stdout, " [available and selected]"); else fprintf(stdout, " [available]"); } else fprintf(stdout, " [not available]"); fprintf(stdout, "\n"); tm=AH_TanMethod_List_Next(tm); } } } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int AH_Control_GetItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { AB_IMEXPORTER_CONTEXT *ctx; ctx=AB_ImExporterContext_new(); rv=AH_Provider_GetItanModes(pro, u, ctx, 1, 0, 1); AB_ImExporterContext_free(ctx); if (rv) { DBG_ERROR_ERR(0, rv); AB_User_free(u); return 3; } } AB_User_free(u); return 0; }
int extractArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; int verbosity; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbosity", /* name */ 0, /* minnum */ 10, /* maxnum */ "v", /* short option */ NULL, /* long option */ "set verbosity", /* short description */ "set verbosity" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); verbosity=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while(fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); if (s && *s) { rv=GWEN_Sar_ExtractFile(sr, fh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } if (verbosity>0) { fprintf(stdout, "extracted \"%s\"\n", s); } } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } }
int signWithOld(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPTTOKEN *ct; unsigned int ucid; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userContextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "User context id (0 for any)",/* short description */ "User context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ucid=GWEN_DB_GetIntValue(db, "userContextId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("crypttoken"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_CryptToken_Plugin_CreateToken(pl, 0, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_CryptToken_AddModes(ct, GWEN_CRYPTTOKEN_MODES_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_CryptToken_Open(ct, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { GWEN_BUFFER *dstBuf; const GWEN_CRYPTTOKEN_CONTEXT *octx; GWEN_CRYPTTOKEN_CONTEXT *ctx; GWEN_CRYPTTOKEN_SIGNINFO *si; uint8_t clearText[96]={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60 }; octx=GWEN_CryptToken_GetContextById(ct, 0x01); if (octx==NULL) { DBG_ERROR(0, "Context not found"); return 3; } /* prepare context */ ctx=GWEN_CryptToken_Context_dup(octx); si=GWEN_CryptToken_Context_GetSignInfo(ctx); GWEN_CryptToken_SignInfo_SetHashAlgo(si, GWEN_CryptToken_HashAlgo_None); GWEN_CryptToken_SignInfo_SetPaddAlgo(si, GWEN_CryptToken_PaddAlgo_None); dstBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_CryptToken_Sign(ct, ctx, (const char*)clearText, 96, dstBuf); if (rv) { DBG_ERROR(0, "Could not sign data (%d)", rv); return 3; } fprintf(stderr, "Signature is:\n"); GWEN_Text_DumpString(GWEN_Buffer_GetStart(dstBuf), GWEN_Buffer_GetUsedBytes(dstBuf), stderr, 2); GWEN_Buffer_free(dstBuf); } /* close crypt token */ rv=GWEN_CryptToken_Close(ct); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; }
int cryptWithNew2(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; unsigned int cid; int rv; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint8_t clearText[96]={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60 }; uint8_t encrypted[128]; uint32_t elen; uint8_t decrypted[128]; uint32_t dlen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_None); elen=sizeof(encrypted); rv=GWEN_Crypt_Token_Encipher(ct, 0x02, algo, clearText, 96, encrypted, &elen, 0); if (rv) { DBG_ERROR(0, "Could not encipher data (%d)", rv); return 3; } fprintf(stderr, "Encrypted data is:\n"); GWEN_Text_DumpString((const char*) encrypted, elen, stderr, 2); dlen=sizeof(decrypted); rv=GWEN_Crypt_Token_Decipher(ct, 0x02, algo, encrypted, elen, decrypted, &dlen, 0); if (rv) { DBG_ERROR(0, "Could not decipher data (%d)", rv); return 3; } if (memcmp(clearText, decrypted, dlen)) { DBG_ERROR(0, "Deciphered data does not equal clear text(%d)", rv); return 3; } fprintf(stderr, "Deciphered data is ok.\n"); } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; }
int resetKeys(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { #warning "TODO" #if 0 GWEN_DB_NODE *db; AB_PROVIDER *pro; AB_USER_LIST2 *ul; AB_USER *u=0; int rv; const char *bankId; const char *userId; const char *customerId; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "userKeys", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "userkeys", /* long option */ "Reset user keys instead of bank keys", /* short description */ "Reset user keys instead of bank keys" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqhbci"); assert(pro); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); userId=GWEN_DB_GetCharValue(db, "userId", 0, "*"); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, "*"); ul=AB_Banking_FindUsers(ab, AH_PROVIDER_NAME, "de", bankId, userId, customerId); if (ul) { if (AB_User_List2_GetSize(ul)!=1) { DBG_ERROR(0, "Ambiguous customer specification"); AB_Banking_Fini(ab); return 3; } else { AB_USER_LIST2_ITERATOR *cit; cit=AB_User_List2_First(ul); assert(cit); u=AB_User_List2Iterator_Data(cit); AB_User_List2Iterator_free(cit); } AB_User_List2_free(ul); } if (!u) { DBG_ERROR(0, "No matching customer"); AB_Banking_Fini(ab); return 3; } else { AH_MEDIUM *m; m=AH_User_GetMedium(u); assert(m); rv=AH_Medium_Mount(m); if (rv) { DBG_ERROR(0, "Could not mount medium (%d)", rv); AB_Banking_Fini(ab); return 3; } rv=AH_Medium_SelectContext(m, AH_User_GetContextId(u)); if (rv) { DBG_ERROR(0, "Could not select context %d (%d)", AH_User_GetContextId(u), rv); AB_Banking_Fini(ab); return 3; } fprintf(stderr, "Resetting keys, please wait...\n"); if (GWEN_DB_VariableExists(db, "userKeys")) rv=AH_Medium_ResetUserKeys(m); else rv=AH_Medium_ResetServerKeys(m); if (rv) { DBG_ERROR(0, "Could not reset keys (%d)", rv); AB_Banking_Fini(ab); return 3; } rv=AH_Medium_Unmount(m, 1); if (rv) { DBG_ERROR(0, "Could not unmount medium (%d)", rv); AB_Banking_Fini(ab); return 3; } } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } #endif return 0; }
/* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account number", /* short description */ "Specify the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ctxFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "ctxfile", /* long option */ "Specify the file to store the context in", /* short description */ "Specify the file to store the context in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the file to store the data in", /* short description */ "Specify the file to store the data in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "balanceType", /* name */ 0, /* minnum */ 1, /* maxnum */ "bt", /* short option */ "balanceType", /* long option */ "Specify the balance type", /* short description */ "Specify the balance type (e.g. noted, booked, temporary)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "template", /* name */ 0, /* minnum */ 1, /* maxnum */ "T", /* short option */ "template", /* long option */ "Specify the template for the balance list output", /* short description */ "Specify the template for the balance list output" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return NULL; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return NULL; } GWEN_Buffer_AppendString(ubuf, "\n"); GWEN_Buffer_AppendString(ubuf, "The template string given to \"-T\" may contain variables to specify the output.\n"); GWEN_Buffer_AppendString(ubuf, "Default is: \"$(dateAsString)\\t$(valueAsString)\\t$(iban)"); GWEN_Buffer_AppendString(ubuf, "Possible variables are:\n"); GWEN_Buffer_AppendString(ubuf, " $(dateAsString) : Date of the balance in format "); GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY")); GWEN_Buffer_AppendString(ubuf, " \n"); GWEN_Buffer_AppendString(ubuf, " $(valueAsString) : Amount of the balance\n"); GWEN_Buffer_AppendString(ubuf, " $(iban) : IBAN of the account this balance comes from\n"); GWEN_Buffer_AppendString(ubuf, " $(bic) : Account number of the account this balance comes from\n"); GWEN_Buffer_AppendString(ubuf, " $(bankcode) : Bank code (Bankleitzahl) of the account this balance comes from\n"); GWEN_Buffer_AppendString(ubuf, " $(accountnumber) : Account number of the account this balance comes from\n"); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; }
int setHbciVersion(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; AB_USER_LIST2 *ul; AB_USER *u=0; int rv; const char *bankId; const char *userId; const char *customerId; const char *hbciVersion; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "hbciVersion", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "hbciversion", /* long option */ "Specify the HBCI version (201, 210, 220, 300)", /* short description */ "Specify the HBCI version (201, 210, 220, 300)" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqhbci"); assert(pro); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); userId=GWEN_DB_GetCharValue(db, "userId", 0, "*"); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, "*"); hbciVersion=GWEN_DB_GetCharValue(db, "hbciVersion", 0, "220"); ul=AB_Banking_FindUsers(ab, AH_PROVIDER_NAME, "de", bankId, userId, customerId); if (ul) { if (AB_User_List2_GetSize(ul)!=1) { DBG_ERROR(0, "Ambiguous customer specification"); return 3; } else { AB_USER_LIST2_ITERATOR *uit; uit=AB_User_List2_First(ul); assert(uit); u=AB_User_List2Iterator_Data(uit); AB_User_List2Iterator_free(uit); } AB_User_List2_free(ul); } if (!u) { DBG_ERROR(0, "No matching customer"); return 3; } else { int v; v=atoi(hbciVersion); if (v<200 || v>399) { DBG_ERROR(0, "Invalid HBCI version \"%s\"", hbciVersion); return 1; } /* lock user */ rv=AB_Banking_BeginExclUseUser(ab, u); if (rv<0) { fprintf(stderr, "ERROR: Could not lock user, maybe it is used in another application? (%d)\n", rv); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 4; } /* modify user */ AH_User_SetHbciVersion(u, v); /* unlock user */ rv=AB_Banking_EndExclUseUser(ab, u, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not unlock user (%d)\n", rv); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 4; } } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
/* parse command line */ GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ctxFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "ctxfile", /* long option */ "Specify the file to store the context in", /* short description */ "Specify the file to store the context in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "uniqueAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "aid", /* long option */ "Specify the unique account id", /* short description */ "Specify the unique account id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "backendName", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "backend", /* long option */ "Specify the name of the backend for your account", /* short description */ "Specify the name of the backend for your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "country", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "country", /* long option */ "Specify the country for your account (e.g. \"de\")", /* short description */ "Specify the country for your account (e.g. \"de\")" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountType", /* name */ 0, /* minnum */ 1, /* maxnum */ "at", /* short option */ "accounttype", /* long option */ "Specify the account type", /* short description */ "Specify the account type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "iban", /* name */ 0, /* minnum */ 1, /* maxnum */ "A", /* short option */ "iban", /* long option */ "Specify the iban of your account", /* short description */ "Specify the iban of your account" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBIC", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote SWIFT BIC",/* short description */ "Specify the remote SWIFT BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIBAN", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "name", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "name", /* long option */ "Specify your name", /* short description */ "Specify your name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "endToEndReference", /* name */ 0, /* minnum */ 1, /* maxnum */ "E", /* short option */ "endtoendid", /* long option */ "Specify the SEPA End-to-end-reference", /* short description */ "Specify the SEPA End-to-end-reference" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "executionDate", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "execdate", /* long option */ "Specify the execution date (YYYYMMDD)", /* short */ "Specify the execution date (YYYYMMDD)" /* long */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noCheck", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "noCheck", /* long option */ "Dont check transaction limits", /* short description */ "Dont check transaction limits" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return NULL; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return NULL; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return NULL; } return db; }
static int addTransaction(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_JOB_TYPE transferType; const char *ctxFile; const char *bankId; const char *accountId; const char *subAccountId; AB_IMEXPORTER_CONTEXT *ctx=0; AB_ACCOUNT_LIST2 *al; AB_ACCOUNT *a; AB_TRANSACTION *t; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ctxFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "ctxfile", /* long option */ "Specify the file to store the context in", /* short description */ "Specify the file to store the context in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "overwrite the bank code", /* short description */ "overwrite the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "overwrite the account number", /* short description */ "overwrite the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "subAccountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "aa", /* short option */ "subaccount", /* long option */ "Specify the sub account id (Unterkontomerkmal)", /* short description */ "Specify the sub account id (Unterkontomerkmal)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBankId", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbank", /* long option */ "Specify the remote bank code",/* short description */ "Specify the remote bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteAccountId", /* name */ 1, /* minnum */ 1, /* maxnum */ 0, /* short option */ "raccount", /* long option */ "Specify the remote account number", /* short description */ "Specify the remote account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteIban", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "riban", /* long option */ "Specify the remote IBAN", /* short description */ "Specify the remote IBAN" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteBic", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "rbic", /* long option */ "Specify the remote BIC", /* short description */ "Specify the remote BIC" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "value", /* name */ 1, /* minnum */ 1, /* maxnum */ "v", /* short option */ "value", /* long option */ "Specify the transfer amount", /* short description */ "Specify the transfer amount" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "textkey", /* name */ 0, /* minnum */ 1, /* maxnum */ "t", /* short option */ "textkey", /* long option */ "Specify the text key (51 for normal transfer)", /* short description */ "Specify the text key (51 for normal transfer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "remoteName", /* name */ 1, /* minnum */ 2, /* maxnum */ 0, /* short option */ "rname", /* long option */ "Specify the remote name", /* short description */ "Specify the remote name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "purpose", /* name */ 1, /* minnum */ 6, /* maxnum */ "p", /* short option */ "purpose", /* long option */ "Specify the purpose", /* short description */ "Specify the purpose" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* get account */ al=AB_Banking_FindAccounts(ab, "*", "*", bankId, accountId, subAccountId); if (al==NULL || AB_Account_List2_GetSize(al)==0) { DBG_ERROR(0, "Account not found"); AB_Account_List2_free(al); return 2; } else if (AB_Account_List2_GetSize(al)>1) { DBG_ERROR(0, "Ambiguous account specification"); AB_Account_List2_free(al); return 2; } a=AB_Account_List2_GetFront(al); AB_Account_List2_free(al); /* create transaction from arguments */ t=mkTransfer(a, db, &transferType); if (t==NULL) { DBG_ERROR(0, "Could not create transaction from arguments"); return 2; } ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); rv=readContext(ctxFile, &ctx, 0); if (rv<0) { DBG_ERROR(0, "Error reading context (%d)", rv); AB_Transaction_free(t); return 4; } AB_ImExporterContext_AddTransaction(ctx, t); rv=writeContext(ctxFile, ctx); AB_ImExporterContext_free(ctx); if (rv<0) { DBG_ERROR(0, "Error writing context (%d)", rv); return 4; } /* that's it */ rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); AB_Banking_Fini(ab); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int activateKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int rv; const char *s; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id", /* short description */ "Key id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); if (keyId==0) { DBG_ERROR(0, "Key Id must not be zero"); return 1; } s=GWEN_DB_GetCharValue(db, "algo", 0, "rsa"); if (!s) { DBG_ERROR(0, "Algo id missing"); return 1; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { /* activate key */ rv=GWEN_Crypt_Token_ActivateKey(ct, keyId, 0); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error activating key (%d)", rv); return 3; } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Key %d successfully activated.\n", keyId); return 0; }
int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const char *localedir; GWEN_STRINGLIST *slist; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "forcePin", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "forcepin", /* long option */ "force pin entry", /* short description */ "force pin entry even if the error counter is not zero" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); slist = GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR); assert(GWEN_StringList_Count(slist) > 0); localedir = GWEN_StringList_FirstString(slist); #ifdef HAVE_I18N setlocale(LC_ALL,""); if (bindtextdomain(PACKAGE, localedir)==0) fprintf(stderr, "Error binding locale\n"); #endif GWEN_StringList_free(slist); GWEN_Logger_Open(GCT_LOGDOMAIN, "gct-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); #ifdef DEBUG_GCT_TOOL GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Info); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); #else GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #endif #ifdef GCT_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your daily key files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates a crypt token" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" showuser:\n" " Display user data stored on the " "token\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "sign1")==0) { rv=signWithOld(db, argc, argv); } else if (strcasecmp(cmd, "sign2")==0) { rv=signWithNew(db, argc, argv); } else if (strcasecmp(cmd, "crypt1")==0) { rv=cryptWithOld(db, argc, argv); } else if (strcasecmp(cmd, "crypt2")==0) { rv=cryptWithNew(db, argc, argv); } else if (strcasecmp(cmd, "crypt3")==0) { rv=cryptWithNew2(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; }
int AH_Control_ListItanModes(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_HasUser(pro, uid); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { const AH_TAN_METHOD_LIST *tl; tl=AH_User_GetTanMethodDescriptions(u); if (tl) { const AH_TAN_METHOD *tm; tm=AH_TanMethod_List_First(tl); fprintf(stdout, "TAN Methods\n"); while (tm) { const char *mid; const char *mname; int combinedVersion; combinedVersion=AH_TanMethod_GetFunction(tm)+(AH_TanMethod_GetGvVersion(tm)*1000); fprintf(stdout, "- %4d (F%3d/V%1d/P%1d)", combinedVersion, AH_TanMethod_GetFunction(tm), AH_TanMethod_GetGvVersion(tm), AH_TanMethod_GetProcess(tm)); mid=AH_TanMethod_GetMethodId(tm); mname=AH_TanMethod_GetMethodName(tm); if (mid && mname) { fprintf(stdout, ": %s (%s)", mid, mname); } else if (mid && !mname) { fprintf(stdout, ": %s", mid); } else if (!mid && mname) { fprintf(stdout, ": %s", mname); } if (AH_User_HasTanMethod(u, AH_TanMethod_GetFunction(tm))) { if (AH_User_GetSelectedTanMethod(u)==combinedVersion) fprintf(stdout, " [available and selected]"); else fprintf(stdout, " [available]"); } else fprintf(stdout, " [not available]"); fprintf(stdout, "\n"); tm=AH_TanMethod_List_Next(tm); } } } AB_User_free(u); return 0; }
int logFile(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbMessages; const char *s; GWEN_MSGENGINE *e; GWEN_SYNCIO *sioOut=NULL; GWEN_SYNCIO *sioDb=NULL; const char *inFile; const char *outFile; const char *dbOutFile; int i; GWEN_DB_NODE *dbT; int trustLevel; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "xmlfile", /* name */ 0, /* minnum */ 99, /* maxnum */ "x", /* short option */ "xmlfile", /* long option */ "Specify XML files to load", /* short description */ "Specify XML files to load" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "infile", /* name */ 1, /* minnum */ 1, /* maxnum */ "i", /* short option */ "infile", /* long option */ "Specify input file", /* short description */ "Specify input file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify output file", /* short description */ "Specify output file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "dboutfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dbfile", /* long option */ "Specify DB output file", /* short description */ "Specify DB output file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "trustLevel", /* name */ 0, /* minnum */ 1, /* maxnum */ "L", /* short option */ "trustlevel", /* long option */ "Specify the trust level", /* short description */ "Specify the trust level" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } trustLevel=GWEN_DB_GetIntValue(db, "trustLevel", 0, 0); outFile=GWEN_DB_GetCharValue(db, "outFile", 0, NULL); dbOutFile=GWEN_DB_GetCharValue(db, "dbOutFile", 0, NULL); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, NULL); assert(inFile); /* do it */ dbMessages=GWEN_DB_Group_new("Messages"); rv=_readLogFile(inFile, dbMessages); if (rv<0) { DBG_ERROR(0, "Error reading message (%d)", rv); return 2; } /* create message engine, read XML definitions */ e=AH_MsgEngine_new(); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "xmlfile", i, NULL); if (s && *s) { GWEN_XMLNODE *defs; defs=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "defs"); if (GWEN_XML_ReadFile(defs, s, GWEN_XML_FLAGS_DEFAULT)){ fprintf(stderr, "Error parsing.\n"); GWEN_MsgEngine_free(e); return 2; } GWEN_MsgEngine_AddDefinitions(e, defs); GWEN_XMLNode_free(defs); } else { if (i==0) { GWEN_XMLNODE *defs; defs=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "defs"); if (GWEN_XML_ReadFile(defs, XMLDATA_DIR "/hbci.xml", GWEN_XML_FLAGS_DEFAULT)){ fprintf(stderr, "Error parsing.\n"); GWEN_MsgEngine_free(e); return 2; } GWEN_MsgEngine_AddDefinitions(e, defs); GWEN_XMLNode_free(defs); } break; } } if (outFile) { sioOut=GWEN_SyncIo_File_new(outFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sioOut, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sioOut); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioOut); return 2; } } if (dbOutFile) { sioDb=GWEN_SyncIo_File_new(dbOutFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sioDb, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_APPEND); rv=GWEN_SyncIo_Connect(sioDb); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioDb); return 2; } } dbT=GWEN_DB_GetFirstGroup(dbMessages); while(dbT) { const uint8_t *p; uint32_t len; GWEN_DB_NODE *dbHeader; dbHeader=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "header"); assert(dbHeader); s=GWEN_DB_GetCharValue(dbHeader, "mode", 0, "PINTAN"); GWEN_MsgEngine_SetMode(e, s); i=GWEN_DB_GetIntValue(dbHeader, "hbciVersion", 0, 220); GWEN_MsgEngine_SetProtocolVersion(e, i); p=GWEN_DB_GetBinValue(dbT, "body", 0, NULL, 0, &len); if (p && len) { GWEN_BUFFER *tbuf; GWEN_DB_NODE *gr; GWEN_MSGENGINE_TRUSTEDDATA *trustedData; GWEN_MSGENGINE_TRUSTEDDATA *ntd; GWEN_DB_NODE *repl; gr=GWEN_DB_Group_new("message"); tbuf=GWEN_Buffer_new((char*) p, len, len, 0); rv=GWEN_MsgEngine_ReadMessage(e, "SEG", tbuf, gr, GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO); if (rv) { fprintf(stderr, "ERROR.\n"); GWEN_Buffer_Dump(tbuf, 2); return 2; } /* work on trust data */ trustedData=GWEN_MsgEngine_TakeTrustInfo(e); if (trustedData) { if (GWEN_MsgEngine_TrustedData_CreateReplacements(trustedData)) { fprintf(stderr, "Could not anonymize log (createReplacements)\n"); GWEN_MsgEngine_TrustedData_free(trustedData); GWEN_MsgEngine_free(e); return 2; } } /* anonymize file */ ntd=trustedData; repl=GWEN_DB_GetGroup(dbHeader, GWEN_DB_FLAGS_OVERWRITE_GROUPS, "replacements"); assert(repl); while(ntd) { if (GWEN_MsgEngine_TrustedData_GetTrustLevel(ntd)>trustLevel) { int pos; unsigned int size; char rbuffer[3]; const char *rpstr; rpstr=GWEN_MsgEngine_TrustedData_GetReplacement(ntd); assert(rpstr); assert(*rpstr); size=strlen(rpstr); if (size==1) { rbuffer[0]=rpstr[0]; rbuffer[1]=0; } else { rbuffer[0]=rpstr[0]; rbuffer[1]=rpstr[1]; rbuffer[2]=0; } GWEN_DB_SetCharValue(repl, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_VAR, rbuffer, GWEN_MsgEngine_TrustedData_GetDescription(ntd)); size=GWEN_MsgEngine_TrustedData_GetSize(ntd); pos=GWEN_MsgEngine_TrustedData_GetFirstPos(ntd); while(pos>=0) { DBG_INFO(0, "Replacing %d bytes at %d", size, pos); GWEN_Buffer_SetPos(tbuf, pos); GWEN_Buffer_ReplaceBytes(tbuf, size, GWEN_MsgEngine_TrustedData_GetReplacement(ntd), size); pos=GWEN_MsgEngine_TrustedData_GetNextPos(ntd); } // while pos } ntd=GWEN_MsgEngine_TrustedData_GetNext(ntd); } // while ntd GWEN_DB_SetIntValue(dbHeader, GWEN_DB_FLAGS_OVERWRITE_VARS, "size", GWEN_Buffer_GetUsedBytes(tbuf)); if (outFile) { rv=dumpMsg(sioOut, dbHeader, (const uint8_t*)GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { fprintf(stderr, "Could not anonymize log (dumpMsg)\n"); GWEN_MsgEngine_TrustedData_free(trustedData); GWEN_MsgEngine_free(e); return 2; } } if (dbOutFile) { GWEN_BUFFER *xbuf; GWEN_DB_NODE *dbOut; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, "# ========== Message ( "); s=GWEN_DB_GetCharValue(dbHeader, "sender", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(xbuf, "sender="); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, " "); } s=GWEN_DB_GetCharValue(dbHeader, "crypt", 0, "UNK"); if (s && *s) { GWEN_Buffer_AppendString(xbuf, "crypt="); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, " "); } GWEN_Buffer_AppendString(xbuf, ") ==========\n"); dbOut=GWEN_DB_Group_new("Message"); GWEN_Buffer_Rewind(tbuf); rv=GWEN_MsgEngine_ReadMessage(e, "SEG", tbuf, dbOut, 0); if (rv) { fprintf(stderr, "ERROR.\n"); GWEN_Buffer_Dump(tbuf, 2); return 2; } rv=GWEN_SyncIo_WriteForced(sioDb, (const uint8_t*) GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); GWEN_Buffer_free(xbuf); if (rv<0) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=GWEN_DB_WriteToIo(dbOut, sioDb, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(0, "here (%d)", rv); return 2; } /* append empty line to separate header from data */ rv=GWEN_SyncIo_WriteForced(sioDb, (const uint8_t*) "\n", 1); if (rv<0) { DBG_INFO(0, "here (%d)", rv); return rv; } } GWEN_Buffer_free(tbuf); } dbT=GWEN_DB_GetNextGroup(dbT); } /* close output layer */ if (outFile) { rv=GWEN_SyncIo_Disconnect(sioOut); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioOut); return 2; } GWEN_SyncIo_free(sioOut); } if (dbOutFile) { rv=GWEN_SyncIo_Disconnect(sioDb); if (rv<0) { DBG_INFO(AQHBCI_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sioDb); return 2; } GWEN_SyncIo_free(sioDb); } return 0; }
int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; const char *pinFile; int nonInteractive=0; const char *s; int rv; AB_BANKING *ab; GWEN_GUI *gui; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "pinfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "P", /* short option */ "pinfile", /* long option */ "Specify the PIN file", /* short description */ "Specify the PIN file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "nonInteractive", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "noninteractive", /* long option */ "Select non-interactive mode",/* short description */ "Select non-interactive mode.\n" /* long description */ "This automatically returns a confirmative answer to any non-critical\n" "message." }, { 0, GWEN_ArgsType_Int, "verbosity", 0, 10, "v", 0, "Increase the verbosity level", "Increase the verbosity level" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charset", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "charset", /* long option */ "Specify the output character set", /* short description */ "Specify the output character set" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; rv=GWEN_Init(); if (rv<0) { fprintf(stderr, "ERROR: Unable to init GWEN (%d).\n", rv); return 2; } GWEN_Logger_Open("aqpaypal-tool", "aqpaypal-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel("aqpaypal-tool", GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listusers:\n" " blurb " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" listaccounts:\n" " blurb " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" adduser:\n" " blurb " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" addaccount:\n" " blurb " "file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" setsecret:\n" " blurb " "file\n\n")); fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } gui=GWEN_Gui_CGui_new(); s=GWEN_DB_GetCharValue(db, "charset", 0, "ISO-8859-15"); GWEN_Gui_SetCharSet(gui, s); nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0); if (nonInteractive) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); else GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL); if (pinFile) { GWEN_DB_NODE *dbPins; dbPins=GWEN_DB_Group_new("pins"); if (GWEN_DB_ReadFile(dbPins, pinFile, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile); return 2; } /* set argument "persistent" to one in non-interactive mode */ GWEN_Gui_CGui_SetPasswordDb(gui, dbPins, nonInteractive); } GWEN_Gui_SetGui(gui); ab=AB_Banking_new("aqpaypal-tool", GWEN_DB_GetCharValue(db, "cfgfile", 0, 0), 0); AB_Gui_Extend(gui, ab); if (strcasecmp(cmd, "listusers")==0) { rv=listUsers(ab, db, argc, argv); } else if (strcasecmp(cmd, "listaccounts")==0) { rv=listAccounts(ab, db, argc, argv); } else if (strcasecmp(cmd, "adduser")==0) { rv=addUser(ab, db, argc, argv); } else if (strcasecmp(cmd, "addaccount")==0) { rv=addAccount(ab, db, argc, argv); } else if (strcasecmp(cmd, "setsecrets")==0) { rv=setSecrets(ab, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } return rv; }
int addAccount(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; AB_USER_LIST2 *ul; AB_USER *u=0; int rv; const char *userId; const char *accountName; const char *ownerName; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ownerName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "owner", /* long option */ "Specify the owner name", /* short description */ "Specify the owner name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "name", /* long option */ "Specify the account name (Konto-Name)", /* short description */ "Specify the account name (Konto-Name)" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, APY_PROVIDER_NAME); assert(pro); userId=GWEN_DB_GetCharValue(db, "userId", 0, "*"); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, "Account"); ownerName=GWEN_DB_GetCharValue(db, "ownerName", 0, NULL); ul=AB_Banking_FindUsers(ab, APY_PROVIDER_NAME, "*", "PAYPAL", userId, "*"); if (ul) { if (AB_User_List2_GetSize(ul)!=1) { DBG_ERROR(0, "Ambiguous customer specification"); AB_Banking_Fini(ab); return 3; } else { AB_USER_LIST2_ITERATOR *cit; cit=AB_User_List2_First(ul); assert(cit); u=AB_User_List2Iterator_Data(cit); AB_User_List2Iterator_free(cit); } AB_User_List2_free(ul); } if (!u) { DBG_ERROR(0, "No matching customer"); AB_Banking_Fini(ab); return 3; } else { AB_ACCOUNT *account; int rv; account=AB_Banking_CreateAccount(ab, APY_PROVIDER_NAME); assert(account); if (!ownerName) AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); else AB_Account_SetOwnerName(account, ownerName); if (accountName) AB_Account_SetAccountNumber(account, accountName); else AB_Account_SetAccountNumber(account, AB_User_GetUserId(u)); AB_Account_SetBankCode(account, "PAYPAL"); AB_Account_SetUser(account, u); AB_Account_SetSelectedUser(account, u); rv=AB_Banking_AddAccount(ab, account); if (rv) { DBG_ERROR(0, "Error adding account (%d)", rv); AB_Banking_Fini(ab); return 3; } } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
static int listBal(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; const char *outFile; AB_IMEXPORTER_CONTEXT *ctx=0; AB_IMEXPORTER_ACCOUNTINFO *iea=0; const char *bankId; const char *accountId; const char *bankName; const char *accountName; FILE *f; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account number", /* short description */ "Specify the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankName", /* name */ 0, /* minnum */ 1, /* maxnum */ "N", /* short option */ "bankname", /* long option */ "Specify the bank name", /* short description */ "Specify the bank name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "accountname", /* long option */ "Specify the account name", /* short description */ "Specify the account name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ctxFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "ctxfile", /* long option */ "Specify the file to store the context in", /* short description */ "Specify the file to store the context in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the file to store the data in", /* short description */ "Specify the file to store the data in" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); bankName=GWEN_DB_GetCharValue(db, "bankName", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); rv=readContext(ctxFile, &ctx, 1); if (rv<0) { DBG_ERROR(0, "Error reading context (%d)", rv); return 4; } /* open output stream */ outFile=GWEN_DB_GetCharValue(db, "outFile", 0, 0); if (outFile==0) f=stdout; else f=fopen(outFile, "w+"); if (f==0) { DBG_ERROR(0, "Error selecting output file: %s", strerror(errno)); return 4; } iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while(iea) { int matches=1; const char *s; if (matches && bankId) { s=AB_ImExporterAccountInfo_GetBankCode(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, bankId, 0)) matches=0; } if (matches && bankName) { s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s || !*s) s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, bankName, 0)) matches=0; } if (matches && accountId) { s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, accountId, 0)) matches=0; } if (matches && accountName) { s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s || !*s) s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, accountName, 0)) matches=0; } if (matches) { AB_ACCOUNT_STATUS *ast; ast=_getLastAccountStatus(iea); if (ast) { const GWEN_TIME *ti; const char *s; fprintf(f, "Account\t"); s=AB_ImExporterAccountInfo_GetBankCode(iea); if (!s) s=""; fprintf(f, "%s\t", s); s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (!s) s=""; fprintf(f, "%s\t", s); s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s) s=""; fprintf(f, "%s\t", s); s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s) s=""; fprintf(f, "%s\t", s); ti=AB_AccountStatus_GetTime(ast); _dumpBal(AB_AccountStatus_GetBookedBalance(ast), ti, f); _dumpBal(AB_AccountStatus_GetNotedBalance(ast), ti, f); fprintf(f, "\n"); } } /* if matches */ iea=AB_ImExporterContext_GetNextAccountInfo(ctx); } /* while */ if (outFile) { if (fclose(f)) { DBG_ERROR(0, "Error closing output file: %s", strerror(errno)); return 4; } } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_Open(GSA_LOGDOMAIN, "gsa", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(GSA_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #ifdef GSA_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your data files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("GWEN's Simple Archiver")); GWEN_Buffer_AppendString(ubuf, " (Gwenhywfar v" GWENHYWFAR_VERSION_FULL_STRING ")\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates an archive file" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" add:\n" " Add files and folders to an archive file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" list:\n" " List files and folders in an archive file\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" check:\n" " Check integrity of files and folders in an archive file\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "create")==0) { rv=createArchive(db, argc, argv); } else if (strcasecmp(cmd, "add")==0) { rv=add2Archive(db, argc, argv); } else if (strcasecmp(cmd, "list")==0) { rv=listArchive(db, argc, argv); } else if (strcasecmp(cmd, "check")==0) { rv=checkArchive(db, argc, argv); } else if (strcasecmp(cmd, "extract")==0) { rv=extractArchive(db, argc, argv); } else if (strcasecmp(cmd, "sign")==0) { rv=signArchive(db, argc, argv); } else if (strcasecmp(cmd, "verify")==0) { rv=verifyArchive(db, argc, argv); } else if (strcasecmp(cmd, "mkkey")==0) { rv=mkArchiveKey(db, argc, argv); } else if (strcasecmp(cmd, "rfi")==0) { rv=releaseFillIn(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; }
int mkPinList(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; GWEN_SYNCIO *sio; AB_USER_LIST2 *ul; int rv; const char *outFile; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the name of the output file", /* short description */ "Specify the name of the output file" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } outFile=GWEN_DB_GetCharValue(db, "outfile", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqebics"); assert(pro); if (outFile==0) { sio=GWEN_SyncIo_File_fromStdout(); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_DONTCLOSE); } else { sio=GWEN_SyncIo_File_new(outFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "Error opening output file: %s", strerror(errno)); return 4; } } GWEN_SyncIo_WriteLine(sio, "# This is a PIN file to be used " "with AqBanking"); GWEN_SyncIo_WriteLine(sio, "# Please insert the PINs/passwords " "for the users below"); ul=AB_Banking_FindUsers(ab, "aqebics", "*", "*", "*", "*"); if (ul) { AB_USER_LIST2_ITERATOR *uit; uit=AB_User_List2_First(ul); if (uit) { AB_USER *u; u=AB_User_List2Iterator_Data(uit); assert(u); while(u) { const char *s; GWEN_BUFFER *nbuf; int rv; GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "# User \""); s=AB_User_GetUserId(u); assert(s); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteString(sio, "\" at \""); s=AB_User_GetBankCode(u); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\""); nbuf=GWEN_Buffer_new(0, 256 ,0 ,1); rv=EBC_User_MkPasswdName(u, nbuf); if (rv==0) { GWEN_BUFFER *obuf; obuf=GWEN_Buffer_new(0, 256 ,0 ,1); if (GWEN_Text_EscapeToBufferTolerant(GWEN_Buffer_GetStart(nbuf), obuf)) { DBG_ERROR(0, "Error escaping name to buffer"); return 3; } GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(obuf)); GWEN_SyncIo_WriteLine(sio, " = \"\""); GWEN_Buffer_free(obuf); } GWEN_Buffer_free(nbuf); u=AB_User_List2Iterator_Next(uit); } AB_User_List2Iterator_free(uit); } AB_User_List2_free(ul); } rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { DBG_ERROR_ERR(0, rv); GWEN_SyncIo_free(sio); return 4; } GWEN_SyncIo_free(sio); rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int upload(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; AB_USER_LIST2 *ul; AB_USER *u=0; int rv; const char *bankId; const char *userId; const char *customerId; const char *requestType; const char *inFile; uint32_t guiid; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id", /* short description */ "Specify the user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "requestType", /* name */ 1, /* minnum */ 1, /* maxnum */ "r", /* short option */ "request", /* long option */ "Specify the request type", /* short description */ "Specify the request type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Char, "inFile", 1, 1, "f", "infile", "Specify the file to upload", "Specify the file to upload" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on onlineInit (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, EBC_PROVIDER_NAME); assert(pro); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); userId=GWEN_DB_GetCharValue(db, "userId", 0, "*"); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, "*"); requestType=GWEN_DB_GetCharValue(db, "requestType", 0, NULL); inFile=GWEN_DB_GetCharValue(db, "inFile", 0, NULL); ul=AB_Banking_FindUsers(ab, EBC_PROVIDER_NAME, "de", bankId, userId, customerId); if (ul) { if (AB_User_List2_GetSize(ul)!=1) { DBG_ERROR(0, "Ambiguous customer specification"); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 3; } else { AB_USER_LIST2_ITERATOR *cit; cit=AB_User_List2_First(ul); assert(cit); u=AB_User_List2Iterator_Data(cit); AB_User_List2Iterator_free(cit); } AB_User_List2_free(ul); } if (!u) { DBG_ERROR(0, "No matching customer"); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 3; } else { GWEN_BUFFER *inBuffer; inBuffer=GWEN_Buffer_new(0, 1024, 0, 1); rv=readFile(inFile, inBuffer); if (rv<0) { DBG_ERROR(0, "Error reading data file (%d)", rv); GWEN_Buffer_free(inBuffer); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 1; } guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send " "to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Upload(pro, u, requestType, (const uint8_t*)GWEN_Buffer_GetStart(inBuffer), GWEN_Buffer_GetUsedBytes(inBuffer), 1); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending upload request (%d)", rv); AB_Banking_OnlineFini(ab); AB_Banking_Fini(ab); return 4; } else { fprintf(stderr, "Upload request sent.\n"); } GWEN_Buffer_free(inBuffer); } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on online deinit (%d)\n", rv); AB_Banking_Fini(ab); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } fprintf(stderr, "Upload request ok.\n"); return 0; }
int main(int argc, char **argv) { int rv; GWEN_DB_NODE *db; const char *s; LC_CLIENT *cl; LC_CLIENT_RESULT res; GWEN_GUI *gui; int v; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, prg_args, db); if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Args_Usage(prg_args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "Could not generate usage string.\n"); GWEN_Buffer_free(ubuf); return RETURNVALUE_PARAM; } usage(argv[0], GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv<1) { fprintf(stderr, "ERROR: Error in argument list (%d)\n", rv); return RETURNVALUE_PARAM; } v=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); if (v<2) GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE); /* get command */ s=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!s) { fprintf(stderr, "No command given.\n"); GWEN_DB_Group_free(db); return RETURNVALUE_PARAM; } cl=LC_Client_new("kvkcard", PROGRAM_VERSION); res=LC_Client_Init(cl); if (res!=LC_Client_ResultOk) { showError(0, res, "Init"); return RETURNVALUE_SETUP; } /* handle command */ if (strcasecmp(s, "read")==0) { rv=kvkRead(cl, db); } else if (strcasecmp(s, "daemon")==0) { fprintf(stderr, "KVK daemon no longer supported.\n"); return RETURNVALUE_SETUP; } else if (strcasecmp(s, "rdvd")==0) { rv=rdvd(cl, db); } else if (strcasecmp(s, "rdpd")==0) { rv=rdpd(cl, db); } else if (strcasecmp(s, "psvd")==0) { rv=psvd(cl, db); } else { fprintf(stderr, "Unknown command \"%s\"", s); rv=RETURNVALUE_PARAM; } LC_Client_free(cl); GWEN_DB_Group_free(db); return 0; }
int addMedium(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; int rv; const char *mediumName; const char *mediumType; GWEN_CRYPT_TOKEN_DEVICE dev; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsTypeChar, /* type */ "mediumType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "mediumtype", /* long option */ "Specify the medium type (file, card or pintan)", /* short description */ "Specify the medium type (file, card or pintan)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsTypeChar, /* type */ "mediumName", /* name */ 0, /* minnum */ 1, /* maxnum */ "m", /* short option */ "mediumname", /* long option */ "Specify the medium name", /* short description */ "Specify the medium name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsTypeInt, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutTypeTXT)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqebics"); assert(pro); mediumName=GWEN_DB_GetCharValue(db, "mediumName", 0, 0); if (mediumName) mediumType=GWEN_DB_GetCharValue(db, "mediumType", 0, "file"); else mediumType=GWEN_DB_GetCharValue(db, "mediumType", 0, "card"); if (strcasecmp(mediumType, "pintan")==0) dev=GWEN_CryptToken_Device_None; else { dev=GWEN_CryptToken_Device_fromString(mediumType); if (dev==GWEN_CryptToken_Device_Unknown) { DBG_ERROR(0, "Unknown device type name \"%s\"", mediumType); return 1; } } rv=EBC_Provider_AddMedium(pro, dev, mediumName); if (rv) { DBG_ERROR(0, "Could not add medium \"%s\"", mediumName); return 3; } rv=AB_Banking_Fini(ab); if (rv) { DBG_ERROR(0, "Error on fini (%d)", rv); return 5; } return 0; }
int AH_Control_AddAccount(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_USER *u=0; int rv; uint32_t userId; const char *bankId; const char *accountName; const char *accountId; const char *ownerName; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 1, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ownerName", /* name */ 0, /* minnum */ 1, /* maxnum */ "N" /* short option */ "owner", /* long option */ "Specify the owner name", /* short description */ "Specify the owner name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "name", /* long option */ "Specify the account name (Konto-Name)", /* short description */ "Specify the account name (Konto-Name)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account id (Kontonummer)", /* short description */ "Specify the account id (Kontonummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } userId=GWEN_DB_GetIntValue(db, "userId", 0, 0); if (userId<1) { fprintf(stderr, "ERROR: Invalid user id\n"); return 1; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*"); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*"); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, "Account"); ownerName=GWEN_DB_GetCharValue(db, "ownerName", 0, NULL); rv=AB_Provider_HasUser(pro, userId); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } rv=AB_Provider_GetUser(pro, userId, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) userId); return 2; } else { AB_ACCOUNT *account; AB_BANKINFO_LIST2 *bl; AB_BANKINFO_LIST2_ITERATOR *bit; AB_BANKINFO *tbi; AB_BANKINFO *bi; int rv; bl=AB_BankInfo_List2_new(); tbi=AB_BankInfo_new(); AB_BankInfo_SetBankId(tbi, bankId); rv=AB_Banking_GetBankInfoByTemplate(AB_Provider_GetBanking(pro), "de", tbi, bl); if (rv) { fprintf(stderr, "Error looking for bank info: %d\n", rv); AB_User_free(u); return 3; } bit=AB_BankInfo_List2_First(bl); if (bit) { bi=AB_BankInfo_List2Iterator_Data(bit); assert(bi); AB_BankInfo_List2Iterator_free(bit); } else { bi=NULL; fprintf(stderr, "Could not find bank with id %s\n", bankId); } AB_BankInfo_List2_free(bl); account=AB_Provider_CreateAccountObject(pro); assert(account); if (!ownerName) AB_Account_SetOwnerName(account, AB_User_GetUserName(u)); else AB_Account_SetOwnerName(account, ownerName); AB_Account_SetAccountNumber(account, accountId); if (accountName) AB_Account_SetAccountName(account, accountName); AB_Account_SetBankCode(account, bankId); if (bi) AB_Account_SetBankName(account, AB_BankInfo_GetBankName(bi)); AB_Account_SetUserId(account, userId); /* add account to system */ rv=AB_Provider_AddAccount(pro, account, 1); /* lock corresponding user */ if (rv<0) { DBG_ERROR(0, "Error adding account (%d)", rv); AB_Account_free(account); AB_User_free(u); return 3; } AB_Account_free(account); AB_User_free(u); } return 0; }
int addUser(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; AB_PROVIDER *pro; int rv; GWEN_BUFFER *nameBuffer=NULL; const char *tokenName; const char *tokenType; const char *bankId; const char *userId; const char *customerId; const char *server; const char *userName; int hbciVersion; int rdhType; uint32_t cid; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userName", /* name */ 1, /* minnum */ 1, /* maxnum */ "N", /* short option */ "username", /* long option */ "Specify the user name", /* short description */ "Specify the user name (not the userid!)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the user id (Benutzerkennung)", /* short description */ "Specify the user id (Benutzerkennung)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "customerId", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "customer", /* long option */ "Specify the customer id (Kundennummer)", /* short description */ "Specify the customer id (Kundennummer)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "tokentype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tokenname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "serverAddr", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "server", /* long option */ "Specify the server URL", /* short description */ "Specify the server URL" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "context", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "context", /* long option */ "Select a context on the medium", /* short description */ "Select a context on the medium" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "hbciversion", 0, 1, 0, "hbciversion", "Select the HBCI version", "Select the HBCI protocol version" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, GWEN_ArgsType_Int, "rdhType", 0, 1, 0, "rdhtype", "Select the RDH profile type (1, 2, 3, 5, 10)", "Select the RDH profile type (1, 2, 3, 5, 10)" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } pro=AB_Banking_GetProvider(ab, "aqhbci"); assert(pro); tokenType=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); tokenName=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); userId=GWEN_DB_GetCharValue(db, "userId", 0, 0); customerId=GWEN_DB_GetCharValue(db, "customerId", 0, 0); server=GWEN_DB_GetCharValue(db, "serverAddr", 0, 0); cid=GWEN_DB_GetIntValue(db, "context", 0, 1); hbciVersion=GWEN_DB_GetIntValue(db, "hbciVersion", 0, 0); rdhType=GWEN_DB_GetIntValue(db, "rdhType", 0, 1); userName=GWEN_DB_GetCharValue(db, "userName", 0, 0); assert(userName); /* generic check for some arguments */ if (hbciVersion>0 && rdhType>1) { if (hbciVersion<300 && rdhType>1) { DBG_ERROR(0, "RDH Types 2 and above only work with HBCI version 300 or later"); return 1; } } if (hbciVersion>0) { switch(hbciVersion) { case 201: case 210: case 220: case 300: /* supported */ break; default: DBG_ERROR(0, "HBCI/FinTS version %d not supported", hbciVersion); return 1; } } if (rdhType>0) { switch(rdhType) { case 1: case 2: case 10: /* supported */ break; case 3: case 4: case 5: case 6: case 7: case 8: case 9: default: DBG_ERROR(0, "RDH type %d not supported", rdhType); return 1; } } if (1) { const char *lbankId; const char *luserId; const char *lcustomerId; const char *lserverAddr; AH_CRYPT_MODE cm; GWEN_URL *url; GWEN_CRYPT_TOKEN_CONTEXT *ctx=NULL; AB_USER *user; if (strcasecmp(tokenType, "pintan")==0) { lbankId=bankId; luserId=userId; lcustomerId=customerId?customerId:luserId; lserverAddr=server; cm=AH_CryptMode_Pintan; } else { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; const GWEN_CRYPT_TOKEN_CONTEXT *cctx; const GWEN_CRYPT_TOKEN_KEYINFO *ki; uint32_t keyId; GWEN_CRYPT_CRYPTALGOID algo; if (cid==0) { DBG_ERROR(0, "No context given."); return 1; } /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, tokenType); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tokenName); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } /* open crypt token */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token (%d)", rv); GWEN_Crypt_Token_free(ct); return 3; } /* get real token name */ nameBuffer=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(nameBuffer, GWEN_Crypt_Token_GetTokenName(ct)); tokenName=GWEN_Buffer_GetStart(nameBuffer); cctx=GWEN_Crypt_Token_GetContext(ct, cid, 0); if (cctx==NULL) { DBG_ERROR(0, "Context %02x not found", cid); GWEN_Buffer_free(nameBuffer); GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return 3; } ctx=GWEN_Crypt_Token_Context_dup(cctx); lbankId=bankId?bankId:GWEN_Crypt_Token_Context_GetServiceId(ctx); luserId=userId?userId:GWEN_Crypt_Token_Context_GetUserId(ctx); lcustomerId=customerId?customerId:luserId; lserverAddr=server?server:GWEN_Crypt_Token_Context_GetAddress(ctx); /* determine crypt mode */ keyId=GWEN_Crypt_Token_Context_GetSignKeyId(ctx); if (keyId==0) keyId=GWEN_Crypt_Token_Context_GetVerifyKeyId(ctx); if (keyId==0) keyId=GWEN_Crypt_Token_Context_GetEncipherKeyId(ctx); if (keyId==0) keyId=GWEN_Crypt_Token_Context_GetDecipherKeyId(ctx); GWEN_Crypt_Token_Context_free(ctx); if (keyId==0) { DBG_ERROR(0, "No keys, unable to determine crypt mode"); GWEN_Buffer_free(nameBuffer); GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return 3; } ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, 0xffffffff, 0); if (ki==NULL) { DBG_ERROR(0, "Could not get keyinfo for key %d, " "unable to determine crypt mode", keyId); GWEN_Buffer_free(nameBuffer); GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return 3; } algo=GWEN_Crypt_Token_KeyInfo_GetCryptAlgoId(ki); if (algo==GWEN_Crypt_CryptAlgoId_Des3K) cm=AH_CryptMode_Ddv; else if (algo==GWEN_Crypt_CryptAlgoId_Rsa) cm=AH_CryptMode_Rdh; else { DBG_ERROR(0, "Unexpected crypt algorithm \"%s\", " "unable to determine crypt mode", GWEN_Crypt_CryptAlgoId_toString(algo)); GWEN_Buffer_free(nameBuffer); GWEN_Crypt_Token_Close(ct, 1, 0); GWEN_Crypt_Token_free(ct); return 3; } rv=GWEN_Crypt_Token_Close(ct, 0, 0); GWEN_Crypt_Token_free(ct); if (rv) { DBG_ERROR(0, "Could not close token (%d)", rv); GWEN_Buffer_free(nameBuffer); return 3; } } if (!lbankId || !*lbankId) { DBG_ERROR(0, "No bank id stored and none given"); GWEN_Buffer_free(nameBuffer); return 3; } if (!luserId || !*luserId) { DBG_ERROR(0, "No user id (Benutzerkennung) stored and none given"); GWEN_Buffer_free(nameBuffer); return 3; } user=AB_Banking_FindUser(ab, AH_PROVIDER_NAME, "de", lbankId, luserId, lcustomerId); if (user) { DBG_ERROR(0, "User %s already exists", luserId); return 3; } user=AB_Banking_CreateUser(ab, AH_PROVIDER_NAME); assert(user); AB_User_SetUserName(user, userName); AB_User_SetCountry(user, "de"); AB_User_SetBankCode(user, lbankId); AB_User_SetUserId(user, luserId); AB_User_SetCustomerId(user, lcustomerId); AH_User_SetTokenType(user, tokenType); AH_User_SetTokenName(user, tokenName); AH_User_SetTokenContextId(user, cid); AH_User_SetCryptMode(user, cm); if (rdhType>0) AH_User_SetRdhType(user, rdhType); GWEN_Buffer_free(nameBuffer); if (hbciVersion==0) { if (cm==AH_CryptMode_Pintan) AH_User_SetHbciVersion(user, 220); else { if (rdhType>1) AH_User_SetHbciVersion(user, 300); else AH_User_SetHbciVersion(user, 210); } } else { AH_User_SetHbciVersion(user, hbciVersion); } /* try to get server address from database if still unknown */ if (!lserverAddr || *lserverAddr==0) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (getBankUrl(ab, cm, lbankId, tbuf)) { DBG_INFO(0, "Could not find server address for \"%s\"", lbankId); } if (GWEN_Buffer_GetUsedBytes(tbuf)==0) { DBG_ERROR(0, "No address given and none available in internal db"); return 3; } url=GWEN_Url_fromString(GWEN_Buffer_GetStart(tbuf)); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\" in internal db", GWEN_Buffer_GetStart(tbuf)); return 3; } GWEN_Buffer_free(tbuf); } else { /* set address */ url=GWEN_Url_fromString(lserverAddr); if (url==NULL) { DBG_ERROR(0, "Bad URL \"%s\"", lserverAddr); return 3; } } if (cm==AH_CryptMode_Pintan) { GWEN_Url_SetProtocol(url, "https"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 443); } else { GWEN_Url_SetProtocol(url, "hbci"); if (GWEN_Url_GetPort(url)==0) GWEN_Url_SetPort(url, 3000); } AH_User_SetServerUrl(user, url); GWEN_Url_free(url); if (cm==AH_CryptMode_Ddv) AH_User_SetStatus(user, AH_UserStatusEnabled); AB_Banking_AddUser(ab, user); } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int listAccounts(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; AB_ACCOUNT_LIST2 *al; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } rv=AB_Banking_OnlineInit(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } al=AB_Banking_FindAccounts(ab, EBC_PROVIDER_NAME, "*", "*", "*", "*"); if (al) { AB_ACCOUNT_LIST2_ITERATOR *ait; ait=AB_Account_List2_First(al); if (ait) { AB_ACCOUNT *a; int i=0; a=AB_Account_List2Iterator_Data(ait); assert(a); while(a) { fprintf(stdout, "Account %d: Bank: %s Account Number: %s\n", i++, AB_Account_GetBankCode(a), AB_Account_GetAccountNumber(a)); a=AB_Account_List2Iterator_Next(ait); } AB_Account_List2Iterator_free(ait); } AB_Account_List2_free(al); } rv=AB_Banking_OnlineFini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
int sendHPD(AB_PROVIDER *pro, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; uint32_t uid; AB_USER *u=NULL; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "userId", /* name */ 0, /* minnum */ 1, /* maxnum */ "u", /* short option */ "user", /* long option */ "Specify the unique user id", /* short description */ "Specify the unique user id" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* doit */ uid=(uint32_t) GWEN_DB_GetIntValue(db, "userId", 0, 0); if (uid==0) { fprintf(stderr, "ERROR: Invalid or missing unique user id\n"); return 1; } rv=AB_Provider_GetUser(pro, uid, 1, 1, &u); if (rv<0) { fprintf(stderr, "ERROR: User with id %lu not found\n", (unsigned long int) uid); return 2; } else { if ((EBC_User_GetStatus(u)==EBC_UserStatus_Enabled)) { uint32_t guiid; guiid=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_ALLOW_SUBLEVELS | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_LOG | GWEN_GUI_PROGRESS_ALWAYS_SHOW_LOG | GWEN_GUI_PROGRESS_KEEP_OPEN | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Executing Request"), I18N("Now the request is send to the credit institute."), GWEN_GUI_PROGRESS_NONE, 0); rv=EBC_Provider_Send_HPD(pro, u, 1); GWEN_Gui_ProgressEnd(guiid); if (rv) { DBG_ERROR(0, "Error sending HPD request (%d)", rv); return 4; } else { fprintf(stderr, "HPD request sent.\n"); } } } fprintf(stderr, "HPD request ok.\n"); return 0; }