home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / N / TCPIP / NETKIT-A.06 / NETKIT-A / NetKit-A-0.06 / pidentd-2.2 / testdir / test1.c < prev   
Encoding:
C/C++ Source or Header  |  1993-08-11  |  2.6 KB  |  142 lines

  1. /*
  2. ** A small test program. If run without any arguments, it should
  3. ** return *your* user name if the machine it is run on has a correctly
  4. ** installed and running Ident server.
  5. **
  6. ** Last modified: 11 August 1993 by Michael Kuch
  7. **
  8. ** Author: Peter Eriksson <pen@lysator.liu.se>
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <sys/time.h>
  13. #include <sys/types.h>
  14. #include <sys/socket.h>
  15. #include <netinet/in.h>
  16. #include <arpa/inet.h>
  17. #include <ctype.h>
  18.  
  19.  
  20. int Toupper(c)
  21.   int c;
  22. {
  23.   if (islower(c))
  24.     return toupper(c);
  25.   else
  26.     return c;
  27. }
  28.  
  29.  
  30. /*
  31. ** Compare two strings, case insensitive
  32. */
  33. int Stricmp(s1, s2)
  34.   char *s1, *s2;
  35. {
  36.   int diff;
  37.  
  38.  
  39.   while (!(diff = Toupper(*s1) - Toupper(*s2)) && *s1)
  40.     s1++, s2++;
  41.  
  42.   return diff;
  43. }
  44.  
  45.  
  46. Perror(str)
  47.   char *str;
  48. {
  49.   perror(str);
  50.   exit(1);
  51. }
  52.  
  53.  
  54. main(argc,argv)
  55.   int argc;
  56.   char *argv[];
  57. {
  58.   int fd;
  59.   struct sockaddr_in addr;
  60.   int addrlen;
  61.   int port;
  62.   FILE *fp_in, *fp_out;
  63.   int lport, fport;
  64.   char buffer[8192];
  65.   char reply_type[81];
  66.   char opsys_or_error[81];
  67.   char identifier[1024];
  68.   
  69.   
  70.   if (argc > 3)
  71.   {
  72.     printf("usage: %s [{host-ip-number} [{port number}]]", argv[0]);
  73.     exit(1);
  74.   }
  75.   
  76.   fd = socket(AF_INET, SOCK_STREAM, 0);
  77.   if (fd == -1)
  78.     Perror("socket");
  79.  
  80.   addr.sin_family = AF_INET;
  81.   if(argc > 1)
  82.     addr.sin_addr.s_addr = inet_addr(argv[1]);
  83.   else
  84.     addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  85.  
  86.   if (argc > 2)
  87.     port = atoi(argv[2]);
  88.   else
  89.     port = 113;
  90.   
  91.   addr.sin_port = htons(port);
  92.   addrlen = sizeof(addr);
  93.  
  94.   if (connect(fd, &addr, addrlen) == -1)
  95.     Perror("connect");
  96.  
  97.   addrlen = sizeof(addr);
  98.   if (getsockname(fd, &addr, &addrlen) == -1)
  99.     Perror("getsockname");
  100.  
  101.   fp_in  = fdopen(fd, "r");
  102.   fp_out = fdopen(fd, "w");
  103.   if (!fp_in || !fp_out)
  104.     Perror("fdopen");
  105.  
  106.   fprintf(fp_out, "%d , %d\n", ntohs(addr.sin_port), port);
  107.   fflush(fp_out);
  108.  
  109.   if (fgets(buffer, sizeof(buffer)-1, fp_in) == NULL)
  110.     Perror("fgets");
  111.  
  112.   shutdown(fd, 1);
  113.  
  114.   argc = sscanf(buffer, "%d , %d : %[^ \t\n\r:] : %[^\t\n\r:] : %[^\n\r]",
  115.         &lport, &fport, reply_type, opsys_or_error, identifier);
  116.   if (argc < 3)
  117.   {
  118.     fprintf(stderr, "fscanf: too few arguments (%d)\n", argc);
  119.     exit(1);
  120.   }
  121.   if (Stricmp(reply_type, "ERROR") == 0)
  122.   {
  123.     printf("Ident error: error code: %s\n", opsys_or_error);
  124.     exit(1);
  125.   }
  126.   else if (Stricmp(reply_type, "USERID") != 0)
  127.   {
  128.     printf("Ident error: illegal reply type: %s\n", reply_type);
  129.     exit(1);
  130.   }
  131.   else
  132.     printf("Ident returned:\n");
  133.     printf("\tOpsys and Charset (if -c specified for identd) = %s\n",
  134.                  opsys_or_error);
  135.     printf("\tIdentifier: %s\n", identifier);
  136.  
  137.   fclose(fp_out);
  138.   fclose(fp_in);
  139.  
  140.   exit(0);
  141. }
  142.