verify username, password, domain from configuration
authorRalf Jung <post@ralfj.de>
Fri, 9 Aug 2013 19:43:01 +0000 (21:43 +0200)
committerRalf Jung <post@ralfj.de>
Fri, 9 Aug 2013 19:43:01 +0000 (21:43 +0200)
CMakeLists.txt
dyn-nsupdate.cpp

index 5879f85e455ba63aded2627b2ccd6ffff4207f74..f714aebe173750e8296a5844a823d26817c71b64 100644 (file)
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 2.6) 
 project(Dyn-NSupdate)
 
 cmake_minimum_required(VERSION 2.6) 
 project(Dyn-NSupdate)
 
-FIND_PACKAGE( Boost 1.40 REQUIRED )
+FIND_PACKAGE( Boost 1.40 COMPONENTS regex REQUIRED )
 INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
 
 set(DYNNSUPDATE_CONFIG_FILE "/some/config/file" CACHE FILEPATH "Choose the file dyn-nsupdate reads its configuration from (for security reasons, this is hard-coded in the binary)")
 INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
 
 set(DYNNSUPDATE_CONFIG_FILE "/some/config/file" CACHE FILEPATH "Choose the file dyn-nsupdate reads its configuration from (for security reasons, this is hard-coded in the binary)")
index 745595df3d1abf6e4b02872a6c4c1b2e9f358320..cdd1dc493db31a9859108ddadd94e9328ba7bfac 100644 (file)
@@ -1,16 +1,56 @@
 #include <iostream>
 #include <fstream>
 
 #include <iostream>
 #include <fstream>
 
+#include <boost/regex.hpp>
 #include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/ini_parser.hpp>
 
 #include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/ini_parser.hpp>
 
-using namespace boost::property_tree;
+using namespace boost;
 
 
-int main(int, const char **)
+int main(int argc, const char ** argv)
 {
 {
-       ptree config;
-       ini_parser::read_ini(CONFIG_FILE, config);
+       static const regex regex_ip("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}");
+       static const regex regex_user("[a-zA-Z]+");
+       
+       
+       if (argc != 5) {
+               std::cerr << "Usage: " << argv[0] << " <username> <password> <domain> <IP address>" << std::endl;
+               return 1;
+       }
+       
+       /* Obtain and validate inpit */
+       std::string user = argv[1];
+       std::string password = argv[2];
+       std::string domain = argv[3];
+       std::string ip = argv[4];
+       
+       if (!regex_match(ip, regex_ip)) {
+               std::cerr << "Invalid IP address " << ip << "." << std::endl;
+               return 1;
+       }
+       if (!regex_match(user, regex_user)) {
+               std::cerr << "Invalid username " << user << "." << std::endl;
+               return 1;
+       }
+       
+       /* read configuration */
+       property_tree::ptree config;
+       property_tree::ini_parser::read_ini(CONFIG_FILE, config);
+       std::string keyfile = config.get<std::string>("key");
+       
+       /* Check username, password, domain */
+       optional<std::string> correct_password = config.get_optional<std::string>(user+".password");
+       if (!correct_password || *correct_password != password) {
+               std::cerr << "Username or password incorrect." << std::endl;
+               return 1;
+       }
+       if (config.get<std::string>(user+".domain") != domain) {
+               std::cerr << "Domain incorrect." << std::endl;
+               return 1;
+       }
+       
+       std::cout << "It's all right, using key " << keyfile << std::endl;
+       
        
        
-       std::cout << "Hi world! " << CONFIG_FILE << std::endl;
        return 0;
 }
        return 0;
 }