audit-remove-nested-valists-20061013

last straw
make amd64, ppc happy for sure and for ever
This commit is contained in:
Derrick Brashear 2006-10-13 18:36:30 +00:00
parent 453abf6aa1
commit e3d10f048b

View File

@ -37,16 +37,6 @@ RCSID
#endif
#include <afs/afsutil.h>
/* C99 requires va_copy. Older versions of GCC provide __va_copy. Per t
Autoconf manual, memcpy is a generally portable fallback. */
#ifndef va_copy
# ifdef __va_copy
# define va_copy(d, s) __va_copy((d), (s))
# else
# define va_copy(d, s) memcpy(&(d), &(s), sizeof(va_list))
# endif
#endif
char *bufferPtr;
int bufferLen;
int osi_audit_all = (-1); /* Not determined yet */
@ -97,11 +87,6 @@ audmakebuf(char *audEvent, va_list vaList)
*(afs_int32 *) bufferPtr = vaLong;
bufferPtr += sizeof(vaLong);
break;
case AUD_LST: /* Ptr to another list */
va_copy(vaLst, va_arg(vaList, va_list));
audmakebuf(audEvent, vaLst);
va_end(vaLst);
break;
case AUD_FID: /* AFSFid - contains 3 entries */
vaFid = (struct AFSFid *)va_arg(vaList, struct AFSFid *);
if (vaFid) {
@ -148,7 +133,8 @@ audmakebuf(char *audEvent, va_list vaList)
}
static void
printbuf(FILE *out, int rec, char *audEvent, afs_int32 errCode, va_list vaList)
printbuf(FILE *out, int rec, char *audEvent, char *afsName, afs_int32 hostId,
afs_int32 errCode, va_list vaList)
{
int vaEntry;
int vaInt;
@ -175,8 +161,12 @@ printbuf(FILE *out, int rec, char *audEvent, afs_int32 errCode, va_list vaList)
fprintf(out, "[%d] ", num);
}
if (strcmp(audEvent, "VALST") != 0)
fprintf(out, "EVENT %s CODE %d ", audEvent, errCode);
fprintf(out, "EVENT %s CODE %d ", audEvent, errCode);
if (afsName) {
hostAddr.s_addr = hostId;
fprintf(out, "NAME %s HOST %s ", afsName, inet_ntoa(hostAddr));
}
vaEntry = va_arg(vaList, int);
while (vaEntry != AUD_END) {
@ -223,11 +213,6 @@ printbuf(FILE *out, int rec, char *audEvent, afs_int32 errCode, va_list vaList)
vaLong = va_arg(vaList, afs_int32);
fprintf(out, "LONG %d ", vaLong);
break;
case AUD_LST: /* Ptr to another list */
va_copy(vaLst, va_arg(vaList, va_list));
printbuf(out, 1, "VALST", 0, vaLst);
va_end(vaLst);
break;
case AUD_FID: /* AFSFid - contains 3 entries */
vaFid = va_arg(vaList, struct AFSFid *);
if (vaFid)
@ -265,8 +250,7 @@ printbuf(FILE *out, int rec, char *audEvent, afs_int32 errCode, va_list vaList)
vaEntry = va_arg(vaList, int);
} /* end while */
if (strcmp(audEvent, "VALST") != 0)
fprintf(out, "\n");
fprintf(out, "\n");
}
#ifdef AFS_PTHREAD_ENV
@ -296,9 +280,11 @@ osi_audit_init(void)
/* The routine that acually does the audit call.
* ************************************************************************** */
int
osi_audit(char *audEvent, /* Event name (15 chars or less) */
afs_int32 errCode, /* The error code */
...)
osi_audit_internal(char *audEvent, /* Event name (15 chars or less) */
afs_int32 errCode, /* The error code */
char *afsName,
afs_int32 hostId,
va_list vaList)
{
#ifdef AFS_AIX32_ENV
afs_int32 code;
@ -306,7 +292,7 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */
static char BUFFER[32768];
#endif
int result;
va_list vaList;
va_list vaCopy;
#ifdef AFS_PTHREAD_ENV
/* i'm pretty sure all the server apps now call osi_audit_init(),
@ -320,6 +306,8 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */
if (!osi_audit_all && !auditout)
return 0;
va_copy(vaCopy, vaList);
switch (errCode) {
case 0:
result = AUDIT_OK;
@ -354,30 +342,20 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */
*(int *)bufferPtr = errCode;
bufferPtr += sizeof(errCode);
va_start(vaList, errCode);
audmakebuf(audEvent, vaList);
#endif
if (osi_echo_trail) {
va_start(vaList, errCode);
printbuf(stdout, 0, audEvent, errCode, vaList);
printbuf(stdout, 0, audEvent, afsName, hostId, errCode, vaList);
}
va_end(vaCopy);
#ifdef AFS_AIX32_ENV
bufferLen = (int)((afs_int32) bufferPtr - (afs_int32) & BUFFER[0]);
code = auditlog(audEvent, result, BUFFER, bufferLen);
#ifdef notdef
if (code) {
err = errno;
code = auditlog("AFS_Aud_Fail", result, &err, sizeof(err));
if (code)
printf("Error while writing audit entry: %d.\n", errno);
}
#endif /* notdef */
#else
if (auditout) {
va_start(vaList, errCode);
printbuf(auditout, 0, audEvent, errCode, vaList);
printbuf(auditout, 0, audEvent, afsName, hostId, errCode, vaList);
fflush(auditout);
}
#endif
@ -387,6 +365,24 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */
return 0;
}
int
osi_audit(char *audEvent, /* Event name (15 chars or less) */
afs_int32 errCode, /* The error code */
...)
{
va_list vaList;
if ((osi_audit_all < 0) || (osi_echo_trail < 0))
osi_audit_check();
if (!osi_audit_all && !auditout)
return 0;
va_start(vaList, errCode);
osi_audit_internal(audEvent, errCode, NULL, 0, vaList);
va_end(vaList);
return 0;
}
/* ************************************************************************** */
/* Given a RPC call structure, this routine extracts the name and host id from the
@ -504,9 +500,8 @@ osi_auditU(struct rx_call *call, char *audEvent, int errCode, ...)
osi_audit("AFS_Aud_NoCall", (-1), AUD_STR, audEvent, AUD_END);
}
va_start(vaList, errCode);
osi_audit(audEvent, errCode, AUD_NAME, afsName, AUD_HOST, hostId,
AUD_LST, vaList, AUD_END);
osi_audit_internal(audEvent, errCode, afsName, hostId, vaList);
va_end(vaList);
return 0;
}