Esempio n. 1
0
void clmClusterTrackCallback(const SaClmClusterNotificationBufferT_4 *notificationBuffer,
                                       SaUint32T numberOfMembers,
                                       SaInvocationT invocation,
                                       const SaNameT *rootCauseEntity,
                                       const SaNtfCorrelationIdsT *correlationIds,
                                       SaClmChangeStepT step,
                                       SaTimeT timeSupervision,
                                       SaAisErrorT error)
{
    //Call when CLM node lock/unlock or node down/up
    syslog(LOG_INFO,"Received cluster update: members in cluster=%d", numberOfMembers);
    unsigned int item;
    for (item = 0; item < notificationBuffer->numberOfItems; item++) {
        const char* node = saAisNameBorrow(&(notificationBuffer->notification[item].clusterNode.nodeName));
        if (notificationBuffer->notification[item].clusterChange == SA_CLM_NODE_JOINED) {
            syslog(LOG_INFO,"Node %s JOINED", node);
        } else if (notificationBuffer->notification[item].clusterChange == SA_CLM_NODE_LEFT) {
            syslog(LOG_INFO,"Node %s LEFT", node);
        } else {
            syslog(LOG_INFO,"Node %s Change reason=%s Change step=%s",node,
                (notificationBuffer->notification[item].clusterChange  < clmClusterChangesNoIndex) ? clmClusterChanges[notificationBuffer->notification[item].clusterChange] : "UNKNOWN",
                (step < clmChangeStepNoIndex) ? clmChangeStep[step] : "UNKOWN");
        }
    }
}
Esempio n. 2
0
void print_additional_info(SaNtfNotificationHandleT notificationHandle,
			   const SaNtfNotificationHeaderT * notificationHeader)
{
	int i;
	char *dataPtr;
	SaNameT name;
	SaStringT info_value_str;
	SaUint16T dataSize;
	SaAisErrorT rc;

	if (notificationHeader->additionalInfo != NULL) {
		for (i=0; i<notificationHeader->numAdditionalInfo; i++) {
			printf("- additionalInfo: %d -\n",i);
			printf(" infoId = %u\n",notificationHeader->additionalInfo[i].infoId);
			printf(" infoType = %u\n",notificationHeader->additionalInfo[i].infoType);

			switch (notificationHeader->additionalInfo[i].infoType) {
			case SA_NTF_VALUE_LDAP_NAME:
				rc = saNtfPtrValGet(notificationHandle,
							&notificationHeader->
							additionalInfo[i].infoValue,
							(void **)&dataPtr,
							&dataSize);
				if (rc == SA_AIS_OK) {
					size_t strLength = dataSize - 2;
					char *newStr = (char*)malloc(strLength + 1);
					memcpy(newStr, dataPtr + 2, strLength);
					newStr[strLength] = '\0';
					saAisNameLend(newStr, &name);
					printf(" infoValue = \"%s\"\n", saAisNameBorrow(&name));
					free(newStr);
				} else
					fprintf(stderr, "saNtfPtrValGet Error "
						"%d\n", rc);
				break;

			case SA_NTF_VALUE_STRING:
				rc = saNtfPtrValGet(notificationHandle,
							&notificationHeader->
							additionalInfo[i].infoValue,
							(void **)&info_value_str,
							&dataSize);
				if (rc == SA_AIS_OK) {
					printf(" infoValue = \"%s\"\n",info_value_str);
				} else
					fprintf(stderr, "saNtfPtrValGet Error "
						"%d\n", rc);
				break;

			default:
				printf("Unimplemented additionalInfo type\n");
				break;
			}
		}
	}
}
Esempio n. 3
0
void print_param(SaImmAdminOperationParamsT_2 *param) {
	switch(param->paramType) {
		case SA_IMM_ATTR_SAINT32T :
			printf("%-50s %-12s %d (0x%x)\n", param->paramName, "SA_INT32_T",
					(*((SaInt32T *)param->paramBuffer)), (*((SaInt32T *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SAUINT32T :
			printf("%-50s %-12s %u (0x%x)\n", param->paramName, "SA_UINT32_T",
					(*((SaUint32T *)param->paramBuffer)), (*((SaUint32T *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SAINT64T :
			printf("%-50s %-12s %lld (0x%llx)\n", param->paramName, "SA_INT64_T",
					(*((SaInt64T *)param->paramBuffer)), (*((SaInt64T *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SAUINT64T :
			printf("%-50s %-12s %llu (0x%llx)\n", param->paramName, "SA_UINT64_T",
					(*((SaUint64T *)param->paramBuffer)), (*((SaUint64T *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SATIMET :
			{
				char buf[32];
				const time_t time = *((SaTimeT *)param->paramBuffer) / SA_TIME_ONE_SECOND;

				ctime_r(&time, buf);
				buf[strlen(buf) - 1] = '\0';	/* Remove new line */
				printf("%-50s %-12s %llu (0x%llx, %s)\n", param->paramName, "SA_TIME_T",
						(*((SaTimeT *)param->paramBuffer)), (*((SaTimeT *)param->paramBuffer)), buf);
			}
			break;
		case SA_IMM_ATTR_SANAMET :
			printf("%-50s %-12s %s\n", param->paramName, "SA_NAME_T", saAisNameBorrow((SaNameT*) param->paramBuffer));
			break;
		case SA_IMM_ATTR_SAFLOATT :
			printf("%-50s %-12s %f\n", param->paramName, "SA_FLOAT_T", (*((SaFloatT *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SADOUBLET :
			printf("%-50s %-12s %lf\n", param->paramName, "SA_DOUBLE_T", (*((SaDoubleT *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SASTRINGT :
			printf("%-50s %-12s %s\n", param->paramName, "SA_STRING_T", (*((SaStringT *)param->paramBuffer)));
			break;
		case SA_IMM_ATTR_SAANYT :
			printf("%-50s %-12s %s\n", param->paramName, "SA_ANY_T", "<Not shown>");
			break;
		default:
			printf("%-50s <%-12s (%d)>\n", param->paramName, "Unknown value type", (int)param->paramType);
			exit(EXIT_FAILURE);
	}
}
Esempio n. 4
0
static void print_header(const SaNtfNotificationHeaderT * notificationHeader,
		  SaNtfSubscriptionIdT subscriptionId,
		  SaNtfNotificationTypeT notificationType)
{
	static char time[32];
	if (verbose) {
		printf("notificationID = %d\n",
		       (int)*(notificationHeader->notificationId));
		printf("subscriptionId = %u\n", (unsigned int)subscriptionId);
	}

	/* Event type */
	printf("eventType = ");
	print_event_type(*notificationHeader->eventType, notificationType);

	if (verbose)
		printf("notificationObject.length = %zu\n",
				strlen(saAisNameBorrow(notificationHeader->notificationObject)));

	printf("notificationObject = \"%s\"\n",
			saAisNameBorrow(notificationHeader->notificationObject));
	
	if (verbose)
		printf("notifyingObject.length = %zu\n",
				strlen(saAisNameBorrow(notificationHeader->notifyingObject)));

	printf("notifyingObject = \"%s\"\n",
			saAisNameBorrow(notificationHeader->notifyingObject));

	/* Notification Class ID in compact dot notation */
	if (notificationHeader->notificationClassId->vendorId ==
	    SA_NTF_VENDOR_ID_SAF) {
		printf("notificationClassId = SA_NTF_VENDOR_ID_SAF.%s.%u "
		       "(0x%x)\n",
		       sa_services_list[notificationHeader->
					notificationClassId->majorId],
		       notificationHeader->notificationClassId->minorId,
		       notificationHeader->notificationClassId->minorId);
	} else {
		printf("notificationClassId = %u.%u.%u (0x%x)\n",
		       notificationHeader->notificationClassId->vendorId,
		       notificationHeader->notificationClassId->majorId,
		       notificationHeader->notificationClassId->minorId,
		       notificationHeader->notificationClassId->minorId);
	}

	if (verbose) { 
		time_t time_in_secs = *notificationHeader->eventTime/SA_TIME_ONE_SECOND;
		/*Print time in human readable form also .*/
		(void)strftime(time, sizeof(time), "%a %b %d %T %Z %Y", localtime(&time_in_secs));	
		printf("eventTime = %lld (%s)\n",*notificationHeader->eventTime, time);
	}

	if (verbose)
		printf("lengthAdditionalText = %u\n",
				notificationHeader->lengthAdditionalText);

	if (notificationHeader->lengthAdditionalText > 0)
		printf("additionalText = \"%s\"\n",
		       notificationHeader->additionalText);
}
Esempio n. 5
0
int main(int argc, char *argv[])
{
	int c;
	struct option long_options[] = {
		{"disable-tryagain", no_argument, 0, 'd'},
		{"parameter", required_argument, 0, 'p'},
		{"operation-id", required_argument, 0, 'o'},
		{"operation-name", required_argument, 0, 'O'},
		{"admin-owner", required_argument, 0, 'a'},
		{"help", no_argument, 0, 'h'},
		{"timeout", required_argument, 0, 't'},
		{"verbose", no_argument, 0, 'v'},
		{0, 0, 0, 0}
	};
	SaAisErrorT error;
	SaImmHandleT immHandle;
	SaImmAdminOwnerNameT adminOwnerName = basename(argv[0]);
	bool releaseAdmo=true;
	bool explicitAdmo=false;
	SaImmAdminOwnerHandleT ownerHandle;
	SaNameT objectName;
	const SaNameT *objectNames[] = { &objectName, NULL };
	SaAisErrorT operationReturnValue = -1;
	SaImmAdminOperationParamsT_2 *param;
	const SaImmAdminOperationParamsT_2 **params;
	SaImmAdminOperationParamsT_2 **out_params=NULL;
	SaImmAdminOperationIdT operationId = -1;
	unsigned long timeoutVal = 60;  /* Default timeout value */
	int disable_tryagain = false;
	int isFirst = 1;
	int verbose = 0;

	int params_len = 0;

	/* Support for long DN */
	setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1);
	/* osaf_extended_name_init() is added to prevent future safe use of
	 * osaf_extended_name_* before saImmOmInitialize and saImmOiInitialize */
	osaf_extended_name_init();

	params = realloc(NULL, sizeof(SaImmAdminOperationParamsT_2 *));
	params[0] = NULL;
	SaStringT opName = NULL;

	while (1) {
		c = getopt_long(argc, argv, "dp:o:O:a:t:hv", long_options, NULL);

		if (c == -1)	/* have all command-line options have been parsed? */
			break;

		switch (c) {
		case 'd':
			disable_tryagain = true;
			break;
		case 'o':
			if(operationId != -1) {
				fprintf(stderr, "Cannot set admin operation more then once");
				exit(EXIT_FAILURE);
			}
			operationId = strtoll(optarg, (char **)NULL, 10);
			if ((operationId == 0) && ((errno == EINVAL) || (errno == ERANGE))) {
				fprintf(stderr, "Illegal operation ID\n");
				exit(EXIT_FAILURE);
			}
			break;
		case 'O':
			if(operationId != -1) {
				fprintf(stderr, "Cannot set admin operation more then once");
				exit(EXIT_FAILURE);
			}
			operationId = SA_IMM_PARAM_ADMOP_ID_ESC;
			params_len++;
			params = realloc(params, (params_len + 1) * sizeof(SaImmAdminOperationParamsT_2 *));
			param = malloc(sizeof(SaImmAdminOperationParamsT_2));
			params[params_len - 1] = param;
			params[params_len] = NULL;
			param->paramName = strdup(SA_IMM_PARAM_ADMOP_NAME);
			param->paramType = SA_IMM_ATTR_SASTRINGT;
			param->paramBuffer = malloc(sizeof(SaStringT));
			*((SaStringT *)(param->paramBuffer)) = strdup(optarg);
			opName = strdup(optarg);
			break;
		case 'p':
			params_len++;
			params = realloc(params, (params_len + 1) * sizeof(SaImmAdminOperationParamsT_2 *));
			param = malloc(sizeof(SaImmAdminOperationParamsT_2));
			params[params_len - 1] = param;
			params[params_len] = NULL;
			if (init_param(param, optarg) == -1) {
				fprintf(stderr, "Illegal parameter: %s\n", optarg);
				exit(EXIT_FAILURE);
			}
			break;
		case 't':
			timeoutVal = strtoll(optarg, (char **)NULL, 10);

			if ((timeoutVal == 0) || (errno == EINVAL) || (errno == ERANGE)) {
				fprintf(stderr, "Illegal timeout value\n");
				exit(EXIT_FAILURE);
			}
			break;
		case 'a':
			adminOwnerName = (SaImmAdminOwnerNameT)malloc(strlen(optarg) + 1);
			strcpy(adminOwnerName, optarg);
			releaseAdmo=false;
			explicitAdmo=true;
			break;
		case 'h':
			usage(basename(argv[0]));
			exit(EXIT_SUCCESS);
			break;
		case 'v':
			verbose = 1;
			break;
		default:
			fprintf(stderr, "Try '%s --help' for more information\n", argv[0]);
			exit(EXIT_FAILURE);
			break;
		}
	}

	if (operationId == -1) {
		fprintf(stderr, "error - must specify admin operation ID %llx\n", operationId);
		exit(EXIT_FAILURE);
	}

	/* Need at least one object to operate on */
	if ((argc - optind) == 0) {
		fprintf(stderr, "error - wrong number of arguments\n");
		exit(EXIT_FAILURE);
	}

	signal(SIGALRM, sigalarmh);
	(void) alarm(timeoutVal);

	immutilWrapperProfile.errorsAreFatal = 0;
	immutilWrapperProfile.nTries = disable_tryagain ? 0 : timeoutVal;
	immutilWrapperProfile.retryInterval = 1000;

	error = immutil_saImmOmInitialize(&immHandle, NULL, &immVersion);
	if (error != SA_AIS_OK) {
		fprintf(stderr, "error - saImmOmInitialize FAILED: %s\n", saf_error(error));
		exit(EXIT_FAILURE);
	}

	if((optind < argc) && (!explicitAdmo)) {
		saAisNameLend(argv[optind], &objectName);

		if(strcmp(saAisNameBorrow(&objectName), OPENSAF_IMM_OBJECT_DN)==0) {
			releaseAdmo=false;
			adminOwnerName = (SaImmAdminOwnerNameT) malloc(strlen(OPENSAF_IMM_SERVICE_NAME) + 1);
			strcpy(adminOwnerName, OPENSAF_IMM_SERVICE_NAME);
			printf("[using admin-owner: '%s']\n", adminOwnerName);
		}
	}

	error = immutil_saImmOmAdminOwnerInitialize(immHandle, adminOwnerName, releaseAdmo?SA_TRUE:SA_FALSE, &ownerHandle);
	if (error != SA_AIS_OK) {
		fprintf(stderr, "error - saImmOmAdminOwnerInitialize FAILED: %s\n", saf_error(error));
		exit(EXIT_FAILURE);
	}

	/* Remaining arguments should be object names on which the admin op should be performed. */
	while (optind < argc) {
		saAisNameLend(argv[optind], &objectName);

		error = immutil_saImmOmAdminOwnerSet(ownerHandle, objectNames, SA_IMM_ONE);
		if (error != SA_AIS_OK) {
			if (error == SA_AIS_ERR_NOT_EXIST) {
				if(strcmp(adminOwnerName, saAisNameBorrow(&objectName))==0) {
					/* AdminOwnerName == ImplementerName - Could be direct admin-op on OI */
					goto retry;
				}
				fprintf(stderr, "error - saImmOmAdminOwnerSet - object '%s' does not exist\n",
					saAisNameBorrow(&objectName));
			}
			else
				fprintf(stderr, "error - saImmOmAdminOwnerSet FAILED: %s\n", saf_error(error));
			exit(EXIT_FAILURE);
		}
retry:
		error = immutil_saImmOmAdminOperationInvoke_o2(ownerHandle, &objectName, 0, operationId,
			params, &operationReturnValue, SA_TIME_ONE_SECOND * timeoutVal, &out_params);

		if (error != SA_AIS_OK) {
			fprintf(stderr, "error - saImmOmAdminOperationInvoke_2 FAILED: %s\n",
				saf_error(error));
			exit(EXIT_FAILURE);
		}

		if (operationReturnValue != SA_AIS_OK ) {
			unsigned int ix = 0;

			if ((operationReturnValue == SA_AIS_ERR_TRY_AGAIN) && !disable_tryagain) {
				sleep(1);
				goto retry;
			}

			fprintf(stderr, "error - saImmOmAdminOperationInvoke_2 admin-op RETURNED: %s\n",
				saf_error(operationReturnValue));
			
			while(out_params && out_params[ix]) {
				if(strcmp(out_params[ix]->paramName, SA_IMM_PARAM_ADMOP_ERROR) == 0) {
					assert(out_params[ix]->paramType == SA_IMM_ATTR_SASTRINGT);
					SaStringT errStr = (*((SaStringT *) out_params[ix]->paramBuffer));
					fprintf(stderr, "error-string: %s\n", errStr);
				}
				++ix;
			}

			/* After printing error string, print all returned parameters */
			if (verbose && out_params && out_params[0]) {
				if(!isFirst)
					printf("\n");

				print_params(argv[optind], out_params);
			}
			

			exit(EXIT_FAILURE);
		}


		if (((opName && (strncmp(opName,"display",7)==0))||verbose) &&out_params && out_params[0]) {
			if(!isFirst)
				printf("\n");
			else
				isFirst = 0;

			print_params(argv[optind], out_params);
		}


		error = saImmOmAdminOperationMemoryFree(ownerHandle, out_params);
		if (error != SA_AIS_OK) {
			fprintf(stderr, "error - saImmOmAdminOperationMemoryFree FAILED: %s\n", saf_error(error));
			exit(EXIT_FAILURE);
		}

		if(releaseAdmo) {
			error = immutil_saImmOmAdminOwnerRelease(ownerHandle, objectNames, SA_IMM_ONE);
			if (error != SA_AIS_OK) {
				fprintf(stderr, "error - saImmOmAdminOwnerRelease FAILED: %s\n", saf_error(error));
				exit(EXIT_FAILURE);
			}
		}

		optind++;
	}

	error = immutil_saImmOmAdminOwnerFinalize(ownerHandle);
	if (SA_AIS_OK != error) {
		fprintf(stderr, "error - saImmOmAdminOwnerFinalize FAILED: %s\n", saf_error(error));
		exit(EXIT_FAILURE);
	}

	error = immutil_saImmOmFinalize(immHandle);
	if (SA_AIS_OK != error) {
		fprintf(stderr, "error - saImmOmFinalize FAILED: %s\n", saf_error(error));
		exit(EXIT_FAILURE);
	}

	exit(EXIT_SUCCESS);
}