Logo Search packages:      
Sourcecode: sac version File versions  Download package

sac.h

/* $Copyright: $
 * Copyright (c) 1995 - 2001 by Steve Baker (ice@mama.indstate.edu)
 * All Rights reserved
 *
 * This software is provided as is without any express or implied
 * warranties, including, without limitation, the implied warranties
 * of merchant-ability and fitness for a particular purpose.
 */

#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <sys/wait.h>

#include "utmp.h"

#define scopy(s)  (strcpy(bmalloc(strlen(s)+1),s))
#define min(a,b)  ((a) < (b) ? (a) : (b))
#define max(a,b)  ((a) > (b) ? (a) : (b))

/* This will break if someone has an 89 year old wtmp  =) */
#define MINUSZERO -32767            /* HACK ALERT!! */
#define PLUSZERO  +32767            /* HACK ALERT!! */

#define BUFSIZE         1024

enum {
  TOTAL       = 0x0001, /* Total login time */
  DAY     = 0x0002,     /* Daily average */
  USER    = 0x0003,     /* Per user login time */
  TTY     = 0x0004,     /* Show usage / tty */
  RAW   = 0x0005, /* Show everything */
  SIMUSE  = 0x0006,     /* Simultaneous tty usage */

  AVERAGE = 0x0010,     /* Average login time / login */
  HOUR    = 0x0020,     /* Hourly profile */
  CLIP        = 0x0040, /* Multiple logins during same time count only once */
  MINMAX  = 0x0080,     /* Show min max # logins at one time */
  LOGIN       = 0x0100, /* Display login breakdown */
  IPACCT  = 0x0200,     /* Display IP accounting/data rate info */
  CALLID  = 0x0400,     /* Display caller ID accounting */
  IGNORE  = 0x0800      /* Ignore X amount of usage before starting accounting */
};

/* Time formats */
enum {
  FRAC        = 0x00,   /* default: %10.2f hours */
  HMS   = 0x01,
  HM    = 0x02,
  HOURS       = 0x03,
  SECONDS = 0x04,
  ROUND       = 0x40,
};

#ifndef TRUE
enum { FALSE=0, TRUE=1 };
#endif

enum { USERLIST, EXCLUDELIST, TTYLIST, HOSTLIST, PORTMASTERLIST, LOGFILELIST, FILELIST };

00070 struct day {
  time_t start, stop;
  short day, wday, month, year, minlogins, maxlogins;
  time_t time;
  time_t h[24];
  double inoct, outoct;
  double inpkt, outpkt;
  u_long datarate;
  struct login *login, *lastlogin;
  u_long logins;
  struct usr *us;
  struct tty *tty;
  struct simuse *simuse;
  struct day *nxt;
};

/*
 * Keep a pointer at the end of the days list, since we'll usually be
 * adding crap to it, not to days before.  What 'o what do we do about
 * time changes aka time warps?
 */

00092 struct usr {
  char user[UT_NAMESIZE+1];
  short loggedin, minlogins, maxlogins;
  time_t time;
  time_t ignore;
  time_t h[24];
  double inoct, outoct;
  double inpkt, outpkt;
  u_long datarate;
  struct login *login, *lastlogin;
  u_long logins, xlogins;
  struct usr *nxt;
};

00106 struct tty {
  char line[UT_LINESIZE+1];
  time_t time, h[24];
  double inoct, outoct;
  double inpkt, outpkt;
  u_long datarate;
  struct login *login, *lastlogin;
  u_long logins, xlogins;
  struct tty *nxt;
};

/* simultaneous usage time */
00118 struct simuse {
  short index;
  time_t time;
  long count;
  time_t h[24];
  struct login *login, *lastlogin;
  struct simuse *nxt;
};

/* excluded users list */
00128 struct exc {
  char user[UT_NAMESIZE+1];
  struct exc *nxt;
};

/* ttys list */
00134 struct ttys {
  char *line;
  char ispat;           /* Is tty a pattern?    */
  struct ttys *nxt;
};

