mirror of https://github.com/aria2/aria2
				
				
				
			Erase user and password specified in command-line from argv.
The user and password is masked with '*'.pull/1/head
							parent
							
								
									211c4ea9f4
								
							
						
					
					
						commit
						2c0476e6d9
					
				|  | @ -54,7 +54,8 @@ NameMatchOptionHandler::NameMatchOptionHandler | |||
|     id_(0), | ||||
|     argType_(argType), | ||||
|     shortName_(shortName), | ||||
|     hidden_(false) | ||||
|     hidden_(false), | ||||
|     eraseAfterParse_(false) | ||||
| {} | ||||
| 
 | ||||
| NameMatchOptionHandler::~NameMatchOptionHandler() {} | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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); | ||||
|   } | ||||
|   { | ||||
|  |  | |||
|  | @ -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
 | ||||
|  |  | |||
|  | @ -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
 | ||||
|  |  | |||
|  | @ -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"; | ||||
|   } | ||||
|  |  | |||
|  | @ -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); | ||||
| 
 | ||||
|  |  | |||
|  | @ -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[]) | ||||
| { | ||||
|  |  | |||
|  | @ -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()); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Tatsuhiro Tsujikawa
						Tatsuhiro Tsujikawa