xref: /plan9/sys/src/cmd/auth/readnvram.c (revision b1c161c21052bbfab8430c267211155c26021160)
1*b1c161c2SDavid du Colombier /* readnvram */
2*b1c161c2SDavid du Colombier #include <u.h>
3*b1c161c2SDavid du Colombier #include <libc.h>
4*b1c161c2SDavid du Colombier #include <auth.h>
5*b1c161c2SDavid du Colombier #include <authsrv.h>
6*b1c161c2SDavid du Colombier 
7*b1c161c2SDavid du Colombier void
main(int,char **)8*b1c161c2SDavid du Colombier main(int, char **)
9*b1c161c2SDavid du Colombier {
10*b1c161c2SDavid du Colombier 	int i;
11*b1c161c2SDavid du Colombier 	Nvrsafe safe;
12*b1c161c2SDavid du Colombier 
13*b1c161c2SDavid du Colombier 	quotefmtinstall();
14*b1c161c2SDavid du Colombier 
15*b1c161c2SDavid du Colombier 	memset(&safe, 0, sizeof safe);
16*b1c161c2SDavid du Colombier 	/*
17*b1c161c2SDavid du Colombier 	 * readnvram can return -1 meaning nvram wasn't written,
18*b1c161c2SDavid du Colombier 	 * but safe still holds good data.
19*b1c161c2SDavid du Colombier 	 */
20*b1c161c2SDavid du Colombier 	if(readnvram(&safe, 0) < 0 && safe.authid[0] == '\0')
21*b1c161c2SDavid du Colombier 		sysfatal("readnvram: %r");
22*b1c161c2SDavid du Colombier 
23*b1c161c2SDavid du Colombier 	/*
24*b1c161c2SDavid du Colombier 	 *  only use nvram key if it is non-zero
25*b1c161c2SDavid du Colombier 	 */
26*b1c161c2SDavid du Colombier 	for(i = 0; i < DESKEYLEN; i++)
27*b1c161c2SDavid du Colombier 		if(safe.machkey[i] != 0)
28*b1c161c2SDavid du Colombier 			break;
29*b1c161c2SDavid du Colombier 	if(i == DESKEYLEN)
30*b1c161c2SDavid du Colombier 		sysfatal("bad key");
31*b1c161c2SDavid du Colombier 
32*b1c161c2SDavid du Colombier 	fmtinstall('H', encodefmt);
33*b1c161c2SDavid du Colombier 	print("key proto=p9sk1 user=%q dom=%q !hex=%.*H !password=______\n",
34*b1c161c2SDavid du Colombier 		safe.authid, safe.authdom, DESKEYLEN, safe.machkey);
35*b1c161c2SDavid du Colombier 	exits(0);
36*b1c161c2SDavid du Colombier }
37