Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 lines
4.7 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. trename.c
  5. Abstract:
  6. Test for cluster object rename APIs
  7. Author:
  8. John Vert (jvert) 5/10/1996
  9. Revision History:
  10. --*/
  11. #include "windows.h"
  12. #include "cluster.h"
  13. #include "stdio.h"
  14. #include "stdlib.h"
  15. LPWSTR ClusterName=NULL;
  16. BOOL DoGroup=FALSE;
  17. BOOL DoResource=FALSE;
  18. BOOL DoCluster=FALSE;
  19. LPWSTR OldName=NULL;
  20. LPWSTR NewName=NULL;
  21. CHAR UsageText[] =
  22. "TRENAME [-c cluster] type [oldname] newname\n"
  23. " cluster\tspecifies the name of the cluster to connect to\n"
  24. " type\t\teither \"cluster\" or \"group\" or \"resource\"\n"
  25. " oldname\t\tthe current friendly name of the object\n"
  26. " \t\t(required for group or resource)\n"
  27. " newname\t\tthe new friendly name of the object\n";
  28. void
  29. Usage(
  30. void
  31. )
  32. {
  33. fprintf(stderr, UsageText);
  34. exit(1);
  35. }
  36. LPWSTR
  37. GetString(
  38. IN LPSTR String
  39. )
  40. {
  41. LPWSTR wString;
  42. DWORD Length;
  43. Length = strlen(String)+1;
  44. wString = malloc(Length*sizeof(WCHAR));
  45. if (wString == NULL) {
  46. fprintf(stderr, "GetString couldn't malloc %d bytes\n",Length*sizeof(WCHAR));
  47. }
  48. mbstowcs(wString, String, Length);
  49. return(wString);
  50. }
  51. void
  52. ParseArgs(
  53. int argc,
  54. char *argv[]
  55. )
  56. {
  57. int i;
  58. DWORD ArgsSeen=0;
  59. for (i=1;i<argc;i++) {
  60. if ((argv[i][0] == '-') ||
  61. (argv[i][0] == '/')) {
  62. switch (argv[i][1]) {
  63. case 'c':
  64. if (++i == argc) {
  65. Usage();
  66. }
  67. ClusterName = GetString(argv[i]);
  68. break;
  69. default:
  70. Usage();
  71. break;
  72. }
  73. } else {
  74. switch (ArgsSeen) {
  75. case 0:
  76. //
  77. // type
  78. //
  79. if (_stricmp(argv[i], "group")==0) {
  80. DoGroup = TRUE;
  81. } else if (_stricmp(argv[i], "resource") == 0) {
  82. DoResource = TRUE;
  83. } else if (_stricmp(argv[i], "cluster") == 0) {
  84. DoCluster = TRUE;
  85. ArgsSeen++;
  86. } else {
  87. Usage();
  88. }
  89. ArgsSeen++;
  90. break;
  91. case 1:
  92. OldName = GetString(argv[i]);
  93. ArgsSeen++;
  94. break;
  95. case 2:
  96. NewName = GetString(argv[i]);
  97. ArgsSeen++;
  98. break;
  99. default:
  100. Usage();
  101. }
  102. }
  103. }
  104. if (ArgsSeen != 3) {
  105. Usage();
  106. }
  107. }
  108. _cdecl
  109. main (argc, argv)
  110. int argc;
  111. char *argv[];
  112. {
  113. HCLUSTER hClus;
  114. HGROUP hGroup;
  115. HRESOURCE hResource;
  116. LPSTR KeyName, ParamName;
  117. LPSTR ParamValue;
  118. DWORD Status;
  119. ParseArgs(argc, argv);
  120. hClus = OpenCluster(ClusterName);
  121. if (hClus == NULL) {
  122. fprintf(stderr,
  123. "OpenCluster %ws failed %d\n",
  124. (ClusterName == NULL) ? L"(NULL)" : ClusterName,
  125. GetLastError());
  126. return(0);
  127. }
  128. if (DoGroup) {
  129. hGroup = OpenClusterGroup(hClus, OldName);
  130. if (hGroup == NULL) {
  131. fprintf(stderr,
  132. "OpenGroup %ws failed %d\n", OldName, GetLastError());
  133. return(0);
  134. }
  135. Status = SetClusterGroupName(hGroup, NewName);
  136. if (Status != ERROR_SUCCESS) {
  137. fprintf(stderr,
  138. "SetClusterGroupName from %ws to %ws failed %d\n",
  139. OldName,
  140. NewName,
  141. Status);
  142. }
  143. } else if (DoResource) {
  144. hResource = OpenClusterResource(hClus, OldName);
  145. if (hResource == NULL) {
  146. fprintf(stderr,
  147. "OpenResource %ws failed %d\n", OldName, GetLastError());
  148. return(0);
  149. }
  150. Status = SetClusterResourceName(hResource, NewName);
  151. if (Status != ERROR_SUCCESS) {
  152. fprintf(stderr,
  153. "SetClusterResourceName from %ws to %ws failed %d\n",
  154. OldName,
  155. NewName,
  156. Status);
  157. }
  158. } else if (DoCluster) {
  159. Status = SetClusterName(hClus, NewName);
  160. if (Status != ERROR_SUCCESS) {
  161. fprintf(stderr,
  162. "SetClusterName to %ws failed %d\n",
  163. NewName,
  164. Status);
  165. }
  166. }
  167. return(0);
  168. }