Committed by
Jonathan Hart
ONOS-4774, ONOS-4775, ONOS-4776 + some minor fixes
Change-Id: I0d3438f36f0ce9ce0152d295d6f2d749d7f13bed
Showing
7 changed files
with
151 additions
and
97 deletions
| ... | @@ -109,14 +109,12 @@ public class ReviewCommand extends AbstractShellCommand { | ... | @@ -109,14 +109,12 @@ public class ReviewCommand extends AbstractShellCommand { |
| 109 | print("\t[Other SERVICE] " + perm.getName() + "(" + perm.getActions() + ")"); | 109 | print("\t[Other SERVICE] " + perm.getName() + "(" + perm.getActions() + ")"); |
| 110 | } | 110 | } |
| 111 | break; | 111 | break; |
| 112 | - case 4: | 112 | + default: |
| 113 | - for (Permission perm: assortedMap.get(4)) { | 113 | + for (Permission perm: assortedMap.get(type)) { |
| 114 | print("\t[Other] " + perm.getClass().getSimpleName() + | 114 | print("\t[Other] " + perm.getClass().getSimpleName() + |
| 115 | - " " + perm.getName() + " (" + perm.getActions() + ")"); | 115 | + " " + perm.getName() + " (" + perm.getActions() + ")"); |
| 116 | } | 116 | } |
| 117 | break; | 117 | break; |
| 118 | - default: | ||
| 119 | - break; | ||
| 120 | } | 118 | } |
| 121 | } | 119 | } |
| 122 | } | 120 | } | ... | ... |
| ... | @@ -82,7 +82,8 @@ public class AppPermission extends BasicPermission { | ... | @@ -82,7 +82,8 @@ public class AppPermission extends BasicPermission { |
| 82 | TUNNEL_WRITE, | 82 | TUNNEL_WRITE, |
| 83 | TUNNEL_EVENT, | 83 | TUNNEL_EVENT, |
| 84 | UI_READ, | 84 | UI_READ, |
| 85 | - UI_WRITE | 85 | + UI_WRITE, |
| 86 | + ADMIN | ||
| 86 | } | 87 | } |
| 87 | 88 | ||
| 88 | protected Type type; | 89 | protected Type type; | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2015-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -17,7 +17,6 @@ package org.onosproject.security.impl; | ... | @@ -17,7 +17,6 @@ package org.onosproject.security.impl; |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | import com.google.common.collect.ImmutableSet; | 19 | import com.google.common.collect.ImmutableSet; |
| 20 | -import com.google.common.collect.Lists; | ||
| 21 | import com.google.common.collect.Sets; | 20 | import com.google.common.collect.Sets; |
| 22 | import org.onosproject.cluster.ClusterAdminService; | 21 | import org.onosproject.cluster.ClusterAdminService; |
| 23 | import org.onosproject.cluster.ClusterMetadataService; | 22 | import org.onosproject.cluster.ClusterMetadataService; |
| ... | @@ -33,8 +32,6 @@ import org.onosproject.net.config.NetworkConfigService; | ... | @@ -33,8 +32,6 @@ import org.onosproject.net.config.NetworkConfigService; |
| 33 | import org.onosproject.net.edge.EdgePortService; | 32 | import org.onosproject.net.edge.EdgePortService; |
| 34 | import org.onosproject.net.key.DeviceKeyAdminService; | 33 | import org.onosproject.net.key.DeviceKeyAdminService; |
| 35 | import org.onosproject.net.key.DeviceKeyService; | 34 | import org.onosproject.net.key.DeviceKeyService; |
| 36 | -import org.onosproject.net.newresource.ResourceAdminService; | ||
| 37 | -import org.onosproject.net.newresource.ResourceService; | ||
| 38 | import org.onosproject.net.region.RegionAdminService; | 35 | import org.onosproject.net.region.RegionAdminService; |
| 39 | import org.onosproject.net.region.RegionService; | 36 | import org.onosproject.net.region.RegionService; |
| 40 | import org.onosproject.net.statistic.FlowStatisticService; | 37 | import org.onosproject.net.statistic.FlowStatisticService; |
| ... | @@ -73,7 +70,6 @@ import org.onosproject.store.cluster.messaging.MessagingService; | ... | @@ -73,7 +70,6 @@ import org.onosproject.store.cluster.messaging.MessagingService; |
| 73 | import org.onosproject.store.primitives.PartitionAdminService; | 70 | import org.onosproject.store.primitives.PartitionAdminService; |
| 74 | import org.onosproject.store.primitives.PartitionService; | 71 | import org.onosproject.store.primitives.PartitionService; |
| 75 | import org.onosproject.store.service.LogicalClockService; | 72 | import org.onosproject.store.service.LogicalClockService; |
| 76 | -import org.onosproject.store.service.MutexExecutionService; | ||
| 77 | import org.onosproject.store.service.StorageAdminService; | 73 | import org.onosproject.store.service.StorageAdminService; |
| 78 | import org.onosproject.store.service.StorageService; | 74 | import org.onosproject.store.service.StorageService; |
| 79 | import org.onosproject.ui.UiExtensionService; | 75 | import org.onosproject.ui.UiExtensionService; |
| ... | @@ -84,6 +80,8 @@ import org.osgi.framework.CapabilityPermission; | ... | @@ -84,6 +80,8 @@ import org.osgi.framework.CapabilityPermission; |
| 84 | import org.osgi.framework.BundlePermission; | 80 | import org.osgi.framework.BundlePermission; |
| 85 | import org.osgi.framework.PackagePermission; | 81 | import org.osgi.framework.PackagePermission; |
| 86 | import org.osgi.service.cm.ConfigurationPermission; | 82 | import org.osgi.service.cm.ConfigurationPermission; |
| 83 | +import org.osgi.service.condpermadmin.ConditionalPermissionAdmin; | ||
| 84 | +import org.osgi.service.permissionadmin.PermissionAdmin; | ||
| 87 | 85 | ||
| 88 | import javax.net.ssl.SSLPermission; | 86 | import javax.net.ssl.SSLPermission; |
| 89 | import javax.security.auth.AuthPermission; | 87 | import javax.security.auth.AuthPermission; |
| ... | @@ -97,10 +95,7 @@ import java.net.NetPermission; | ... | @@ -97,10 +95,7 @@ import java.net.NetPermission; |
| 97 | import java.net.SocketPermission; | 95 | import java.net.SocketPermission; |
| 98 | import java.security.Permissions; | 96 | import java.security.Permissions; |
| 99 | import java.sql.SQLPermission; | 97 | import java.sql.SQLPermission; |
| 100 | -import java.util.ArrayList; | ||
| 101 | import java.util.Enumeration; | 98 | import java.util.Enumeration; |
| 102 | -import java.util.HashSet; | ||
| 103 | -import java.util.List; | ||
| 104 | import java.util.PropertyPermission; | 99 | import java.util.PropertyPermission; |
| 105 | import java.util.Set; | 100 | import java.util.Set; |
| 106 | import java.util.concurrent.ConcurrentHashMap; | 101 | import java.util.concurrent.ConcurrentHashMap; |
| ... | @@ -114,24 +109,39 @@ public final class DefaultPolicyBuilder { | ... | @@ -114,24 +109,39 @@ public final class DefaultPolicyBuilder { |
| 114 | protected static ConcurrentHashMap<AppPermission.Type, | 109 | protected static ConcurrentHashMap<AppPermission.Type, |
| 115 | Set<String>> serviceDirectory = getServiceDirectory(); | 110 | Set<String>> serviceDirectory = getServiceDirectory(); |
| 116 | 111 | ||
| 117 | - protected static List<Permission> defaultPermissions = getDefaultPerms(); | 112 | + protected static Set<Permission> defaultPermissions = getDefaultPerms(); |
| 118 | - protected static List<Permission> adminServicePermissions = getAdminDefaultPerms(); | 113 | + protected static Set<Permission> adminServicePermissions = getAdminDefaultPerms(); |
| 119 | 114 | ||
| 120 | private DefaultPolicyBuilder(){ | 115 | private DefaultPolicyBuilder(){ |
| 121 | } | 116 | } |
| 122 | 117 | ||
| 123 | - public static List<Permission> getUserApplicationPermissions(Set<org.onosproject.security.Permission> permissions) { | 118 | + public static Set<Permission> getUserApplicationPermissions(Set<org.onosproject.security.Permission> permissions) { |
| 124 | - List<Permission> perms = Lists.newArrayList(); | 119 | + |
| 120 | + Set<Permission> perms = Sets.newHashSet(); | ||
| 125 | perms.addAll(defaultPermissions); | 121 | perms.addAll(defaultPermissions); |
| 126 | perms.addAll(convertToJavaPermissions(permissions)); | 122 | perms.addAll(convertToJavaPermissions(permissions)); |
| 123 | + for (Permission perm : perms) { | ||
| 124 | + if (perm instanceof AppPermission && ((AppPermission) perm).getType() == ADMIN) { | ||
| 125 | + perms.remove(perm); | ||
| 126 | + } else if (perm instanceof ServicePermission) { | ||
| 127 | + if (perm.getName().contains(SecurityAdminService.class.getName())) { | ||
| 128 | + perms.remove(perm); | ||
| 129 | + } else if (perm.getName().contains(PermissionAdmin.class.getName())) { | ||
| 130 | + perms.remove(perm); | ||
| 131 | + } else if (perm.getName().contains(ConditionalPermissionAdmin.class.getName())) { | ||
| 132 | + perms.remove(perm); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + } | ||
| 127 | return optimizePermissions(perms); | 136 | return optimizePermissions(perms); |
| 128 | } | 137 | } |
| 129 | 138 | ||
| 130 | - public static List<Permission> getAdminApplicationPermissions( | 139 | + public static Set<Permission> getAdminApplicationPermissions( |
| 131 | Set<org.onosproject.security.Permission> permissions) { | 140 | Set<org.onosproject.security.Permission> permissions) { |
| 132 | - List<Permission> perms = Lists.newArrayList(); | 141 | + Set<Permission> perms = Sets.newHashSet(); |
| 133 | perms.addAll(defaultPermissions); | 142 | perms.addAll(defaultPermissions); |
| 134 | perms.addAll(adminServicePermissions); | 143 | perms.addAll(adminServicePermissions); |
| 144 | + perms.add(new AppPermission(ADMIN)); | ||
| 135 | for (AppPermission.Type perm : serviceDirectory.keySet()) { | 145 | for (AppPermission.Type perm : serviceDirectory.keySet()) { |
| 136 | perms.add(new AppPermission(perm)); | 146 | perms.add(new AppPermission(perm)); |
| 137 | } | 147 | } |
| ... | @@ -139,8 +149,8 @@ public final class DefaultPolicyBuilder { | ... | @@ -139,8 +149,8 @@ public final class DefaultPolicyBuilder { |
| 139 | return optimizePermissions(perms); | 149 | return optimizePermissions(perms); |
| 140 | } | 150 | } |
| 141 | 151 | ||
| 142 | - public static List<Permission> convertToJavaPermissions(Set<org.onosproject.security.Permission> permissions) { | 152 | + public static Set<Permission> convertToJavaPermissions(Set<org.onosproject.security.Permission> permissions) { |
| 143 | - List<Permission> result = Lists.newArrayList(); | 153 | + Set<Permission> result = Sets.newHashSet(); |
| 144 | for (org.onosproject.security.Permission perm : permissions) { | 154 | for (org.onosproject.security.Permission perm : permissions) { |
| 145 | Permission javaPerm = getPermission(perm); | 155 | Permission javaPerm = getPermission(perm); |
| 146 | if (javaPerm != null) { | 156 | if (javaPerm != null) { |
| ... | @@ -153,6 +163,9 @@ public final class DefaultPolicyBuilder { | ... | @@ -153,6 +163,9 @@ public final class DefaultPolicyBuilder { |
| 153 | result.add(new ServicePermission(service, ServicePermission.GET)); | 163 | result.add(new ServicePermission(service, ServicePermission.GET)); |
| 154 | } | 164 | } |
| 155 | } | 165 | } |
| 166 | + if (ap.getType() == CONFIG_WRITE) { | ||
| 167 | + result.addAll(getConfigServicePerms()); | ||
| 168 | + } | ||
| 156 | } | 169 | } |
| 157 | } else if (javaPerm instanceof ServicePermission) { | 170 | } else if (javaPerm instanceof ServicePermission) { |
| 158 | if (!javaPerm.getName().contains(SecurityAdminService.class.getName())) { | 171 | if (!javaPerm.getName().contains(SecurityAdminService.class.getName())) { |
| ... | @@ -167,7 +180,7 @@ public final class DefaultPolicyBuilder { | ... | @@ -167,7 +180,7 @@ public final class DefaultPolicyBuilder { |
| 167 | return result; | 180 | return result; |
| 168 | } | 181 | } |
| 169 | 182 | ||
| 170 | - public static Set<org.onosproject.security.Permission> convertToOnosPermissions(List<Permission> permissions) { | 183 | + public static Set<org.onosproject.security.Permission> convertToOnosPermissions(Set<Permission> permissions) { |
| 171 | Set<org.onosproject.security.Permission> result = Sets.newHashSet(); | 184 | Set<org.onosproject.security.Permission> result = Sets.newHashSet(); |
| 172 | for (Permission perm : permissions) { | 185 | for (Permission perm : permissions) { |
| 173 | org.onosproject.security.Permission onosPerm = getOnosPermission(perm); | 186 | org.onosproject.security.Permission onosPerm = getOnosPermission(perm); |
| ... | @@ -178,18 +191,27 @@ public final class DefaultPolicyBuilder { | ... | @@ -178,18 +191,27 @@ public final class DefaultPolicyBuilder { |
| 178 | return result; | 191 | return result; |
| 179 | } | 192 | } |
| 180 | 193 | ||
| 181 | - public static List<Permission> getDefaultPerms() { | 194 | + public static Set<Permission> getDefaultPerms() { |
| 182 | - List<Permission> permSet = Lists.newArrayList(); | 195 | + Set<Permission> permSet = Sets.newHashSet(); |
| 196 | + // slf4j-logging requirement | ||
| 197 | + permSet.add( | ||
| 198 | + new AdaptPermission("(adaptClass=org.osgi.framework.wiring.BundleRevision)", AdaptPermission.ADAPT)); | ||
| 199 | + // package-permissions | ||
| 183 | permSet.add(new PackagePermission("*", PackagePermission.EXPORTONLY)); | 200 | permSet.add(new PackagePermission("*", PackagePermission.EXPORTONLY)); |
| 184 | permSet.add(new PackagePermission("*", PackagePermission.IMPORT)); | 201 | permSet.add(new PackagePermission("*", PackagePermission.IMPORT)); |
| 185 | - permSet.add(new AdaptPermission("*", AdaptPermission.ADAPT)); | 202 | + return permSet; |
| 203 | + } | ||
| 204 | + | ||
| 205 | + | ||
| 206 | + private static Set<Permission> getConfigServicePerms() { | ||
| 207 | + Set<Permission> permSet = Sets.newHashSet(); | ||
| 208 | + permSet.add(new AdminPermission("(name=org.onosproject.onos-core-net)", AdminPermission.METADATA)); | ||
| 186 | permSet.add(new ConfigurationPermission("*", ConfigurationPermission.CONFIGURE)); | 209 | permSet.add(new ConfigurationPermission("*", ConfigurationPermission.CONFIGURE)); |
| 187 | - permSet.add(new AdminPermission("*", AdminPermission.METADATA)); | ||
| 188 | return permSet; | 210 | return permSet; |
| 189 | } | 211 | } |
| 190 | 212 | ||
| 191 | - private static List<Permission> getAdminDefaultPerms() { | 213 | + private static Set<Permission> getAdminDefaultPerms() { |
| 192 | - List<Permission> permSet = Lists.newArrayList(); | 214 | + Set<Permission> permSet = Sets.newHashSet(); |
| 193 | permSet.add(new ServicePermission(ApplicationAdminService.class.getName(), ServicePermission.GET)); | 215 | permSet.add(new ServicePermission(ApplicationAdminService.class.getName(), ServicePermission.GET)); |
| 194 | permSet.add(new ServicePermission(ClusterAdminService.class.getName(), ServicePermission.GET)); | 216 | permSet.add(new ServicePermission(ClusterAdminService.class.getName(), ServicePermission.GET)); |
| 195 | permSet.add(new ServicePermission(LeadershipAdminService.class.getName(), ServicePermission.GET)); | 217 | permSet.add(new ServicePermission(LeadershipAdminService.class.getName(), ServicePermission.GET)); |
| ... | @@ -200,11 +222,9 @@ public final class DefaultPolicyBuilder { | ... | @@ -200,11 +222,9 @@ public final class DefaultPolicyBuilder { |
| 200 | permSet.add(new ServicePermission(HostAdminService.class.getName(), ServicePermission.GET)); | 222 | permSet.add(new ServicePermission(HostAdminService.class.getName(), ServicePermission.GET)); |
| 201 | permSet.add(new ServicePermission(DeviceKeyAdminService.class.getName(), ServicePermission.GET)); | 223 | permSet.add(new ServicePermission(DeviceKeyAdminService.class.getName(), ServicePermission.GET)); |
| 202 | permSet.add(new ServicePermission(LinkAdminService.class.getName(), ServicePermission.GET)); | 224 | permSet.add(new ServicePermission(LinkAdminService.class.getName(), ServicePermission.GET)); |
| 203 | - permSet.add(new ServicePermission(ResourceAdminService.class.getName(), ServicePermission.GET)); | ||
| 204 | permSet.add(new ServicePermission(RegionAdminService.class.getName(), ServicePermission.GET)); | 225 | permSet.add(new ServicePermission(RegionAdminService.class.getName(), ServicePermission.GET)); |
| 205 | permSet.add(new ServicePermission(PartitionAdminService.class.getName(), ServicePermission.GET)); | 226 | permSet.add(new ServicePermission(PartitionAdminService.class.getName(), ServicePermission.GET)); |
| 206 | permSet.add(new ServicePermission(StorageAdminService.class.getName(), ServicePermission.GET)); | 227 | permSet.add(new ServicePermission(StorageAdminService.class.getName(), ServicePermission.GET)); |
| 207 | - | ||
| 208 | permSet.add(new ServicePermission(ApplicationService.class.getName(), ServicePermission.GET)); | 228 | permSet.add(new ServicePermission(ApplicationService.class.getName(), ServicePermission.GET)); |
| 209 | permSet.add(new ServicePermission(ComponentConfigService.class.getName(), ServicePermission.GET)); | 229 | permSet.add(new ServicePermission(ComponentConfigService.class.getName(), ServicePermission.GET)); |
| 210 | permSet.add(new ServicePermission(ClusterMetadataService.class.getName(), ServicePermission.GET)); | 230 | permSet.add(new ServicePermission(ClusterMetadataService.class.getName(), ServicePermission.GET)); |
| ... | @@ -233,7 +253,7 @@ public final class DefaultPolicyBuilder { | ... | @@ -233,7 +253,7 @@ public final class DefaultPolicyBuilder { |
| 233 | permSet.add(new ServicePermission(LinkService.class.getName(), ServicePermission.GET)); | 253 | permSet.add(new ServicePermission(LinkService.class.getName(), ServicePermission.GET)); |
| 234 | // permSet.add(new ServicePermission(MulticastRouteService.class.getName(), ServicePermission.GET)); | 254 | // permSet.add(new ServicePermission(MulticastRouteService.class.getName(), ServicePermission.GET)); |
| 235 | // permSet.add(new ServicePermission(MeterService.class.getName(), ServicePermission.GET)); | 255 | // permSet.add(new ServicePermission(MeterService.class.getName(), ServicePermission.GET)); |
| 236 | - permSet.add(new ServicePermission(ResourceService.class.getName(), ServicePermission.GET)); | 256 | +// permSet.add(new ServicePermission(ResourceService.class.getName(), ServicePermission.GET)); |
| 237 | permSet.add(new ServicePermission(PacketService.class.getName(), ServicePermission.GET)); | 257 | permSet.add(new ServicePermission(PacketService.class.getName(), ServicePermission.GET)); |
| 238 | permSet.add(new ServicePermission(ProxyArpService.class.getName(), ServicePermission.GET)); | 258 | permSet.add(new ServicePermission(ProxyArpService.class.getName(), ServicePermission.GET)); |
| 239 | permSet.add(new ServicePermission(RegionService.class.getName(), ServicePermission.GET)); | 259 | permSet.add(new ServicePermission(RegionService.class.getName(), ServicePermission.GET)); |
| ... | @@ -248,7 +268,7 @@ public final class DefaultPolicyBuilder { | ... | @@ -248,7 +268,7 @@ public final class DefaultPolicyBuilder { |
| 248 | permSet.add(new ServicePermission(MessagingService.class.getName(), ServicePermission.GET)); | 268 | permSet.add(new ServicePermission(MessagingService.class.getName(), ServicePermission.GET)); |
| 249 | permSet.add(new ServicePermission(PartitionService.class.getName(), ServicePermission.GET)); | 269 | permSet.add(new ServicePermission(PartitionService.class.getName(), ServicePermission.GET)); |
| 250 | permSet.add(new ServicePermission(LogicalClockService.class.getName(), ServicePermission.GET)); | 270 | permSet.add(new ServicePermission(LogicalClockService.class.getName(), ServicePermission.GET)); |
| 251 | - permSet.add(new ServicePermission(MutexExecutionService.class.getName(), ServicePermission.GET)); | 271 | +// permSet.add(new ServicePermission(MutexExecutionService.class.getName(), ServicePermission.GET)); |
| 252 | permSet.add(new ServicePermission(StorageService.class.getName(), ServicePermission.GET)); | 272 | permSet.add(new ServicePermission(StorageService.class.getName(), ServicePermission.GET)); |
| 253 | permSet.add(new ServicePermission(UiExtensionService.class.getName(), ServicePermission.GET)); | 273 | permSet.add(new ServicePermission(UiExtensionService.class.getName(), ServicePermission.GET)); |
| 254 | 274 | ||
| ... | @@ -256,13 +276,22 @@ public final class DefaultPolicyBuilder { | ... | @@ -256,13 +276,22 @@ public final class DefaultPolicyBuilder { |
| 256 | } | 276 | } |
| 257 | 277 | ||
| 258 | public static Set<String> getNBServiceList() { | 278 | public static Set<String> getNBServiceList() { |
| 259 | - Set<String> permString = new HashSet<>(); | 279 | + Set<String> permString = Sets.newHashSet(); |
| 260 | for (Permission perm : getAdminDefaultPerms()) { | 280 | for (Permission perm : getAdminDefaultPerms()) { |
| 261 | permString.add(perm.getName()); | 281 | permString.add(perm.getName()); |
| 262 | } | 282 | } |
| 263 | return permString; | 283 | return permString; |
| 264 | } | 284 | } |
| 265 | 285 | ||
| 286 | + public static Set<String> getCliServiceList() { | ||
| 287 | + Set<String> permString = Sets.newHashSet(); | ||
| 288 | + permString.add("org.apache.felix.service.command.Function"); | ||
| 289 | + permString.add("org.apache.karaf.shell.console.CompletableFunction"); | ||
| 290 | + permString.add("org.apache.karaf.shell.commands.CommandWithAction"); | ||
| 291 | + permString.add("org.osgi.service.blueprint.container.BlueprintContainer"); | ||
| 292 | + return permString; | ||
| 293 | + } | ||
| 294 | + | ||
| 266 | private static ConcurrentHashMap<AppPermission.Type, Set<String>> getServiceDirectory() { | 295 | private static ConcurrentHashMap<AppPermission.Type, Set<String>> getServiceDirectory() { |
| 267 | 296 | ||
| 268 | ConcurrentHashMap<AppPermission.Type, Set<String>> serviceDirectory = new ConcurrentHashMap<>(); | 297 | ConcurrentHashMap<AppPermission.Type, Set<String>> serviceDirectory = new ConcurrentHashMap<>(); |
| ... | @@ -360,12 +389,12 @@ public final class DefaultPolicyBuilder { | ... | @@ -360,12 +389,12 @@ public final class DefaultPolicyBuilder { |
| 360 | EventDeliveryService.class.getName())); | 389 | EventDeliveryService.class.getName())); |
| 361 | serviceDirectory.put(EVENT_WRITE, ImmutableSet.of( | 390 | serviceDirectory.put(EVENT_WRITE, ImmutableSet.of( |
| 362 | EventDeliveryService.class.getName())); | 391 | EventDeliveryService.class.getName())); |
| 363 | - serviceDirectory.put(RESOURCE_READ, ImmutableSet.of( | 392 | +// serviceDirectory.put(RESOURCE_READ, ImmutableSet.of( |
| 364 | - ResourceService.class.getName())); | 393 | +// ResourceService.class.getName())); |
| 365 | - serviceDirectory.put(RESOURCE_WRITE, ImmutableSet.of( | 394 | +// serviceDirectory.put(RESOURCE_WRITE, ImmutableSet.of( |
| 366 | - ResourceService.class.getName())); | 395 | +// ResourceService.class.getName())); |
| 367 | - serviceDirectory.put(RESOURCE_EVENT, ImmutableSet.of( | 396 | +// serviceDirectory.put(RESOURCE_EVENT, ImmutableSet.of( |
| 368 | - ResourceService.class.getName())); | 397 | +// ResourceService.class.getName())); |
| 369 | serviceDirectory.put(REGION_READ, ImmutableSet.of( | 398 | serviceDirectory.put(REGION_READ, ImmutableSet.of( |
| 370 | RegionService.class.getName())); | 399 | RegionService.class.getName())); |
| 371 | serviceDirectory.put(PERSISTENCE_WRITE, ImmutableSet.of( | 400 | serviceDirectory.put(PERSISTENCE_WRITE, ImmutableSet.of( |
| ... | @@ -376,8 +405,8 @@ public final class DefaultPolicyBuilder { | ... | @@ -376,8 +405,8 @@ public final class DefaultPolicyBuilder { |
| 376 | PartitionService.class.getName())); | 405 | PartitionService.class.getName())); |
| 377 | serviceDirectory.put(CLOCK_WRITE, ImmutableSet.of( | 406 | serviceDirectory.put(CLOCK_WRITE, ImmutableSet.of( |
| 378 | LogicalClockService.class.getName())); | 407 | LogicalClockService.class.getName())); |
| 379 | - serviceDirectory.put(MUTEX_WRITE, ImmutableSet.of( | 408 | +// serviceDirectory.put(MUTEX_WRITE, ImmutableSet.of( |
| 380 | - MutexExecutionService.class.getName())); | 409 | +// MutexExecutionService.class.getName())); |
| 381 | 410 | ||
| 382 | return serviceDirectory; | 411 | return serviceDirectory; |
| 383 | } | 412 | } |
| ... | @@ -515,18 +544,16 @@ public final class DefaultPolicyBuilder { | ... | @@ -515,18 +544,16 @@ public final class DefaultPolicyBuilder { |
| 515 | return new ReflectPermission(name, actions); | 544 | return new ReflectPermission(name, actions); |
| 516 | } | 545 | } |
| 517 | 546 | ||
| 518 | - //AllPermission, SecurityPermission, UnresolvedPermission | ||
| 519 | - //AWTPermission, ReflectPermission not allowed | ||
| 520 | return null; | 547 | return null; |
| 521 | 548 | ||
| 522 | } | 549 | } |
| 523 | - private static List<Permission> optimizePermissions(List<Permission> perms) { | 550 | + private static Set<Permission> optimizePermissions(Set<Permission> perms) { |
| 524 | Permissions permissions = listToPermissions(perms); | 551 | Permissions permissions = listToPermissions(perms); |
| 525 | return permissionsToList(permissions); | 552 | return permissionsToList(permissions); |
| 526 | } | 553 | } |
| 527 | 554 | ||
| 528 | - private static List<Permission> permissionsToList(Permissions perms) { | 555 | + private static Set<Permission> permissionsToList(Permissions perms) { |
| 529 | - List<Permission> permissions = new ArrayList<>(); | 556 | + Set<Permission> permissions = Sets.newHashSet(); |
| 530 | Enumeration<Permission> e = perms.elements(); | 557 | Enumeration<Permission> e = perms.elements(); |
| 531 | while (e.hasMoreElements()) { | 558 | while (e.hasMoreElements()) { |
| 532 | permissions.add(e.nextElement()); | 559 | permissions.add(e.nextElement()); |
| ... | @@ -534,7 +561,7 @@ public final class DefaultPolicyBuilder { | ... | @@ -534,7 +561,7 @@ public final class DefaultPolicyBuilder { |
| 534 | return permissions; | 561 | return permissions; |
| 535 | } | 562 | } |
| 536 | 563 | ||
| 537 | - private static Permissions listToPermissions(List<Permission> perms) { | 564 | + private static Permissions listToPermissions(Set<Permission> perms) { |
| 538 | Permissions permissions = new Permissions(); | 565 | Permissions permissions = new Permissions(); |
| 539 | for (Permission perm : perms) { | 566 | for (Permission perm : perms) { |
| 540 | permissions.add(perm); | 567 | permissions.add(perm); | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2015-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -38,15 +38,18 @@ import org.onosproject.security.store.SecurityModeListener; | ... | @@ -38,15 +38,18 @@ import org.onosproject.security.store.SecurityModeListener; |
| 38 | import org.onosproject.security.store.SecurityModeStore; | 38 | import org.onosproject.security.store.SecurityModeStore; |
| 39 | import org.onosproject.security.store.SecurityModeStoreDelegate; | 39 | import org.onosproject.security.store.SecurityModeStoreDelegate; |
| 40 | import org.osgi.framework.BundleContext; | 40 | import org.osgi.framework.BundleContext; |
| 41 | +import org.osgi.framework.FrameworkEvent; | ||
| 41 | import org.osgi.framework.FrameworkUtil; | 42 | import org.osgi.framework.FrameworkUtil; |
| 42 | import org.osgi.framework.ServicePermission; | 43 | import org.osgi.framework.ServicePermission; |
| 43 | -import org.osgi.service.log.LogEntry; | 44 | +import org.osgi.framework.FrameworkListener; |
| 44 | -import org.osgi.service.log.LogListener; | ||
| 45 | -import org.osgi.service.log.LogReaderService; | ||
| 46 | import org.osgi.service.permissionadmin.PermissionInfo; | 45 | import org.osgi.service.permissionadmin.PermissionInfo; |
| 47 | 46 | ||
| 47 | +import java.io.FilePermission; | ||
| 48 | +import java.lang.reflect.ReflectPermission; | ||
| 49 | +import java.net.SocketPermission; | ||
| 48 | import java.security.AccessControlException; | 50 | import java.security.AccessControlException; |
| 49 | import java.security.Permission; | 51 | import java.security.Permission; |
| 52 | +import java.security.SecurityPermission; | ||
| 50 | import java.util.ArrayList; | 53 | import java.util.ArrayList; |
| 51 | import java.util.List; | 54 | import java.util.List; |
| 52 | import java.util.Map; | 55 | import java.util.Map; |
| ... | @@ -76,9 +79,6 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -76,9 +79,6 @@ public class SecurityModeManager implements SecurityAdminService { |
| 76 | protected ApplicationAdminService appAdminService; | 79 | protected ApplicationAdminService appAdminService; |
| 77 | 80 | ||
| 78 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 81 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 79 | - protected LogReaderService logReaderService; | ||
| 80 | - | ||
| 81 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 82 | protected EventDeliveryService eventDispatcher; | 82 | protected EventDeliveryService eventDispatcher; |
| 83 | 83 | ||
| 84 | private final Logger log = getLogger(getClass()); | 84 | private final Logger log = getLogger(getClass()); |
| ... | @@ -88,7 +88,7 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -88,7 +88,7 @@ public class SecurityModeManager implements SecurityAdminService { |
| 88 | 88 | ||
| 89 | private final SecurityModeStoreDelegate delegate = new InternalStoreDelegate(); | 89 | private final SecurityModeStoreDelegate delegate = new InternalStoreDelegate(); |
| 90 | 90 | ||
| 91 | - private SecurityLogListener securityLogListener = new SecurityLogListener(); | 91 | + private SecurityEventListener securityEventListener = new SecurityEventListener(); |
| 92 | 92 | ||
| 93 | private PermissionAdmin permissionAdmin = getPermissionAdmin(); | 93 | private PermissionAdmin permissionAdmin = getPermissionAdmin(); |
| 94 | 94 | ||
| ... | @@ -96,7 +96,7 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -96,7 +96,7 @@ public class SecurityModeManager implements SecurityAdminService { |
| 96 | public void activate() { | 96 | public void activate() { |
| 97 | 97 | ||
| 98 | eventDispatcher.addSink(SecurityModeEvent.class, listenerRegistry); | 98 | eventDispatcher.addSink(SecurityModeEvent.class, listenerRegistry); |
| 99 | - logReaderService.addLogListener(securityLogListener); | 99 | + getBundleContext().addFrameworkListener(new SecurityEventListener()); |
| 100 | 100 | ||
| 101 | if (System.getSecurityManager() == null) { | 101 | if (System.getSecurityManager() == null) { |
| 102 | log.warn("J2EE security manager is disabled."); | 102 | log.warn("J2EE security manager is disabled."); |
| ... | @@ -116,7 +116,7 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -116,7 +116,7 @@ public class SecurityModeManager implements SecurityAdminService { |
| 116 | @Deactivate | 116 | @Deactivate |
| 117 | public void deactivate() { | 117 | public void deactivate() { |
| 118 | eventDispatcher.removeSink(SecurityModeEvent.class); | 118 | eventDispatcher.removeSink(SecurityModeEvent.class); |
| 119 | - logReaderService.removeLogListener(securityLogListener); | 119 | + getBundleContext().removeFrameworkListener(securityEventListener); |
| 120 | store.unsetDelegate(delegate); | 120 | store.unsetDelegate(delegate); |
| 121 | log.info("Stopped"); | 121 | log.info("Stopped"); |
| 122 | 122 | ||
| ... | @@ -169,27 +169,32 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -169,27 +169,32 @@ public class SecurityModeManager implements SecurityAdminService { |
| 169 | DefaultPolicyBuilder.convertToJavaPermissions(store.getRequestedPermissions(appId))); | 169 | DefaultPolicyBuilder.convertToJavaPermissions(store.getRequestedPermissions(appId))); |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | - private class SecurityLogListener implements LogListener { | 172 | + private class SecurityEventListener implements FrameworkListener { |
| 173 | @Override | 173 | @Override |
| 174 | - public void logged(LogEntry entry) { | 174 | + public void frameworkEvent(FrameworkEvent event) { |
| 175 | - if (entry.getException() != null && | 175 | + if (event.getType() != FrameworkEvent.ERROR) { |
| 176 | - entry.getException() instanceof AccessControlException) { | 176 | + return; |
| 177 | - String location = entry.getBundle().getLocation(); | 177 | + } |
| 178 | - Permission javaPerm = | 178 | + Throwable throwable = event.getThrowable(); |
| 179 | - ((AccessControlException) entry.getException()).getPermission(); | 179 | + if (throwable == null || !(throwable instanceof AccessControlException)) { |
| 180 | - org.onosproject.security.Permission permission = DefaultPolicyBuilder.getOnosPermission(javaPerm); | 180 | + return; |
| 181 | - if (permission == null) { | ||
| 182 | - log.warn("Unsupported permission requested."); | ||
| 183 | - return; | ||
| 184 | - } | ||
| 185 | - store.getApplicationIds(location).stream().filter( | ||
| 186 | - appId -> store.isSecured(appId) && | ||
| 187 | - appAdminService.getState(appId) == ApplicationState.ACTIVE).forEach(appId -> { | ||
| 188 | - store.requestPermission(appId, permission); | ||
| 189 | - print("[POLICY VIOLATION] APP: %s / Bundle: %s / Permission: %s ", | ||
| 190 | - appId.name(), location, permission.toString()); | ||
| 191 | - }); | ||
| 192 | } | 181 | } |
| 182 | + String bundleLocation = event.getBundle().getLocation(); | ||
| 183 | + Permission nativePerm = ((AccessControlException) throwable).getPermission(); | ||
| 184 | + org.onosproject.security.Permission onosPerm = DefaultPolicyBuilder.getOnosPermission(nativePerm); | ||
| 185 | + | ||
| 186 | + if (onosPerm == null) { | ||
| 187 | + log.warn("Unsupported permission requested: " + nativePerm.toString()); | ||
| 188 | + return; | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + store.getApplicationIds(bundleLocation).stream().filter( | ||
| 192 | + appId -> store.isSecured(appId) && | ||
| 193 | + appAdminService.getState(appId) == ApplicationState.ACTIVE).forEach(appId -> { | ||
| 194 | + store.requestPermission(appId, onosPerm); | ||
| 195 | + print("[POLICY VIOLATION] APP: %s / Bundle: %s / Permission: %s ", | ||
| 196 | + appId.name(), bundleLocation, onosPerm.toString()); | ||
| 197 | + }); | ||
| 193 | } | 198 | } |
| 194 | } | 199 | } |
| 195 | 200 | ||
| ... | @@ -213,32 +218,59 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -213,32 +218,59 @@ public class SecurityModeManager implements SecurityAdminService { |
| 213 | * 0 - APP_PERM | 218 | * 0 - APP_PERM |
| 214 | * 1 - ADMIN SERVICE | 219 | * 1 - ADMIN SERVICE |
| 215 | * 2 - NB_SERVICE | 220 | * 2 - NB_SERVICE |
| 216 | - * 3 - ETC_SERVICE | 221 | + * 3 - SB_SERVICE |
| 217 | - * 4 - ETC | 222 | + * 4 - CLI_SERVICE |
| 223 | + * 5 - ETC_SERVICE | ||
| 224 | + * 6 - CRITICAL PERMISSIONS | ||
| 225 | + * 7 - ETC | ||
| 218 | * @param perms | 226 | * @param perms |
| 219 | */ | 227 | */ |
| 220 | - private Map<Integer, List<Permission>> getPrintablePermissionMap(List<Permission> perms) { | 228 | + private Map<Integer, List<Permission>> getPrintablePermissionMap(Set<Permission> perms) { |
| 221 | ConcurrentHashMap<Integer, List<Permission>> sortedMap = new ConcurrentHashMap<>(); | 229 | ConcurrentHashMap<Integer, List<Permission>> sortedMap = new ConcurrentHashMap<>(); |
| 222 | sortedMap.put(0, new ArrayList()); | 230 | sortedMap.put(0, new ArrayList()); |
| 223 | sortedMap.put(1, new ArrayList()); | 231 | sortedMap.put(1, new ArrayList()); |
| 224 | sortedMap.put(2, new ArrayList()); | 232 | sortedMap.put(2, new ArrayList()); |
| 225 | sortedMap.put(3, new ArrayList()); | 233 | sortedMap.put(3, new ArrayList()); |
| 226 | sortedMap.put(4, new ArrayList()); | 234 | sortedMap.put(4, new ArrayList()); |
| 235 | + sortedMap.put(5, new ArrayList()); | ||
| 236 | + sortedMap.put(6, new ArrayList()); | ||
| 237 | + sortedMap.put(7, new ArrayList()); | ||
| 238 | + | ||
| 227 | for (Permission perm : perms) { | 239 | for (Permission perm : perms) { |
| 228 | - if (perm instanceof ServicePermission) { | 240 | + if (perm instanceof AppPermission) { |
| 229 | - if (DefaultPolicyBuilder.getNBServiceList().contains(perm.getName())) { | 241 | + sortedMap.get(0).add(perm); |
| 230 | - if (perm.getName().contains("Admin")) { | 242 | + } else if (perm instanceof ServicePermission) { |
| 243 | + String permName = perm.getName().trim(); | ||
| 244 | + if (DefaultPolicyBuilder.getNBServiceList().contains(permName)) { // ONOS NB SERVICES | ||
| 245 | + if (permName.contains("Admin")) { | ||
| 231 | sortedMap.get(1).add(perm); | 246 | sortedMap.get(1).add(perm); |
| 232 | } else { | 247 | } else { |
| 233 | sortedMap.get(2).add(perm); | 248 | sortedMap.get(2).add(perm); |
| 234 | } | 249 | } |
| 235 | - } else { | 250 | + } else if (permName.contains("org.onosproject") && permName.contains("Provider")) { //ONOS SB SERVICES |
| 236 | sortedMap.get(3).add(perm); | 251 | sortedMap.get(3).add(perm); |
| 252 | + } else if (DefaultPolicyBuilder.getCliServiceList().contains(permName)) { //CLI SERVICES | ||
| 253 | + sortedMap.get(4).add(perm); | ||
| 254 | + } else if (permName.contains("Security")) { //CRITICAL SERVICES | ||
| 255 | + sortedMap.get(6).add(perm); | ||
| 256 | + } else { | ||
| 257 | + sortedMap.get(5).add(perm); | ||
| 237 | } | 258 | } |
| 238 | - } else if (perm instanceof AppPermission) { | 259 | + } else if (perm instanceof RuntimePermission || perm instanceof SocketPermission || |
| 239 | - sortedMap.get(0).add(perm); | 260 | + perm instanceof FilePermission || perm instanceof SecurityPermission || |
| 261 | + perm instanceof ReflectPermission) { // CRITICAL PERMISSIONS | ||
| 262 | + sortedMap.get(6).add(perm); | ||
| 240 | } else { | 263 | } else { |
| 241 | - sortedMap.get(4).add(perm); | 264 | + boolean isDefault = false; |
| 265 | + for (Permission dPerm : DefaultPolicyBuilder.getDefaultPerms()) { | ||
| 266 | + if (perm.implies(dPerm)) { | ||
| 267 | + isDefault = true; | ||
| 268 | + break; | ||
| 269 | + } | ||
| 270 | + } | ||
| 271 | + if (!isDefault) { | ||
| 272 | + sortedMap.get(7).add(perm); | ||
| 273 | + } | ||
| 242 | } | 274 | } |
| 243 | } | 275 | } |
| 244 | return sortedMap; | 276 | return sortedMap; |
| ... | @@ -261,13 +293,13 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -261,13 +293,13 @@ public class SecurityModeManager implements SecurityAdminService { |
| 261 | 293 | ||
| 262 | 294 | ||
| 263 | 295 | ||
| 264 | - private List<Permission> getMaximumPermissions(ApplicationId appId) { | 296 | + private Set<Permission> getMaximumPermissions(ApplicationId appId) { |
| 265 | Application app = appAdminService.getApplication(appId); | 297 | Application app = appAdminService.getApplication(appId); |
| 266 | if (app == null) { | 298 | if (app == null) { |
| 267 | print("Unknown application."); | 299 | print("Unknown application."); |
| 268 | return null; | 300 | return null; |
| 269 | } | 301 | } |
| 270 | - List<Permission> appPerms; | 302 | + Set<Permission> appPerms; |
| 271 | switch (app.role()) { | 303 | switch (app.role()) { |
| 272 | case ADMIN: | 304 | case ADMIN: |
| 273 | appPerms = DefaultPolicyBuilder.getAdminApplicationPermissions(app.permissions()); | 305 | appPerms = DefaultPolicyBuilder.getAdminApplicationPermissions(app.permissions()); |
| ... | @@ -300,5 +332,4 @@ public class SecurityModeManager implements SecurityAdminService { | ... | @@ -300,5 +332,4 @@ public class SecurityModeManager implements SecurityAdminService { |
| 300 | 332 | ||
| 301 | } | 333 | } |
| 302 | 334 | ||
| 303 | - | ||
| 304 | } | 335 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2015-present Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -88,13 +88,10 @@ public class DistributedSecurityModeStore | ... | @@ -88,13 +88,10 @@ public class DistributedSecurityModeStore |
| 88 | .register(KryoNamespaces.API) | 88 | .register(KryoNamespaces.API) |
| 89 | .register(SecurityModeState.class) | 89 | .register(SecurityModeState.class) |
| 90 | .register(SecurityInfo.class) | 90 | .register(SecurityInfo.class) |
| 91 | - .register(Permission.class) | ||
| 92 | .build()); | 91 | .build()); |
| 93 | 92 | ||
| 94 | private static final KryoNamespace.Builder VIOLATION_SERIALIZER = KryoNamespace.newBuilder() | 93 | private static final KryoNamespace.Builder VIOLATION_SERIALIZER = KryoNamespace.newBuilder() |
| 95 | - .register(KryoNamespaces.API) | 94 | + .register(KryoNamespaces.API); |
| 96 | - .register(Permission.class); | ||
| 97 | - | ||
| 98 | @Activate | 95 | @Activate |
| 99 | public void activate() { | 96 | public void activate() { |
| 100 | states = storageService.<ApplicationId, SecurityInfo>consistentMapBuilder() | 97 | states = storageService.<ApplicationId, SecurityInfo>consistentMapBuilder() | ... | ... |
| ... | @@ -110,7 +110,7 @@ function enable_security_mode() { | ... | @@ -110,7 +110,7 @@ function enable_security_mode() { |
| 110 | 110 | ||
| 111 | mkdir -p $ONOS_STAGE/$KARAF_DIST/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 | 111 | mkdir -p $ONOS_STAGE/$KARAF_DIST/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 |
| 112 | cp $FELIX_CFG_ADMIN $ONOS_STAGE/$KARAF_DIST/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 | 112 | cp $FELIX_CFG_ADMIN $ONOS_STAGE/$KARAF_DIST/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 |
| 113 | - perl -pi.old -e "s|org.apache.felix.configadmin/1.8.0|org.apache.felix.configadmin/1.6.0|g" \ | 113 | + perl -pi.old -e "s|^(.*org.apache.felix.configadmin.*)|mvn\\\\:org.apache.felix/org.apache.felix.configadmin/1.6.0 = 10|" \ |
| 114 | $ONOS_STAGE/$KARAF_DIST/etc/startup.properties | 114 | $ONOS_STAGE/$KARAF_DIST/etc/startup.properties |
| 115 | 115 | ||
| 116 | # SM-ONOS step 2: stage ONOS Felix framework security (this is already done by karaf assembly); end | 116 | # SM-ONOS step 2: stage ONOS Felix framework security (this is already done by karaf assembly); end | ... | ... |
| ... | @@ -105,7 +105,7 @@ if [ "$SECURE" = "true" ]; then | ... | @@ -105,7 +105,7 @@ if [ "$SECURE" = "true" ]; then |
| 105 | 105 | ||
| 106 | mkdir -p $KARAF_ROOT/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 | 106 | mkdir -p $KARAF_ROOT/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 |
| 107 | cp $FELIX_CFG_ADMIN $KARAF_ROOT/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 | 107 | cp $FELIX_CFG_ADMIN $KARAF_ROOT/system/org/apache/felix/org.apache.felix.configadmin/1.6.0 |
| 108 | - perl -pi.old -e "s|org.apache.felix.configadmin/1.8.0|org.apache.felix.configadmin/1.6.0|g" \ | 108 | + perl -pi.old -e "s|^(.*org.apache.felix.configadmin.*)|mvn\\\\:org.apache.felix/org.apache.felix.configadmin/1.6.0 = 10|" \ |
| 109 | $KARAF_ROOT/etc/startup.properties | 109 | $KARAF_ROOT/etc/startup.properties |
| 110 | 110 | ||
| 111 | # SM-ONOS step 2: stage ONOS Felix framework security (will get downloaded on demand); end | 111 | # SM-ONOS step 2: stage ONOS Felix framework security (will get downloaded on demand); end | ... | ... |
-
Please register or login to post a comment