home *** CD-ROM | disk | FTP | other *** search
- /*---------------------------------------------------------------------------*/
- /* 3ZAP.C - Copyright (c) 3Com Corporation, 1989. All rights reserved.
- By: Michel Degive:CSO:3COM
-
- This program unlink users from a sharename.
- Uses the 3+ Developer's Library. */
- /*---------------------------------------------------------------------------*/
-
- #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"
-
- static char zbuf[4096];
-
- int unlink_users(char *, char *, char *, int);
- void trim(char *);
- void trim_r(char *);
- void trim_l(char *);
-
- /*---------------------------------------------------------------------------*/
- void main (argc, argv, envp)
- int argc;
- char *argv[];
- char *envp[];
- /*---------------------------------------------------------------------------*/
- {
- char parm_line[300],server_share[60],server[60],sharename[60],loginname[60];
- char *cpos;
- int i=0,option=0;
-
- printf("\n╒═════════════════════════════╕");
- printf("\n│ 3Zap - The Unlinker - V2.01 │");
- printf("\n╘═════════════════════════════╛");
-
- memset(parm_line,'\0',300);
- memset(server_share,'\0',60);
- memset(server,'\0',60);
- memset(sharename,'\0',60);
- memset(loginname,'\0',60);
-
- if (argc<2)
- {
- printf("\n3Zap - Unlinks Users from \\\\server\\sharename");
- printf("\n EG: 3Zap \\\\server:domain\\sharename");
- printf("\n Option parm: /U - Unlink login user if linked" );
- exit(1);
- }
- for (i=0;i<argc-1;i++)
- {
- if (i!=0)
- strcat(parm_line," ");
- strcat(parm_line,argv[i+1]);
- }
- strcpy(server_share,strupr(parm_line));
-
- if(NULL!=(cpos=strstr(server_share,"/U"))) /* option */
- {
- option=-1;
- strcpy(cpos,"\0");
- }
- trim(server_share);
-
- if (server_share[0]==92)
- i=1;
- if (server_share[1]==92)
- i=2;
- strcpy(server,server_share+i); /* remove \\ in front of server */
-
- if(NULL!=(cpos=strchr(server,92))) /* parse server/sharename */
- {
- strcpy(sharename,cpos+1); /* sharename */
- strcpy(cpos,"\0"); /* server name */
- }
-
- if (D3LGetLoginName(loginname)) /* get Login User Name */
- {
- printf("\n ERROR: Could not get Login User Name, Login first\n");
- exit(1);
- }
-
- if (!D3LIsAdminUser()) /* Is user Admin? */
- {
- printf("\n ERROR: Must be Admin user to run 3Zap\n");
- exit(1);
- }
-
- if (unlink_users(server,sharename,loginname,option))
- {
- printf("\n ERROR: Invalid Server or Sharename\n");
- exit(1);
- }
-
- exit (0);
- }
-
- /*---------------------------------------------------------------------------*/
- int unlink_users(server,sharename,loginname,option)
- char server[];
- char sharename[];
- char loginname[];
- int option;
- /*---------------------------------------------------------------------------*/
- {
- int startnbr=0, nbrret, i, retcode;
- EnumSessionInfo *sessInfo;
- char user[60];
-
- printf("\n Server-----> %s\n Sharename--> %s\n Links------> \n",server,sharename);
-
- startnbr = 0;
- do {
- if (strlen(sharename))
- retcode = D3LEnumShareConnects(server, &startnbr, &nbrret,
- zbuf, sizeof(zbuf), sharename);
- else
- retcode = D3LEnumSessions(server, &startnbr, &nbrret,
- zbuf, sizeof(zbuf), "*");
-
- if ((retcode) && (retcode != MOREDATA))
- {
- return retcode;
- break;
- }
- sessInfo = (EnumSessionInfo *) zbuf;
- for (i = 0; i < nbrret; i++)
- {
- strcpy(user, sessInfo->userid);
- if (!option && 0==(stricmp(user,loginname)))
- printf(" %s will not be unlinked\n",user);
- else
- {
- if(D3LForceCloseSession(server,sessInfo->session_id))
- printf(" Could not Unlink: %s\n",sessInfo->userid);
- else
- printf(" %s Unlinked\n",sessInfo->userid);
- }
- ++sessInfo;
- }
- } while (startnbr != 0);
- return 0;
- }
-
- /****************************************************************************/
- void trim(s) /* Trim blanks from s (left & right) */
- char *s;
- /****************************************************************************/
- {
-
- trim_l (s);
- trim_r (s);
-
- } /* end of trim */
-
- /****************************************************************************/
- void trim_r(s) /* Trim right blanks from s */
- char *s;
- /****************************************************************************/
- {
- char *p,*q;
-
- q=s+strlen(s);
- p=q;
- while (' '== *(--p)) q=p;
- *q='\0';
-
- } /* end of trim_r */
-
-
- /****************************************************************************/
- void trim_l(s) /* Trim left blanks from s */
- char s[];
- /****************************************************************************/
- {
- int i=0,p=0;
-
- for (p=0;s[p]==' ';p++); /* find first non blank character */
- for (i=0;s[i]!='\0';i++)
- s[i]=s[i+p];
- s[i]='\0';
-
- } /* end of trim_l */
-
-