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

  1. #include <sys/types.h>
  2. #include <sys/file.h>
  3. #include "sessconnlog.h"
  4. #include "ptymisc.h"
  5. #include "config/sessconnfile.h"
  6. #include "config/ptyext.h"
  7.  
  8. static int flagsessconnlog = 1;
  9.  
  10. void sessconnlog_disable()
  11. {
  12.  flagsessconnlog = 0;
  13. }
  14.  
  15. int sessconnlog(sl)
  16. struct sessconnlog *sl;
  17. {
  18.  int fdnow;
  19.  int fd;
  20.  int x;
  21.  char *s;
  22.  
  23.  if (!flagsessconnlog)
  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(SESSCONNNOW_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 sessconnnow is messed up! */
  42.        return -1;
  43.       }
  44.      lflock(fdnow);
  45.      fd = open(SESSCONNLOG_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 sessconnnow 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 sessconnlog_fill(sl,ext,remote,siglerpid,date)
  70. struct sessconnlog *sl;
  71. char *ext;
  72. char *remote;
  73. int siglerpid;
  74. long date;
  75. {
  76.  sl->ext[0] = ext[0];
  77.  sl->ext[1] = ext[1];
  78.  sl->ext[2] = ext[2]; /* requires SESSCONNLOG_EXTLEN be at least 3 */
  79.  strncpy(sl->remote,remote,SESSCONNLOG_REMOTELEN);
  80.  sl->siglerpid = siglerpid;
  81.  sl->date = date;
  82. }
  83.