/* hosts list */
00141 struct hosts {
  char *host;
  char ispat;           /* Is host a pattern?   */
  char len,ss;          /* Is host a substring? */
  struct hosts *nxt;
};

00148 struct user {
  char user[UT_NAMESIZE+1];
  char line[UT_LINESIZE+1];
  char host[UT_HOSTSIZE+1];
  time_t in;
  struct user *nxt;
};

enum filetype {
  ACCT_WTMP,                  /* Good old linux (sysv) extended utmp format */
  ACCT_ANCIENT,               /* Bad old BSD style utmp with no ut_type field. */
  ACCT_TACACS3,               /* same as above (old BSD style) */
  ACCT_TACACS4,               /* Bizarre utmp w/ ut_comment field. (no ut_type) */
  ACCT_RADIUS,                /* sucky detail file support */
  ACCT_RADIUS_LOGFILE         /* probably won't support this. */
};

00165 struct file {
  char *file;
  char ftype;
  void (*gronk)();
  struct file *nxt;
};

00172 struct login {
  time_t start, stop;
  char *name;
  char *tty;
  char *host;
  struct login *nxt;
};

#include "proto.h"

/* Globals */

#ifdef MAIN
#  define EXTERN
#  define INIT(x) = x
#else
#  define EXTERN extern
#  define INIT(x)
#endif

EXTERN struct day *days INIT(NULL), *end INIT(NULL);
EXTERN struct usr *us INIT(NULL);
EXTERN struct ttys *tty INIT(NULL);
EXTERN struct exc *ex INIT(NULL);
EXTERN struct simuse *simuse INIT(NULL);
EXTERN struct tty *ttys INIT(NULL);
EXTERN struct hosts *hosts INIT(NULL);
EXTERN struct user *usr INIT(NULL);

#ifdef MAIN
  char *month[13] = {
    "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", NULL
  };
  char *dayabbr[8] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat",NULL};
#else
  extern char *month[13], *dayaddbr[8];
#endif

EXTERN char fix INIT(FALSE), exclude INIT(FALSE), fixtty INIT(FALSE), fixhost INIT(FALSE), radhost INIT(FALSE);
EXTERN char hosttoo INIT(FALSE), verbose INIT(FALSE), longdate INIT(FALSE);
EXTERN char *back INIT(NULL), *ignore INIT(NULL), timefmt INIT(FRAC);
EXTERN u_short type INIT(TOTAL);
EXTERN time_t total INIT(0), sd INIT(0), ed INIT(0), backtime INIT(0), curtime INIT(0);
EXTERN time_t lastent INIT(0), ignoretime INIT(0), cutoff INIT(0), discard INIT(0);
EXTERN int ndays INIT(0), logins INIT(0), loggedin INIT(0), minlogins INIT(-1), maxlogins INIT(0);
EXTERN signed int sm INIT(0), em INIT(0);
EXTERN u_long hourmask INIT(0);
EXTERN char *usespec;

/* Simultaneous usage globals */
EXTERN int simdex INIT(0);
EXTERN time_t simtime INIT(0);

EXTERN char buf[BUFSIZE+1];

/*
char *month[] = {
  "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", NULL
};
char *dayabbr[] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat",NULL };

char fix = FALSE, exclude = FALSE, fixtty = FALSE, fixhost = FALSE, radhost = FALSE;
char hosttoo = FALSE, verbose = FALSE, longdate = FALSE;
char *back = NULL, *ignore = NULL, timefmt = FRAC;
u_short type = TOTAL;
time_t total = 0, sd = 0, ed = 0, backtime = 0, curtime = 0;
time_t lastent = 0, ignoretime = 0, cutoff = 0, discard = 0;
int ndays = 0, logins = 0, loggedin = 0, minlogins = -1, maxlogins = 0;
signed int sm = 0, em = 0;
u_long hourmask = 0;
char *usespec;

int simdex = 0;
time_t simtime = 0;

char buf[BUFSIZE+1];
*/

Generated by  Doxygen 1.6.0   Back to index