Skip to content

Commit b8927dd

Browse files
richardlautargos
authored andcommitted
tools: fix updating root certificates
When searching for the latest certdata.txt, check that the file exists on the remote server. PR-URL: #47607 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 1391d3b commit b8927dd

1 file changed

Lines changed: 27 additions & 11 deletions

File tree

‎tools/dep_updaters/update-root-certs.mjs‎

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ const formatDate = (d) => {
2222
returniso.substring(0,iso.indexOf('T'));
2323
};
2424

25+
constgetCertdataURL=(version)=>{
26+
consttag=`NSS_${version.replaceAll('.','_')}_RTM`;
27+
constcertdataURL=`https://hg.mozilla.org/projects/nss/raw-file/${tag}/lib/ckfw/builtins/certdata.txt`;
28+
returncertdataURL;
29+
};
30+
2531
constnormalizeTD=(text)=>{
2632
// Remove whitespace and any HTML tags.
2733
returntext?.trim().replace(/<.*?>/g,'');
@@ -74,22 +80,33 @@ const getReleases = (text) => {
7480
returnreleases;
7581
};
7682

77-
constgetLatestVersion=(releases)=>{
78-
constarrayNumberSort=(x,y,i)=>{
83+
constgetLatestVersion=async(releases)=>{
84+
constarrayNumberSortDescending=(x,y,i)=>{
7985
if(x[i]===undefined&&y[i]===undefined){
8086
return0;
8187
}elseif(x[i]===y[i]){
82-
returnarrayNumberSort(x,y,i+1);
88+
returnarrayNumberSortDescending(x,y,i+1);
8389
}
84-
return(x[i]??0)-(y[i]??0);
90+
return(y[i]??0)-(x[i]??0);
8591
};
8692
constextractVersion=(t)=>{
8793
returnt[kNSSVersion].split('.').map((n)=>parseInt(n));
8894
};
8995
constreleaseSorter=(x,y)=>{
90-
returnarrayNumberSort(extractVersion(x),extractVersion(y),0);
96+
returnarrayNumberSortDescending(extractVersion(x),extractVersion(y),0);
9197
};
92-
returnreleases.sort(releaseSorter).filter(pastRelease).at(-1)[kNSSVersion];
98+
// Return the most recent certadata.txt that exists on the server.
99+
constsortedReleases=releases.sort(releaseSorter).filter(pastRelease);
100+
for(constcandidateofsortedReleases){
101+
constcandidateURL=getCertdataURL(candidate[kNSSVersion]);
102+
if(values.verbose){
103+
console.log(`Trying ${candidateURL}`);
104+
}
105+
constresponse=awaitfetch(candidateURL,{method: 'HEAD'});
106+
if(response.ok){
107+
returncandidate[kNSSVersion];
108+
}
109+
}
93110
};
94111

95112
constpastRelease=(r)=>{
@@ -129,10 +146,10 @@ if (values.help) {
129146
process.exit(0);
130147
}
131148

149+
constscheduleURL='https://wiki.mozilla.org/NSS:Release_Versions';
132150
if(values.verbose){
133-
console.log('Fetching NSS release schedule');
151+
console.log(`Fetching NSS release schedule from ${scheduleURL}`);
134152
}
135-
constscheduleURL='https://wiki.mozilla.org/NSS:Release_Versions';
136153
constschedule=awaitfetch(scheduleURL);
137154
if(!schedule.ok){
138155
console.error(`Failed to fetch ${scheduleURL}: ${schedule.status}: ${schedule.statusText}`);
@@ -142,7 +159,7 @@ const scheduleText = await schedule.text();
142159
constnssReleases=getReleases(scheduleText);
143160

144161
// Retrieve metadata for the NSS release being updated to.
145-
constversion=positionals[0]??getLatestVersion(nssReleases);
162+
constversion=positionals[0]??awaitgetLatestVersion(nssReleases);
146163
constrelease=nssReleases.find((r)=>{
147164
returnnewRegExp(`^${version.replace('.','\\.')}\\b`).test(r[kNSSVersion]);
148165
});
@@ -155,8 +172,7 @@ if (values.verbose) {
155172
}
156173

157174
// Fetch certdata.txt and overwrite the local copy.
158-
consttag=`NSS_${version.replaceAll('.','_')}_RTM`;
159-
constcertdataURL=`https://hg.mozilla.org/projects/nss/raw-file/${tag}/lib/ckfw/builtins/certdata.txt`;
175+
constcertdataURL=getCertdataURL(version);
160176
if(values.verbose){
161177
console.log(`Fetching ${certdataURL}`);
162178
}

0 commit comments

Comments
 (0)