DWORD NetShare( int argc, char ** argv ) { DWORD dwError = 0; PNET_SHARE_COMMAND_INFO pCommandInfo = NULL; dwError = NetShareParseArguments( argc, argv, &pCommandInfo ); BAIL_ON_LTNET_ERROR(dwError); dwError = NetShareInitialize(); BAIL_ON_LTNET_ERROR(dwError); switch (pCommandInfo->dwControlCode) { case NET_SHARE_ADD: dwError = NetExecShareAdd(pCommandInfo->ShareAddOrSetInfo); BAIL_ON_LTNET_ERROR(dwError); break; case NET_SHARE_DEL: dwError = NetExecShareDel(pCommandInfo->ShareDelInfo); BAIL_ON_LTNET_ERROR(dwError); break; case NET_SHARE_ENUM: dwError = NetExecShareEnum(pCommandInfo->ShareEnumInfo); BAIL_ON_LTNET_ERROR(dwError); break; case NET_SHARE_SETINFO: dwError = NetExecSetInfo(pCommandInfo->ShareAddOrSetInfo); BAIL_ON_LTNET_ERROR(dwError); break; default: break; } cleanup: NetShareFreeCommandInfo(pCommandInfo); LTNET_SAFE_FREE_MEMORY(pCommandInfo); pCommandInfo = NULL; return dwError; error: goto cleanup; }
static DWORD NetShareEnumParseArguments( int argc, char ** argv, IN OUT PNET_SHARE_COMMAND_INFO pCommandInfo ) { DWORD dwError = 0; if (!argv[3]) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } dwError = LwMbsToWc16s(argv[3], &pCommandInfo->ShareEnumInfo.pwszServerName); BAIL_ON_LTNET_ERROR(dwError); cleanup: return dwError; error: NetShareFreeCommandInfo(pCommandInfo); goto cleanup; }
static DWORD NetShareEnumParseArguments( int argc, char ** argv, IN OUT PNET_SHARE_COMMAND_INFO pCommandInfo ) { DWORD dwError = 0; if (!strncmp(argv[2], "\\\\", sizeof("\\\\")-1)) { dwError = LwMbsToWc16s(argv[2]+sizeof("\\\\")-1, &pCommandInfo->ShareEnumInfo.pwszServerName); BAIL_ON_LTNET_ERROR(dwError); } cleanup: return dwError; error: NetShareFreeCommandInfo(pCommandInfo); goto cleanup; }
static DWORD NetShareSetinfoParseArguments( int argc, char ** argv, IN OUT PNET_SHARE_COMMAND_INFO pCommandInfo ) { DWORD dwError = 0; int indexShareSetInfoArg = 3; if (!argv[indexShareSetInfoArg]) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } if (!strncmp(argv[indexShareSetInfoArg], "\\\\", sizeof("\\\\")-1)) { dwError = LwMbsToWc16s(argv[indexShareSetInfoArg]+sizeof("\\\\")-1, &pCommandInfo->ShareAddOrSetInfo.pwszServerName); BAIL_ON_LTNET_ERROR(dwError); indexShareSetInfoArg++; } if (indexShareSetInfoArg > argc-1) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } dwError = LwMbsToWc16s(argv[indexShareSetInfoArg], &pCommandInfo->ShareAddOrSetInfo.pwszShareName); BAIL_ON_LTNET_ERROR(dwError); // Process set-info options dwError = ParseShareAddOrSetinfoOptionArgs(argc, ++indexShareSetInfoArg, argv, pCommandInfo->dwControlCode, &pCommandInfo->ShareAddOrSetInfo); BAIL_ON_LTNET_ERROR(dwError); cleanup: return dwError; error: NetShareFreeCommandInfo(pCommandInfo); goto cleanup; }
static DWORD NetShareAddParseArguments( int argc, char** argv, IN OUT PNET_SHARE_COMMAND_INFO pCommandInfo ) { DWORD dwError = 0; PCSTR pszPath = NULL; size_t sShareNameLen = 0; int indexShareAddArg = 3; // Do not free PCSTR pszShareAddShareInfo = NULL; PSTR pszShareName = NULL; if (!argv[indexShareAddArg]) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } if (!strncmp(argv[indexShareAddArg], "\\\\", sizeof("\\\\")-1)) { dwError = LwMbsToWc16s(argv[indexShareAddArg]+sizeof("\\\\")-1, &pCommandInfo->ShareAddOrSetInfo.pwszServerName); BAIL_ON_LTNET_ERROR(dwError); indexShareAddArg++; } if (indexShareAddArg > argc-1) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } pszShareAddShareInfo = argv[indexShareAddArg]; pszPath = strchr(pszShareAddShareInfo, '='); if (LTNET_IS_NULL_OR_EMPTY_STR(pszPath)) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } dwError = LwMbsToWc16s(pszPath+1, &pCommandInfo->ShareAddOrSetInfo.pwszPath); BAIL_ON_LTNET_ERROR(dwError); sShareNameLen = strlen(pszShareAddShareInfo)-strlen(pszPath); if (!sShareNameLen) { dwError = LW_ERROR_INVALID_PARAMETER; BAIL_ON_LTNET_ERROR(dwError); } dwError = LwNetAllocateMemory(sShareNameLen+1, (PVOID*)&pszShareName); BAIL_ON_LTNET_ERROR(dwError); memcpy(pszShareName, pszShareAddShareInfo, sShareNameLen); dwError = LwMbsToWc16s(pszShareName, &pCommandInfo->ShareAddOrSetInfo.pwszShareName); BAIL_ON_LTNET_ERROR(dwError); // Process add options dwError = ParseShareAddOrSetinfoOptionArgs(argc, ++indexShareAddArg, argv, pCommandInfo->dwControlCode, &pCommandInfo->ShareAddOrSetInfo); BAIL_ON_LTNET_ERROR(dwError); cleanup: LTNET_SAFE_FREE_STRING(pszShareName); return dwError; error: NetShareFreeCommandInfo(pCommandInfo); goto cleanup; }