#include SECRETS_H #include <daemons.h> #include <commands.h> #include <lib.h> inherit LIB_DAEMON; mapping Secrets = ([]); string secfile; void create(){ Secrets = ([ "IRN_PASSWORD" : IRN_PASSWORD, "IRN_PASSWORD1" : IRN_PASSWORD1, "IRN_PASSWORD2" : IRN_PASSWORD2, "IRN_PASSWORD3" : IRN_PASSWORD3, "IMC2_CLIENT_PW" : IMC2_CLIENT_PW, "IMC2_SERVER_PW" : IMC2_SERVER_PW, "I3_SERVER_PW" : I3_SERVER_PW, "INSTANCE_PW" : INSTANCE_PW, ]); } static varargs void ModSecret(string secret, mixed val){ string type; string *secarr, *ret = ({}); secfile = unguarded( (: read_file("/secure/include/secrets.h") :) ); secarr = explode(secfile, "\n"); if(!undefinedp(Secrets[secret])){ type = typeof(Secrets[secret]); } foreach(string line in secarr){ if(!sizeof(line)) continue; if(!strsrch(line, "#define "+secret+" ")){ if(type && type == "string"){ line = "#define "+secret+" \""+val+"\""; Secrets[secret] = val; } else { line = "#define "+secret+" "+to_int(val); Secrets[secret] = to_int(val); } } ret += ({ trim(line) }); } secfile = implode(ret, "\n") + "\n"; unguarded( (: write_file("/secure/include/secrets.h", secfile, 1) :) ); } mixed GetSecret(string secret){ string prev = base_name(previous_object()); if( (master()->valid_apply(({ "SECURE" }))) ){ return copy(Secrets[secret]); } if(!strsrch(secret, "IRN_PASSWORD") && prev == ROUTER_D){ return copy(Secrets[secret]); } if(!strsrch(secret, "IMC2_") && prev == IMC2_D){ return copy(Secrets[secret]); } if(secret == "I3_SERVER_PW" && prev == INTERMUD_D){ return copy(Secrets[secret]); } if(secret == "INSTANCE_PW" && prev == INSTANCES_D){ return copy(Secrets[secret]); } return 0; } mixed SetSecret(string secret, mixed val){ string prev = base_name(previous_object()); if( (master()->valid_apply(({ "SECURE" }))) ){ ModSecret(secret, val); return copy(Secrets[secret]); } if(!strsrch(secret, "IRN_PASSWORD") && prev == ROUTER_D){ ModSecret(secret, val); return copy(Secrets[secret]); } if(!strsrch(secret, "IMC2_") && (prev == IMC2_D || prev == CMD_MUDCONFIG)){ ModSecret(secret, val); return copy(Secrets[secret]); } if(secret == "I3_SERVER_PW" && prev == INTERMUD_D){ ModSecret(secret, val); return copy(Secrets[secret]); } if(secret == "INSTANCE_PW" && prev == INSTANCES_D){ ModSecret(secret, val); return copy(Secrets[secret]); } return 0; }