xref: /plan9/sys/src/cmd/upas/send/authorize.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include "common.h"
23e12c5d1SDavid du Colombier #include "send.h"
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier /*
53e12c5d1SDavid du Colombier  *  Run a command to authorize or refuse entry.  Return status 0 means
63e12c5d1SDavid du Colombier  *  authorize, -1 means refuse.
73e12c5d1SDavid du Colombier  */
83e12c5d1SDavid du Colombier void
authorize(dest * dp)93e12c5d1SDavid du Colombier authorize(dest *dp)
103e12c5d1SDavid du Colombier {
113e12c5d1SDavid du Colombier 	process *pp;
123e12c5d1SDavid du Colombier 	String *errstr;
133e12c5d1SDavid du Colombier 
143e12c5d1SDavid du Colombier 	dp->authorized = 1;
15bd389b36SDavid du Colombier 	pp = proc_start(s_to_c(dp->repl1), (stream *)0, (stream *)0, outstream(), 1, 0);
16*7dd7cddfSDavid du Colombier 	if (pp == 0){
17*7dd7cddfSDavid du Colombier 		dp->status = d_noforward;
183e12c5d1SDavid du Colombier 		return;
19*7dd7cddfSDavid du Colombier 	}
203e12c5d1SDavid du Colombier 	errstr = s_new();
213e12c5d1SDavid du Colombier 	while(s_read_line(pp->std[2]->fp, errstr))
223e12c5d1SDavid du Colombier 		;
233e12c5d1SDavid du Colombier 	if ((dp->pstat = proc_wait(pp)) != 0) {
243e12c5d1SDavid du Colombier 		dp->repl2 = errstr;
253e12c5d1SDavid du Colombier 		dp->status = d_noforward;
263e12c5d1SDavid du Colombier 	} else
273e12c5d1SDavid du Colombier 		s_free(errstr);
283e12c5d1SDavid du Colombier 	proc_free(pp);
293e12c5d1SDavid du Colombier }
30