Răsfoiți Sursa

Update mktopology so it works again and can easily be used to create test dictionaries.

Adam Ierymenko 10 ani în urmă
părinte
comite
918fc8884b
2 a modificat fișierele cu 25 adăugiri și 24 ștergeri
  1. 1 1
      root-topology/Makefile
  2. 24 23
      root-topology/mktopology.cpp

+ 1 - 1
root-topology/Makefile

@@ -1,5 +1,5 @@
 all:	FORCE
-	g++ -o mktopology mktopology.cpp ../node/Utils.cpp ../node/Identity.cpp ../node/C25519.cpp ../node/Salsa20.cpp ../node/Dictionary.cpp ../node/SHA512.cpp
+	g++ -o mktopology mktopology.cpp ../osdep/OSUtils.cpp ../node/Utils.cpp ../node/InetAddress.cpp ../node/Identity.cpp ../node/C25519.cpp ../node/Salsa20.cpp ../node/Dictionary.cpp ../node/SHA512.cpp
 	gcc -o bin2c bin2c.c
 
 official: FORCE

+ 24 - 23
root-topology/mktopology.cpp

@@ -6,7 +6,7 @@
 #include <iostream>
 #include <map>
 
-#include "../node/Utils.hpp"
+#include "../osdep/OSUtils.hpp"
 #include "../node/Identity.hpp"
 #include "../node/Dictionary.hpp"
 
@@ -17,47 +17,48 @@ int main(int argc,char **argv)
 	std::string buf;
 
 	// Read root-topology-authority.secret signing authority, must be symlinked and online
-	if (!Utils::readFile("root-topology-authority.secret",buf)) {
-		std::cerr << "Cannot read root-topology-authority.secret" << std::endl;
-		return 1;
-	}
-	Identity topologyAuthority(buf);
+	Identity topologyAuthority;
+	if (OSUtils::readFile("root-topology-authority.secret",buf))
+		topologyAuthority.fromString(buf);
+	else std::cerr << "Warning: root-topology-authority.secret not found, creating unsigned topology." << std::endl;
 
 	Dictionary topology;
 
 	// Read template.dict to populate default fields in root topology
 	// if this file exists. Otherwise we just start empty.
 	buf.clear();
-	if (Utils::readFile("template.dict",buf))
+	if (OSUtils::readFile("template.dict",buf))
 		topology.fromString(buf);
 
 	// Read all entries in supernodes/ that correspond to supernode entry dictionaries
 	// and add them to topology under supernodes/ subkey.
 	Dictionary supernodes;
-	std::map<std::string,bool> supernodeDictionaries(Utils::listDirectory("supernodes"));
-	for(std::map<std::string,bool>::iterator sn(supernodeDictionaries.begin());sn!=supernodeDictionaries.end();++sn) {
-		if ((sn->first.length() == 10)&&(!sn->second)) {
+	std::vector<std::string> supernodeDictionaries(OSUtils::listDirectory("supernodes"));
+	for(std::vector<std::string>::const_iterator sn(supernodeDictionaries.begin());sn!=supernodeDictionaries.end();++sn) {
+		if (sn->length() == 10) {
 			buf.clear();
-			if (!Utils::readFile((std::string("supernodes/")+sn->first).c_str(),buf)) {
-				std::cerr << "Cannot read supernodes/" << sn->first << std::endl;
+			if (!OSUtils::readFile((std::string("supernodes/")+(*sn)).c_str(),buf)) {
+				std::cerr << "Cannot read supernodes/" << *sn << std::endl;
 				return 1;
 			}
-			supernodes[sn->first] = buf;
+			supernodes[*sn] = buf;
 		}
 	}
 	topology["supernodes"] = supernodes.toString();
 
-	// Sign topology with root-topology-authority.secret
-	if (!topology.sign(topologyAuthority)) {
-		std::cerr << "Unable to sign!" << std::endl;
-		return 1;
-	}
+	if ((topologyAuthority)&&(topologyAuthority.hasPrivate())) {
+		// Sign topology with root-topology-authority.secret
+		if (!topology.sign(topologyAuthority,OSUtils::now())) {
+			std::cerr << "Unable to sign!" << std::endl;
+			return 1;
+		}
 
-	// Test signature to make sure signing worked
-	Dictionary test(topology.toString());
-	if (!test.verify(topologyAuthority)) {
-		std::cerr << "Test verification of signed dictionary failed!" << std::endl;
-		return 1;
+		// Test signature to make sure signing worked
+		Dictionary test(topology.toString());
+		if (!test.verify(topologyAuthority)) {
+			std::cerr << "Test verification of signed dictionary failed!" << std::endl;
+			return 1;
+		}
 	}
 
 	// Output to stdout