def perspective_restricted_command(params):
        """Runs a restricted command.

    """
        (cmd, ) = params

        return backend.RunRestrictedCmd(cmd)
Exemple #2
0
  def testRunCmdSucceeds(self):
    lockfile = utils.PathJoin(self.tmpdir, "lock")

    def fn(args, env=NotImplemented, reset_env=NotImplemented,
           postfork_fn=NotImplemented):
      self.assertEqual(args, [utils.PathJoin(self.tmpdir, "test5667")])
      self.assertEqual(env, {})
      self.assertTrue(reset_env)

      # Call back to release lock
      postfork_fn(NotImplemented)

      # Simulate a successful command
      return utils.RunResult(constants.EXIT_SUCCESS, None, "stdout14463", "",
                             utils.ShellQuoteArgs(args),
                             NotImplemented, NotImplemented)

    sleep_fn = testutils.CallCounter(_SleepForRestrictedCmd)
    prepare_fn = testutils.CallCounter(self._SuccessfulPrepare)
    runcmd_fn = testutils.CallCounter(fn)

    result = backend.RunRestrictedCmd("test5667",
                                      _lock_timeout=1.0, _lock_file=lockfile,
                                      _path=self.tmpdir, _runcmd_fn=runcmd_fn,
                                      _sleep_fn=sleep_fn,
                                      _prepare_fn=prepare_fn,
                                      _enabled=True)
    self.assertEqual(result, "stdout14463")

    self.assertEqual(sleep_fn.Count(), 0)
    self.assertEqual(prepare_fn.Count(), 1)
    self.assertEqual(runcmd_fn.Count(), 1)
Exemple #3
0
    def testRunCmdFails(self):
        lockfile = utils.PathJoin(self.tmpdir, "lock")

        def fn(args,
               env=NotImplemented,
               reset_env=NotImplemented,
               postfork_fn=NotImplemented):
            self.assertEqual(args, [utils.PathJoin(self.tmpdir, "test3079")])
            self.assertEqual(env, {})
            self.assertTrue(reset_env)
            self.assertTrue(callable(postfork_fn))

            trylock = utils.FileLock.Open(lockfile)
            try:
                # See if lockfile is still held
                self.assertRaises(EnvironmentError,
                                  trylock.Exclusive,
                                  blocking=False)

                # Call back to release lock
                postfork_fn(NotImplemented)

                # See if lockfile can be acquired
                trylock.Exclusive(blocking=False)
            finally:
                trylock.Close()

            # Simulate a failed command
            return utils.RunResult(constants.EXIT_FAILURE, None,
                                   "stdout", "stderr406328567",
                                   utils.ShellQuoteArgs(args), NotImplemented,
                                   NotImplemented)

        sleep_fn = testutils.CallCounter(_SleepForRestrictedCmd)
        prepare_fn = testutils.CallCounter(self._SuccessfulPrepare)
        runcmd_fn = testutils.CallCounter(fn)

        try:
            backend.RunRestrictedCmd("test3079",
                                     _lock_timeout=1.0,
                                     _lock_file=lockfile,
                                     _path=self.tmpdir,
                                     _runcmd_fn=runcmd_fn,
                                     _sleep_fn=sleep_fn,
                                     _prepare_fn=prepare_fn,
                                     _enabled=True)
        except backend.RPCFail, err:
            self.assertTrue(
                str(err).startswith("Restricted command 'test3079'"
                                    " failed:"))
            self.assertTrue("stderr406328567" in str(err),
                            msg="Error did not include output")
Exemple #4
0
 def testCommandsDisabled(self):
   try:
     backend.RunRestrictedCmd("test",
                              _lock_timeout=NotImplemented,
                              _lock_file=NotImplemented,
                              _path=NotImplemented,
                              _sleep_fn=NotImplemented,
                              _prepare_fn=NotImplemented,
                              _runcmd_fn=NotImplemented,
                              _enabled=False)
   except backend.RPCFail, err:
     self.assertEqual(str(err),
                      "Restricted commands disabled at configure time")
Exemple #5
0
  def testPrepareFails(self):
    lockfile = utils.PathJoin(self.tmpdir, "lock")

    sleep_fn = testutils.CallCounter(_SleepForRestrictedCmd)
    prepare_fn = testutils.CallCounter(self._PrepareFails)

    try:
      backend.RunRestrictedCmd("test29327",
                               _lock_timeout=1.0, _lock_file=lockfile,
                               _path=NotImplemented, _runcmd_fn=NotImplemented,
                               _sleep_fn=sleep_fn, _prepare_fn=prepare_fn,
                               _enabled=True)
    except backend.RPCFail, err:
      self.assertEqual(str(err), _GenericRestrictedCmdError("test29327"))
Exemple #6
0
  def _TryLock(lockfile):
    sleep_fn = testutils.CallCounter(_SleepForRestrictedCmd)

    result = False
    try:
      backend.RunRestrictedCmd("test22717",
                               _lock_timeout=0.1,
                               _lock_file=lockfile,
                               _path=NotImplemented,
                               _sleep_fn=sleep_fn,
                               _prepare_fn=NotImplemented,
                               _runcmd_fn=NotImplemented,
                               _enabled=True)
    except backend.RPCFail, err:
      assert str(err) == _GenericRestrictedCmdError("test22717"), \
             "Did not fail with generic error message"
      result = True