Merge "veyron/runtimes/google/rt: Use the new security model by default."
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index bddef80..636bbdb 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -15,7 +15,6 @@
"veyron.io/veyron/veyron2/ipc"
"veyron.io/veyron/veyron2/mgmt"
"veyron.io/veyron/veyron2/naming"
- "veyron.io/veyron/veyron2/options"
"veyron.io/veyron/veyron2/rt"
"veyron.io/veyron/veyron2/services/mgmt/appcycle"
@@ -326,7 +325,7 @@
// TestCleanRemoteShutdown verifies that remote shutdown works correctly.
func TestCleanRemoteShutdown(t *testing.T) {
- r := rt.Init(options.ForceNewSecurityModel{})
+ r := rt.Init()
defer r.Cleanup()
sh := modules.NewShell()
diff --git a/runtimes/google/ipc/stream/vif/vif.go b/runtimes/google/ipc/stream/vif/vif.go
index c30a543..4e444f4 100644
--- a/runtimes/google/ipc/stream/vif/vif.go
+++ b/runtimes/google/ipc/stream/vif/vif.go
@@ -177,22 +177,10 @@
return vif, nil
}
-func adjustIPCVersionForOldSecurityModel(in naming.Endpoint, opts []stream.VCOpt) naming.Endpoint {
- out := in
- for _, o := range opts {
- if r, ok := o.(*version.Range); ok {
- out = r.Endpoint(out.Addr().Network(), out.Addr().String(), out.RoutingID())
- vlog.Infof("Adjusted Dialer endpoint from %v to %v for OpenVC message because the old security model is being used", in, out)
- }
- }
- return out
-}
-
// Dial creates a new VC to the provided remote identity, authenticating the VC
// with the provided local identity.
func (vif *VIF) Dial(remoteEP naming.Endpoint, opts ...stream.VCOpt) (stream.VC, error) {
- localEP := adjustIPCVersionForOldSecurityModel(vif.localEP, opts)
- vc, err := vif.newVC(vif.allocVCI(), localEP, remoteEP, true)
+ vc, err := vif.newVC(vif.allocVCI(), vif.localEP, remoteEP, true)
if err != nil {
return nil, err
}
@@ -201,7 +189,7 @@
err = vif.sendOnExpressQ(&message.OpenVC{
VCI: vc.VCI(),
DstEndpoint: remoteEP,
- SrcEndpoint: localEP,
+ SrcEndpoint: vif.localEP,
Counters: counters})
if err != nil {
err = fmt.Errorf("vif.sendOnExpressQ(OpenVC) failed: %v", err)
diff --git a/runtimes/google/ipc/version/version.go b/runtimes/google/ipc/version/version.go
index 33d251f..131e40a 100644
--- a/runtimes/google/ipc/version/version.go
+++ b/runtimes/google/ipc/version/version.go
@@ -14,10 +14,6 @@
Min, Max version.IPCVersion
}
-// TODO(ashankar): Remove when the transition to the new security API is complete.
-func (*Range) IPCClientOpt() {}
-func (*Range) IPCStreamVCOpt() {}
-
var (
// supportedRange represents the range of protocol verions supported by this
// implementation.
diff --git a/runtimes/google/rt/ipc.go b/runtimes/google/rt/ipc.go
index 7b3251c..53ab84f 100644
--- a/runtimes/google/rt/ipc.go
+++ b/runtimes/google/rt/ipc.go
@@ -7,14 +7,12 @@
iipc "veyron.io/veyron/veyron/runtimes/google/ipc"
imanager "veyron.io/veyron/veyron/runtimes/google/ipc/stream/manager"
"veyron.io/veyron/veyron/runtimes/google/ipc/stream/vc"
- iversion "veyron.io/veyron/veyron/runtimes/google/ipc/version"
ivtrace "veyron.io/veyron/veyron/runtimes/google/vtrace"
"veyron.io/veyron/veyron2/context"
"veyron.io/veyron/veyron2/i18n"
"veyron.io/veyron/veyron2/ipc"
"veyron.io/veyron/veyron2/ipc/stream"
- "veyron.io/veyron/veyron2/ipc/version"
"veyron.io/veyron/veyron2/naming"
"veyron.io/veyron/veyron2/options"
"veyron.io/veyron/veyron2/security"
@@ -105,9 +103,6 @@
}
// Add the option that provides the local identity to the client.
otherOpts = append(otherOpts, rt.newLocalID(id), vc.LocalPrincipal{rt.principal})
- if !rt.useNewSecurityModelInIPCClients {
- otherOpts = append(otherOpts, &iversion.Range{Min: version.IPCVersion2, Max: version.IPCVersion3})
- }
return iipc.InternalNewClient(sm, ns, otherOpts...)
}
diff --git a/runtimes/google/rt/ipc_test.go b/runtimes/google/rt/ipc_test.go
index 01cbd00..4c6cc6c 100644
--- a/runtimes/google/rt/ipc_test.go
+++ b/runtimes/google/rt/ipc_test.go
@@ -7,7 +7,6 @@
"veyron.io/veyron/veyron2"
"veyron.io/veyron/veyron2/ipc"
"veyron.io/veyron/veyron2/naming"
- "veyron.io/veyron/veyron2/options"
"veyron.io/veyron/veyron2/rt"
"veyron.io/veyron/veyron2/security"
@@ -25,7 +24,7 @@
}
func newRT() veyron2.Runtime {
- r, err := rt.New(options.ForceNewSecurityModel{})
+ r, err := rt.New()
if err != nil {
panic(err)
}
diff --git a/runtimes/google/rt/mgmt_test.go b/runtimes/google/rt/mgmt_test.go
index 6cc07b5..4b3b757 100644
--- a/runtimes/google/rt/mgmt_test.go
+++ b/runtimes/google/rt/mgmt_test.go
@@ -284,7 +284,7 @@
// refer to the global rt.R() function), but we take care to make sure
// that the "google" runtime we are trying to test in this package is
// the one being used.
- r, _ := rt.New(profileOpt, options.GoogleRuntime, options.ForceNewSecurityModel{})
+ r, _ := rt.New(profileOpt, options.GoogleRuntime)
childcreds := security.NewVeyronCredentials(r.Principal(), appCmd)
configServer, configServiceName, ch := createConfigServer(t, r)
diff --git a/runtimes/google/rt/rt.go b/runtimes/google/rt/rt.go
index 7c8c85a..d106b7f 100644
--- a/runtimes/google/rt/rt.go
+++ b/runtimes/google/rt/rt.go
@@ -43,10 +43,6 @@
nServers int // GUARDED_BY(mu)
cleaningUp bool // GUARDED_BY(mu)
- // TODO(ashankar,ataly): Variables to help with the transition between the
- // old and new security model. Will be removed once the transition is complete.
- useNewSecurityModelInIPCClients bool
-
lang i18n.LangID // Language, from environment variables.
program string // Program name, from os.Args[0].
}
@@ -77,7 +73,7 @@
return nil, fmt.Errorf("%q is the wrong name for this runtime", v)
}
case options.ForceNewSecurityModel:
- rt.useNewSecurityModelInIPCClients = true
+ // noop
default:
return nil, fmt.Errorf("option has wrong type %T", o)
}
diff --git a/runtimes/google/rt/sectransition/sectransition.go b/runtimes/google/rt/sectransition/sectransition.go
deleted file mode 100644
index 54c0677..0000000
--- a/runtimes/google/rt/sectransition/sectransition.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// This package provides a shell test during the security model transition.
-package main
-
-import (
- "flag"
- "fmt"
- "time"
-
- "veyron.io/veyron/veyron/lib/signals"
- "veyron.io/veyron/veyron/profiles"
-
- "veyron.io/veyron/veyron2/ipc"
- "veyron.io/veyron/veyron2/naming"
- "veyron.io/veyron/veyron2/rt"
- "veyron.io/veyron/veyron2/security"
- "veyron.io/veyron/veyron2/vlog"
-)
-
-var runServer = flag.Bool("server", false, "If true, start a server. If false, start a client")
-
-type service struct{}
-
-func (service) Ping(call ipc.ServerCall) (string, error) {
- return fmt.Sprintf("ClientBlessings: %v\nClientPublicID: %v", call.RemoteBlessings(), call.RemoteID()), nil
-}
-
-type authorizer struct{}
-
-func (authorizer) Authorize(security.Context) error { return nil }
-
-func main() {
- r := rt.Init()
- defer r.Cleanup()
-
- if *runServer {
- startServer(r.NewServer())
- } else if len(flag.Args()) != 1 {
- vlog.Fatalf("Expected exactly 1 argument, got %d (%v)", len(flag.Args()), flag.Args())
- } else {
- ctx, _ := r.NewContext().WithDeadline(time.Now().Add(10 * time.Second))
- startClient(r.Client().StartCall(ctx, flag.Arg(0), "Ping", nil))
- }
-}
-
-func startServer(server ipc.Server, err error) {
- if err != nil {
- vlog.Fatal(err)
- }
- defer server.Stop()
-
- ep, err := server.Listen(profiles.LocalListenSpec)
- if err != nil {
- vlog.Fatal(err)
- }
- fmt.Println("SERVER:", naming.JoinAddressName(ep.String(), ""))
- server.Serve("", ipc.LeafDispatcher(service{}, authorizer{}))
- <-signals.ShutdownOnSignals()
-}
-
-func startClient(call ipc.Call, err error) {
- if err != nil {
- vlog.Fatal(err)
- }
- var result string
- var apperr error
- if err = call.Finish(&result, &apperr); err != nil {
- vlog.Fatalf("ipc.Call.Finish error: %v", err)
- }
- if apperr != nil {
- vlog.Fatalf("Application error: %v", apperr)
- }
- fmt.Println(result)
-}
diff --git a/runtimes/google/rt/sectransition/test.sh b/runtimes/google/rt/sectransition/test.sh
deleted file mode 100755
index 242da08..0000000
--- a/runtimes/google/rt/sectransition/test.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/bash
-
-# Test compatibility of clients and servers using a combination of the old
-# and new security models (triggered by environment variables).
-
-. "${VEYRON_ROOT}/scripts/lib/shell_test.sh"
-
-readonly WORKDIR="${shell_test_WORK_DIR}"
-
-build() {
- SECTRANSITION_BIN="$(shell_test::build_go_binary 'veyron.io/veyron/veyron/runtimes/google/rt/sectransition')"
- IDENTITY_BIN="$(shell_test::build_go_binary 'veyron.io/veyron/veyron/tools/identity')"
-}
-
-startserver() {
- # The server has access to both the old and new security model.
- export VEYRON_IDENTITY="${WORKDIR}/old"
- export VEYRON_CREDENTIALS="${WORKDIR}/new"
- shell::run_server "${shell_test_DEFAULT_SERVER_TIMEOUT}" "${SERVERLOG}" /dev/null \
- "${SECTRANSITION_BIN}" --server --logtostderr &> /dev/null \
- || shell_test::fail "line ${LINENO}: failed to start sectransaction"
- shell::timed_wait_for "${shell_test_DEFAULT_MESSAGE_TIMEOUT}" "${SERVERLOG}" "SERVER" \
- || shell_test::fail "line ${LINENO}: failed to read expected output from log file"
- local -r EP=$(grep "SERVER: " "${SERVERLOG}" | sed -e 's/SERVER: //') \
- || shell_test::fail "line ${LINENO}: failed to identify the endpoint"
- echo "${EP}"
-}
-
-runclient() {
- "${SECTRANSITION_BIN}" "${EP}" &>"${CLIENTLOG}"
-}
-
-oldmodel() {
- awk '/ClientPublicID:/ {print $2}' "${CLIENTLOG}"
-}
-
-newmodel() {
- awk '/ClientBlessings:/ {print $2}' "${CLIENTLOG}"
-}
-
-main() {
- cd "${WORKDIR}"
- build
-
- # Generate an identity (old security model) that may be used by the client.
- local -r OLD="${WORKDIR}/old"
- "${IDENTITY_BIN}" generate "old" > "${OLD}"
-
- local -r SERVERLOG="${WORKDIR}/server.log"
- local -r CLIENTLOG="${WORKDIR}/client.log"
- local -r EP=$(startserver)
-
- # No environment variables set: PublicIDs from the old model should be exchanged.
- unset VEYRON_IDENTITY
- unset VEYRON_CREDENTIALS
- runclient || shell_test::fail "line ${LINENO}: failed to run client"
- echo " No environment variables: PublicID:$(oldmodel), Blessings:$(newmodel)"
- if [[ $(oldmodel) == "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: PublicID not set when neither environment variable is set"
- fi
- if [[ $(newmodel) != "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: Blessings should not be set when neither environment variable is set (was $(newmodel))"
- fi
-
-
- # Old model envvar is set: not the new one: PublicIDs from the old model should be exchanged.
- export VEYRON_IDENTITY="${WORKDIR}/old"
- unset VEYRON_CREDENTIALS
- runclient || shell_test::fail "line ${LINENO}: failed to run client"
- echo " VEYRON_IDENTITY: PublicID:$(oldmodel), Blessings:$(newmodel)"
- if [[ $(oldmodel) == "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: PublicID not set when only VEYRON_IDENTITY is set"
- fi
- if [[ $(newmodel) != "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: Blessings should not be set when only VEYRON_IDENTITY is set (was $(newmodel))"
- fi
-
- # New model envvar is set: Blessings should be exchanged.
- unset VEYRON_IDENTITY
- export VEYRON_CREDENTIALS="${WORKDIR}/new"
- runclient || shell_test::fail "line ${LINENO}: failed to run client"
- echo " VEYRON_CREDENTIALS: PublicID:$(oldmodel), Blessings:$(newmodel)"
- if [[ $(oldmodel) != "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: PublicID should not be exchanged when VEYRON_CREDENTIALS is set (was $(oldmodel))"
- fi
- if [[ $(newmodel) == "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: Blessings should be exchanged when VEYRON_CREDENTIALS is set (was $(newmodel))"
- fi
-
- # Both environment variables are set: Blessings should be exchanged.
- export VEYRON_IDENTITY="${WORKDIR}/old"
- export VEYRON_CREDENTIALS="${WORKDIR}/new"
- runclient || shell_test::fail "line ${LINENO}: failed to run client"
- echo "VEYRON_IDENTITY & VEYRON_CREDENTIALS: PublicID:$(oldmodel), Blessings:$(newmodel)"
- if [[ $(oldmodel) != "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: PublicID should not be exchanged when VEYRON_CREDENTIALS is set (was $(oldmodel))"
- fi
- if [[ $(newmodel) == "<nil>" ]]; then
- shell_test::fail "line ${LINENO}: Blessings should be exchanged when VEYRON_CREDENTIALS is set (was $(newmodel))"
- fi
-
- shell_test::pass
-}
-
-main "$@"
\ No newline at end of file
diff --git a/runtimes/google/rt/security.go b/runtimes/google/rt/security.go
index 9295625..0863c04a 100644
--- a/runtimes/google/rt/security.go
+++ b/runtimes/google/rt/security.go
@@ -36,9 +36,6 @@
}
func (rt *vrt) initSecurity() error {
- // Use the new security model in ipc.Client only if it was expicitly specified.
- // At a later date, we will switch to using the new model always.
- rt.useNewSecurityModelInIPCClients = rt.useNewSecurityModelInIPCClients || len(os.Getenv(VeyronCredentialsEnvVar)) > 0
if err := rt.initOldSecurity(); err != nil {
return err
}
@@ -86,16 +83,9 @@
if err := rt.initPublicIDStore(); err != nil {
return err
}
- // Initialize the runtime's PublicIDStore with the runtime's PublicID.
- // TODO(ashankar,ataly): What should be the tag for the PublicID? Below we use
- // security.AllPrincipals but this means that the PublicID *always* gets used
- // for any peer. This may not be desirable.
if err := rt.store.Add(rt.id.PublicID(), security.AllPrincipals); err != nil {
return fmt.Errorf("could not initialize a PublicIDStore for the runtime: %s", err)
}
-
- // Always trust our own identity providers.
- // TODO(ataly, ashankar): We should trust the identity providers of all PublicIDs in the store.
trustIdentityProviders(rt.id)
return nil
}
diff --git a/services/identity/revocation/revoker_test.go b/services/identity/revocation/revoker_test.go
index 1cb86fa..ad4ad7e 100644
--- a/services/identity/revocation/revoker_test.go
+++ b/services/identity/revocation/revoker_test.go
@@ -8,7 +8,6 @@
"veyron.io/veyron/veyron2"
"veyron.io/veyron/veyron2/ipc"
"veyron.io/veyron/veyron2/naming"
- "veyron.io/veyron/veyron2/options"
"veyron.io/veyron/veyron2/rt"
"veyron.io/veyron/veyron2/security"
@@ -19,7 +18,7 @@
func revokerSetup(t *testing.T) (dischargerKey security.PublicKey, dischargerEndpoint string, revoker *RevocationManager, closeFunc func(), runtime veyron2.Runtime) {
var dir = filepath.Join(os.TempDir(), "revoker_test_dir")
- r := rt.Init(options.ForceNewSecurityModel{})
+ r := rt.Init()
revokerService, err := NewRevocationManager(dir)
if err != nil {
t.Fatalf("NewRevocationManager failed: %v", err)
diff --git a/services/mgmt/node/impl/impl_test.go b/services/mgmt/node/impl/impl_test.go
index e520c98..e71690e 100644
--- a/services/mgmt/node/impl/impl_test.go
+++ b/services/mgmt/node/impl/impl_test.go
@@ -29,7 +29,6 @@
"veyron.io/veyron/veyron2"
"veyron.io/veyron/veyron2/ipc"
"veyron.io/veyron/veyron2/naming"
- "veyron.io/veyron/veyron2/options"
"veyron.io/veyron/veyron2/rt"
"veyron.io/veyron/veyron2/security"
"veyron.io/veyron/veyron2/services/mgmt/application"
@@ -71,13 +70,11 @@
}
func initRT() {
- rt.Init(options.ForceNewSecurityModel{})
-
+ rt.Init()
// Disable the cache because we will be manipulating/using the namespace
// across multiple processes and want predictable behaviour without
// relying on timeouts.
rt.R().Namespace().CacheCtl(naming.DisableCache(true))
-
}
// TestHelperProcess is the entrypoint for the modules commands in a
@@ -734,7 +731,7 @@
}
func newRuntime(t *testing.T) veyron2.Runtime {
- runtime, err := rt.New(options.ForceNewSecurityModel{})
+ runtime, err := rt.New()
if err != nil {
t.Fatalf("rt.New() failed: %v", err)
}
diff --git a/services/mounttable/lib/mounttable_test.go b/services/mounttable/lib/mounttable_test.go
index 9989fd5..73a6af0 100644
--- a/services/mounttable/lib/mounttable_test.go
+++ b/services/mounttable/lib/mounttable_test.go
@@ -453,12 +453,12 @@
func init() {
testutil.Init()
// Create the runtime for each of the three "processes"
- rootRT = rt.Init(options.ForceNewSecurityModel{})
+ rootRT = rt.Init()
var err error
- if aliceRT, err = rt.New(options.ForceNewSecurityModel{}); err != nil {
+ if aliceRT, err = rt.New(); err != nil {
panic(err)
}
- if bobRT, err = rt.New(options.ForceNewSecurityModel{}); err != nil {
+ if bobRT, err = rt.New(); err != nil {
panic(err)
}