void loadFISAccessList() { CONDITION cond; DMAN_FISACCESS f, criteria; char b[256]; if (FISAccessList == NULL) FISAccessList = LST_Create(); if (FISAccessList == NULL) return; memset(&f, 0, sizeof(f)); f.Type = DMAN_K_FISACCESS; criteria.Type = DMAN_K_FISACCESS; criteria.Flag = 0; cond = DMAN_Select(&dmanHandle, (DMAN_GENERICRECORD *) & f, (DMAN_GENERICRECORD *) & criteria, FISAccessList, NULL, NULL, NULL); if (cond != DMAN_NORMAL) return; MUT_LoadList(wFISAccessList, FISAccessList, formatFISAccess, b); }
CONDITION DMAN_VerifyPrintServerCFG(DMAN_HANDLE ** handle, char *requestingTitle, char *respondingTitle, int gqID, CTNBOOLEAN * access) { CONDITION cond; DMAN_PRINTSERVERCFG cfgWork, cfgCriteria; PRIVATE_HANDLE ** prv; long count; prv = (PRIVATE_HANDLE **) handle; *access = FALSE; cfgWork.Type = cfgCriteria.Type = DMAN_K_PRINTSERVERCFG; strcpy(cfgCriteria.RequestingTitle, requestingTitle); strcpy(cfgCriteria.RespondingTitle, respondingTitle); cfgCriteria.GQId = gqID; cfgCriteria.Flag = DMAN_K_PRINTSERVER_REQUESTING | DMAN_K_PRINTSERVER_RESPONDING | DMAN_K_PRINTSERVER_GQID; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) & cfgWork, (DMAN_GENERICRECORD *) & cfgCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) { char strOfGQId[10]; sprintf(strOfGQId, "%d", gqID); return COND_PushCondition(DMAN_ERROR(DMAN_ILLEGALPRINTSERVERCONFIGURATION), requestingTitle, respondingTitle, strOfGQId, "DMAN_VerifyPrintServerCFG"); } if (count == 1) *access = TRUE; return DMAN_NORMAL; }
CONDITION DMAN_VerifyApplication(DMAN_HANDLE ** handle, char *title, char *node) { CONDITION cond; DMAN_APPLICATIONENTITY aeWork, aeCriteria; PRIVATE_HANDLE ** prv; long count; prv = (PRIVATE_HANDLE **) handle; aeWork.Type = aeCriteria.Type = DMAN_K_APPLICATIONENTITY; strcpy(aeCriteria.Title, title); aeCriteria.Flag = DMAN_K_APPLICATION_TITLE; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) & aeWork, (DMAN_GENERICRECORD *) & aeCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return COND_PushCondition(DMAN_ERROR(DMAN_APPLICATIONVERIFICATIONFAILED), title, node, "DMAN_VerifyApplication"); if (count != 1){ (void) COND_PushCondition(DMAN_ERROR(DMAN_TITLENOTFOUND), title, "DMAN_VerifyApplication"); return COND_PushCondition(DMAN_ERROR(DMAN_APPLICATIONVERIFICATIONFAILED), title, node, "DMAN_VerifyApplication"); } if (!nodeCompare(node, aeWork.Node)){ if(strcmp(aeWork.Node, "*") == 0){ strcpy(aeWork.Node, node); }else{ (void) COND_PushCondition(DMAN_ERROR(DMAN_APPLICATIONNODEMISMATCH), title, node, aeWork.Node, "DMAN_VerifyApplication"); return COND_PushCondition(DMAN_ERROR(DMAN_APPLICATIONVERIFICATIONFAILED), title, node, "DMAN_VerifyApplication"); } } return DMAN_NORMAL; }
/* establishAssociation ** ** Purpose: ** Request for the specific service class and then establish an ** Association ** ** Parameter Dictionary: ** networkKey Key describing the network connection ** queryList Handle to list of queries ** moveDestination Name of destination where images are to be moved ** sendAssociation Key describing the Association ** params Service parameters describing the Association ** ** Return Values: ** DUL_NORMAL on success ** ** Notes: ** ** Algorithm: ** Description of the algorithm (optional) and any other notes. */ CONDITION establishAssociation(DUL_NETWORKKEY ** networkKey, char *destination, DMAN_HANDLE ** handle, DUL_ASSOCIATIONKEY ** sendAssociation, DUL_ASSOCIATESERVICEPARAMETERS * params) { CONDITION cond; DMAN_APPLICATIONENTITY ae; DMAN_APPLICATIONENTITY criteria; long count; memset(&criteria, 0, sizeof(criteria)); criteria.Type = ae.Type = DMAN_K_APPLICATIONENTITY; criteria.Flag = DMAN_K_APPLICATION_TITLE; strcpy(criteria.Title, destination); cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) & ae, (DMAN_GENERICRECORD *) & criteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return 0; if (count != 1) return 0; sprintf(params->calledPresentationAddress, "%s:%-d", ae.Node, ae.Port); cond = SRV_RequestServiceClass(DICOM_SOPCLASSSTORAGECOMMITMENTPUSHMODEL, DUL_SC_ROLE_DEFAULT, params); if (CTN_INFORM(cond)) (void) COND_PopCondition(FALSE); else if (cond != SRV_NORMAL) return 0; /* repair */ cond = DUL_RequestAssociation(networkKey, params, sendAssociation); if (cond != DUL_NORMAL) { printf("Could not establish Association with %s %s %s\n", params->callingAPTitle, params->calledAPTitle, params->calledPresentationAddress); COND_DumpConditions(); return 0; /* repair */ } return APP_NORMAL; }
CONDITION DMAN_LookupFISAccess(DMAN_HANDLE ** handle, char *applicationTitle, DMAN_FISACCESS * f) { CONDITION cond; DMAN_FISACCESS criteria; PRIVATE_HANDLE **prv; long count; prv = (PRIVATE_HANDLE **) handle; f->Type = criteria.Type = DMAN_K_FISACCESS; strcpy(criteria.Title, applicationTitle); criteria.Flag = DMAN_K_FISACCESS_TITLE; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) f, (DMAN_GENERICRECORD *) & criteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL || count != 1) return COND_PushCondition(DMAN_ERROR(DMAN_FISACCESSLOOKUPFAILED), applicationTitle, "DMAN_LookupFISAccess"); return DMAN_NORMAL; }
CONDITION DMAN_LookupStorage(DMAN_HANDLE ** handle, char *applicationTitle, DMAN_STORAGEACCESS * s) { CONDITION cond; DMAN_STORAGEACCESS storageCriteria; PRIVATE_HANDLE **prv; long count; prv = (PRIVATE_HANDLE **) handle; s->Type = storageCriteria.Type = DMAN_K_STORAGEACCESS; strcpy(storageCriteria.Title, applicationTitle); storageCriteria.Flag = DMAN_K_STORAGEACCESS_TITLE; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) s, (DMAN_GENERICRECORD *) & storageCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL || count != 1) return COND_PushCondition(DMAN_ERROR(DMAN_STORAGELOOKUPFAILED), applicationTitle, "DMAN_LookupStorage"); return DMAN_NORMAL; }
CONDITION DMAN_ApplicationAccess(DMAN_HANDLE ** handle, const char *requestingTitle, const char *respondingTitle, CTNBOOLEAN * access) { CONDITION cond; DMAN_SECURITYMATRIX matrixWork, matrixCriteria; PRIVATE_HANDLE ** prv; long count; prv = (PRIVATE_HANDLE **) handle; *access = FALSE; matrixWork.Type = matrixCriteria.Type = DMAN_K_SECURITYMATRIX; strcpy(matrixCriteria.RequestingTitle, requestingTitle); strcpy(matrixCriteria.RespondingTitle, respondingTitle); matrixCriteria.Flag = DMAN_K_SECURITY_REQUESTING | DMAN_K_SECURITY_RESPONDING; cond = DMAN_Select(handle,(DMAN_GENERICRECORD *) & matrixWork, (DMAN_GENERICRECORD *) & matrixCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return COND_PushCondition(DMAN_ERROR(DMAN_ILLEGALCONNECTION), requestingTitle, respondingTitle, "DMAN_ApplicationAccess"); if (count == 1) *access = TRUE; return DMAN_NORMAL; }
CONDITION DMAN_LookupApplication(DMAN_HANDLE ** handle, char *title, DMAN_APPLICATIONENTITY * ae) { CONDITION cond; DMAN_APPLICATIONENTITY aeCriteria; PRIVATE_HANDLE ** prv; long count; prv = (PRIVATE_HANDLE **) handle; aeCriteria.Type = DMAN_K_APPLICATIONENTITY; strcpy(aeCriteria.Title, title); aeCriteria.Flag = DMAN_K_APPLICATION_TITLE; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) ae, (DMAN_GENERICRECORD *) & aeCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return COND_PushCondition(DMAN_ERROR(DMAN_APPLICATIONLOOKUPFAILED), title, "DMAN_LookupApplication"); if (count != 1){ (void) COND_PushCondition(DMAN_ERROR(DMAN_TITLENOTFOUND), title, "DMAN_LookupApplication"); return COND_PushCondition(DMAN_ERROR(DMAN_APPLICATIONLOOKUPFAILED), title, "DMAN_LookupApplication"); } return DMAN_NORMAL; }
void loadGroupGroupList() { CONDITION cond; DMAN_GROUPNAMES g, criteria; char b[256]; if (createLists() == 0) return; memset(&g, 0, sizeof(g)); g.Type = DMAN_K_GROUPNAMES; criteria.Type = DMAN_K_GROUPNAMES; criteria.Flag = 0; cond = DMAN_Select(&dmanHandle, (DMAN_GENERICRECORD *) & g, (DMAN_GENERICRECORD *) & criteria, groupNamesList, NULL, NULL, NULL); if (cond != DMAN_NORMAL) { COND_DumpConditions(); return; } cond = extractGroups(groupNamesList, groupGroupList); if (cond != 1) return; MUT_LoadList(wGroupGroupList, groupGroupList, formatGroupGroup, b); (void) DMAN_ClearList(groupTitleList); MUT_LoadList(wGroupTitleList, groupTitleList, formatGroupTitle, b); }
CONDITION DMAN_SelectImageDestinations(DMAN_HANDLE ** handle, const char *srcApplication, LST_HEAD * lst) { CONDITION cond; DMAN_VIDEOIMAGEDEST imageDestination; DMAN_VIDEOIMAGEDEST workRecord; PRIVATE_HANDLE **prv; long count; prv = (PRIVATE_HANDLE **) handle; memset(&imageDestination, 0, sizeof(imageDestination)); imageDestination.Type = DMAN_K_VIDEOIMAGEDEST; workRecord = imageDestination; strcpy(imageDestination.RequestingTitle, srcApplication); imageDestination.Flag = DMAN_K_VIDEOIMAGE_REQUESTING; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) & workRecord, (DMAN_GENERICRECORD *) & imageDestination, lst, NULL, &count, NULL); if (cond != DMAN_NORMAL) return cond; /* repair */ return DMAN_NORMAL; }
CONDITION DMAN_StorageControl(DMAN_HANDLE ** handle, char *requestingTitle, char *respondingTitle, DMAN_STORAGECONTROL * storage) { CONDITION cond; DMAN_STORAGECONTROL criteria; PRIVATE_HANDLE ** prv; long count; prv = (PRIVATE_HANDLE **) handle; storage->Type = criteria.Type = DMAN_K_STORAGECONTROL; strcpy(criteria.RequestingTitle, requestingTitle); strcpy(criteria.RespondingTitle, respondingTitle); criteria.Flag = DMAN_K_STORAGECONTROL_REQUESTING | DMAN_K_STORAGECONTROL_RESPONDING; cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) storage, (DMAN_GENERICRECORD *) & criteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return 0; if (count != 1){ fprintf(stderr,"Not found %s/%s in StorageControl\n",requestingTitle,respondingTitle); return 0; }; return DMAN_NORMAL; }
CONDITION DMAN_StorageAccess(DMAN_HANDLE ** handle, char *requestingTitle, char *respondingTitle, CTNBOOLEAN * readAccess, CTNBOOLEAN * writeAccess) { CONDITION cond; DMAN_STORAGEACCESS databaseWork, databaseCriteria; DMAN_GROUPNAMES groupWork, groupCriteria; PRIVATE_HANDLE ** prv; long count; int accessFlag = 0, accessRight = 0; prv = (PRIVATE_HANDLE **) handle; if ((*prv)->storageAccess && strcmp((*prv)->requestingTitle, requestingTitle) == 0 && strcmp((*prv)->respondingTitle, respondingTitle) == 0) { *readAccess = (*prv)->readAccess; *writeAccess = (*prv)->writeAccess; return DMAN_NORMAL; } *readAccess = *writeAccess = FALSE; databaseWork.Type = databaseCriteria.Type = DMAN_K_STORAGEACCESS; strcpy(databaseCriteria.Title, respondingTitle); cond = DMAN_Select(handle,(DMAN_GENERICRECORD *) & databaseWork,(DMAN_GENERICRECORD *) & databaseCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return COND_PushCondition(DMAN_ERROR(DMAN_STORAGEACCESSDENIED), requestingTitle, respondingTitle, "DMAN_StorageAccess"); if (count == 0) { (*prv)->storageAccess = TRUE; return DMAN_NORMAL; } accessRight = databaseWork.Access; /* If the calling application is the owner of the database, turn on access rights for the owner. */ if (accessRight > 99){ // Owner access if (strcmp(requestingTitle, databaseWork.Owner) == 0) accessFlag |= accessRight / 100; accessRight = databaseWork.Access % 100; } /* If we still don't have all of the access rights we might want to ** have, see if the requesting application is in the group and turn ** on access for that group. */ if (accessRight > 9){ // Group access groupWork.Type = groupCriteria.Type = DMAN_K_GROUPNAMES; strcpy(groupCriteria.Title, requestingTitle); strcpy(groupCriteria.GroupName, databaseWork.GroupName); cond = DMAN_Select(handle, (DMAN_GENERICRECORD *) & groupWork, (DMAN_GENERICRECORD *) & groupCriteria, NULL, NULL, &count, NULL); if (cond != DMAN_NORMAL) return COND_PushCondition(DMAN_ERROR(DMAN_STORAGEACCESSDENIED), requestingTitle, respondingTitle, "DMAN_StorageAccess"); if (count == 1) accessFlag |= accessRight / 10; accessRight = databaseWork.Access % 10; } /* If all access is not turned on, try the access for anyone */ accessFlag |= accessRight; (*prv)->storageAccess = TRUE; if (accessFlag == ACCESS_READ){ *readAccess = TRUE; *writeAccess = FALSE; }else if (accessFlag == ACCESS_WRITE){ *readAccess = FALSE; *writeAccess = TRUE; }else if (accessFlag == ACCESS_READWRITE){ *readAccess = TRUE; *writeAccess = TRUE; }else{ *readAccess = FALSE; *writeAccess = FALSE; (*prv)->storageAccess = FALSE; } return DMAN_NORMAL; }