Commit c1c411fa authored by Evan Ward's avatar Evan Ward

Change itrf-versions.conf to match based on prefix

Previous method of matching based on a regular expression could lead to an
application hang if an crafted file was loaded. Since these files can be loaded
from the network the matching mechanism was changed to avoid a potential denial
of service. Also updated the separator in ZipJarCrawler to match the convention
in JarURLConnection. Added some test cases.

Fixes #543
parent 3b9d62b4
......@@ -43,7 +43,7 @@
<module name="MissingSwitchDefault"/>
<module name="ModifierOrder"/>
<module name="MultipleStringLiterals">
<property name="ignoreStringsRegexp" value='^(("")|("."))$'/>
<property name="ignoreStringsRegexp" value='^(("")|(".")|("\\\\"))$'/>
</module>
<module name="MultipleVariableDeclarations"/>
<module name="NoWhitespaceAfter"/>
......
......@@ -26,7 +26,18 @@
</action>
<action dev="maxime" type="fix" issue="514">
Deleted unused DerivativeStructure acceleration computation methods.
In interfaces radiationPressureAcceleration and dragAcceleration, and all their implementations and their tests.
In interfaces radiationPressureAcceleration and dragAcceleration, and all their implementations and their tests.
</action>
<action dev="evan" type="update" issue="543">
Change format of itrf-versions.conf to use prefix matching instead of Regular
Expression matching. All existing itrf-versions.conf files will need to be
updated. This is to avoid a potential denial of service where a crafted
itrf-versions.conf could cause the application to hang.
</action>
<action dev="evan" type="update" issue="543">
ZipJarCrawler now uses "!/" to denote the start of the path within the archive
which matches the convention used by JarURLConnection. ZipJarCrawler used to use
"!".
</action>
<action dev="bryan" type="fix" issue="544" due-to="Josef Probst">
Fixed endless loop on GPSPropagator and (Field)KeplerianOrbit.
......
......@@ -185,7 +185,7 @@ public class ZipJarCrawler implements DataProvider {
if (visitor.stillAcceptsData() && !entry.isDirectory()) {
final String fullName = prefix + "!" + entry.getName();
final String fullName = prefix + "!/" + entry.getName();
if (ZIP_ARCHIVE_PATTERN.matcher(entry.getName()).matches()) {
......
......@@ -223,7 +223,11 @@ public enum OrekitMessages implements Localizable {
VIENNA_ACOEF_OR_ZENITH_DELAY_NOT_LOADED("Vienna coefficients ah or aw or zh or zw could not be loaded from {0}"),
VIENNA_ACOEF_OR_ZENITH_DELAY_NOT_AVAILABLE_FOR_DATE("Vienna coefficients ah or aw or zh or zw not available for date {0}"),
NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE("file {0} does not contain Vienna coefficients ah, aw, zh or zw"),
IRREGULAR_OR_INCOMPLETE_GRID("irregular or incomplete grid in file {0}");
IRREGULAR_OR_INCOMPLETE_GRID("irregular or incomplete grid in file {0}"),
ITRF_VERSIONS_PREFIX_ONLY("The first column of itrf-versions.conf is a plain " +
"prefix that is matched against the name of each loaded file. It should " +
"not contain any regular expression syntax or directory components, i.e. " +
"\"/\" or \"\\\". Actual value: \"{0}\".");
// CHECKSTYLE: resume JavadocVariable check
......
......@@ -25,6 +25,7 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.hipparchus.util.FastMath;
import org.orekit.data.DataLoader;
import org.orekit.data.DataProvidersManager;
import org.orekit.errors.OrekitException;
......@@ -68,7 +69,7 @@ class ITRFVersionLoader {
/** Default entry to use if no suitable configuration is found. */
private static final ITRFVersionConfiguration DEFAULT =
new ITRFVersionConfiguration(Pattern.compile(ANYTHING), ITRFVersion.ITRF_2014,
new ITRFVersionConfiguration("", ITRFVersion.ITRF_2014,
Integer.MIN_VALUE, Integer.MAX_VALUE);
/** Configuration. */
......@@ -148,7 +149,7 @@ class ITRFVersionLoader {
lineNumber++;
line = line.trim();
if (!(line.startsWith("#") || line.isEmpty())) {
Pattern pattern = null;
String prefix = null;
ITRFVersion version = null;
int validityStart = Integer.MIN_VALUE;
int validityEnd = Integer.MAX_VALUE;
......@@ -156,14 +157,14 @@ class ITRFVersionLoader {
if (matcherII.matches()) {
// both start and end of validity are at infinity
// the ITRF version applies throughout history
pattern = Pattern.compile(ANYTHING + matcherII.group(1));
prefix = matcherII.group(1);
version = ITRFVersion.getITRFVersion(matcherII.group(2));
} else {
final Matcher matcherID = patternID.matcher(line);
if (matcherID.matches()) {
// both start of validity is at infinity
// the ITRF version applies in the far past
pattern = Pattern.compile(ANYTHING + matcherID.group(1));
prefix = matcherID.group(1);
validityEnd = new DateComponents(Integer.parseInt(matcherID.group(2)),
Integer.parseInt(matcherID.group(3)),
Integer.parseInt(matcherID.group(4))).getMJD();
......@@ -173,7 +174,7 @@ class ITRFVersionLoader {
if (matcherDI.matches()) {
// both end of validity is at infinity
// the ITRF version applies to the upcoming future
pattern = Pattern.compile(ANYTHING + matcherDI.group(1));
prefix = matcherDI.group(1);
validityStart = new DateComponents(Integer.parseInt(matcherDI.group(2)),
Integer.parseInt(matcherDI.group(3)),
Integer.parseInt(matcherDI.group(4))).getMJD();
......@@ -182,7 +183,7 @@ class ITRFVersionLoader {
final Matcher matcherDD = patternDD.matcher(line);
if (matcherDD.matches()) {
// the ITRF version applies during a limited range
pattern = Pattern.compile(ANYTHING + matcherDD.group(1));
prefix = matcherDD.group(1);
validityStart = new DateComponents(Integer.parseInt(matcherDD.group(2)),
Integer.parseInt(matcherDD.group(3)),
Integer.parseInt(matcherDD.group(4))).getMJD();
......@@ -198,9 +199,13 @@ class ITRFVersionLoader {
}
}
}
// error if prefix contains / or \ since these will never match
if (prefix.contains("\\") || prefix.contains("/")) {
throw new OrekitException(
OrekitMessages.ITRF_VERSIONS_PREFIX_ONLY, prefix);
}
// store the parsed entry
configurations.add(new ITRFVersionConfiguration(pattern, version, validityStart, validityEnd));
configurations.add(new ITRFVersionConfiguration(prefix, version, validityStart, validityEnd));
}
......@@ -219,7 +224,7 @@ class ITRFVersionLoader {
public static class ITRFVersionConfiguration {
/** File names to which this configuration applies. */
private final Pattern pattern;
private final String prefix;
/** ITRF version. */
private final ITRFVersion version;
......@@ -231,16 +236,16 @@ class ITRFVersionLoader {
private final int validityEnd;
/** Simple constructor.
* @param pattern file names to which this configuration applies
* @param prefix file names to which this configuration applies
* @param version ITRF version
* @param validityStart start of validity (included)
* @param validityEnd end of validity (excluded)
*/
ITRFVersionConfiguration(final Pattern pattern,
ITRFVersionConfiguration(final String prefix,
final ITRFVersion version,
final int validityStart,
final int validityEnd) {
this.pattern = pattern;
this.prefix = prefix;
this.version = version;
this.validityStart = validityStart;
this.validityEnd = validityEnd;
......@@ -251,7 +256,8 @@ class ITRFVersionLoader {
* @return true if the configuration applies to the specified file
*/
boolean appliesTo(final String name) {
return pattern.matcher(name).matches();
final int i = FastMath.max(name.lastIndexOf("/"), name.lastIndexOf("\\"));
return name.startsWith(prefix, i + 1);
}
/** Get ITRF version.
......
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = file {0} does not contain Vienna coeff
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = irregular or incomplete grid in file {0}
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = The first column of itrf-versions.conf is a plain prefix that is matched against the name of each loaded file. It should not contain any regular expression syntax or directory components, i.e. "/" or "\\". Actual value: "{0}".
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = {0} ne contiant pas de coefficients du
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = grille incomplète ou irrégulière dans le fichier {0}
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -516,3 +516,8 @@ NO_VIENNA_ACOEF_OR_ZENITH_DELAY_IN_FILE = <MISSING TRANSLATION>
# irregular or incomplete grid in file {0}
IRREGULAR_OR_INCOMPLETE_GRID = <MISSING TRANSLATION>
# The first column of itrf-versions.conf is a plain prefix that is matched against the
# name of each loaded file. It should not contain any regular expression syntax or
# directory components, i.e. \"/\" or \"\\\". Actual value: \"{0}\".
ITRF_VERSIONS_PREFIX_ONLY = <MISSING TRANSLATION>
......@@ -285,4 +285,5 @@ the XML format and the columns format.
| Jan\#\#\#\#F10.txt to Dec\#\#\#\#F10.txt[.gz|.Z] | MSAFE format | Marshall Solar Activity Future Estimation | [https://sail.msfc.nasa.gov/index\_archive.htm](https://sail.msfc.nasa.gov/index_archive.htm) |
| CGIM\#\#\#0.\#\#N [.gz|.Z] | Bern Astronomical Institute format | Klobuchar coefficients | [ftp://ftp.aiub.unibe.ch/aiub/CODE/](ftp://ftp.aiub.unibe.ch/aiub/CODE/) |
| \*.blq[.gz|.Z] | Onsala Space Observatory BLQ format | ocean loading coefficients | [http://holt.oso.chalmers.se/loading/](http://holt.oso.chalmers.se/loading/) |
| itrf-versions.conf | Orekit itrf-versions.conf | Maps EOP files to ITRF versions | [Orekit Physical Data Archive](https://gitlab.orekit.org/orekit/orekit-data/-/archive/master/orekit-data-master.zip) |
Supported data types
......@@ -23,6 +23,7 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.regex.Pattern;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
......@@ -51,6 +52,7 @@ public class ZipJarCrawlerTest {
}
public void loadData(InputStream input, String name) {
++count;
Assert.assertThat(name, CoreMatchers.containsString("!/"));
}
public int getCount() {
return count;
......
......@@ -31,7 +31,7 @@ public class OrekitMessagesTest {
@Test
public void testMessageNumber() {
Assert.assertEquals(173, OrekitMessages.values().length);
Assert.assertEquals(174, OrekitMessages.values().length);
}
@Test
......
package org.orekit.frames;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
import org.orekit.Utils;
import org.orekit.errors.OrekitException;
import org.orekit.errors.OrekitMessages;
/**
* Unit tests for {@link ITRFVersionLoader}.
*
* @author Evan Ward
*/
public class ITRFVersionLoaderTest {
/** Check loading regular file. */
@Test
public void testVersion() {
// setup
Utils.setDataRoot("regular-data");
ITRFVersionLoader loader =
new ITRFVersionLoader(ITRFVersionLoader.SUPPORTED_NAMES);
// action + verify
Assert.assertThat(loader.getConfiguration("eopc04_05.00", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(loader.getConfiguration("eopc04_05_IAU2000.00", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(loader.getConfiguration("eopc04_08.00", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(loader.getConfiguration("eopc04_08_IAU2000.00", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(loader.getConfiguration("eopc04_14.00", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
Assert.assertThat(loader.getConfiguration("eopc04_14_IAU2000.00", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
Assert.assertThat(
loader.getConfiguration("bulletina-xi-001.txt", 54000).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2000));
Assert.assertThat(
loader.getConfiguration("bulletina-xxi-001.txt", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader.getConfiguration("bulletina-xxvi-001.txt", 57777).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(
loader.getConfiguration("bulletina-xxxi-001.txt", 58484).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
Assert.assertThat(
loader.getConfiguration("bulletinb_IAU1980-123.txt", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader.getConfiguration("bulletinb_IAU2000-123.txt", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader.getConfiguration("bulletinb-123.txt", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader.getConfiguration("bulletinb.123", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader.getConfiguration("bulletinb-123.txt", 57777).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(
loader.getConfiguration("bulletinb.123", 57777).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(
loader.getConfiguration("bulletinb-123.txt", 58484).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
Assert.assertThat(
loader.getConfiguration("bulletinb.123", 58484).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
Assert.assertThat(loader.getConfiguration("finals.all", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2000));
Assert.assertThat(loader.getConfiguration("finals2000A.all", 0).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2000));
Assert.assertThat(loader.getConfiguration("finals.all", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(loader.getConfiguration("finals2000A.all", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(loader.getConfiguration("finals.all", 57777).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(loader.getConfiguration("finals2000A.all", 57777).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2008));
Assert.assertThat(loader.getConfiguration("finals.all", 58484).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
Assert.assertThat(loader.getConfiguration("finals2000A.all", 58484).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2014));
}
/** Check using file names generated by other loaders. */
@Test
public void testLoaders() {
// setup
Utils.setDataRoot("regular-data");
ITRFVersionLoader loader =
new ITRFVersionLoader(ITRFVersionLoader.SUPPORTED_NAMES);
Assert.assertThat(loader.getConfiguration("/finals.all", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(loader.getConfiguration("\\finals.all", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader .getConfiguration(
"https://user@example.com:port/path/finals.all?a=b#c",
55555)
.getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
Assert.assertThat(
loader.getConfiguration("a.zip!/finals.all", 55555).getVersion(),
CoreMatchers.is(ITRFVersion.ITRF_2005));
}
/** Check that using the old format throws a helpful exception. */
@Test
public void testOldFormat() {
Utils.setDataRoot("obsolete-data");
try {
new ITRFVersionLoader(ITRFVersionLoader.SUPPORTED_NAMES);
Assert.fail("Expected Exception");
} catch (OrekitException e) {
Assert.assertEquals(e.getSpecifier(), OrekitMessages.ITRF_VERSIONS_PREFIX_ONLY);
}
}
}
# Configuration file for ITRF versions read from EOP files
#
# configuration entries have the following form:
# eop-file-regexp start-of-validity end-of-validity ITRF-version
# eop-file-prefix start-of-validity end-of-validity ITRF-version
# where:
# eop-file-regexp
# regular expression that the EOP file should match
# eop-file-prefix
# start of the file name that the EOP file should match
# start-of-validity
# calendar date in the format yyyy-mm-dd, or a string of --- to denote past infinity
# this dater is considered INCLUDED in the validity range
......@@ -15,44 +15,46 @@
# a supported ITRF version in the form ITRF-yy or ITRF-yyyy
#
# empty lines or lines with '#' as their first non-blank character are ignored
# Files are matched against the lines in this file in the order they appear here, so more
# general prefixes should appear later in the file.
# EOP C04 file have the ITRF version embedded in the file name
eopc04_05\.\d\d ------ ------ ITRF-2005
eopc04_05_IAU2000\.\d\d ------ ------ ITRF-2005
eopc04_08\.\d\d ------ ------ ITRF-2008
eopc04_08_IAU2000\.\d\d ------ ------ ITRF-2008
eopc04_14\.\d\d ------ ------ ITRF-2014
eopc04_14_IAU2000\.\d\d ------ ------ ITRF-2014
eopc04_05. ------ ------ ITRF-2005
eopc04_05_IAU2000. ------ ------ ITRF-2005
eopc04_08. ------ ------ ITRF-2008
eopc04_08_IAU2000. ------ ------ ITRF-2008
eopc04_14. ------ ------ ITRF-2014
eopc04_14_IAU2000. ------ ------ ITRF-2014
# Bulletin A files switches between different version of ITRF have been
# extracted from from ftp://maia.usno.navy.mil/ser7/archive.notes
# the switch dates correspond to the first day of the rapid service data
# for the bulletin A that adopted the change, which is exactly 6 days earlier
bulletina-\w+-\d\d\d\.txt ------ 2007-02-02 ITRF-2000
bulletina-\w+-\d\d\d\.txt 2007-02-02 2011-01-28 ITRF-2005
bulletina-\w+-\d\d\d\.txt 2011-01-28 2018-03-23 ITRF-2008
bulletina-\w+-\d\d\d\.txt 2018-03-23 ----- ITRF-2014
bulletina- ------ 2007-02-02 ITRF-2000
bulletina- 2007-02-02 2011-01-28 ITRF-2005
bulletina- 2011-01-28 2018-03-23 ITRF-2008
bulletina- 2018-03-23 ----- ITRF-2014
# old Bulletin B still used ITRF 2005 (probably)
bulletinb_IAU1980-\d\d\d\.txt ------ ------ ITRF-2005
bulletinb_IAU2000-\d\d\d\.txt ------ ------ ITRF-2005
bulletinb_IAU1980- ------ ------ ITRF-2005
bulletinb_IAU2000- ------ ------ ITRF-2005
# According to Bulletins B 276 to 361, ITRF-2008 was adopted starting 2011-02-01
# According to Bulletins B 352 and later, ITRF-2014 was adopted starting 2017-03-01
bulletinb-\d\d\d\.txt ------ 2011-02-01 ITRF-2005
bulletinb-\d\d\d\.txt 2011-02-01 2018-03-01 ITRF-2008
bulletinb-\d\d\d\.txt 2018-03-01 ------ ITRF-2014
bulletinb\.\d\d\d ------ 2011-02-01 ITRF-2005
bulletinb\.\d\d\d 2011-02-01 2017-03-01 ITRF-2008
bulletinb\.\d\d\d 2017-03-01 ------ ITRF-2014
bulletinb- ------ 2011-02-01 ITRF-2005
bulletinb- 2011-02-01 2018-03-01 ITRF-2008
bulletinb- 2018-03-01 ------ ITRF-2014
bulletinb. ------ 2011-02-01 ITRF-2005
bulletinb. 2011-02-01 2017-03-01 ITRF-2008
bulletinb. 2017-03-01 ------ ITRF-2014
# rapid data file contain Bulletin A and Bulletin B
# and Orekit extract the Bulletin A part, so we use a similar configuration
finals\..* ------ 2007-02-02 ITRF-2000
finals\..* 2007-02-02 2011-01-28 ITRF-2005
finals\..* 2011-01-28 2018-03-23 ITRF-2008
finals\..* 2018-03-23 ----- ITRF-2014
finals2000A\..* ------ 2007-02-02 ITRF-2000
finals2000A\..* 2007-02-02 2011-01-28 ITRF-2005
finals2000A\..* 2011-01-28 2018-03-23 ITRF-2008
finals2000A\..* 2018-03-23 ----- ITRF-2014
finals. ------ 2007-02-02 ITRF-2000
finals. 2007-02-02 2011-01-28 ITRF-2005
finals. 2011-01-28 2018-03-23 ITRF-2008
finals. 2018-03-23 ----- ITRF-2014
finals2000A. ------ 2007-02-02 ITRF-2000
finals2000A. 2007-02-02 2011-01-28 ITRF-2005
finals2000A. 2011-01-28 2018-03-23 ITRF-2008
finals2000A. 2018-03-23 ----- ITRF-2014
# Configuration file for ITRF versions read from EOP files
#
# configuration entries have the following form:
# eop-file-regexp start-of-validity end-of-validity ITRF-version
# where:
# eop-file-regexp
# regular expression that the EOP file should match
# start-of-validity
# calendar date in the format yyyy-mm-dd, or a string of --- to denote past infinity
# this dater is considered INCLUDED in the validity range
# end-of-validity
# calendar date in the format yyyy-mm-dd, or a string of --- to denote past infinity
# this dater is considered EXCLUDED from the validity range
# ITRF-version
# a supported ITRF version in the form ITRF-yy or ITRF-yyyy
#
# empty lines or lines with '#' as their first non-blank character are ignored
# EOP C04 file have the ITRF version embedded in the file name
eopc04_05\.\d\d ------ ------ ITRF-2005
eopc04_05_IAU2000\.\d\d ------ ------ ITRF-2005
eopc04_08\.\d\d ------ ------ ITRF-2008
eopc04_08_IAU2000\.\d\d ------ ------ ITRF-2008
eopc04_14\.\d\d ------ ------ ITRF-2014
eopc04_14_IAU2000\.\d\d ------ ------ ITRF-2014
# Bulletin A files switches between different version of ITRF have been
# extracted from from ftp://maia.usno.navy.mil/ser7/archive.notes
# the switch dates correspond to the first day of the rapid service data
# for the bulletin A that adopted the change, which is exactly 6 days earlier
bulletina-\w+-\d\d\d\.txt ------ 2007-02-02 ITRF-2000
bulletina-\w+-\d\d\d\.txt 2007-02-02 2011-01-28 ITRF-2005
bulletina-\w+-\d\d\d\.txt 2011-01-28 2018-03-23 ITRF-2008
bulletina-\w+-\d\d\d\.txt 2018-03-23 ----- ITRF-2014
# old Bulletin B still used ITRF 2005 (probably)
bulletinb_IAU1980-\d\d\d\.txt ------ ------ ITRF-2005
bulletinb_IAU2000-\d\d\d\.txt ------ ------ ITRF-2005
# According to Bulletins B 276 to 361, ITRF-2008 was adopted starting 2011-02-01
# According to Bulletins B 352 and later, ITRF-2014 was adopted starting 2017-03-01
bulletinb-\d\d\d\.txt ------ 2011-02-01 ITRF-2005
bulletinb-\d\d\d\.txt 2011-02-01 2018-03-01 ITRF-2008
bulletinb-\d\d\d\.txt 2018-03-01 ------ ITRF-2014
bulletinb\.\d\d\d ------ 2011-02-01 ITRF-2005
bulletinb\.\d\d\d 2011-02-01 2017-03-01 ITRF-2008
bulletinb\.\d\d\d 2017-03-01 ------ ITRF-2014
# rapid data file contain Bulletin A and Bulletin B
# and Orekit extract the Bulletin A part, so we use a similar configuration
finals\..* ------ 2007-02-02 ITRF-2000
finals\..* 2007-02-02 2011-01-28 ITRF-2005
finals\..* 2011-01-28 2018-03-23 ITRF-2008
finals\..* 2018-03-23 ----- ITRF-2014
finals2000A\..* ------ 2007-02-02 ITRF-2000
finals2000A\..* 2007-02-02 2011-01-28 ITRF-2005
finals2000A\..* 2011-01-28 2018-03-23 ITRF-2008
finals2000A\..* 2018-03-23 ----- ITRF-2014
# Configuration file for ITRF versions read from EOP files
#
# configuration entries have the following form:
# eop-file-regexp start-of-validity end-of-validity ITRF-version
# eop-file-prefix start-of-validity end-of-validity ITRF-version
# where:
# eop-file-regexp
# regular expression that the EOP file should match
# eop-file-prefix
# start of the file name that the EOP file should match
# start-of-validity
# calendar date in the format yyyy-mm-dd, or a string of --- to denote past infinity
# this dater is considered INCLUDED in the validity range
......@@ -15,44 +15,46 @@
# a supported ITRF version in the form ITRF-yy or ITRF-yyyy
#
# empty lines or lines with '#' as their first non-blank character are ignored
# Files are matched against the lines in this file in the order they appear here, so more
# general prefixes should appear later in the file.
# EOP C04 file have the ITRF version embedded in the file name
eopc04_05\.\d\d ------ ------ ITRF-2005
eopc04_05_IAU2000\.\d\d ------ ------ ITRF-2005
eopc04_08\.\d\d ------ ------ ITRF-2008
eopc04_08_IAU2000\.\d\d ------ ------ ITRF-2008
eopc04_14\.\d\d ------ ------ ITRF-2014
eopc04_14_IAU2000\.\d\d ------ ------ ITRF-2014
eopc04_05. ------ ------ ITRF-2005
eopc04_05_IAU2000. ------ ------ ITRF-2005
eopc04_08. ------ ------ ITRF-2008
eopc04_08_IAU2000. ------ ------ ITRF-2008
eopc04_14. ------ ------ ITRF-2014
eopc04_14_IAU2000. ------ ------ ITRF-2014
# Bulletin A files switches between different version of ITRF have been
# extracted from from ftp://maia.usno.navy.mil/ser7/archive.notes
# the switch dates correspond to the first day of the rapid service data
# for the bulletin A that adopted the change, which is exactly 6 days earlier
bulletina-\w+-\d\d\d\.txt ------ 2007-02-02 ITRF-2000
bulletina-\w+-\d\d\d\.txt 2007-02-02 2011-01-28 ITRF-2005
bulletina-\w+-\d\d\d\.txt 2011-01-28 2018-03-23 ITRF-2008
bulletina-\w+-\d\d\d\.txt 2018-03-23 ----- ITRF-2014
bulletina- ------ 2007-02-02 ITRF-2000
bulletina- 2007-02-02 2011-01-28 ITRF-2005
bulletina- 2011-01-28 2018-03-23 ITRF-2008
bulletina- 2018-03-23 ----- ITRF-2014
# old Bulletin B still used ITRF 2005 (probably)
bulletinb_IAU1980-\d\d\d\.txt ------ ------ ITRF-2005
bulletinb_IAU2000-\d\d\d\.txt ------ ------ ITRF-2005
bulletinb_IAU1980- ------ ------ ITRF-2005
bulletinb_IAU2000- ------ ------ ITRF-2005
# According to Bulletins B 276 to 361, ITRF-2008 was adopted starting 2011-02-01
# According to Bulletins B 352 and later, ITRF-2014 was adopted starting 2017-03-01
bulletinb-\d\d\d\.txt ------ 2011-02-01 ITRF-2005
bulletinb-\d\d\d\.txt 2011-02-01 2018-03-01 ITRF-2008
bulletinb-\d\d\d\.txt 2018-03-01 ------ ITRF-2014
bulletinb\.\d\d\d ------ 2011-02-01 ITRF-2005
bulletinb\.\d\d\d 2011-02-01 2017-03-01 ITRF-2008
bulletinb\.\d\d\d 2017-03-01 ------ ITRF-2014
bulletinb- ------ 2011-02-01 ITRF-2005
bulletinb- 2011-02-01 2018-03-01 ITRF-2008
bulletinb- 2018-03-01 ------ ITRF-2014
bulletinb. ------ 2011-02-01 ITRF-2005
bulletinb. 2011-02-01 2017-03-01 ITRF-2008
bulletinb. 2017-03-01 ------ ITRF-2014
# rapid data file contain Bulletin A and Bulletin B
# and Orekit extract the Bulletin A part, so we use a similar configuration
finals\..* ------ 2007-02-02 ITRF-2000
finals\..* 2007-02-02 2011-01-28 ITRF-2005
finals\..* 2011-01-28 2018-03-23 ITRF-2008
finals\..* 2018-03-23 ----- ITRF-2014
finals2000A\..* ------ 2007-02-02 ITRF-2000
finals2000A\..* 2007-02-02 2011-01-28 ITRF-2005
finals2000A\..* 2011-01-28 2018-03-23 ITRF-2008
finals2000A\..* 2018-03-23 ----- ITRF-2014
finals. ------ 2007-02-02 ITRF-2000
finals. 2007-02-02 2011-01-28 ITRF-2005
finals. 2011-01-28 2018-03-23 ITRF-2008
finals. 2018-03-23 ----- ITRF-2014
finals2000A. ------ 2007-02-02 ITRF-2000
finals2000A. 2007-02-02 2011-01-28 ITRF-2005
finals2000A. 2011-01-28 2018-03-23 ITRF-2008
finals2000A. 2018-03-23 ----- ITRF-2014
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment