osaf/tools/safimm/immcfg/imm_cfg.c | 46 +++++++++++++++++++++++++++++--------
1 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/osaf/tools/safimm/immcfg/imm_cfg.c
b/osaf/tools/safimm/immcfg/imm_cfg.c
--- a/osaf/tools/safimm/immcfg/imm_cfg.c
+++ b/osaf/tools/safimm/immcfg/imm_cfg.c
@@ -55,6 +55,7 @@ SaImmHandleT immHandle = 0;
SaImmAdminOwnerNameT adminOwnerName = NULL;
SaImmAdminOwnerHandleT ownerHandle = 0;
SaImmCcbHandleT ccbHandle = -1;
+bool isAdminOwnerCreated = false;
extern struct ImmutilWrapperProfile immutilWrapperProfile;
typedef enum {
@@ -129,7 +130,7 @@ static void usage(const char *progname)
printf("\t--disable-attr-notify (only valid with --class-name)\n");
printf("\t-u, --unsafe\n");
printf("\t-L, --validate <imm.xml file>\n");
- printf("\t-o, --admin-owner <admin owner name>\n");
+ printf("\t-o, --admin-owner <admin owner name> (supported in
transaction mode also)\n");
printf("\t--admin-owner-clear\n");
printf("\t--ccb-apply (only in a transaction mode)\n");
printf("\t--ccb-abort (only in a transaction mode)\n");
@@ -1048,6 +1049,15 @@ static int ccb_apply() {
rc = EXIT_FAILURE;
}
+ error = immutil_saImmOmAdminOwnerFinalize(ownerHandle);
+ if (SA_AIS_OK != error) {
+ fprintf(stderr, "error - saImmOmAdminOwnerFinalize
FAILED: %s\n", saf_error(error));
+ rc = EXIT_FAILURE;
+ }
+ isAdminOwnerCreated = false;
+ if(adminOwnerName)
+ free(adminOwnerName);
+ adminOwnerName = NULL;
ccbHandle = -1;
}
@@ -1064,7 +1074,15 @@ static int ccb_abort() {
fprintf(stderr, "error - saImmOmCcbFinalize FAILED:
%s\n", saf_error(error));
rc = EXIT_FAILURE;
}
-
+ error = immutil_saImmOmAdminOwnerFinalize(ownerHandle);
+ if (SA_AIS_OK != error) {
+ fprintf(stderr, "error - saImmOmAdminOwnerFinalize
FAILED: %s\n", saf_error(error));
+ rc = EXIT_FAILURE;
+ }
+ isAdminOwnerCreated = false;
+ if(adminOwnerName)
+ free(adminOwnerName);
+ adminOwnerName = NULL;
ccbHandle = -1;
}
@@ -1438,12 +1456,12 @@ static int imm_operation(int argc, char
xmlFilename = optarg;
break;
case 'o':
- if(adminOwnerName) {
+ if(adminOwnerName && !transaction_mode) {
fprintf(stderr, "Administrative owner name can
be set only once\n");
- if(transaction_mode)
- return -1;
- else
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
+ } else if (transaction_mode && isAdminOwnerCreated){
+ fprintf(stderr, "Administrative owner name can
be set intially, after ccb-apply and ccb-abort\n");
+ return -1;
}
adminOwnerName =
(SaImmAdminOwnerNameT)malloc(strlen(optarg) + 1);
strcpy(adminOwnerName, optarg);
@@ -1473,9 +1491,9 @@ static int imm_operation(int argc, char
if(argc == 1)
op = TRANSACTION_MODE;
- if(!transaction_mode && !adminOwnerName)
+ if((op != TRANSACTION_MODE && !adminOwnerName && !transaction_mode ) ||
(transaction_mode && !adminOwnerName && !isAdminOwnerCreated))
adminOwnerName = create_adminOwnerName(basename(argv[0]));
-
+
if(op != TRANSACTION_MODE) {
signal(SIGALRM, sigalarmh);
alarm(timeoutVal);
@@ -1600,7 +1618,7 @@ static int imm_operation(int argc, char
goto done_om_finalize;
}
- if(useAdminOwner) {
+ if(useAdminOwner && op != TRANSACTION_MODE) {
error = immutil_saImmOmAdminOwnerInitialize(immHandle,
adminOwnerName, SA_TRUE, &ownerHandle);
if (error != SA_AIS_OK) {
fprintf(stderr, "error -
saImmOmAdminOwnerInitialize FAILED: %s\n", saf_error(error));
@@ -1608,6 +1626,14 @@ static int imm_operation(int argc, char
goto done_om_finalize;
}
}
+ } else if(transaction_mode && !isAdminOwnerCreated){
+ error = immutil_saImmOmAdminOwnerInitialize(immHandle,
adminOwnerName, SA_TRUE, &ownerHandle);
+ if (error != SA_AIS_OK) {
+ fprintf(stderr, "error - saImmOmAdminOwnerInitialize
FAILED: %s\n", saf_error(error));
+ rc = EXIT_FAILURE;
+ goto done_om_finalize;
+ }
+ isAdminOwnerCreated = true;
}
switch (op) {
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel