File: API.hpp

package info (click to toggle)
suphp 0.6.2-3
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 2,300 kB
  • ctags: 437
  • sloc: sh: 20,980; cpp: 2,459; ansic: 1,114; makefile: 105
file content (192 lines) | stat: -rw-r--r-- 4,372 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*
    suPHP - (c)2002-2005 Sebastian Marsching <sebastian@marsching.com>

    This file is part of suPHP.

    suPHP is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    suPHP is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with suPHP; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#ifndef SUPHP_API_H

namespace suPHP {
    class API;
};

#define SUPHP_API_H

#include <string>
#include "CommandLine.hpp"
#include "Environment.hpp"
#include "UserInfo.hpp"
#include "GroupInfo.hpp"
#include "File.hpp"
#include "Logger.hpp"

namespace suPHP {
    /**
     * Class encapsulating system-specific API.
     */
    class API {
	
    public:
	/**
	 * Get environment variable
	 */
	virtual Environment getProcessEnvironment() =0;
	
	/**
	 * Get UserInfo from username
	 */
	virtual UserInfo getUserInfo(const std::string username) 
	    throw (LookupException) =0;
	
	/**
	 * Get UserInfo from UID
	 */
	virtual UserInfo getUserInfo(const int uid) =0;

	/**
	 * Get GroupInfo from groupname
	 */
	virtual GroupInfo getGroupInfo(const std::string groupname)
	    throw (LookupException) =0;
	
	/**
	 * Get GroupInfo from GID
	 */
	virtual GroupInfo getGroupInfo(const int gid) =0;
	
	/**
	 * Get UserInfo for effective UID
	 */
	virtual UserInfo getEffectiveProcessUser() =0;

	/**
	 * Get UserInfo for real UID
	 */
	virtual UserInfo getRealProcessUser() =0;
	
	/**
	 * Get GroupInfo for effective GID
	 */
	virtual GroupInfo getEffectiveProcessGroup() =0;

	/**
	 * Get GroupInfo for real GID
	 */
	virtual GroupInfo getRealProcessGroup() =0;

	/**
	 * Get Logger implementation
	 */
	virtual Logger& getSystemLogger() =0;

	/**
	 * Set UID of current process
	 */
	virtual void setProcessUser(const UserInfo& user) const
	    throw (SystemException) =0;
	
	/**
	 * Set GID of current process
	 */
	virtual void setProcessGroup(const GroupInfo& group) const
	    throw (SystemException) =0;

	/**
	 * Returns username from UserInfo
	 */
	virtual std::string UserInfo_getUsername(const UserInfo& uinfo) const 
	    throw (LookupException) =0;
	
	/**
	 * Returns group from UserInfo
	 */
	virtual GroupInfo UserInfo_getGroupInfo(const UserInfo& uinfo) const
	    throw (LookupException) =0;
	
	/**
	 * Checks whether UserInfo objects represents the super-user
	 */
	virtual bool UserInfo_isSuperUser(const UserInfo& uinfo) const =0;

	/**
	 * Returns groupname from GroupInfo
	 */
	virtual std::string GroupInfo_getGroupname(const GroupInfo& ginfo) 
	    const throw (LookupException) =0;
	
	/**
	 * Checks whether file exists
	 */
	virtual bool File_exists(const File& file) const =0;

	/**
	 * Returns real path to file
	 */
	virtual std::string File_getRealPath(const File& file) const 
	    throw (SystemException) =0;

	/**
	 * Checks for a permission bit
	 */
	virtual bool File_hasPermissionBit(const File& file, FileMode perm) 
	    const throw (SystemException) =0;

	/**
	 * Returns UID of file
	 */
	virtual UserInfo File_getUser(const File& file) const
	    throw (SystemException) =0;

	/**
	 * Returns GID of file
	 */
	virtual GroupInfo File_getGroup(const File& file) const
	    throw (SystemException) =0;
	
	/**
	 * Runs another program (replaces current process)
	 */
	virtual void execute(std::string program, const CommandLine& cline, 
			const Environment& env) const
	    throw (SystemException) =0;

	/**
	 * Returns current working directory
	 */
	virtual std::string getCwd() const throw (SystemException) =0;


	/**
	 * Sets current working directory
	 */
	virtual void setCwd(const std::string& dir) const 
	    throw (SystemException) =0;
	
	/**
	 * Sets umask
	 */
	virtual void setUmask(int umask) const throw (SystemException) =0;

	/**
         * Changes root directory for the current process
	 */
	virtual void chroot(const std::string& dir) const
	    throw (SystemException) =0;
    };
};

#endif // SUPHP_API_H