#ident "%Z%%M% %I% %E% SMI"
#include "uucp.h"
#include "log.h"
extern int guinfo();
#define FS ' '
#define LOGCHECK { if (Collecting == FALSE) return; }
#define LOGCHECKC { if (Collecting == FALSE) return(NOTAVAIL); }
struct secXfer
{
char reqSystem[MODSTR];
char reqUser[MODSTR];
char desSystem[MODSTR];
char desUser[MODSTR];
char desFile[MODSTR];
char srcSystem[MODSTR];
char srcOwner[MODSTR];
char srcFile[MODSTR];
char srcSize[MODSTR];
char srcMtime[MODSTR];
char stime[MODSTR];
char etime[MODSTR];
};
struct secRexe
{
char cliSystem[MODSTR];
char cliUser[MODSTR];
char serUser[MODSTR];
char time[MODSTR];
char command[BUFSIZ];
};
static int Collecting = TRUE;
static int LogFile = CLOSED;
static char LogName[] = SECURITY;
static char Record[LOGSIZE];
static char Type[MODSTR];
static struct secXfer Xfer;
static struct secRexe Rexe;
STATIC_FUNC void
newRec(type)
char * type;
{
register struct secXfer * scptr = &Xfer;
register struct secRexe * reptr = &Rexe;
if EQUALS(type,"xfer"){
copyText(scptr->reqUser, sizeof(scptr->reqUser), NOTAVAIL);
copyText(scptr->desSystem, sizeof(scptr->desSystem), NOTAVAIL);
copyText(scptr->desUser, sizeof(scptr->desUser), NOTAVAIL);
copyText(scptr->desFile, sizeof(scptr->desFile), NOTAVAIL);
copyText(scptr->srcSystem, sizeof(scptr->srcSystem), NOTAVAIL);
copyText(scptr->srcOwner, sizeof(scptr->srcOwner), NOTAVAIL);
copyText(scptr->srcFile, sizeof(scptr->srcFile), NOTAVAIL);
copyText(scptr->srcMtime, sizeof(scptr->srcMtime), NOTAVAIL);
copyText(scptr->stime, sizeof(scptr->stime), NOTAVAIL);
copyText(scptr->etime, sizeof(scptr->etime), NOTAVAIL);
}
else {
copyText(reptr->cliSystem, sizeof(reptr->cliSystem), NOTAVAIL);
copyText(reptr->cliUser, sizeof(reptr->cliUser), NOTAVAIL);
copyText(reptr->serUser, sizeof(reptr->serUser), NOTAVAIL);
copyText(reptr->time, sizeof(reptr->time), NOTAVAIL);
copyText(reptr->command, sizeof(reptr->command), NOTAVAIL);
}
return;
}
void
scInit (type)
char * type;
{
if (LogFile == CLOSED) {
errno = 0;
LogFile = open(LogName, O_WRONLY | O_APPEND);
if (errno == ENOENT) {
LogFile = creat(LogName, LOGFILEMODE);
(void) chmod(LogName, LOGFILEMODE);
}
if (LogFile < 0){
Collecting = FALSE;
return;
}
}
copyText(Type, sizeof(Type), type);
newRec(Type);
return;
}
void
scWrite()
{
static char format[] = "%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c(%s)%c(%s)%c(%s)";
register struct secXfer * scptr;
LOGCHECK;
scptr = &Xfer;
sprintf(Record, format,
Type, FS,
scptr->reqSystem, FS,
scptr->reqUser, FS,
scptr->desSystem, FS,
scptr->desUser, FS,
scptr->desFile, FS,
scptr->srcSystem, FS,
scptr->srcOwner, FS,
scptr->srcFile, FS,
scptr->srcSize, FS,
scptr->srcMtime, FS,
scptr->stime, FS,
scptr->etime
);
(void) strcat(Record, EOR);
writeLog(Record,&LogFile,LogName,&Collecting);
newRec(Type);
return;
}
void
scReqsys(reqsys)
char * reqsys;
{
register struct secXfer * scptr = &Xfer;
LOGCHECK;
copyText(scptr->reqSystem, sizeof(scptr->reqSystem), reqsys);
return;
}
void
scRequser(requser)
char * requser;
{
register struct secXfer * scptr = &Xfer;
LOGCHECK;
copyText(scptr->reqUser, sizeof(scptr->reqUser), requser);
return;
}
void
scStime()
{
register struct secXfer * scptr = &Xfer;
LOGCHECK;
copyText(scptr->stime, sizeof(scptr->stime), timeStamp());
return;
}
void
scEtime()
{
register struct secXfer * scptr = &Xfer;
LOGCHECK;
copyText(scptr->etime, sizeof(scptr->etime), timeStamp());
return;
}
void
scDest(destsys, destuser, destfile)
char * destsys;
char * destuser;
char * destfile;
{
register struct secXfer * scptr = &Xfer;
LOGCHECK;
copyText(scptr->desSystem, sizeof(scptr->desSystem), destsys);
copyText(scptr->desUser, sizeof(scptr->desUser), destuser);
copyText(scptr->desFile, sizeof(scptr->desFile), destfile);
return;
}
void
scSrc(srcsys, srcowner, srcfile, srcmtime, srcsize)
char * srcsys;
char * srcowner;
char * srcfile;
char * srcmtime;
char * srcsize;
{
register struct secXfer * scptr = &Xfer;
LOGCHECK;
copyText(scptr->srcSystem, sizeof(scptr->srcSystem), srcsys);
copyText(scptr->srcOwner, sizeof(scptr->srcOwner), srcowner );
copyText(scptr->srcFile, sizeof(scptr->srcFile), srcfile);
copyText(scptr->srcMtime, sizeof(scptr->srcMtime), srcmtime );
copyText(scptr->srcSize, sizeof(scptr->srcSize), srcsize);
return;
}
char *
scSize(srcfile)
char * srcfile;
{
struct stat stbuf;
static char size[MODSTR];
LOGCHECKC;
if (stat(srcfile, &stbuf))
return(NOTAVAIL);
sprintf(size,"%ld",stbuf.st_size);
return(size);
}
char *
scOwn(srcfile)
char * srcfile;
{
struct stat stbuf;
static char user[MODSTR];
LOGCHECKC;
if (stat(srcfile, &stbuf))
return(NOTAVAIL);
(void) guinfo(stbuf.st_uid,user);
return(user);
}
char *
scMtime(srcfile)
char * srcfile;
{
struct stat stbuf;
static char mtime[MODSTR];
register struct tm *tp;
LOGCHECKC;
if (stat(srcfile, &stbuf))
return(NOTAVAIL);
tp = localtime(&stbuf.st_mtime);
(void) sprintf(mtime, "%d/%d-%d:%2.2d", tp->tm_mon + 1,
tp->tm_mday, tp->tm_hour, tp->tm_min);
return(mtime);
}
void
scRexe(clientsys,clientusr,serverusr,cmd)
char * clientsys;
char * clientusr;
char * serverusr;
char * cmd;
{
register struct secRexe * scptr = &Rexe;
LOGCHECK;
copyText(scptr->cliSystem, sizeof(scptr->cliSystem), clientsys);
copyText(scptr->cliUser, sizeof(scptr->cliUser), clientusr);
copyText(scptr->serUser, sizeof(scptr->serUser), serverusr);
copyText(scptr->time, sizeof(scptr->time), timeStamp());
copyText(scptr->command, sizeof(scptr->command), cmd);
return;
}
void
scWlog()
{
static char format[] = "%s%c%s%c%s%c%s%c(%s)%c%s";
register struct secRexe * scptr;
LOGCHECK;
scptr = &Rexe;
sprintf(Record, format,
Type, FS,
scptr->cliSystem, FS,
scptr->cliUser, FS,
scptr->serUser, FS,
scptr->time, FS,
scptr->command
);
(void) strcat(Record, EOR);
writeLog(Record,&LogFile,LogName,&Collecting);
newRec(Type);
return;
}