home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3298 / netstatuids.c < prev    next >
C/C++ Source or Header  |  1991-05-06  |  2KB  |  121 lines

  1. /* History:
  2. 5/3/91 DJB modified to not compile without HAVE_UCRED
  3. 5/1/91 DJB baseline public domain
  4. */
  5.  
  6. #include "confhaveucred.h"
  7. #ifndef HAVE_UCRED
  8. error! error! error! XXX
  9. netstatuids will not work on a system without struct ucred.
  10. #endif
  11.  
  12. #include <stdio.h>
  13. #include "structfile.h"
  14. #include "structucred.h"
  15. #include "structinpcb.h"
  16. #include "inpcblist.h"
  17. #include "filetable.h"
  18. #include "getfcred.h"
  19. #include "strerr.h"
  20. #include "authuser.h"
  21. #include <pwd.h>
  22. #include "mallocfree.h"
  23.  
  24. char *pw(u)
  25. int u;
  26. {
  27.  struct passwd *pw;
  28.  char buf[20];
  29.  
  30.  pw = getpwuid(u);
  31.  if (pw)
  32.    return pw->pw_name;
  33.  sprintf(buf,"%d",u);
  34.  return buf;
  35. }
  36.  
  37. main()
  38. {
  39.  struct inpcb *inp;
  40.  struct file *ft;
  41.  struct file *fp;
  42.  struct ucred *uc;
  43.  int *sfs;
  44.  int numsfs;
  45.  int i;
  46.  unsigned char *fa;
  47.  unsigned char *la;
  48.  char *user;
  49.  
  50.  if (filetableinit() == -1)
  51.   {
  52.    fprintf(stderr,"ns5: %s\n",strerr(filetablestrerr));
  53.    exit(1);
  54.   }
  55.  if (inpcblistinit() == -1)
  56.   {
  57.    fprintf(stderr,"ns5: %s\n",strerr(inpcbliststrerr));
  58.    exit(1);
  59.   }
  60.  
  61.  ft = getfiletable();
  62.  if (!ft)
  63.   {
  64.    fprintf(stderr,"ns5: %s\n",strerr(filetablestrerr));
  65.    exit(1);
  66.   }
  67.  sfs = (int *) malloc((unsigned) (sizeof(int) * mynfile));
  68.  if (!sfs)
  69.   {
  70.    fprintf(stderr,"ns5: out of memory\n");
  71.    exit(1);
  72.   }
  73.  numsfs = 0;
  74.  
  75.  for (fp = ft;fp < ft + mynfile;++fp)
  76.    if (fp->f_count && fp->f_type == DTYPE_SOCKET)
  77.      sfs[numsfs++] = fp - ft;
  78.  
  79.  inp = 0;
  80.  while (inp = nextinpcb(inp))
  81.    for (i = 0;i < numsfs;++i)
  82.      if ((fp = ft + sfs[i])->f_data == (char *) inp->inp_socket)
  83.       {
  84.        sfs[i] = sfs[--numsfs];
  85.        uc = getfcred(fp);
  86.        if (!uc)
  87.     {
  88.      fprintf(stderr,"ns5: warning: %s\n",strerr(getfcredstrerr));
  89.      break;
  90.     }
  91.        fa = (unsigned char *) &(inp->inp_faddr);
  92.        la = (unsigned char *) &(inp->inp_laddr);
  93.        user = 0;
  94.        if (inp->inp_fport)
  95.          user = auth_tcpuser(inp->inp_faddr.s_addr
  96.        ,ntohs(inp->inp_lport)
  97.        ,ntohs(inp->inp_fport));
  98.        else
  99.      break; /*XXX: unconnected server*/
  100.        if (!user)
  101.      user = "?";
  102.        printf("%s@%d.%d.%d.%d:%d\t%s@%d.%d.%d.%d:%d\n"
  103.       ,user
  104.       ,(unsigned) fa[0],(unsigned) fa[1],(unsigned) fa[2],(unsigned) fa[3]
  105.       ,ntohs(inp->inp_fport)
  106.       ,pw(uc->cr_ruid)
  107.       ,(unsigned) la[0],(unsigned) la[1],(unsigned) la[2],(unsigned) la[3]
  108.       ,ntohs(inp->inp_lport)
  109.      );
  110.        fflush(stdout); /*XXX*/
  111.        break;
  112.       }
  113.  
  114.  if (inperrno)
  115.   {
  116.    fprintf(stderr,"ns5: %s\n",strerr(inpcbliststrerr));
  117.    exit(1);
  118.   }
  119.  exit(0);
  120. }
  121.