| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FOOMATIC_SHELL_VERIFIER_H_ |
| #define FOOMATIC_SHELL_VERIFIER_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "foomatic_shell/grammar.h" |
| |
| namespace foomatic_shell { |
| |
| // A simple class used to verify given script. All commands in the script |
| // must be on the list of allowed commands. All variables used in the script |
| // must be on the list of allowed variables. Moreover, each allowed command has |
| // specific requirements that must be met. |
| class Verifier { |
| public: |
| // Verifies given Script. |script| must be not nullptr. Returns false in |
| // the case of failure. |script| may be modified by the method (e.g. a |
| // parameter "--sandbox" is added to every invocation of "sed" command). |
| bool VerifyScript(Script* script, int recursion_level = 0); |
| |
| // It is used to report a position of the error when the method |
| // VerifyScript(...) fails. |
| std::string::const_iterator GetPosition() const { return position_; } |
| |
| // Returns an error message from the last call of VerifyScript(...). |
| // Returns an empty string if the call succeeded. |
| const std::string& GetMessage() const { return message_; } |
| |
| private: |
| // Verifies given Command. |command| must be not nullptr. |
| bool VerifyCommand(Command* command); |
| // Verifies parameters of "gs" command. |
| bool VerifyGs(const std::vector<StringAtom>& parameters); |
| |
| // Internal field holding an error message from the last call of |
| // VerifyScript(...). |
| std::string message_; |
| // Internal field holding a position where the last error occurred. |
| std::string::const_iterator position_; |
| }; |
| |
| } // namespace foomatic_shell |
| |
| #endif // FOOMATIC_SHELL_VERIFIER_H_ |