single-home's arvo, refines fake keys

This commit is contained in:
Joe Bryan 2018-08-10 12:58:21 -04:00
parent bcc1261009
commit 0b13837bfa
6 changed files with 75 additions and 42 deletions

View File

@ -26,6 +26,7 @@
u3_noun sev_l; // instance number
u3_noun sen; // instance string
u3_noun own; // owner list
u3_noun fak; // &=fake XX use c3_o?
u3_noun sac; // space profiling

View File

@ -591,7 +591,7 @@
c3_o bat; // -b, batch create
c3_o dem; // -d, daemon
c3_o dry; // -D, dry compute
c3_o fak; // -F, fake carrier
c3_c* fak_c; // -F, fake ship
c3_o fog; // -X, skip last event
c3_o gab; // -g, run with garbage collector
c3_o has; // -S, Skip battery hashes

View File

@ -1401,7 +1401,7 @@ _http_serv_start_all(void)
htp_u = _http_serv_new(por_s, c3y, c3n);
htp_u->h2o_u = _http_serv_init_h2o(u3_Host.tls_u, for_u->log, for_u->red);
if ( (c3y == for_u->pro) || (c3y == u3_Host.ops_u.fak) ) {
if ( c3y == for_u->pro ) {
htp_u->rox_u = _proxy_serv_new(htp_u, 443, c3y);
}
@ -1416,7 +1416,7 @@ _http_serv_start_all(void)
htp_u = _http_serv_new(por_s, c3n, c3n);
htp_u->h2o_u = _http_serv_init_h2o(0, for_u->log, for_u->red);
if ( (c3y == for_u->pro) || (c3y == u3_Host.ops_u.fak) ) {
if ( c3y == for_u->pro ) {
htp_u->rox_u = _proxy_serv_new(htp_u, 80, c3n);
}
@ -2571,25 +2571,16 @@ _proxy_dest(u3_pcon* con_u, u3_noun sip)
_proxy_loop_connect(con_u);
}
else {
u3_noun hip = u3k(u3t(sip));
u3_noun own = u3A->own;
c3_o our = c3n;
u3_noun hip = u3t(sip);
while ( u3_nul != own ) {
if ( c3y == u3r_sing(hip, u3h(own)) ) {
our = c3y;
break;
}
own = u3t(own);
}
if ( c3y == our ) {
if ( c3y == u3r_sing(u3A->own, hip) ) {
_proxy_loop_connect(con_u);
}
else {
// XX check if (sein:title sip) == our
// XX check will
_proxy_ward_start(con_u, hip);
// XX extract bytes from hip, this could leak
_proxy_ward_start(con_u, u3k(hip));
}
}
@ -2852,6 +2843,7 @@ u3_http_ef_that(u3_noun tat)
return;
}
// XX extract bytes from sip, this could leak
cli_u = _proxy_warc_new(htp_u, (u3_atom)sip, (c3_s)por, (c3_o)sec);
// XX add to constructor

View File

@ -77,7 +77,6 @@ _main_getopt(c3_i argc, c3_c** argv)
u3_Host.ops_u.bat = c3n;
u3_Host.ops_u.dem = c3n;
u3_Host.ops_u.dry = c3n;
u3_Host.ops_u.fak = c3n;
u3_Host.ops_u.fog = c3n;
u3_Host.ops_u.gab = c3n;
u3_Host.ops_u.git = c3n;
@ -92,7 +91,7 @@ _main_getopt(c3_i argc, c3_c** argv)
u3_Host.ops_u.veb = c3n;
u3_Host.ops_u.kno_w = DefaultKernel;
while ( (ch_i=getopt(argc, argv,"G:B:K:A:H:I:w:u:f:k:l:n:p:r:NabcdgqsvxFMPDXRS")) != -1 ) {
while ( (ch_i=getopt(argc, argv,"G:B:K:A:H:I:w:u:f:F:k:l:n:p:r:NabcdgqsvxMPDXRS")) != -1 ) {
switch ( ch_i ) {
case 'M': {
u3_Host.ops_u.mem = c3y;
@ -114,10 +113,15 @@ _main_getopt(c3_i argc, c3_c** argv)
u3_Host.ops_u.dns_c = strdup(optarg);
break;
}
// XX remove in deference to -K
case 'I': {
u3_Host.ops_u.imp_c = _main_presig(optarg);
break;
}
case 'F': {
u3_Host.ops_u.fak_c = _main_presig(optarg);
break;
}
case 'w': {
u3_Host.ops_u.who_c = _main_presig(optarg);
u3_Host.ops_u.nuu = c3y;
@ -177,7 +181,6 @@ _main_getopt(c3_i argc, c3_c** argv)
return c3y;
}
case 'N': { u3_Host.ops_u.net = c3y; break; }
case 'F': { u3_Host.ops_u.fak = c3y; break; }
case 'a': { u3_Host.ops_u.abo = c3y; break; }
case 'b': { u3_Host.ops_u.bat = c3y; break; }
case 'c': { u3_Host.ops_u.nuu = c3y; break; }
@ -195,10 +198,29 @@ _main_getopt(c3_i argc, c3_c** argv)
}
}
if ( u3_Host.ops_u.fak == c3n && u3_Host.ops_u.net == c3y ) {
// XX remove -I
if ( (0 != u3_Host.ops_u.fak_c) && (0 != u3_Host.ops_u.imp_c) ) {
fprintf(stderr, "-I is redundant with -F\n");
return c3n;
}
// set galaxy name
// XX need to do this with -K too
// -A is required when booting a galaxy
if ( (0 != u3_Host.ops_u.fak_c) && (4 == strlen(u3_Host.ops_u.fak_c)) ) {
u3_Host.ops_u.imp_c = strdup(u3_Host.ops_u.fak_c);
}
if ( (0 != u3_Host.ops_u.fak_c) && (c3n == u3_Host.ops_u.nuu) ) {
fprintf(stderr, "-F only makes sense on initial boot\n");
return c3n;
}
// XX revisit
if ( (0 == u3_Host.ops_u.fak_c) && (c3y == u3_Host.ops_u.net) ) {
fprintf(stderr, "-N only makes sense with -F\n");
return c3n;
} else if ( u3_Host.ops_u.fak == c3n && u3_Host.ops_u.net == c3n ) {
} else if ( (0 == u3_Host.ops_u.fak_c) && (c3n == u3_Host.ops_u.net) ) {
u3_Host.ops_u.net = c3y; /* remote networking is always on in real mode. */
}
@ -333,7 +355,7 @@ u3_ve_usage(c3_i argc, c3_c** argv)
"-c pier Create a new urbit in pier/\n",
"-d Daemon mode\n",
"-D Recompute from events\n",
"-F Fake keys; also disables networking\n",
"-F ship Fake keys; also disables networking\n",
"-f Fuzz testing\n",
"-g Set GC flag\n",
"-H domain Set ames bootstrap domain (default urbit.org)\n",

View File

@ -100,13 +100,10 @@ _reck_kick_term(u3_noun pox, c3_l tid_l, u3_noun fav)
case c3__init: p_fav = u3t(fav);
{
u3A->own = u3nc(u3k(p_fav), u3A->own);
c3_assert( u3_none == u3A->own );
u3A->own = u3k(p_fav);
u3_noun hox = u3dc("scot", 'p', u3k(p_fav));
c3_c* nam_c = u3r_string(hox);
// uL(fprintf(uH, "kick: init: %s\n", nam_c));
free(nam_c); u3z(pox); u3z(hox); u3z(fav); return c3y;
u3z(pox); u3z(fav); return c3y;
} break;
case c3__mass: p_fav = u3t(fav);
@ -224,11 +221,12 @@ _reck_kick_ames(u3_noun pox, u3_noun fav)
switch ( u3h(fav) ) {
default: break;
// XX remove
case c3__init: p_fav = u3t(fav);
{
u3A->own = u3nc(u3k(p_fav), u3A->own);
uL(fprintf(uH, "kick: init: ames\n"));
c3_assert(0);
// uL(fprintf(uH, "kick: init: %d\n", p_fav));
u3z(pox); u3z(fav); return c3y;
} break;
}
@ -313,11 +311,12 @@ _reck_kick_spec(u3_noun pox, u3_noun fav)
}
} break;
// XX remove
case c3__init: p_fav = u3t(fav);
{
u3A->own = u3nc(u3k(p_fav), u3A->own);
uL(fprintf(uH, "kick: init: spec\n"));
c3_assert(0);
// uL(fprintf(uH, "kick: init: %d\n", p_fav));
u3z(pox); u3z(fav); return c3y;
} break;

View File

@ -261,9 +261,11 @@ _sist_sing(u3_noun ovo)
u3_noun fex = u3h(vir);
u3_noun fav = u3t(fex);
if ( (c3__init == u3h(fav)) || (c3__inuk == u3h(fav)) ) {
u3A->own = u3nc(u3k(u3t(fav)), u3A->own);
// XX is this now just to support ctrl-z during first boot?
if ( c3__init == u3h(fav) ) {
u3A->own = u3k(u3t(fav));
}
vir = u3t(vir);
}
u3z(nug);
@ -1342,30 +1344,47 @@ _sist_dawn(void)
void
u3_sist_boot(void)
{
// uL(fprintf(uH, "sist: booting\n"));
if ( c3y == u3_Host.ops_u.nuu ) {
u3_noun pig;
if ( c3y == u3_Host.ops_u.fak ) {
// XX or who_c
u3_noun imp = u3i_string(u3_Host.ops_u.imp_c);
u3_noun whu = u3dc("slaw", 'p', u3k(imp));
if ( 0 != u3_Host.ops_u.fak_c ) {
u3_noun whu = u3dc("slaw", 'p', u3i_string(u3_Host.ops_u.fak_c));
if ( (u3_nul == whu) ) {
fprintf(stderr, "czar: incorrect format\r\n");
fprintf(stderr, "fake: invalid ship: %s\r\n", u3_Host.ops_u.fak_c);
u3_lo_bail();
}
pig = u3nc(c3__fake, u3t(whu));
fprintf(stderr, "fake: %s\r\n", u3_Host.ops_u.fak_c);
u3A->fak = c3y;
pig = u3nc(c3__fake, u3k(u3t(whu)));
u3z(whu);
}
else {
u3A->fak = c3n;
pig = _sist_dawn();
}
// will be set by %init card in reck.c
u3A->own = u3_none;
_sist_make(pig);
}
else {
if ( c3y == u3A->fak ) {
c3_c* who_c = u3r_string(u3dc("scot", 'p', u3k(u3A->own)));
fprintf(stderr, "fake: %s\r\n", who_c);
// XX use clan:title
if ( 4 == strlen(who_c) ) {
u3_Host.ops_u.imp_c = who_c;
} else {
free(who_c);
}
// XX make conditional
u3_Host.ops_u.net = c3n;
}
_sist_rest();
}
}