Update changelog
[manu/suphp.git] / src / Configuration.hpp
1 /*
2     suPHP - (c)2002-2008 Sebastian Marsching <sebastian@marsching.com>
3
4     This file is part of suPHP.
5
6     suPHP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     suPHP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with suPHP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #ifndef SUPHP_CONFIGURATION_H
22
23 namespace suPHP {
24     class Configuration;
25 };
26
27 #define SUPHP_CONFIGURATION_H
28
29 #include <string>
30 #include <map>
31 #include <vector>
32
33 #include "ParsingException.hpp"
34 #include "IOException.hpp"
35 #include "File.hpp"
36 #include "KeyNotFoundException.hpp"
37 #include "Logger.hpp"
38
39 namespace suPHP {
40     /**
41      * Class encapsulating run-time configuration.
42      */
43     class Configuration {
44     private:
45         std::string logfile;
46         std::string webserver_user;
47         std::vector<std::string> docroots;
48         bool allow_file_group_writeable;
49         bool allow_directory_group_writeable;
50         bool allow_file_others_writeable;
51         bool allow_directory_others_writeable;
52         bool check_vhost_docroot;
53         bool errors_to_browser;
54         std::string env_path;
55         std::map<std::string, std::string> handlers;
56         LogLevel loglevel;
57         int min_uid;
58         int min_gid;
59         int umask;
60         std::string chroot_path;
61
62         /**
63          * Converts string to bool
64          */
65         bool strToBool(const std::string& str) const throw (ParsingException);
66
67         /**
68          * Converts string to LogLevel
69          */
70         LogLevel strToLogLevel(const std::string& str) const
71             throw (ParsingException);
72
73     public:
74         /**
75          * Constructor, initializes configuration with default values.
76          */
77         Configuration();
78         
79         /**
80          * Reads values from INI file
81          */
82         void readFromFile(File& file) throw (IOException, ParsingException);
83         
84         /**
85          * Return path to logfile;
86          */
87         std::string getLogfile() const;
88
89         /**
90            Return log level
91         */
92         LogLevel getLogLevel() const;
93
94         /**
95          * Return username of user the webserver is running as
96          */
97         std::string getWebserverUser() const;
98
99         /**
100          * Return document root (list of directories, scripts may be within)
101          */
102         const std::vector<std::string>& getDocroots() const;
103
104         /**
105          * Returns wheter suPHP should check if scripts in within the 
106          * document root of the VHost
107          */
108         bool getCheckVHostDocroot() const;
109         
110         /**
111          * Returns wheter suPHP should ignore the group write bit of
112          * the script file
113          */
114         bool getAllowFileGroupWriteable() const;
115
116         /**
117          * Returns wheter suPHP should ignore the group write bit of
118          * the directory the is script in
119          */
120         bool getAllowDirectoryGroupWriteable() const;
121         
122         /**
123          * Returns wheter suPHP should ignore the others write bit of the
124          * script file
125          */
126         bool getAllowFileOthersWriteable() const;
127
128         /**
129          * Returns wheter suPHP should ignore the others write bit of
130          * the directory the is script in
131          */
132         bool getAllowDirectoryOthersWriteable() const;
133
134         /**
135          * Returns whether (minor) error message should be sent to browser
136          */
137         bool getErrorsToBrowser() const;
138         
139         /**
140          * Returns the content for the PATH environment variable
141          */
142         std::string getEnvPath() const;
143
144         /**
145          * Returns interpreter string for specified handler
146          */
147         std::string getInterpreter(std::string handler) const
148             throw (KeyNotFoundException);
149
150         /**
151          * Returns minimum UID allowed for scripts
152          */
153         int getMinUid() const;
154         
155         /**
156          * Returns minimum GID allowed for scripts
157          */
158         int getMinGid() const;
159
160         /**
161          * Returns umask to set
162          */
163         int getUmask() const;
164
165         /**
166          * Return chroot path
167          */
168         std::string getChrootPath() const;
169     };
170 };
171
172 #endif // SUPHP_CONFIGURATION_H