Example #1
0
    def connect(self, name, rid: Optional[int] = None) -> Optional[int]:
        """
        Connect to the node specified by name.

        :param name: name of the node to connect to
        :type name: str or (HA, tuple)
        :return: the uid of the remote estate, or None if a connect is not
            attempted
        """
        # if not self.isKeySharing:
        #     logger.debug("{} skipping join with {} because not key sharing".
        #                   format(self, name))
        #     return None
        if rid:
            remote = self.remotes[rid]
        else:
            if isinstance(name, (HA, tuple)):
                node_ha = name
            elif isinstance(name, str):
                node_ha = self.registry[name]
            else:
                raise AttributeError()

            remote = RemoteEstate(stack=self, ha=node_ha)
            self.addRemote(remote)
        # updates the store time so the join timer is accurate
        self.updateStamp()
        self.join(uid=remote.uid, cascade=True, timeout=30)
        logger.info("{} looking for {} at {}:{}".format(
            self, name or remote.name, *remote.ha),
                    extra={"cli": "PLAIN"})
        return remote.uid
Example #2
0
    def action(self):

        self.stats_req.value = deque()

        minionStack = self.road_stack.value

        # Create Master Stack
        self.store.stamp = 0.0
        masterStack = RoadStack(store=self.store,
                                name='master',
                                ha=('', raeting.RAET_PORT),
                                role='master',
                                main=True,
                                cleanremote=True,
                                period=3.0,
                                offset=0.5)
        self.event_stack.value = masterStack

        minionRemoteMaster = RemoteEstate(stack=minionStack,
                                          fuid=0,
                                          sid=0,
                                          ha=masterStack.local.ha)
        minionStack.addRemote(minionRemoteMaster)

        # Make life easier
        masterStack.keep.auto = raeting.AutoMode.always.value
        minionStack.keep.auto = raeting.AutoMode.always.value

        minionStack.join(minionRemoteMaster.uid)
        serviceRoads([minionStack, masterStack])
        minionStack.allow(minionRemoteMaster.uid)
        serviceRoads([minionStack, masterStack])
def testPromiscuousConnection(tdir, keysAndNames):
    # Simulating node to client connection
    alphaSighex, alphaPrikey, alphaVerhex, alphaPubkey, alphaName, betaSighex, \
    betaPrikey, betaVerhex, betaPubkey, betaName = keysAndNames
    alpha = RoadStack(name=alphaName,
                      ha=genHa(),
                      sigkey=alphaSighex,
                      prikey=hexlify(alphaPrikey),
                      auto=AutoMode.always,
                      basedirpath=tdir)

    beta = RoadStack(name=betaName,
                     ha=genHa(),
                     main=True,
                     sigkey=betaSighex,
                     prikey=hexlify(betaPrikey),
                     auto=AutoMode.always,
                     basedirpath=tdir)

    try:
        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha)
        alpha.addRemote(betaRemote)

        alpha.join(uid=betaRemote.uid, cascade=True)

        handshake(alpha, beta)

        sendMsgs(alpha, beta, betaRemote)
    finally:
        cleanup(alpha, beta)
Example #4
0
def testRaetPreSharedKeysPromiscous(tdir):
    alphaSigner = NaclSigner()
    betaSigner = NaclSigner()

    logger.debug("Alpha's verkey {}".format(alphaSigner.verhex))
    logger.debug("Beta's verkey {}".format(betaSigner.verhex))

    alpha = RoadStack(name='alpha',
                      ha=genHa(),
                      sigkey=alphaSigner.keyhex,
                      auto=AutoMode.always,
                      basedirpath=tdir)

    beta = RoadStack(name='beta',
                     ha=genHa(),
                     sigkey=betaSigner.keyhex,
                     main=True,
                     auto=AutoMode.always,
                     basedirpath=tdir)

    try:

        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha,
                                  verkey=betaSigner.verhex)

        alpha.addRemote(betaRemote)

        alpha.allow(uid=betaRemote.uid, cascade=True)

        handshake(alpha, beta)

        sendMsgs(alpha, beta, betaRemote)

    finally:
        cleanup(alpha, beta)
