home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume25 / pty4 / part02 / sesslog.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-18  |  1.6 KB  |  85 lines

  1. #include <sys/types.h>
  2. #include <sys/file.h>
  3. #include "sesslog.h"
  4. #include "ptymisc.h"
  5. #include "config/sessfile.h"
  6. #include "config/ptyext.h"
  7.  
  8. static int flagsesslog = 1;
  9.  
  10. void sesslog_disable()
  11. {
  12.  flagsesslog = 0;
  13. }
  14.  
  15. int sesslog(sl)
  16. struct sesslog *sl;
  17. {
  18.  int fdnow;
  19.  int fd;
  20.  int x;
  21.  char *s;
  22.  
  23.  if (!flagsesslog)
  24.    return 0;
  25.  for (x = 0,s = PTYEXT1;*s;++s,x += (sizeof(PTYEXT2) - 1))
  26.    if (*s == sl->ext[0])
  27.     {
  28.      for (s = PTYEXT2;*s;++s,++x)
  29.        if (*s == sl->ext[1])
  30.     {
  31.      fdnow = open(SESSNOW_FILE,O_WRONLY | O_CREAT,0644);
  32.      if (fdnow == -1)
  33.        return -1;
  34.          if (lseek(fdnow,x * (long) sizeof(*sl),L_SET) == -1)
  35.       {
  36.        close(fdnow);
  37.        return -1;
  38.       }
  39.      if (write(fdnow,(char *) sl,sizeof(*sl)) < sizeof(*sl))
  40.       {
  41.        close(fdnow); /* XXX: but now sessnow is messed up! */
  42.        return -1;
  43.       }
  44.      lflock(fdnow); /* XXX: what if it fails? */
  45.      fd = open(SESSLOG_FILE,O_WRONLY | O_APPEND | O_CREAT,0644);
  46.      if (fd == -1)
  47.       {
  48.        lfunlock(fdnow);
  49.        close(fdnow);
  50.        return -1; /* XXX: but now sessnow is messed up! */
  51.       }
  52.      if (write(fd,(char *) sl,sizeof(*sl)) < sizeof(*sl))
  53.       {
  54.        lfunlock(fdnow);
  55.        close(fdnow);
  56.        close(fd);
  57.        return -1; /* XXX: but now both logs are messed up! */
  58.       }
  59.      close(fd);
  60.      lfunlock(fdnow);
  61.      close(fdnow);
  62.      return 0;
  63.     }
  64.      return -1;
  65.     }
  66.  return -1;
  67. }
  68.  
  69. void sesslog_fill(sl,ext,username,uid,masterpid,date)
  70. struct sesslog *sl;
  71. char *ext;
  72. char *username;
  73. int uid;
  74. int masterpid;
  75. long date;
  76. {
  77.  sl->ext[0] = ext[0];
  78.  sl->ext[1] = ext[1];
  79.  sl->ext[2] = ext[2]; /* requires SESSLOG_EXTLEN be at least 3 */
  80.  strncpy(sl->username,username,SESSLOG_USERLEN);
  81.  sl->uid = uid;
  82.  sl->masterpid = masterpid;
  83.  sl->date = date;
  84. }
  85.