From: Alexander P. <ale...@us...> - 2008-11-30 17:12:29
|
Build Version : T2.5.0.21503 Firebird 2.5 Alpha 1 (writeBuildNum.sh,v 1.21664 2008/11/30 17:11:54 alexpeshkof ) Update of /cvsroot/firebird/firebird2/src/utilities In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv30198/src/utilities Modified Files: fbsvcmgr.cpp nbackup.cpp Log Message: Implemented CORE-1667: Reading password from file/stdin Index: fbsvcmgr.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/utilities/fbsvcmgr.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -b -U3 -r1.14 -r1.15 --- fbsvcmgr.cpp 20 Nov 2008 17:29:36 -0000 1.14 +++ fbsvcmgr.cpp 30 Nov 2008 17:11:51 -0000 1.15 @@ -89,6 +89,35 @@ return true; } +// add string tag from file (fetch password) + +bool putFileArgument(char**& av, ClumpletWriter& spb, unsigned int tag) +{ + if (! *av) + return false; + + const char* s = 0; + switch(fb_utils::fetchPassword(*av, s)) + { + case fb_utils::FETCH_PASS_OK: + break; + case fb_utils::FETCH_PASS_FILE_OPEN_ERROR: + (Arg::Gds(isc_fbsvcmgr_fp_open) << *av << Arg::OsError()).raise(); + break; + case fb_utils::FETCH_PASS_FILE_READ_ERROR: + (Arg::Gds(isc_fbsvcmgr_fp_read) << *av << Arg::OsError()).raise(); + break; + case fb_utils::FETCH_PASS_FILE_EMPTY: + (Arg::Gds(isc_fbsvcmgr_fp_empty) << *av).raise(); + break; + } + + spb.insertString(tag, s, strlen(s)); + ++av; + + return true; +} + // add some special format tags to spb bool putSpecTag(char**& av, ClumpletWriter& spb, unsigned int tag, @@ -231,6 +260,7 @@ {"user", putStringArgument, 0, isc_spb_user_name, 0}, {"user_name", putStringArgument, 0, isc_spb_user_name, 0}, {"password", putStringArgument, 0, isc_spb_password, 0}, + {"fetch_password", putFileArgument, 0, isc_spb_password, 0}, {"trusted_auth", putSingleTag, 0, isc_spb_trusted_auth, 0}, {0, 0, 0, 0, 0} }; Index: nbackup.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/utilities/nbackup.cpp,v retrieving revision 1.71 retrieving revision 1.72 diff -b -U3 -r1.71 -r1.72 --- nbackup.cpp 22 Nov 2008 07:51:42 -0000 1.71 +++ nbackup.cpp 30 Nov 2008 17:11:51 -0000 1.72 @@ -98,6 +98,7 @@ " -R <database> [<file0> [<file1>...]] Restore incremental backup\n" " -U <user> User name\n" " -P <password> Password\n" + " -FE <file> FEtch password from file\n" " -T Do not run database triggers\n" " -S Print database size in pages after lock\n" "Notes:\n" @@ -1095,7 +1096,7 @@ int level; bool print_size = false; string trustedUser; - bool trustedRole; + bool trustedRole = false; // Read global command line parameters for (int itr = 1; itr < argc; ++itr) { @@ -1137,11 +1138,40 @@ uSvc->hidePasswd(argv, itr); break; + case 'E': + if (++itr >= argc) + missing_parameter_for_switch(uSvc, argv[itr - 1]); + + password = argv[itr]; + uSvc->hidePasswd(argv, itr); + break; + case 'T': run_db_triggers = false; break; case 'F': + if (UPPER(argv[itr][2]) == 'E') + { + if (uSvc->isService()) + { + usage(uSvc, "Fetch password can't be used in service mode"); + break; + } + + if (++itr >= argc) + missing_parameter_for_switch(uSvc, argv[itr - 1]); + + const char* passwd = 0; + if (fb_utils::fetchPassword(argv[itr], passwd) != fb_utils::FETCH_PASS_OK) + { + usage(uSvc, "Error working with password file"); + break; + } + password = passwd; + break; + } + if (op != nbNone) singleAction(uSvc); |