0.6.0-2 release
[manu/suphp.git] / src / Configuration.hpp
1 /*
2     suPHP - (c)2002-2005 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
32 #include "ParsingException.hpp"
33 #include "IOException.hpp"
34 #include "File.hpp"
35 #include "KeyNotFoundException.hpp"
36 #include "Logger.hpp"
37
38 namespace suPHP {
39     /**
40      * Class encapsulating run-time configuration.
41      */
42     class Configuration {
43     private:
44         std::string logfile;
45         std::string webserver_user;
46         std::string docroot;
47         bool allow_file_group_writeable;
48         bool allow_directory_group_writeable;
49         bool allow_file_others_writeable;
50         bool allow_directory_others_writeable;
51         bool check_vhost_docroot;
52         bool errors_to_browser;
53         std::string env_path;
54         std::map<std::string, std::string> handlers;
55         LogLevel loglevel;
56         int min_uid;
57         int min_gid;
58         int umask;
59
60         /**
61          * Converts string to bool
62          */
63         bool strToBool(const std::string& str) const throw (ParsingException);
64
65         /**
66          * Converts string to LogLevel
67          */
68         LogLevel strToLogLevel(const std::string& str) const
69             throw (ParsingException);
70
71     public:
72         /**
73          * Constructor, initializes configuration with default values.
74          */
75         Configuration();
76         
77         /**
78          * Reads values from INI file
79          */
80         void readFromFile(File& file) throw (IOException, ParsingException);
81         
82         /**
83          * Return path to logfile;
84          */
85         std::string getLogfile() const;
86
87         /**
88            Return log level
89         */
90         LogLevel getLogLevel() const;
91
92         /**
93          * Return username of user the webserver is running as
94          */
95         std::string getWebserverUser() const;
96
97         /**
98          * Return document root (directory, all script have to be in)
99          */
100         std::string getDocroot() const;
101
102         /**
103          * Returns wheter suPHP should check if scripts in within the 
104          * document root of the VHost
105          */
106         bool getCheckVHostDocroot() const;
107         
108         /**
109          * Returns wheter suPHP should ignore the group write bit of
110          * the script file
111          */
112         bool getAllowFileGroupWriteable() const;
113
114         /**
115          * Returns wheter suPHP should ignore the group write bit of
116          * the directory the is script in
117          */
118         bool getAllowDirectoryGroupWriteable() const;
119         
120         /**
121          * Returns wheter suPHP should ignore the others write bit of the
122          * script file
123          */
124         bool getAllowFileOthersWriteable() const;
125
126         /**
127          * Returns wheter suPHP should ignore the others write bit of
128          * the directory the is script in
129          */
130         bool getAllowDirectoryOthersWriteable() const;
131
132         /**
133          * Returns whether (minor) error message should be sent to browser
134          */
135         bool getErrorsToBrowser() const;
136         
137         /**
138          * Returns the content for the PATH environment variable
139          */
140         std::string getEnvPath() const;
141
142         /**
143          * Returns interpreter string for specified handler
144          */
145         std::string getInterpreter(std::string handler) const
146             throw (KeyNotFoundException);
147
148         /**
149          * Returns minimum UID allowed for scripts
150          */
151         int getMinUid() const;
152         
153         /**
154          * Returns minimum GID allowed for scripts
155          */
156         int getMinGid() const;
157
158         /**
159          * Returns umask to set
160          */
161         int getUmask() const;
162     };
163 };
164
165 #endif // SUPHP_CONFIGURATION_H