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

  1. /*---------------------------------------------------------------------------*/
  2. /* 3ZAP.C - Copyright (c) 3Com Corporation, 1989.  All rights reserved.
  3.    By:  Michel Degive:CSO:3COM
  4.  
  5.    This program unlink users from a sharename.
  6.    Uses the 3+ Developer's Library.                                          */
  7. /*---------------------------------------------------------------------------*/
  8.  
  9. #include "stdio.h"
  10. #include "string.h"
  11. #include "ctype.h"
  12. #include "dos.h"
  13. #include "malloc.h"
  14. #include "time.h"
  15. #include "fcntl.h"
  16. #include "sys\types.h"
  17. #include "sys\stat.h"
  18. #include "share.h"
  19. #include "io.h"
  20. #include "process.h"
  21. #include "stdlib.h"
  22.  
  23. #include "d3l.h"
  24.  
  25. static char     zbuf[4096];
  26.  
  27. int unlink_users(char *, char *, char *, int);
  28. void trim(char *);
  29. void trim_r(char *);
  30. void trim_l(char *);
  31.  
  32. /*---------------------------------------------------------------------------*/
  33. void main (argc, argv, envp)
  34. int argc;
  35. char *argv[];
  36. char *envp[];
  37. /*---------------------------------------------------------------------------*/
  38. {
  39. char parm_line[300],server_share[60],server[60],sharename[60],loginname[60];
  40. char *cpos;
  41. int i=0,option=0;
  42.  
  43. printf("\n╒═════════════════════════════╕");
  44. printf("\n│ 3Zap - The Unlinker - V2.01 │");
  45. printf("\n╘═════════════════════════════╛");
  46.  
  47. memset(parm_line,'\0',300);
  48. memset(server_share,'\0',60);
  49. memset(server,'\0',60);
  50. memset(sharename,'\0',60);
  51. memset(loginname,'\0',60);
  52.  
  53. if (argc<2)
  54.         {
  55.         printf("\n3Zap - Unlinks Users from \\\\server\\sharename");
  56.         printf("\n       EG: 3Zap \\\\server:domain\\sharename");
  57.         printf("\n       Option parm: /U - Unlink login user if linked" );
  58.         exit(1);
  59.         }
  60. for (i=0;i<argc-1;i++)
  61.         {
  62.         if (i!=0)
  63.                 strcat(parm_line," ");
  64.         strcat(parm_line,argv[i+1]);
  65.         }
  66. strcpy(server_share,strupr(parm_line));
  67.  
  68. if(NULL!=(cpos=strstr(server_share,"/U")))  /* option */
  69.         {
  70.         option=-1;
  71.         strcpy(cpos,"\0");
  72.         }
  73. trim(server_share);
  74.  
  75. if (server_share[0]==92)
  76.         i=1;
  77. if (server_share[1]==92)
  78.         i=2;
  79. strcpy(server,server_share+i); /* remove \\ in front of server */
  80.  
  81. if(NULL!=(cpos=strchr(server,92)))  /* parse server/sharename */
  82.         {
  83.         strcpy(sharename,cpos+1); /* sharename */
  84.         strcpy(cpos,"\0"); /* server name */
  85.         }
  86.  
  87. if (D3LGetLoginName(loginname)) /* get Login User Name */
  88.         {
  89.         printf("\n ERROR: Could not get Login User Name, Login first\n");
  90.         exit(1);
  91.         }
  92.  
  93. if (!D3LIsAdminUser()) /* Is user Admin? */
  94.         {
  95.         printf("\n  ERROR: Must be Admin user to run 3Zap\n");
  96.         exit(1);
  97.         }
  98.  
  99. if (unlink_users(server,sharename,loginname,option))
  100.         {
  101.         printf("\n  ERROR: Invalid Server or Sharename\n");
  102.         exit(1);
  103.         }
  104.  
  105. exit (0);
  106. }
  107.  
  108. /*---------------------------------------------------------------------------*/
  109. int unlink_users(server,sharename,loginname,option)
  110. char server[];
  111. char sharename[];
  112. char loginname[];
  113. int option;
  114. /*---------------------------------------------------------------------------*/
  115. {
  116. int startnbr=0, nbrret, i, retcode;
  117. EnumSessionInfo *sessInfo;
  118. char user[60];
  119.  
  120. printf("\n  Server-----> %s\n  Sharename--> %s\n  Links------>                                \n",server,sharename);
  121.  
  122. startnbr = 0;
  123. do {
  124.         if (strlen(sharename))
  125.                 retcode = D3LEnumShareConnects(server, &startnbr, &nbrret,
  126.                                                 zbuf, sizeof(zbuf), sharename);
  127.         else
  128.                 retcode = D3LEnumSessions(server, &startnbr, &nbrret,
  129.                                                 zbuf, sizeof(zbuf), "*");
  130.  
  131.         if ((retcode) && (retcode != MOREDATA))
  132.                 {
  133.                 return retcode;
  134.                 break;
  135.                 }
  136.         sessInfo = (EnumSessionInfo *) zbuf;
  137.         for (i = 0; i < nbrret; i++)
  138.                 {
  139.                 strcpy(user, sessInfo->userid);
  140.                 if (!option && 0==(stricmp(user,loginname)))
  141.                         printf("               %s will not be unlinked\n",user);
  142.                 else
  143.                         {
  144.                         if(D3LForceCloseSession(server,sessInfo->session_id))
  145.                                 printf("               Could not Unlink: %s\n",sessInfo->userid);
  146.                         else
  147.                                 printf("               %s Unlinked\n",sessInfo->userid);
  148.                         }
  149.                 ++sessInfo;
  150.                 }
  151. } while (startnbr != 0);
  152. return 0;
  153. }
  154.  
  155. /****************************************************************************/
  156. void trim(s) /* Trim blanks from s (left & right) */
  157. char *s;
  158. /****************************************************************************/
  159. {
  160.  
  161. trim_l (s);
  162. trim_r (s);
  163.  
  164. } /* end of trim */
  165.  
  166. /****************************************************************************/
  167. void trim_r(s) /* Trim right blanks from s */
  168. char *s;
  169. /****************************************************************************/
  170. {
  171. char *p,*q;
  172.  
  173. q=s+strlen(s);
  174. p=q;
  175. while (' '== *(--p)) q=p;
  176. *q='\0';
  177.  
  178. } /* end of trim_r */
  179.  
  180.  
  181. /****************************************************************************/
  182. void trim_l(s) /* Trim left blanks from s */
  183. char s[];
  184. /****************************************************************************/
  185. {
  186. int i=0,p=0;
  187.  
  188. for (p=0;s[p]==' ';p++);  /* find first non blank character */
  189. for (i=0;s[i]!='\0';i++)
  190.         s[i]=s[i+p];
  191. s[i]='\0';
  192.  
  193. } /* end of trim_l */
  194.  
  195.  
  196.