Skip to content

Commit 2be8758

Browse files
weizhouapacheLocharla, Sandeep
authored andcommitted
engine/schema: prepend algorithm to checksum during systemvm template registration (apache#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 8b43a9b commit 2be8758

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
@@ -606,7 +606,7 @@ private VMTemplateVO createTemplateObjectInDB(SystemVMTemplateDetails details) {
606606
template.setBits(64);
607607
template.setAccountId(Account.ACCOUNT_ID_SYSTEM);
608608
template.setUrl(details.getUrl());
609-
template.setChecksum(details.getChecksum());
609+
template.setChecksum(DigestHelper.prependAlgorithm(details.getChecksum()));
610610
template.setEnablePassword(false);
611611
template.setDisplayText(details.getName());
612612
template.setFormat(details.getFormat());
@@ -1079,7 +1079,7 @@ protected void updateRegisteredTemplateDetails(Long templateId, MetadataTemplate
10791079
protected void updateTemplateUrlChecksumAndGuestOsId(VMTemplateVO templateVO,
10801080
MetadataTemplateDetails templateDetails) {
10811081
templateVO.setUrl(templateDetails.getUrl());
1082-
templateVO.setChecksum(templateDetails.getChecksum());
1082+
templateVO.setChecksum(DigestHelper.prependAlgorithm(templateDetails.getChecksum()));
10831083
GuestOSVO guestOS = guestOSDao.findOneByDisplayName(templateDetails.getGuestOs());
10841084
if (guestOS != null) {
10851085
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
@@ -148,4 +148,19 @@ public static String calculateChecksum(File file) {
148148
throw new CloudRuntimeException(errMsg, e);
149149
}
150150
}
151+
152+
public static String prependAlgorithm(String checksum) {
153+
if (StringUtils.isEmpty(checksum)) {
154+
return checksum;
155+
}
156+
int checksumLength = checksum.length();
157+
Map<String, Integer> paddingLengths = getChecksumLengthsMap();
158+
for (Map.Entry<String, Integer> entry : paddingLengths.entrySet()) {
159+
if (entry.getValue().equals(checksumLength)) {
160+
String algorithm = entry.getKey();
161+
return String.format("{%s}%s", algorithm, checksum);
162+
}
163+
}
164+
return checksum;
165+
}
151166
}

0 commit comments

Comments
 (0)