pidentd-2.8a4
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:4k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. *** parse.c.orig Mon Jul 28 16:01:28 1997
  2. --- parse.c Tue Nov 11 09:35:31 1997
  3. ***************
  4. *** 14,19 ****
  5. --- 14,20 ----
  6.   #endif
  7.   
  8.   #include <stdio.h>
  9. + #include <string.h>
  10.   #include <errno.h>
  11.   #include <ctype.h>
  12.   #include <pwd.h>
  13. ***************
  14. *** 35,42 ****
  15. --- 36,53 ----
  16.   #endif
  17.   
  18.   #include <sys/types.h>
  19. + #include <sys/file.h>
  20.   #include <sys/stat.h>
  21. + #ifndef AIX4
  22. + #include <sys/fcntl.h>
  23. + #endif
  24.   
  25. + #ifndef SRVIDT_FILE
  26. + #define SRVIDT_FILE "/tmp/socks5.ident"
  27. + #endif
  28.   #if defined(MIPS) || defined(BSD43)
  29.   extern int errno;
  30.   #endif
  31. ***************
  32. *** 51,56 ****
  33. --- 62,68 ----
  34.   #include "crypto.h"
  35.   
  36.   extern void *malloc();
  37. + extern char *getenv();
  38.   
  39.   /*
  40.   ** This function will eat whitespace characters until
  41. ***************
  42. *** 154,159 ****
  43. --- 166,218 ----
  44.     return (rcode == 0);
  45.   }
  46.   
  47. + char *socks_user(struct in_addr *faddr, unsigned short fport, struct in_addr *laddr, unsigned short lport)
  48. + {
  49. +  char *myfile = getenv("SOCKS5_IDENTFILE"), *end, *fbuf, *offset;
  50. +  char idtentry[2*16+2*6+1];
  51. +  static char *user;
  52. +  struct stat sb;
  53. +  int fd;
  54. + #ifndef HAVE_FLOCK
  55. +  struct flock fl;
  56. +  fl.l_type   = F_RDLCK;
  57. +  fl.l_whence = SEEK_SET;
  58. +  fl.l_start  = 0;
  59. +  fl.l_len    = 0;
  60. + #endif
  61. +  myfile = myfile?myfile:SRVIDT_FILE;
  62. +  sprintf(idtentry, "%s,%d,",                  inet_ntoa(*faddr), fport);
  63. +  sprintf(idtentry+strlen(idtentry), "%s,%d,", inet_ntoa(*laddr), lport);
  64. +      if (user) free(user);
  65. +      user = NULL;
  66. +      do {
  67. +        if ((fd = open(myfile, O_RDONLY, 0644)) < 0) break;
  68. + #ifndef HAVE_FLOCK
  69. +  fcntl(fd, F_SETLKW, &fl);
  70. + #else
  71. +        flock(fd, LOCK_EX);
  72. + #endif
  73. +        if (fstat(fd, &sb) < 0) break;
  74. +        if ((fbuf = (char *)malloc((sb.st_size+1)*sizeof(char))) == NULL) break;
  75. +        if (read(fd, fbuf, sb.st_size) < 0) break;
  76. +        fbuf[sb.st_size] = '';
  77. +     
  78. +        if ((offset = strstr(fbuf,   idtentry)) == NULL) break;
  79. +        if ((end    = strchr(offset, 'n'))     == NULL) break;
  80. +        *end = '';
  81. +        user = strdup(offset + strlen(idtentry));
  82. +      } while (0);
  83. +      if (fbuf) free(fbuf);
  84. +      if (fd >= 0) close(fd);
  85. +      return user;
  86. + }
  87.   #ifdef INCLUDE_CRYPT
  88.   /*
  89.   ** Checks address of incoming call against network/mask pairs of trusted
  90. ***************
  91. *** 198,203 ****
  92. --- 257,263 ----
  93.   #endif
  94.     struct in_addr laddr2;
  95.     struct in_addr faddr2;
  96. +   char *name;
  97.     int k_opened;
  98.   
  99.     k_opened = 0;
  100. ***************
  101. *** 457,465 ****
  102.       if (debug_flag && syslog_flag)
  103.         syslog(LOG_DEBUG, "  After fscanf(), before k_open()");
  104.   
  105.   
  106.       if (! k_opened)
  107. !     {
  108.         /*
  109.         ** Open the kernel memory device and read the nlist table
  110.         ** 
  111. --- 517,537 ----
  112.       if (debug_flag && syslog_flag)
  113.         syslog(LOG_DEBUG, "  After fscanf(), before k_open()");
  114.   
  115. +       if (debug_flag && syslog_flag)
  116. +         syslog(LOG_DEBUG, "  After fscanf(), before k_getuid()");
  117. +   
  118. +      if ((name = socks_user(&faddr2, fport, laddr, lport)) != NULL) {
  119. +        printf("%d , %d : USERID : %s%s%s :%srn",
  120. +             lport, fport,
  121. +             other_flag ? "OTHER" : "UNIX",
  122. +             charset_name ? " , " : "",
  123. +             charset_name ? charset_name : "",
  124. +             name);
  125. +      }
  126. +     else {
  127.   
  128.       if (! k_opened)
  129. !         {
  130.         /*
  131.         ** Open the kernel memory device and read the nlist table
  132.         ** 
  133. ***************
  134. *** 702,708 ****
  135.         charset_name ? " , " : "",
  136.         charset_name ? charset_name : "",
  137.         pwp->pw_name);
  138.     } while(fflush(stdout), fflush(stderr), multi_flag && eat_whitespace());
  139.   
  140.     return 0;
  141. --- 774,780 ----
  142.         charset_name ? " , " : "",
  143.         charset_name ? charset_name : "",
  144.         pwp->pw_name);
  145. !      }
  146.     } while(fflush(stdout), fflush(stderr), multi_flag && eat_whitespace());
  147.   
  148.     return 0;