home *** CD-ROM | disk | FTP | other *** search
- /*---------------------------------------------------------------------------*/
- /* 3ETHNAM - Copyright (c) 3Com Corporation, 1989. All rights reserved.
- By: Michel Degive
- This program will search for the login name of a given ethernet address
- Uses 3+ Developer's Library */
- /*---------------------------------------------------------------------------*/
- /* updated: /*
- /* 10/18/90 - MMD - v1.01 Now also queries locator */
-
- #include "stdio.h"
- #include "string.h"
- #include "ctype.h"
- #include "dos.h"
- #include "malloc.h"
- #include "time.h"
- #include "fcntl.h"
- #include "sys\types.h"
- #include "sys\stat.h"
- #include "share.h"
- #include "io.h"
- #include "process.h"
- #include "stdlib.h"
-
- #include "D3L.H"
- #include "3ethnam.h"
-
- static char zbuf[4096];
- static char datarec[26000];
- unsigned long SwapLong();
-
- /*---------------------------------------------------------------------------*/
- void main (argc, argv, envp)
- int argc;
- char *argv[];
- char *envp[];
- /*---------------------------------------------------------------------------*/
- {
- char org[21], domain[21], eth_add[40], server_name[60], ret_add[40];
- char *zptr;
- char nb_name [16], ch;
- int nbrnames,startnbr,nbrret,i,j,k,retcode,size,len,option,index=0;
-
- EnumSessionInfo *sm;
- sNetAddr net_add, *znet;
- New_NB_Name_Table nbtbl;
-
- memset(org,'\0',21);
- memset(domain,'\0',21);
- memset(eth_add,'\0',40);
- memset(ret_add,'\0',40);
- memset(server_name,'\0',60);
-
- printf("\n╒═════════════════╕");
- printf("\n│ 3EthNam - V1.01 │");
- printf("\n╘═════════════════╛");
-
- if (argc<2)
- {
- printf("\n3EthNam - Search for 3+Name corresponding to an Ethernet Address");
- printf("\n in default domain/organization");
- printf("\n\n 3ETHNAM EthAddress [DOMAIN] [OPTION], EG: 3ETHNAM 02608c007876 CSO C");
- printf("\n EthAddress is the Ethernet Address to search for, will prefix address");
- printf("\n with 02608C if not specified");
- printf("\n [DOMAIN] is optional, if not specified, uses current domain");
- printf("\n [OPTION] C=Chat, shows 3+Servers being searched");
- printf("\n L=Locator Search ONLY");
- printf("\n");
-
- exit(1);
- }
-
- if (strlen(argv[1])==6) /* add 02608c in front of address */
- sprintf(eth_add,"02608c%s",argv[1]);
- else
- strcpy(eth_add,argv[1]);
-
- /* get default domain and organization */
- D3LGetOrgName(org);
- if (argc>2) /* domain */
- strcpy(domain,argv[2]);
- else
- D3LGetDomainName(domain);
-
- if (argc>3) /* option C=option, L=Locator Search ONLY */
- option=argv[3][0];
- else
- option=0;
-
- if (option!='L' && option!='l')
- {
- /* get list of server in domain/org */
- printf("\nSearching for address: %s in Domain %s, please wait ...",eth_add,domain);
- D3LEnumServers(org, domain, "*", datarec, 26000, &nbrnames);
- zptr=datarec;
- for(i=0;i<nbrnames;i++)
- {
- sprintf(server_name,"%s:%s:%s",zptr,domain,org);
- size=strlen(zptr)+1;
- zptr += size;
- /* check if server is responding */
- if (D3LCheckServer(server_name))
- {
- printf("\n3+Server %s not responding", server_name);
- continue;
- }
- /* check if address is a server */
- D3LGetServerAddress(server_name, &net_add);
- D3LEth2Ascii(&net_add.na_ethaddr, ret_add);
- if (option=='C' || option=='c')
- printf("\nQuerying 3+Server: %s, address: %s", server_name,ret_add);
- if (!strcmpi(ret_add,eth_add))
- {
- printf("\nEthernet Address %s is 3+Server %s",eth_add, server_name);
- exit(0);
- }
- /* address not a server, get sessions on server */
- startnbr=0;
- do
- {
- D3LEnumSessions(server_name,&startnbr,&nbrret,zbuf,4096,"*");
- sm=(EnumSessionInfo*)zbuf;
- /* for each session get eth address */
- for(j=0;j<nbrret;j++)
- {
- znet=(sNetAddr*)sm->address;
- D3LEth2Ascii(&znet->na_ethaddr, ret_add);
- /* compare eth addresses */
- if (!strcmpi(ret_add,eth_add))
- {
- printf("\nEthernet Address %s is User %s",eth_add, sm->userid);
- exit(0);
- }
- ++sm;
- }
- } while (startnbr!=0);
-
- }
- printf("\nEthernet Address %s is not logged in to any 3+Servers in domain %s", eth_add, domain);
- }
-
- /* search for address in locator */
- printf("\nSearching for address: %s in Locator Database, please wait ...",eth_add,domain);
- for (;;)
- {
- retcode = D3LNewGetNextNBName ( &nbtbl , &index );
- if (retcode==NOMORENAMES) /* end of list */
- {
- printf("\nAddress NOT found in Locator");
- break;
- }
- if (retcode)
- {
- printf("\nError: %d", retcode);
- break;
- }
- D3LEth2Ascii(&nbtbl.addr.na_ethaddr, ret_add);
- if (!strcmpi(ret_add,eth_add))
- {
- printf("\nAddress FOUND");
- for (i=0; i<nbtbl.nbr_of_names;i++)
- {
- ++nbrnames;
- for (j=0;j< 16;j++)
- {
- ch = nbtbl.zname[i].nb_name [j];
- if (isprint(ch)==0) ch = '.';
- nb_name [j] = ch;
- }
- nb_name [16] = '\0';
- printf ("\n Netbios Name: %s - Type: %d",
- nb_name ,nbtbl.zname[i].name_type);
- }
- break;
- }
- }
- printf ("\n");
- exit(0);
- }
-