summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-04-22 23:38:59 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-04-22 23:38:59 +0900
commit2c0476e6d9033cdf58b9899b165bbddd974e88db (patch)
tree1476e6d5af13b4e90010a6011f5214273d248155 /src
parent211c4ea9f45db6482f76ccc9945ee19fc78f7e9d (diff)
Erase user and password specified in command-line from argv.
The user and password is masked with '*'.
Diffstat (limited to 'src')
-rw-r--r--src/NameMatchOptionHandler.cc3
-rw-r--r--src/NameMatchOptionHandler.h12
-rw-r--r--src/OptionHandler.h6
-rw-r--r--src/OptionHandlerFactory.cc16
-rw-r--r--src/OptionHandlerImpl.cc17
-rw-r--r--src/OptionHandlerImpl.h4
-rw-r--r--src/OptionParser.cc7
-rw-r--r--src/OptionParser.h2
-rw-r--r--src/main.cc2
-rw-r--r--src/option_processing.cc2
10 files changed, 66 insertions, 5 deletions
diff --git a/src/NameMatchOptionHandler.cc b/src/NameMatchOptionHandler.cc
index 0917c4b7..d517f9d5 100644
--- a/src/NameMatchOptionHandler.cc
+++ b/src/NameMatchOptionHandler.cc
@@ -54,7 +54,8 @@ NameMatchOptionHandler::NameMatchOptionHandler
id_(0),
argType_(argType),
shortName_(shortName),
- hidden_(false)
+ hidden_(false),
+ eraseAfterParse_(false)
{}
NameMatchOptionHandler::~NameMatchOptionHandler() {}
diff --git a/src/NameMatchOptionHandler.h b/src/NameMatchOptionHandler.h
index 99704e81..91c6f418 100644
--- a/src/NameMatchOptionHandler.h
+++ b/src/NameMatchOptionHandler.h
@@ -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;
diff --git a/src/OptionHandler.h b/src/OptionHandler.h
index 8445a6f5..725cf22a 100644
--- a/src/OptionHandler.h
+++ b/src/OptionHandler.h
@@ -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
diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc
index 82c43ef0..4e8d3ed3 100644
--- a/src/OptionHandlerFactory.cc
+++ b/src/OptionHandlerFactory.cc
@@ -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);
}
{
diff --git a/src/OptionHandlerImpl.cc b/src/OptionHandlerImpl.cc
index 7295c9c5..23fce6a1 100644
--- a/src/OptionHandlerImpl.cc
+++ b/src/OptionHandlerImpl.cc
@@ -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
diff --git a/src/OptionHandlerImpl.h b/src/OptionHandlerImpl.h
index 11673211..ddafcebe 100644
--- a/src/OptionHandlerImpl.h
+++ b/src/OptionHandlerImpl.h
@@ -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
diff --git a/src/OptionParser.cc b/src/OptionParser.cc
index 15e49fa7..c2a00eeb 100644
--- a/src/OptionParser.cc
+++ b/src/OptionParser.cc
@@ -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";
}
diff --git a/src/OptionParser.h b/src/OptionParser.h
index d06e01d8..0c767229 100644
--- a/src/OptionParser.h
+++ b/src/OptionParser.h
@@ -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);
diff --git a/src/main.cc b/src/main.cc
index 81e5391a..fd621a2b 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -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[])
{
diff --git a/src/option_processing.cc b/src/option_processing.cc
index 97b2aa5b..4fad4465 100644
--- a/src/option_processing.cc
+++ b/src/option_processing.cc
@@ -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());