Example #5
0
    def action(self, **kwa):
        '''
        Join with all masters
        '''
        stack = self.stack.value
        if stack and isinstance(stack, RoadStack):
            # minion should default
            refresh = (self.opts.value.get('raet_clear_remotes', True)
                       or not stack.remotes)

            if refresh:
                for remote in stack.remotes.values():
                    stack.removeRemote(remote, clear=True)

                for master in self.masters:
                    mha = master['external']
                    stack.addRemote(
                        RemoteEstate(
                            stack=stack,
                            fuid=0,  # vacuous join
                            sid=0,  # always 0 for join
                            ha=mha))
            # stack.join(uid=stack.remotes.values()[0].uid, timeout=0.0)
            for remote in stack.remotes.values():
                stack.join(uid=remote.uid, timeout=0.0)
Example #6
0
 def connectTo(self, ha):
     remote = self.findInRemotesByHA(ha)
     if not remote:
         remote = RemoteEstate(stack=self, ha=ha)
         self.addRemote(remote)
         # updates the store time so the join timer is accurate
         self.updateStamp()
         self.join(uid=remote.uid, cascade=True, timeout=30)
Example #7
0
def testRaetPreSharedKeysNonPromiscous(tdir):
    alphaSigner = SimpleSigner()
    betaSigner = SimpleSigner()

    alphaPrivateer = Privateer()
    betaPrivateer = Privateer()

    logger.debug("Alpha's verkey {}".format(alphaSigner.naclSigner.verhex))
    logger.debug("Beta's verkey {}".format(betaSigner.naclSigner.verhex))

    alpha = RoadStack(name='alpha',
                      ha=genHa(),
                      sigkey=alphaSigner.naclSigner.keyhex,
                      prikey=alphaPrivateer.keyhex,
                      auto=AutoMode.never,
                      basedirpath=tdir)

    beta = RoadStack(name='beta',
                     ha=genHa(),
                     sigkey=betaSigner.naclSigner.keyhex,
                     prikey=betaPrivateer.keyhex,
                     main=True,
                     auto=AutoMode.never,
                     basedirpath=tdir)

    alpha.keep.dumpRemoteRoleData(
        {
            "acceptance": Acceptance.accepted.value,
            "verhex": betaSigner.naclSigner.verhex,
            "pubhex": betaPrivateer.pubhex
        }, "beta")

    beta.keep.dumpRemoteRoleData(
        {
            "acceptance": Acceptance.accepted.value,
            "verhex": alphaSigner.naclSigner.verhex,
            "pubhex": alphaPrivateer.pubhex
        }, "alpha")

    try:

        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha)

        alpha.addRemote(betaRemote)

        alpha.allow(uid=betaRemote.uid, cascade=True)

        handshake(alpha, beta)

        sendMsgs(alpha, beta, betaRemote)
    finally:
        cleanup(alpha, beta)
Example #8
0
File: core.py Project: dlax/salt
 def action(self, **kwa):
     '''
     Receive any udp packets on server socket and put in rxes
     Send any packets in txes
     '''
     stack = self.stack.value
     if stack and isinstance(stack, RoadStack):
         if not stack.remotes:
             stack.addRemote(RemoteEstate(stack=stack,
                                          fuid=0,  # vacuous join
                                          sid=0,  # always 0 for join
                                          ha=self.mha))
         stack.join(uid=stack.remotes.values()[0].uid, timeout=0.0)
def testNonPromiscousConnectionWithOneKey(tdir, keysAndNames):
    # Simulating node to node connection
    alphaSighex, alphaPrikey, alphaVerhex, alphaPubkey,  alphaName, betaSighex,\
    betaPrikey, betaVerhex, betaPubkey, betaName = keysAndNames
    alpha = RoadStack(name=alphaName,
                      ha=genHa(),
                      sigkey=alphaSighex,
                      prikey=hexlify(alphaPrikey),
                      auto=AutoMode.never,
                      basedirpath=tdir)

    beta = RoadStack(name=betaName,
                     ha=genHa(),
                     sigkey=betaSighex,
                     prikey=hexlify(betaPrikey),
                     main=True,
                     auto=AutoMode.never,
                     basedirpath=tdir)

    alpha.keep.dumpRemoteRoleData(
        {
            "acceptance": Acceptance.accepted.value,
            "verhex": betaVerhex,
            "pubhex": hexlify(betaPubkey)
        }, betaName)

    beta.keep.dumpRemoteRoleData(
        {
            "acceptance": Acceptance.accepted.value,
            "verhex": alphaVerhex,
            "pubhex": hexlify(alphaPubkey)
        }, alphaName)

    try:

        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha)

        alpha.addRemote(betaRemote)

        alpha.allow(uid=betaRemote.uid, cascade=True)

        handshake(alpha, beta)

        sendMsgs(alpha, beta, betaRemote)
    finally:
        cleanup(alpha, beta)
