|
|
1.1 ! root 1: //////////////////////////////////////////////////////// ! 2: // ! 3: // Client.c -- ! 4: // ! 5: // This program is a command line oriented ! 6: // demonstration of the FloppyLocker service ! 7: // sample, aka floplock.exe ! 8: // ! 9: // Copyright 1993, Microsoft Corp. All Rights Reserved ! 10: ! 11: /****************************************************************************\ ! 12: * INCLUDES, DEFINES, TYPEDEFS ! 13: \****************************************************************************/ ! 14: #define STRICT ! 15: #include <windows.h> ! 16: #include <stdio.h> ! 17: #include <stdlib.h> ! 18: #include <string.h> ! 19: ! 20: #define PERR(api) printf("\n%s: Error %d from %s on line %d", \ ! 21: __FILE__, GetLastError(), api, __LINE__); ! 22: #define PMSG(msg) printf("\n%s line %d: %s", \ ! 23: __FILE__, __LINE__, msg); ! 24: ! 25: /****************************************************************************\ ! 26: * GLOBAL VARIABLES ! 27: \****************************************************************************/ ! 28: ! 29: #define SZ_NAME_BUF 30 ! 30: UCHAR ucMchNameBuf[SZ_NAME_BUF] = ""; ! 31: LPTSTR lpszMchName = (LPTSTR)&ucMchNameBuf; ! 32: UCHAR ucOperation; ! 33: ! 34: /****************************************************************************\ ! 35: * FUNCTION PROTOTYPES ! 36: \****************************************************************************/ ! 37: ! 38: BOOL CrackArgs(UINT argc, char *argv[]); ! 39: VOID DisplayHelp(VOID); ! 40: ! 41: VOID main(int argc, char *argv[]) ! 42: { ! 43: char inbuf[180]; ! 44: char outbuf[180]; ! 45: DWORD bytesRead; ! 46: BOOL ret; ! 47: #define SZ_PIPE_NAME_BUF 50 ! 48: UCHAR ucPipeNameBuf[SZ_PIPE_NAME_BUF] = ""; ! 49: LPTSTR lpszPipeName = (LPTSTR)&ucPipeNameBuf; ! 50: ! 51: if (!CrackArgs(argc,argv)) ! 52: exit(1); ! 53: ! 54: strcpy(lpszPipeName,lpszMchName); ! 55: strcat(lpszPipeName,"\\pipe\\sd_flppy"); ! 56: ! 57: outbuf[0] = ucOperation; ! 58: outbuf[1] = '\0'; ! 59: ! 60: ret = CallNamedPipe(lpszPipeName, ! 61: outbuf, ! 62: sizeof(outbuf), ! 63: inbuf, ! 64: sizeof(inbuf), ! 65: &bytesRead, ! 66: NMPWAIT_WAIT_FOREVER); ! 67: ! 68: if (!ret) ! 69: { if (ERROR_ACCESS_DENIED == GetLastError()) ! 70: { printf("\nAccess denied\n"); ! 71: } ! 72: else if (ERROR_BAD_NETPATH == GetLastError()) ! 73: { printf("\nMachine %s not found\n",lpszMchName); ! 74: } ! 75: else ! 76: { PERR("CallNamedPipe"); ! 77: } ! 78: exit(1); ! 79: } ! 80: ! 81: printf("\n%s %s\n",lpszMchName,inbuf); ! 82: } ! 83: ! 84: /****************************************************************************\ ! 85: * ! 86: * FUNCTION: CrackArgs ! 87: * ! 88: \****************************************************************************/ ! 89: ! 90: BOOL CrackArgs(UINT argc, char *argv[]) ! 91: { ! 92: char *p; ! 93: ! 94: /**************************************************************************\ ! 95: * ! 96: * There must be two arguments ! 97: * ! 98: \**************************************************************************/ ! 99: ! 100: if (argc != 3) ! 101: { DisplayHelp(); ! 102: return(FALSE); ! 103: } ! 104: ! 105: p=argv[1]; ! 106: ! 107: /**************************************************************************\ ! 108: * ! 109: * The machine name argument must be 3 to (SZ_NAME_BUF-3) chars long ! 110: * ! 111: \**************************************************************************/ ! 112: ! 113: if ((strlen(p) < 3) || (strlen(p) > (SZ_NAME_BUF-3) )) ! 114: { DisplayHelp(); ! 115: return(FALSE); ! 116: } ! 117: ! 118: /**************************************************************************\ ! 119: * ! 120: * The first two chars in the machine name argument must be \ ! 121: * ! 122: \**************************************************************************/ ! 123: ! 124: if ('\\' != *p) ! 125: { DisplayHelp(); ! 126: return(FALSE); ! 127: } ! 128: if ('\\' != *(p+1)) ! 129: { DisplayHelp(); ! 130: return(FALSE); ! 131: } ! 132: ! 133: /**************************************************************************\ ! 134: * ! 135: * Set up the machine name ! 136: * ! 137: \**************************************************************************/ ! 138: ! 139: strcpy(lpszMchName,"\\\\"); ! 140: strcat(lpszMchName,(p+2)); ! 141: ! 142: ! 143: p=argv[2]; ! 144: ! 145: /**************************************************************************\ ! 146: * ! 147: * The switch argument must be 2 chars long ! 148: * ! 149: \**************************************************************************/ ! 150: ! 151: if (strlen(p) != 2) ! 152: { DisplayHelp(); ! 153: return(FALSE); ! 154: } ! 155: ! 156: /**************************************************************************\ ! 157: * ! 158: * The first char in the switch argument must be / ! 159: * ! 160: \**************************************************************************/ ! 161: ! 162: if ('/' != *p) ! 163: { DisplayHelp(); ! 164: return(FALSE); ! 165: } ! 166: ! 167: /**************************************************************************\ ! 168: * ! 169: * Chars 2 must be U or L or Q ! 170: * ! 171: \**************************************************************************/ ! 172: ! 173: ! 174: switch (*(p+1)) ! 175: { case 'u': ! 176: case 'U': ! 177: ucOperation = 'U'; ! 178: break; ! 179: case 'l': ! 180: case 'L': ! 181: ucOperation = 'L'; ! 182: break; ! 183: case 'q': ! 184: case 'Q': ! 185: ucOperation = 'Q'; ! 186: break; ! 187: default : ! 188: DisplayHelp(); ! 189: return(FALSE); ! 190: } ! 191: ! 192: return(TRUE); ! 193: } ! 194: ! 195: /****************************************************************************\ ! 196: * ! 197: * FUNCTION: DisplayHelp ! 198: * ! 199: \****************************************************************************/ ! 200: ! 201: VOID DisplayHelp(VOID) ! 202: { ! 203: printf("\nusage: chgflpsd \\\\machinenam /switch"); ! 204: printf("\n Values for /switch"); ! 205: printf("\n /u Unlock"); ! 206: printf("\n /l Lock"); ! 207: printf("\n /q Query\n"); ! 208: printf("\nFor example to manage DACLs on machine \\\\flip5's floppies"); ! 209: printf("\n chgflpsd \\\\flip5 /u Gives access to everyone"); ! 210: printf("\n chgflpsd \\\\flip5 /l Gives access to only local admins"); ! 211: printf("\n chgflpsd \\\\flip5 /q Query current access on \\\\flip5\n"); ! 212: ! 213: return; ! 214: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.