From de038d3a92e1f13fac72ca53b52676fe223556a7 Mon Sep 17 00:00:00 2001 From: Instrumental Date: Tue, 8 May 2018 14:33:18 -0500 Subject: [PATCH] Check Perm Instance ending in colon Issue-ID: AAF-269 Change-Id: I5422c0f119a53284ddc25eb7b99a8a6b09d3dd39 Signed-off-by: Instrumental Fix broken JUnits Issue-ID: AAF-270 Change-Id: I91e5d24b0e0610b10dcd12e90813e9ea00af1812 Signed-off-by: Instrumental --- auth-client/pom.xml | 3 --- .../validation/test/JU_ServiceValidator.java | 12 +++++++++ auth/sample/local/org.osaaf.aaf.p12 | Bin 4140 -> 4172 bytes .../onap/aaf/cadi/cm/PlaceArtifactInKeystore.java | 5 ++-- .../org/onap/aaf/cadi/cm/test/JU_ArtifactDir.java | 20 +++++++++------ .../cadi/cm/test/JU_PlaceArtifactInKeystore.java | 7 ++++-- .../org/onap/aaf/cadi/lur/test/JU_LocalLur.java | 16 ++++++++++-- cadi/core/src/test/resources/output_key | 1 - cadi/core/test/output_key | 27 --------------------- 9 files changed, 45 insertions(+), 46 deletions(-) delete mode 100644 cadi/core/src/test/resources/output_key delete mode 100644 cadi/core/test/output_key diff --git a/auth-client/pom.xml b/auth-client/pom.xml index 9f0bef76..789e24ee 100644 --- a/auth-client/pom.xml +++ b/auth-client/pom.xml @@ -122,7 +122,6 @@ org.apache.maven.plugins maven-deploy-plugin - 2.5 false @@ -140,7 +139,6 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.7 true ${nexusproxy} @@ -151,7 +149,6 @@ org.jacoco jacoco-maven-plugin - 0.7.7.201606060606 true diff --git a/auth/auth-service/src/test/java/org/onap/aaf/auth/service/validation/test/JU_ServiceValidator.java b/auth/auth-service/src/test/java/org/onap/aaf/auth/service/validation/test/JU_ServiceValidator.java index a0e5bfa6..f304fccd 100644 --- a/auth/auth-service/src/test/java/org/onap/aaf/auth/service/validation/test/JU_ServiceValidator.java +++ b/auth/auth-service/src/test/java/org/onap/aaf/auth/service/validation/test/JU_ServiceValidator.java @@ -53,6 +53,18 @@ public class JU_ServiceValidator { assertTrue(validator.errs().equals("ERR_Security\n")); } + + @Test + public void permInstance() { + assertFalse(validator.permInstance("hello").err()); + assertFalse(validator.permInstance("hello32").err()); + assertFalse(validator.permInstance("hello-32").err()); + assertFalse(validator.permInstance(":asdf:*:sdf*:sdk").err()); + assertFalse(validator.permInstance(":asdf:*:sdf*:sdk*").err()); + // Perms may not end in ":" + assertTrue(validator.permInstance(":").err()); + assertTrue(validator.permInstance(":hello:").err()); + } @Test public void permOkNull() { diff --git a/auth/sample/local/org.osaaf.aaf.p12 b/auth/sample/local/org.osaaf.aaf.p12 index f40a7556dad00281f8cc75c49891b83c493bbbf2..1e1ce6960e13fd4249309c6698f2eb7d156015eb 100644 GIT binary patch delta 4042 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 delta 4010 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 Q2&EVHtOlLl(gFeq00~>K-v9sr diff --git a/cadi/aaf/src/main/java/org/onap/aaf/cadi/cm/PlaceArtifactInKeystore.java b/cadi/aaf/src/main/java/org/onap/aaf/cadi/cm/PlaceArtifactInKeystore.java index 9360e02f..2b498d4f 100644 --- a/cadi/aaf/src/main/java/org/onap/aaf/cadi/cm/PlaceArtifactInKeystore.java +++ b/cadi/aaf/src/main/java/org/onap/aaf/cadi/cm/PlaceArtifactInKeystore.java @@ -125,17 +125,16 @@ public class PlaceArtifactInKeystore extends ArtifactDir { char[] truststorePassArray = trustStorePass.toCharArray(); jks.load(null,truststorePassArray); // load in - // Add Trusted Certificates + // Add Trusted Certificates, but PKCS12 doesn't support for(int i=0; i", baos); - PropAccess ta = new PropAccess(); + PropAccess ta = new PropAccess() { + @Override + public String decrypt(String encrypted, boolean anytext) throws IOException { + return symmetric.depass(encrypted); + } + + @Override + public String encrypt(String unencrypted) throws IOException { + return symmetric.enpass(unencrypted); + } + + }; + Lur ml = up = new LocalLur(ta,"myname:groupA,groupB","admin:myname,yourname;suser:hisname,hername,m1234%"+baos.toString()); diff --git a/cadi/core/src/test/resources/output_key b/cadi/core/src/test/resources/output_key deleted file mode 100644 index 9d94dcbd..00000000 --- a/cadi/core/src/test/resources/output_key +++ /dev/null @@ -1 +0,0 @@ -QRSTUVWXYZabcdef \ No newline at end of file diff --git a/cadi/core/test/output_key b/cadi/core/test/output_key deleted file mode 100644 index 353fabd2..00000000 --- a/cadi/core/test/output_key +++ /dev/null @@ -1,27 +0,0 @@ -g6wDq10CsnMUE0HB18N2UsrFri27TBG05Z1JzrvNSPUhIphFcv7gst-eHKvfbgffKF-rs9Zkjd5F -3FZDci9MlG4vhwrXHXLgo6DXEVH4FsfT5MP__E3yrnuGOcDI4kWUFdni3xG48PXNcT_xQoPb6JRO -dI3PiRRhgpvxuIL8O6iptFRoEilywvb8ySRFJA1XkRxCq-btzSpAHdMkBF-YnwMQYASveKXUddgo -Ab6Rvn6u8cDVWTIvmlEQe2el6dcKOOeMc5Ipc0AXsTLpGmhMVySEeyzKysHk0c1BiGxTulqZQcHP -L9uDFMxqL_GBwQOM4Xfu5wD_Dh1zNoKIpPta1AORjqlaUFOEsVWIn5oOKnimz4aNOjUku7tj3OKi -c-AsphXLIpmodQD4uZBynwhIjuNcJ3-SRZ3_SHnXqvf8gE-4jab2baMEX_QJ2GXumcOdZujDp8yz -3hCBlsToWXD-IatJ9dv_1gSn2_VOcXIhaNwe4YomaBVsQ4QqOkFWP9ZH3IfHrcCWZGt_HKg87NrJ -PASZ9yzlBLBTI7XFOg4rqU7l-b6-LpTLm36c0f5ImPzr-kHpE--y0cuTfdI4CEv3dJMGysKOfXax -N4tgR5t7ArQdFhLyo5mH-L5l973yuqJGVeRlTsYBYsHEb5vtIZxrYlebU9SSMmL9J-xI-hQV5tV7 -VR2C_zIKGL2nAq-tfVaiD1-M-SZW0S5VNmM-zXVxPT7jalCdHl6Dca47MhwQBVv_fxB5Nsahf10X -MT58fLLi7C2aCIAPqFyu0e3B_yuAnhDzdkS_TmtX9ke25BSZe8Ql0lni9USKxwykfoRpt7UtdAId -l8XxAgksLoDwxpL_EGz4I0jQN-4ziCVHpZNQmX08XUQ7Gx_xMtrIi21QRUhF04ZxLxlwTXjsr_Tj -jO2Y6xs-S0wShAXGA8qZWdUXqO-zg6pGQ51RWf1HZYvgCDy1E0LiBEdlGye0dFzy1jS2DRg-3ByC -oYtQmOmuyvOoCAH4B7C2fWSW8Kn2ps2VvHTmk7b7ZcWlteNWfjezaU4W2JQclBP8UzcfuuMohZgP -eYRTQ_vTxvwbVBESBNpcfW3Og5sru0FhHbKyL6UE5iOxAnnf06bMOCesDRDm4yTcCbCCya-norY9 -aWiFbXKyFUqZVbmCSRd1hv-FJazsfXgJneeTvzyRg1vPQhnmyngwm0H1S7YPAGPL2B6Ir-nMCzLR -oscgShrIPR7YnemaZxqwMES6iWqnnPNOJO3NRAs7iVw71sIh1BNoDdHYqETsGcmiFiZsNc-LEIFe -c3nmCZ9VufLaYPpYDyTqHjijc0p2gtZtxCyrtSKJO-7Y4rtv9vCOfub7Vn8na_-DtIKUL2Lzspne -dmS5_yetSJ-mNtzB__1jJk-Ke65mZ1BNJ4zMv839rC1rrb63kPZsdQp0w2hnNm-ttWXDN0nnyLOY -Vz6p9BLrVAg9kA4Y0DFsI3qqEA1Xhuc9LuKLIGiCuGfa6ydoIzDRvlDTJR-Kju1A8npgzQTxGFSo -P2A4f8E8doF9Lbt46yQQx0S14kS-1sPHUAc-Lqx5lnLcDxU1e4kgDrgbQ2Tly60tIhU_es9m1RZP -5c4-VyjgDXmKxCIaq53VihbPmGi626xfX0Ez5sosEDQSvEGsxRwEBsO1Mif2b2a1IERpUqCafAjo -rfN6DbKhWUINOGsDcRvZFWcR1dGuboopxpTxwXNhZxKb_0WPraLBkdzWC2rF7_JQc0o6LetalSUZ -HjbMIsyvME5sA0JF5dLXEdPmHKs4XQOQPYi6yMz78wz7qNwvGI_qAQEK3cAriBJx7mxZry7DRa7Z -UvmaESHb3j80InnqiEcC_gF-smViBsyxIZzGPdXD7mwa91829obATzs08769bXh_MlCYkVqrXM-A -Il2NI0ocRziAkRnyFk1NzL9sghQ_9EIarjTGJv8xQCHfUibksmk0pQJFt8Z8_gXPOprLZB3DZytT -6mNiawvv0H5phK9Fdm2seytkouSfmgDcY5wSeytgmtZSwGe12BoQUrtTJoOGV6BmYxOCMTC1 \ No newline at end of file -- 2.16.6