Skip to content

Commit 81f16b6

Browse files
engine/schema: prepend algorithm to checksum during systemvm template registration (#12165)
* engine/schema: prepend algorithm to checksum during systemvm template registration * Update utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java
1 parent 29ce03e commit 81f16b6

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ private VMTemplateVO createTemplateObjectInDB(SystemVMTemplateDetails details) {
513513
template.setBits(64);
514514
template.setAccountId(Account.ACCOUNT_ID_SYSTEM);
515515
template.setUrl(details.getUrl());
516-
template.setChecksum(details.getChecksum());
516+
template.setChecksum(DigestHelper.prependAlgorithm(details.getChecksum()));
517517
template.setEnablePassword(false);
518518
template.setDisplayText(details.getName());
519519
template.setFormat(details.getFormat());
@@ -1008,7 +1008,7 @@ private void updateRegisteredTemplateDetails(Long templateId, MetadataTemplateDe
10081008

10091009
private void updateTemplateUrlChecksumAndGuestOsId(VMTemplateVO templateVO, MetadataTemplateDetails templateDetails) {
10101010
templateVO.setUrl(templateDetails.getUrl());
1011-
templateVO.setChecksum(templateDetails.getChecksum());
1011+
templateVO.setChecksum(DigestHelper.prependAlgorithm(templateDetails.getChecksum()));
10121012
GuestOSVO guestOS = guestOSDao.findOneByDisplayName(templateDetails.getGuestOs());
10131013
if (guestOS != null) {
10141014
templateVO.setGuestOSId(guestOS.getId());

utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,4 +142,19 @@ public static String calculateChecksum(File file) {
142142
throw new CloudRuntimeException(errMsg, e);
143143
}
144144
}
145+
146+
public static String prependAlgorithm(String checksum) {
147+
if (StringUtils.isEmpty(checksum)) {
148+
return checksum;
149+
}
150+
int checksumLength = checksum.length();
151+
Map<String, Integer> paddingLengths = getChecksumLengthsMap();
152+
for (Map.Entry<String, Integer> entry : paddingLengths.entrySet()) {
153+
if (entry.getValue().equals(checksumLength)) {
154+
String algorithm = entry.getKey();
155+
return String.format("{%s}%s", algorithm, checksum);
156+
}
157+
}
158+
return checksum;
159+
}
145160
}

0 commit comments

Comments
 (0)