home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MISC / NETWORK / 3ETHNAM.ZIP / 3ETHNAM.C next >
Encoding:
C/C++ Source or Header  |  1990-11-21  |  6.1 KB  |  180 lines

  1. /*---------------------------------------------------------------------------*/
  2. /* 3ETHNAM - Copyright (c) 3Com Corporation, 1989.  All rights reserved.
  3.    By:  Michel Degive
  4.    This program will search for the login name of a given ethernet address
  5.    Uses 3+ Developer's Library                  */
  6. /*---------------------------------------------------------------------------*/
  7. /* updated: /*
  8. /* 10/18/90 - MMD - v1.01 Now also queries locator */
  9.  
  10. #include "stdio.h"
  11. #include "string.h"
  12. #include "ctype.h"
  13. #include "dos.h"
  14. #include "malloc.h"
  15. #include "time.h"
  16. #include "fcntl.h"
  17. #include "sys\types.h"
  18. #include "sys\stat.h"
  19. #include "share.h"
  20. #include "io.h"
  21. #include "process.h"
  22. #include "stdlib.h"
  23.  
  24. #include "D3L.H"
  25. #include "3ethnam.h"
  26.  
  27. static char     zbuf[4096];
  28. static char datarec[26000];
  29. unsigned long SwapLong();
  30.  
  31. /*---------------------------------------------------------------------------*/
  32. void main (argc, argv, envp)
  33. int argc;
  34. char *argv[];
  35. char *envp[];
  36. /*---------------------------------------------------------------------------*/
  37. {
  38. char org[21], domain[21], eth_add[40], server_name[60], ret_add[40];
  39. char *zptr;
  40. char nb_name [16], ch;
  41. int  nbrnames,startnbr,nbrret,i,j,k,retcode,size,len,option,index=0;
  42.  
  43. EnumSessionInfo *sm;
  44. sNetAddr net_add, *znet;
  45. New_NB_Name_Table nbtbl;
  46.  
  47. memset(org,'\0',21);
  48. memset(domain,'\0',21);
  49. memset(eth_add,'\0',40);
  50. memset(ret_add,'\0',40);
  51. memset(server_name,'\0',60);
  52.  
  53. printf("\n╒═════════════════╕");
  54. printf("\n│ 3EthNam - V1.01 │");
  55. printf("\n╘═════════════════╛");
  56.  
  57. if (argc<2)
  58.         {
  59.         printf("\n3EthNam - Search for 3+Name corresponding to an Ethernet Address");
  60.         printf("\n          in default domain/organization");
  61.         printf("\n\n  3ETHNAM EthAddress [DOMAIN] [OPTION], EG: 3ETHNAM 02608c007876 CSO C");
  62.         printf("\n       EthAddress is the Ethernet Address to search for, will prefix address");
  63.         printf("\n                  with 02608C if not specified");
  64.         printf("\n       [DOMAIN]   is optional, if not specified, uses current domain");
  65.         printf("\n       [OPTION]   C=Chat, shows 3+Servers being searched");
  66.         printf("\n                  L=Locator Search ONLY");
  67.         printf("\n");
  68.  
  69.         exit(1);
  70.         }
  71.  
  72. if (strlen(argv[1])==6) /* add 02608c in front of address */
  73.         sprintf(eth_add,"02608c%s",argv[1]);
  74. else
  75.         strcpy(eth_add,argv[1]);
  76.  
  77. /* get default domain and organization */
  78. D3LGetOrgName(org);
  79. if (argc>2) /* domain */
  80.         strcpy(domain,argv[2]);
  81. else
  82.         D3LGetDomainName(domain);
  83.  
  84. if (argc>3) /* option C=option, L=Locator Search ONLY */
  85.         option=argv[3][0];
  86. else
  87.         option=0;
  88.  
  89. if (option!='L' && option!='l')
  90. {
  91. /* get list of server in domain/org */
  92. printf("\nSearching for address: %s in Domain %s, please wait ...",eth_add,domain);
  93. D3LEnumServers(org, domain, "*", datarec, 26000, &nbrnames);
  94. zptr=datarec;
  95. for(i=0;i<nbrnames;i++)
  96.         {
  97.         sprintf(server_name,"%s:%s:%s",zptr,domain,org);
  98.         size=strlen(zptr)+1;
  99.         zptr += size;
  100.         /* check if server is responding */
  101.         if (D3LCheckServer(server_name))
  102.                 {
  103.                 printf("\n3+Server %s not responding", server_name);
  104.                 continue;
  105.                 }
  106.         /* check if address is a server */
  107.         D3LGetServerAddress(server_name, &net_add);
  108.         D3LEth2Ascii(&net_add.na_ethaddr, ret_add);
  109.         if (option=='C' || option=='c')
  110.                 printf("\nQuerying 3+Server: %s, address: %s", server_name,ret_add);
  111.         if (!strcmpi(ret_add,eth_add))
  112.                 {
  113.                 printf("\nEthernet Address %s is 3+Server %s",eth_add, server_name);
  114.                 exit(0);
  115.                 }
  116.         /* address not a server, get sessions on server */
  117.         startnbr=0;
  118.         do
  119.                 {
  120.                 D3LEnumSessions(server_name,&startnbr,&nbrret,zbuf,4096,"*");
  121.                 sm=(EnumSessionInfo*)zbuf;
  122.                 /* for each session get eth address */
  123.                 for(j=0;j<nbrret;j++)
  124.                         {
  125.                         znet=(sNetAddr*)sm->address;
  126.                         D3LEth2Ascii(&znet->na_ethaddr, ret_add);
  127.                                 /* compare eth addresses */
  128.                                 if (!strcmpi(ret_add,eth_add))
  129.                                         {
  130.                                         printf("\nEthernet Address %s is User %s",eth_add, sm->userid);
  131.                                         exit(0);
  132.                                         }
  133.                         ++sm;
  134.                         }
  135.                 } while (startnbr!=0);
  136.  
  137.         }
  138. printf("\nEthernet Address %s is not logged in to any 3+Servers in domain %s", eth_add, domain);
  139. }
  140.  
  141. /* search for address in locator */
  142. printf("\nSearching for address: %s in Locator Database, please wait ...",eth_add,domain);
  143. for (;;)
  144.         {
  145.         retcode = D3LNewGetNextNBName ( &nbtbl , &index );
  146.         if (retcode==NOMORENAMES) /* end of list */
  147.                 {
  148.                 printf("\nAddress NOT found in Locator");
  149.                 break;
  150.                 }
  151.         if (retcode)
  152.                 {
  153.                 printf("\nError: %d", retcode);
  154.                 break;
  155.                 }
  156.         D3LEth2Ascii(&nbtbl.addr.na_ethaddr, ret_add);
  157.         if (!strcmpi(ret_add,eth_add))
  158.                 {
  159.                 printf("\nAddress FOUND");
  160.                 for (i=0; i<nbtbl.nbr_of_names;i++)
  161.                       {
  162.                       ++nbrnames;
  163.                       for (j=0;j< 16;j++)
  164.                                 {
  165.                                 ch = nbtbl.zname[i].nb_name [j];
  166.                                 if (isprint(ch)==0) ch = '.';
  167.                                 nb_name [j] = ch;
  168.                                 }
  169.                       nb_name [16] = '\0';
  170.                       printf ("\n  Netbios Name: %s  - Type: %d",
  171.                                 nb_name ,nbtbl.zname[i].name_type);
  172.                       }
  173.                 break;
  174.                 }
  175.         }
  176. printf ("\n");
  177. exit(0);
  178. }
  179.  
  180.