Erase user and password specified in command-line from argv.

The user and password is masked with '*'.
pull/1/head
Tatsuhiro Tsujikawa 2011-04-22 23:38:59 +09:00
parent 211c4ea9f4
commit 2c0476e6d9
10 changed files with 66 additions and 5 deletions

View File

@ -54,7 +54,8 @@ NameMatchOptionHandler::NameMatchOptionHandler
id_(0),
argType_(argType),
shortName_(shortName),
hidden_(false)
hidden_(false),
eraseAfterParse_(false)
{}
NameMatchOptionHandler::~NameMatchOptionHandler() {}

View File

@ -63,6 +63,8 @@ protected:
bool hidden_;
bool eraseAfterParse_;
virtual void parseArg(Option& option, const std::string& arg) = 0;
public:
NameMatchOptionHandler(const std::string& optName,
@ -127,6 +129,16 @@ public:
{
return argType_;
}
virtual bool getEraseAfterParse() const
{
return eraseAfterParse_;
}
virtual void setEraseAfterParse(bool eraseAfterParse)
{
eraseAfterParse_ = eraseAfterParse;
}
};
typedef SharedHandle<NameMatchOptionHandler> NameMatchOptionHandlerHandle;

View File

@ -94,6 +94,12 @@ public:
virtual int getOptionID() const = 0;
virtual void setOptionID(int id) = 0;
// Returns true if option value should be erased from argv to
// prevent it from appearing in the output of ps.
virtual bool getEraseAfterParse() const = 0;
virtual void setEraseAfterParse(bool eraseAfterParse) = 0;
};
class OptionHandlerNameLesser:public std::binary_function

View File

@ -619,6 +619,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
(PREF_RPC_USER,
TEXT_RPC_USER));
op->addTag(TAG_RPC);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -626,6 +627,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
(PREF_RPC_PASSWD,
TEXT_RPC_PASSWD));
op->addTag(TAG_RPC);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -676,6 +678,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_XML_RPC_USER)),
PREF_RPC_USER));
op->addTag(TAG_RPC);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -687,6 +690,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_XML_RPC_PASSWD)),
PREF_RPC_PASSWD));
op->addTag(TAG_RPC);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
// HTTP/FTP options
@ -971,6 +975,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_HTTP_PASSWD));
op->addTag(TAG_BASIC);
op->addTag(TAG_HTTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -979,6 +984,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_HTTP_USER));
op->addTag(TAG_BASIC);
op->addTag(TAG_HTTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1055,6 +1061,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_FTP_PASSWD));
op->addTag(TAG_BASIC);
op->addTag(TAG_FTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1091,6 +1098,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_FTP_USER));
op->addTag(TAG_BASIC);
op->addTag(TAG_FTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1117,6 +1125,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_HTTP_PROXY_PASSWD,
NO_DEFAULT_VALUE));
op->addTag(TAG_HTTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1125,6 +1134,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_HTTP_PROXY_USER,
NO_DEFAULT_VALUE));
op->addTag(TAG_HTTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1143,6 +1153,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
NO_DEFAULT_VALUE));
op->addTag(TAG_HTTP);
op->addTag(TAG_HTTPS);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1152,6 +1163,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
NO_DEFAULT_VALUE));
op->addTag(TAG_HTTP);
op->addTag(TAG_HTTPS);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1168,6 +1180,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_FTP_PROXY_PASSWD,
NO_DEFAULT_VALUE));
op->addTag(TAG_FTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1176,6 +1189,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
TEXT_FTP_PROXY_USER,
NO_DEFAULT_VALUE));
op->addTag(TAG_FTP);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1196,6 +1210,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_FTP);
op->addTag(TAG_HTTP);
op->addTag(TAG_HTTPS);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{
@ -1206,6 +1221,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_FTP);
op->addTag(TAG_HTTP);
op->addTag(TAG_HTTPS);
op->setEraseAfterParse(true);
handlers.push_back(op);
}
{

View File

@ -115,6 +115,13 @@ char NullOptionHandler::getShortName() const
return 0;
}
bool NullOptionHandler::getEraseAfterParse() const
{
return false;
}
void NullOptionHandler::setEraseAfterParse(bool eraseAfterParse) {}
BooleanOptionHandler::BooleanOptionHandler
(const std::string& optName,
const std::string& description,
@ -814,4 +821,14 @@ void DeprecatedOptionHandler::setOptionID(int id)
depOptHandler_->setOptionID(id);
}
bool DeprecatedOptionHandler::getEraseAfterParse() const
{
return depOptHandler_->getEraseAfterParse();
}
void DeprecatedOptionHandler::setEraseAfterParse(bool eraseAfterParse)
{
depOptHandler_->setEraseAfterParse(eraseAfterParse);
}
} // namespace aria2

View File

@ -65,6 +65,8 @@ public:
virtual int getOptionID() const;
virtual void setOptionID(int id);
virtual char getShortName() const;
virtual bool getEraseAfterParse() const;
virtual void setEraseAfterParse(bool eraseAfterParse);
};
class BooleanOptionHandler : public NameMatchOptionHandler {
@ -315,6 +317,8 @@ public:
virtual char getShortName() const;
virtual int getOptionID() const;
virtual void setOptionID(int id);
virtual bool getEraseAfterParse() const;
virtual void setEraseAfterParse(bool eraseAfterParse);
};
} // namespace aria2

View File

@ -138,7 +138,7 @@ std::string createOptstring(InputIterator first, InputIterator last)
void OptionParser::parseArg
(std::ostream& out, std::vector<std::string>& nonopts,
int argc, char* const argv[])
int argc, char* argv[])
{
size_t numPublicOption = countPublicOption(optionHandlers_.begin(),
optionHandlers_.end());
@ -165,6 +165,11 @@ void OptionParser::parseArg
out << op->getName() << "=";
if(optarg) {
out << optarg;
if(op->getEraseAfterParse()) {
for(char* p = optarg; *p != '\0'; ++p) {
*p = '*';
}
}
}
out << "\n";
}

View File

@ -69,7 +69,7 @@ public:
// NAME=VALUE format. Non-option strings are stored in nonopts.
// Throws Exception when an unrecognized option is found.
void parseArg(std::ostream& out, std::vector<std::string>& nonopts,
int argc, char* const argv[]);
int argc, char* argv[]);
void parse(Option& option, std::istream& ios);

View File

@ -174,7 +174,7 @@ void showFiles
#endif // ENABLE_BITTORRENT || ENABLE_METALINK
extern void option_processing(Option& option, std::vector<std::string>& uris,
int argc, char* const argv[]);
int argc, char* argv[]);
error_code::Value main(int argc, char* argv[])
{

View File

@ -85,7 +85,7 @@ void overrideWithEnv(Option& op, const OptionParser& optionParser,
} // namespace
void option_processing(Option& op, std::vector<std::string>& uris,
int argc, char* const argv[])
int argc, char* argv[])
{
OptionParser oparser;
oparser.setOptionHandlers(OptionHandlerFactory::createOptionHandlers());