mirror of
https://github.com/urbit/shrub.git
synced 2024-12-22 18:31:44 +03:00
Booting galaxies again.
This commit is contained in:
parent
1af4895a89
commit
976a9e4d2a
@ -608,20 +608,18 @@
|
||||
/* u3_opts: command line configuration.
|
||||
*/
|
||||
typedef struct _u3_opts {
|
||||
c3_c* imp_c; // -I, czar name
|
||||
c3_c* nam_c; // -n, unix hostname
|
||||
c3_c* raf_c; // -r, raft flotilla
|
||||
c3_c* who_c; // -w, begin with ticket
|
||||
c3_c* tic_c; // -t, ticket value
|
||||
c3_c* pil_c; // -B, bootstrap from
|
||||
c3_c* lit_c; // -J, ivory (fastboot) kernel
|
||||
c3_c* gen_c; // -G, czar generator
|
||||
c3_c* sec_c; // -s, secret
|
||||
c3_w kno_w; // -k, kernel version
|
||||
c3_w fuz_w; // -f, fuzz testing
|
||||
c3_s por_s; // -p, ames port
|
||||
c3_s rop_s; // -l, raft port
|
||||
c3_o abo; // -a, abort aggressively
|
||||
c3_o bat; // -b, batch create
|
||||
c3_o sic; // -S, enter secret at prompt
|
||||
c3_o gab; // -g, test garbage collection
|
||||
c3_o dem; // -d, daemon
|
||||
c3_o dry; // -D, dry compute, no checkpoint
|
||||
@ -1475,6 +1473,11 @@
|
||||
c3_l msc_l,
|
||||
u3_noun job);
|
||||
|
||||
/* u3_pier_rand(): fill a 512-bit (16-word) buffer.
|
||||
*/
|
||||
void
|
||||
u3_pier_rand(c3_w* rad_w);
|
||||
|
||||
/* u3_pier_exit(): trigger a gentle shutdown.
|
||||
*/
|
||||
void
|
||||
|
46
vere/king.c
46
vere/king.c
@ -323,21 +323,51 @@ _boothack_cb(uv_connect_t *conn, int status)
|
||||
u3z(whu);
|
||||
}
|
||||
|
||||
{
|
||||
if ( !u3_Host.ops_u.tic_c ) {
|
||||
fprintf(stderr, "boot: F A K E ship with null security (use -t)\r\n");
|
||||
sec = 0;
|
||||
}
|
||||
else {
|
||||
u3_noun suc = u3dc("slaw", 'p', u3i_string(u3_Host.ops_u.tic_c));
|
||||
if ( c3y == u3_Host.ops_u.fak ) {
|
||||
fprintf(stderr, "boot: F A K E ship with null security\r\n");
|
||||
|
||||
sec = 0;
|
||||
tic = 0;
|
||||
}
|
||||
else {
|
||||
if ( 0 == u3_Host.ops_u.sec_c ) {
|
||||
c3_w eny_w[16];
|
||||
|
||||
u3_pier_rand(eny_w);
|
||||
sec = u3i_words(2, eny_w);
|
||||
{
|
||||
u3_noun rot = u3dc("scot", 'p', u3k(sec));
|
||||
c3_c* rot_c = u3r_string(rot);
|
||||
|
||||
fprintf(stderr, "boot: %s: R O O T P A S S W O R D %s\r\n",
|
||||
u3_Host.ops_u.who_c,
|
||||
rot_c);
|
||||
fprintf(stderr, " (write it down and put it in your wallet)\r\n");
|
||||
|
||||
u3z(rot);
|
||||
c3_free(rot_c);
|
||||
}
|
||||
} else {
|
||||
u3_noun suc = u3dc("slaw", 'p', u3i_string(u3_Host.ops_u.sec_c));
|
||||
|
||||
if ( u3_nul == suc ) {
|
||||
fprintf(stderr, "boot: malformed secret (-t)\r\n");
|
||||
fprintf(stderr, "boot: malformed secret (-s)\r\n");
|
||||
exit(1);
|
||||
}
|
||||
sec = u3k(u3t(suc));
|
||||
u3z(suc);
|
||||
}
|
||||
|
||||
{
|
||||
u3_noun tuc = u3dc("slaw", 'p', u3i_string(u3_Host.ops_u.tic_c));
|
||||
|
||||
if ( u3_nul == tuc ) {
|
||||
fprintf(stderr, "boot: malformed ticket (-t)\r\n");
|
||||
exit(1);
|
||||
}
|
||||
tic = u3k(u3t(tuc));
|
||||
u3z(tuc);
|
||||
}
|
||||
}
|
||||
tic = u3k(sec);
|
||||
pax = u3i_string(u3_Host.dir_c);
|
||||
|
94
vere/main.c
94
vere/main.c
@ -74,6 +74,7 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
u3_Host.ops_u.tex = c3n;
|
||||
u3_Host.ops_u.pro = c3n;
|
||||
u3_Host.ops_u.dry = c3n;
|
||||
u3_Host.ops_u.sic = c3n;
|
||||
u3_Host.ops_u.veb = c3n;
|
||||
u3_Host.ops_u.qui = c3n;
|
||||
u3_Host.ops_u.nuu = c3n;
|
||||
@ -81,7 +82,7 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
u3_Host.ops_u.rep = c3n;
|
||||
u3_Host.ops_u.kno_w = DefaultKernel;
|
||||
|
||||
while ( (ch_i=getopt(argc, argv,"G:B:I:w:t:f:k:l:n:p:r:LabcdgmqvxFMPDXR")) != -1 ) {
|
||||
while ( (ch_i=getopt(argc, argv,"s:B:I:w:t:f:k:l:n:p:LSabcdgmqvxFMPDXR")) != -1 ) {
|
||||
switch ( ch_i ) {
|
||||
case 'M': {
|
||||
u3_Host.ops_u.mem = c3y;
|
||||
@ -91,12 +92,8 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
u3_Host.ops_u.pil_c = strdup(optarg);
|
||||
break;
|
||||
}
|
||||
case 'G': {
|
||||
u3_Host.ops_u.gen_c = strdup(optarg);
|
||||
break;
|
||||
}
|
||||
case 'I': {
|
||||
u3_Host.ops_u.imp_c = _main_presig(optarg);
|
||||
case 's': {
|
||||
u3_Host.ops_u.sec_c = strdup(optarg);
|
||||
break;
|
||||
}
|
||||
case 'w': {
|
||||
@ -128,12 +125,6 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'l': {
|
||||
if ( c3n == _main_readw(optarg, 65536, &arg_w) ) {
|
||||
return c3n;
|
||||
} else u3_Host.ops_u.rop_s = arg_w;
|
||||
break;
|
||||
}
|
||||
case 'n': {
|
||||
u3_Host.ops_u.nam_c = strdup(optarg);
|
||||
break;
|
||||
@ -144,10 +135,6 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
} else u3_Host.ops_u.por_s = arg_w;
|
||||
break;
|
||||
}
|
||||
case 'r': {
|
||||
u3_Host.ops_u.raf_c = strdup(optarg);
|
||||
break;
|
||||
}
|
||||
case 'R': {
|
||||
u3_Host.ops_u.rep = c3y;
|
||||
return c3y;
|
||||
@ -181,33 +168,55 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
exit(1); /* (avoid simple usage msg) */
|
||||
}
|
||||
|
||||
if ( u3_Host.ops_u.gen_c != 0 && ( u3_Host.ops_u.imp_c == 0 ||
|
||||
u3_Host.ops_u.nuu == c3n ) ) {
|
||||
fprintf(stderr, "-G only makes sense when creating a new galaxy\n");
|
||||
return c3n;
|
||||
}
|
||||
/* fill in any missing security data, etc
|
||||
*/
|
||||
if ( u3_Host.ops_u.nuu == c3y ) {
|
||||
if ( u3_Host.ops_u.who_c == 0 ) {
|
||||
fprintf(stderr, "comets are not yet supported; identify with -w\r\n");
|
||||
return c3n;
|
||||
}
|
||||
else {
|
||||
if ( c3n == u3_Host.ops_u.fak ) {
|
||||
if ( (u3_Host.ops_u.tic_c == 0) &&
|
||||
(strlen(u3_Host.ops_u.who_c) >= 4)
|
||||
)
|
||||
{
|
||||
c3_c tic_c[29];
|
||||
|
||||
if ( u3_Host.ops_u.tic_c != 0 && ( u3_Host.ops_u.imp_c != 0 ||
|
||||
u3_Host.ops_u.nuu == c3n ) ) {
|
||||
fprintf(stderr, "-t only makes sense when creating a new non-galaxy\n");
|
||||
return c3n;
|
||||
}
|
||||
printf("enter your ticket: ~");
|
||||
scanf("%28s", tic_c);
|
||||
u3_Host.ops_u.tic_c = _main_presig(tic_c);
|
||||
}
|
||||
|
||||
if ( u3_Host.ops_u.rop_s == 0 && u3_Host.ops_u.raf_c != 0 ) {
|
||||
fprintf(stderr, "The -r flag requires -l.\n");
|
||||
return c3n;
|
||||
}
|
||||
if ( c3y == u3_Host.ops_u.sic ) {
|
||||
c3_c sec_c[29];
|
||||
|
||||
if ( (u3_Host.ops_u.tic_c == 0) &&
|
||||
(u3_Host.ops_u.who_c != 0) &&
|
||||
(c3n == u3_Host.ops_u.fak)
|
||||
)
|
||||
{
|
||||
c3_c tic_c[29];
|
||||
printf("enter your secret: ~");
|
||||
scanf("%28s", sec_c);
|
||||
u3_Host.ops_u.sec_c = _main_presig(sec_c);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ( u3_Host.ops_u.sec_c != 0 ) {
|
||||
fprintf(stderr, "-s only makes sense when creating a new ship\n");
|
||||
return c3n;
|
||||
}
|
||||
|
||||
if ( u3_Host.ops_u.tic_c != 0 ) {
|
||||
fprintf(stderr, "-t only makes sense when creating a new ship\n");
|
||||
return c3n;
|
||||
}
|
||||
|
||||
if ( u3_Host.ops_u.who_c != 0 ) {
|
||||
fprintf(stderr, "-w only makes sense when creating a new ship\n");
|
||||
return c3n;
|
||||
}
|
||||
if ( u3_Host.ops_u.pil_c != 0) {
|
||||
fprintf(stderr, "-B only makes sense when creating a new ship\n");
|
||||
return c3n;
|
||||
}
|
||||
|
||||
printf("enter your secret: ~");
|
||||
scanf("%28s",tic_c);
|
||||
u3_Host.ops_u.tic_c = _main_presig(tic_c);
|
||||
}
|
||||
|
||||
if ( c3y == u3_Host.ops_u.bat ) {
|
||||
@ -215,11 +224,6 @@ _main_getopt(c3_i argc, c3_c** argv)
|
||||
u3_Host.ops_u.nuu = c3y;
|
||||
}
|
||||
|
||||
if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.pil_c != 0) {
|
||||
fprintf(stderr, "-B only makes sense when bootstrapping a new instance\n");
|
||||
return c3n;
|
||||
}
|
||||
|
||||
if ( u3_Host.ops_u.pil_c != 0 ) {
|
||||
struct stat s;
|
||||
if ( stat(u3_Host.ops_u.pil_c, &s) != 0 ) {
|
||||
|
11
vere/reck.c
11
vere/reck.c
@ -90,6 +90,17 @@ _reck_kick_term(u3_pier* pir_u, u3_noun pox, c3_l tid_l, u3_noun fav)
|
||||
u3z(pox); u3z(fav); return c3y;
|
||||
} break;
|
||||
|
||||
// this can return through dill due to our fscked up boot sequence
|
||||
//
|
||||
case c3__send: {
|
||||
u3_noun lan = u3k(u3h(u3t(fav)));
|
||||
u3_noun pac = u3k(u3t(u3t(fav)));
|
||||
|
||||
fprintf(stderr, "kick: strange send\r\n");
|
||||
u3_ames_ef_send(pir_u, lan, pac);
|
||||
u3z(pox); u3z(fav); return c3y;
|
||||
} break;
|
||||
|
||||
case c3__logo:
|
||||
{
|
||||
u3_pier_exit();
|
||||
|
Loading…
Reference in New Issue
Block a user