Example #10
0
 def action(self, **kwa):
     '''
     Join with all masters
     '''
     stack = self.stack.value
     if stack and isinstance(stack, RoadStack):
         if not stack.remotes:
             for master in self.masters:
                 mha = master['external']
                 stack.addRemote(
                     RemoteEstate(
                         stack=stack,
                         fuid=0,  # vacuous join
                         sid=0,  # always 0 for join
                         ha=mha))
         # stack.join(uid=stack.remotes.values()[0].uid, timeout=0.0)
         for remote in stack.remotes.values():
             stack.join(uid=remote.uid, timeout=0.0)
Example #11
0
def testPromiscuousConnection(tdir):
    alpha = RoadStack(name='alpha',
                      ha=genHa(),
                      auto=AutoMode.always,
                      basedirpath=tdir)

    beta = RoadStack(name='beta',
                     ha=genHa(),
                     main=True,
                     auto=AutoMode.always,
                     basedirpath=tdir)

    try:
        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha)
        alpha.addRemote(betaRemote)

        alpha.join(uid=betaRemote.uid, cascade=True)

        handshake(alpha, beta)

        sendMsgs(alpha, beta, betaRemote)
    finally:
        cleanup(alpha, beta)
Example #12
0
 def _doConnectByHA(self, ha, name=None):
     remote = RemoteEstate(stack=self.raetStack, ha=ha)
     self.raetStack.addRemote(remote)
     return self._doConnectRemote(remote, name)
Example #13
0
def testConnectionWithHaChanged(tdir):
    console = getConsole()
    console.reinit(verbosity=console.Wordage.verbose)

    alphaSigner = SimpleSigner()
    betaSigner = SimpleSigner()

    alphaPrivateer = Privateer()
    betaPrivateer = Privateer()

    logger.debug("Alpha's verkey {}".format(alphaSigner.naclSigner.verhex))
    logger.debug("Beta's verkey {}".format(betaSigner.naclSigner.verhex))

    alpha = None

    def setupAlpha(ha):
        nonlocal alpha
        alpha = RoadStack(name='alpha',
                          ha=ha,
                          sigkey=alphaSigner.naclSigner.keyhex,
                          prikey=alphaPrivateer.keyhex,
                          auto=AutoMode.never,
                          basedirpath=tdir)

        alpha.keep.dumpRemoteRoleData(
            {
                "acceptance": Acceptance.accepted.value,
                "verhex": betaSigner.naclSigner.verhex,
                "pubhex": betaPrivateer.pubhex
            }, "beta")

    oldHa = genHa()
    setupAlpha(oldHa)

    beta = RoadStack(name='beta',
                     ha=genHa(),
                     sigkey=betaSigner.naclSigner.keyhex,
                     prikey=betaPrivateer.keyhex,
                     main=True,
                     auto=AutoMode.never,
                     basedirpath=tdir,
                     mutable=True)

    beta.keep.dumpRemoteRoleData(
        {
            "acceptance": Acceptance.accepted.value,
            "verhex": alphaSigner.naclSigner.verhex,
            "pubhex": alphaPrivateer.pubhex
        }, "alpha")

    try:
        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha)
        alpha.addRemote(betaRemote)
        alpha.join(uid=betaRemote.uid, cascade=True)
        handshake(alpha, beta)
        sendMsgs(alpha, beta, betaRemote)
        logger.debug("beta knows alpha as {}".format(
            getRemote(beta, "alpha").ha))
        cleanup(alpha)

        newHa = genHa()
        logger.debug("alpha changing ha to {}".format(newHa))

        setupAlpha(newHa)
        betaRemote = RemoteEstate(stack=alpha, ha=beta.ha)
        alpha.addRemote(betaRemote)
        alpha.join(uid=betaRemote.uid, cascade=True)
        handshake(alpha, beta)
        sendMsgs(alpha, beta, betaRemote)
        logger.debug("beta knows alpha as {}".format(
            getRemote(beta, "alpha").ha))
    finally:
        cleanup(alpha, beta)