Skip to content

Commit 010f9a6

Browse files
committed
Do not unarchive existing RIM bundle during provision, search for unarchived bundle with later creation date. Delete RIM files with /delete endpoint, do not archive.
1 parent 5ed6c2d commit 010f9a6

File tree

3 files changed

+32
-17
lines changed

3 files changed

+32
-17
lines changed

HIRS_AttestationCA/src/main/java/hirs/attestationca/persist/provision/IdentityClaimProcessor.java

+27-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package hirs.attestationca.persist.provision;
22

3+
import com.fasterxml.jackson.databind.ser.Serializers;
34
import com.google.protobuf.ByteString;
45
import hirs.attestationca.configuration.provisionerTpm2.ProvisionerTpm2;
56
import hirs.attestationca.persist.entity.manager.CertificateRepository;
@@ -375,11 +376,20 @@ private DeviceInfoReport parseDeviceInfo(final ProvisionerTpm2.IdentityClaim cla
375376
support.getHexDecHash().length() - NUM_OF_VARIABLES)));
376377
support.setDeviceName(dv.getNw().getHostname());
377378
this.referenceManifestRepository.save(support);
378-
} else {
379-
log.info("Client provided Support RIM already loaded in database.");
379+
} else if (support.isArchived()) {
380+
List<ReferenceManifest> rims = referenceManifestRepository.findByArchiveFlag(false);
381+
for (ReferenceManifest rim : rims) {
382+
if (rim.isSupport() &&
383+
rim.getTagId().equals(support.getTagId()) &&
384+
rim.getCreateTime().after(support.getCreateTime())) {
385+
support.setDeviceName(null);
386+
support = (SupportReferenceManifest) rim;
387+
support.setDeviceName(dv.getNw().getHostname());
388+
}
389+
}
380390
if (support.isArchived()) {
381-
support.restore();
382-
support.resetCreateTime();
391+
throw new Exception("Unable to locate an unarchived support RIM.");
392+
} else {
383393
this.referenceManifestRepository.save(support);
384394
}
385395
}
@@ -408,21 +418,25 @@ private DeviceInfoReport parseDeviceInfo(final ProvisionerTpm2.IdentityClaim cla
408418
swidFile.toByteArray());
409419
dbBaseRim.setDeviceName(dv.getNw().getHostname());
410420
this.referenceManifestRepository.save(dbBaseRim);
411-
} else {
412-
log.info("Client provided Base RIM already loaded in database.");
413-
/**
414-
* Leaving this as is for now, however can there be a condition
415-
* in which the provisioner sends swidtags without support rims?
416-
*/
421+
} else if (dbBaseRim.isArchived()) {
422+
List<ReferenceManifest> rims = referenceManifestRepository.findByArchiveFlag(false);
423+
for (ReferenceManifest rim : rims) {
424+
if (rim.isBase() && rim.getTagId().equals(dbBaseRim.getTagId()) &&
425+
rim.getCreateTime().after(dbBaseRim.getCreateTime())) {
426+
dbBaseRim.setDeviceName(null);
427+
dbBaseRim = (BaseReferenceManifest) rim;
428+
dbBaseRim.setDeviceName(dv.getNw().getHostname());
429+
}
430+
}
417431
if (dbBaseRim.isArchived()) {
418-
dbBaseRim.restore();
419-
dbBaseRim.resetCreateTime();
420-
this.referenceManifestRepository.save(dbBaseRim);
432+
throw new Exception("Unable to locate an unarchived base RIM.");
421433
}
422434
}
423435
tagId = dbBaseRim.getTagId();
424436
} catch (UnmarshalException e) {
425437
log.error(e);
438+
} catch (Exception ex) {
439+
log.error(String.format("Failed to load base rim: %s", ex.getMessage()));
426440
}
427441
}
428442
} else {

HIRS_AttestationCA/src/main/java/hirs/attestationca/persist/validation/FirmwareScvValidator.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ public static AppraisalStatus validateFirmware(
6666
// In this case, try to look up the event log associated with the device, then get the base rim associated by event log hash
6767
List<ReferenceManifest> deviceRims = referenceManifestRepository.findByDeviceName(hostName);
6868
for (ReferenceManifest deviceRim : deviceRims) {
69-
if (deviceRim instanceof BaseReferenceManifest && !deviceRim.isSwidSupplemental() && !deviceRim.isSwidPatch()) {
69+
if (deviceRim instanceof BaseReferenceManifest &&
70+
!deviceRim.isSwidSupplemental() &&
71+
!deviceRim.isSwidPatch() &&
72+
!deviceRim.isArchived()) {
7073
baseReferenceManifest = (BaseReferenceManifest) deviceRim;
7174
}
7275

HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/ReferenceManifestPageController.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,7 @@ public RedirectView delete(@RequestParam final String id,
239239
messages.addError(notFoundMessage);
240240
log.warn(notFoundMessage);
241241
} else {
242-
// if support rim, update associated events
243-
referenceManifest.archive();
244-
referenceManifestRepository.save(referenceManifest);
242+
referenceManifestRepository.delete(referenceManifest);
245243
String deleteCompletedMessage = "RIM successfully deleted";
246244
messages.addInfo(deleteCompletedMessage);
247245
log.info(deleteCompletedMessage);

0 commit comments

Comments
 (0)