new auth
This commit is contained in:
parent
0f8ec41b0a
commit
6e527fbc4d
44 changed files with 9955 additions and 0 deletions
165
src/cmd/auth/factotum/xio.c
Normal file
165
src/cmd/auth/factotum/xio.c
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
#include "std.h"
|
||||
#include "dat.h"
|
||||
|
||||
static Ioproc *cache[5];
|
||||
static int ncache;
|
||||
|
||||
static Ioproc*
|
||||
xioproc(void)
|
||||
{
|
||||
Ioproc *c;
|
||||
int i;
|
||||
|
||||
for(i=0; i<ncache; i++){
|
||||
if(c = cache[i]){
|
||||
cache[i] = nil;
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
return ioproc();
|
||||
}
|
||||
|
||||
static void
|
||||
closexioproc(Ioproc *io)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<ncache; i++)
|
||||
if(cache[i] == nil){
|
||||
cache[i] = io;
|
||||
return;
|
||||
}
|
||||
|
||||
closeioproc(io);
|
||||
}
|
||||
|
||||
int
|
||||
xiodial(char *ds, char *local, char *dir, int *cfdp)
|
||||
{
|
||||
int fd;
|
||||
Ioproc *io;
|
||||
|
||||
if((io = xioproc()) == nil)
|
||||
return -1;
|
||||
fd = iodial(io, ds, local, dir, cfdp);
|
||||
closexioproc(io);
|
||||
return fd;
|
||||
}
|
||||
|
||||
void
|
||||
xioclose(int fd)
|
||||
{
|
||||
Ioproc *io;
|
||||
|
||||
if((io = xioproc()) == nil){
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
|
||||
ioclose(io, fd);
|
||||
closexioproc(io);
|
||||
}
|
||||
|
||||
int
|
||||
xiowrite(int fd, void *v, int n)
|
||||
{
|
||||
int m;
|
||||
Ioproc *io;
|
||||
|
||||
if((io = xioproc()) == nil)
|
||||
return -1;
|
||||
m = iowrite(io, fd, v, n);
|
||||
closexioproc(io);
|
||||
if(m != n)
|
||||
return -1;
|
||||
return n;
|
||||
}
|
||||
|
||||
static long
|
||||
_ioauthdial(va_list *arg)
|
||||
{
|
||||
char *net;
|
||||
char *dom;
|
||||
int fd;
|
||||
|
||||
net = va_arg(*arg, char*);
|
||||
dom = va_arg(*arg, char*);
|
||||
fd = _authdial(net, dom);
|
||||
if(fd < 0)
|
||||
fprint(2, "authdial: %r\n");
|
||||
return fd;
|
||||
}
|
||||
|
||||
int
|
||||
xioauthdial(char *net, char *dom)
|
||||
{
|
||||
int fd;
|
||||
Ioproc *io;
|
||||
|
||||
if((io = xioproc()) == nil)
|
||||
return -1;
|
||||
fd = iocall(io, _ioauthdial, net, dom);
|
||||
closexioproc(io);
|
||||
return fd;
|
||||
}
|
||||
|
||||
static long
|
||||
_ioasrdresp(va_list *arg)
|
||||
{
|
||||
int fd;
|
||||
void *a;
|
||||
int n;
|
||||
|
||||
fd = va_arg(*arg, int);
|
||||
a = va_arg(*arg, void*);
|
||||
n = va_arg(*arg, int);
|
||||
|
||||
return _asrdresp(fd, a, n);
|
||||
}
|
||||
|
||||
int
|
||||
xioasrdresp(int fd, void *a, int n)
|
||||
{
|
||||
Ioproc *io;
|
||||
|
||||
if((io = xioproc()) == nil)
|
||||
return -1;
|
||||
|
||||
n = iocall(io, _ioasrdresp, fd, a, n);
|
||||
closexioproc(io);
|
||||
return n;
|
||||
}
|
||||
|
||||
static long
|
||||
_ioasgetticket(va_list *arg)
|
||||
{
|
||||
int asfd;
|
||||
char *trbuf;
|
||||
char *tbuf;
|
||||
|
||||
asfd = va_arg(*arg, int);
|
||||
trbuf = va_arg(*arg, char*);
|
||||
tbuf = va_arg(*arg, char*);
|
||||
|
||||
return _asgetticket(asfd, trbuf, tbuf);
|
||||
}
|
||||
|
||||
int
|
||||
xioasgetticket(int fd, char *trbuf, char *tbuf)
|
||||
{
|
||||
int n;
|
||||
Ioproc *io;
|
||||
|
||||
if((io = xioproc()) == nil)
|
||||
return -1;
|
||||
|
||||
n = iocall(io, _ioasgetticket, fd, trbuf, tbuf);
|
||||
closexioproc(io);
|
||||
if(n != 2*TICKETLEN)
|
||||
n = -1;
|
||||
else
|
||||
n = 0;
|
||||
return n;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue