00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PTLIB_IPACL_H
00032 #define PTLIB_IPACL_H
00033
00034
00035 #include <ptlib/sockets.h>
00036
00037
00040 class PIpAccessControlEntry : public PObject
00041 {
00042 PCLASSINFO(PIpAccessControlEntry, PObject)
00043
00044 public:
00049 PIpAccessControlEntry(
00050 PIPSocket::Address addr,
00051 PIPSocket::Address msk,
00052 PBoolean allow
00053 );
00054 PIpAccessControlEntry(
00055 const PString & description
00056 );
00057
00062 PIpAccessControlEntry & operator=(
00063 const PString & pstr
00064 );
00065 PIpAccessControlEntry & operator=(
00066 const char * cstr
00067 );
00068
00075 virtual Comparison Compare(
00076 const PObject & obj
00077 ) const;
00078
00082 virtual void PrintOn(
00083 ostream &strm
00084 ) const;
00085
00090 virtual void ReadFrom(
00091 istream &strm
00092 );
00093
00100 PString AsString() const;
00101
00107 PBoolean IsValid();
00108
00128 PBoolean Parse(
00129 const PString & description
00130 );
00131
00132
00139 PBoolean Match(
00140 PIPSocket::Address & address
00141 );
00142
00145 const PString & GetDomain() const { return domain; }
00146
00149 const PIPSocket::Address & GetAddress() const { return address; }
00150
00153 const PIPSocket::Address & GetMask() const { return mask; }
00154
00157 PBoolean IsAllowed() const { return allowed; }
00158
00161 PBoolean IsHidden() const { return hidden; }
00162
00163 protected:
00164 PString domain;
00165 PIPSocket::Address address;
00166 PIPSocket::Address mask;
00167 PBoolean allowed;
00168 PBoolean hidden;
00169 };
00170
00171 PSORTED_LIST(PIpAccessControlList_base, PIpAccessControlEntry);
00172
00173
00187 class PIpAccessControlList : public PIpAccessControlList_base
00188 {
00189
00190 PCLASSINFO(PIpAccessControlList, PIpAccessControlList_base)
00191
00192 public:
00195 PIpAccessControlList(
00196 PBoolean defaultAllowance = PTrue
00197 );
00198
00213 PBoolean LoadHostsAccess(
00214 const char * daemonName = NULL
00215 );
00216
00217 #ifdef P_CONFIG_FILE
00218
00226 PBoolean Load(
00227 PConfig & cfg
00228 );
00229
00239 PBoolean Load(
00240 PConfig & cfg,
00241 const PString & baseName
00242 );
00243
00247 void Save(
00248 PConfig & cfg
00249 );
00250
00256 void Save(
00257 PConfig & cfg,
00258 const PString & baseName
00259 );
00260
00261 #endif // P_CONFIG_FILE
00262
00270 PBoolean Add(
00271 PIpAccessControlEntry * entry
00272 );
00273 PBoolean Add(
00274 const PString & description
00275 );
00276 PBoolean Add(
00277 PIPSocket::Address address,
00278 PIPSocket::Address mask,
00279 PBoolean allow
00280 );
00281
00289 PBoolean Remove(
00290 const PString & description
00291 );
00292 PBoolean Remove(
00293 PIPSocket::Address address,
00294 PIPSocket::Address mask
00295 );
00296
00297
00304 virtual PIpAccessControlEntry * CreateControlEntry(
00305 const PString & description
00306 );
00307
00310 PIpAccessControlEntry * Find(
00311 PIPSocket::Address address
00312 ) const;
00313
00326 PBoolean IsAllowed(
00327 PTCPSocket & socket
00328 ) const;
00329 PBoolean IsAllowed(
00330 PIPSocket::Address address
00331 ) const;
00332
00333
00336 PBoolean GetDefaultAllowance() const { return defaultAllowance; }
00337
00340 void SetDefaultAllowance(PBoolean defAllow) { defaultAllowance = defAllow; }
00341
00342 private:
00343 PBoolean InternalLoadHostsAccess(const PString & daemon, const char * file, PBoolean allow);
00344 PBoolean InternalRemoveEntry(PIpAccessControlEntry & entry);
00345
00346 protected:
00347 PBoolean defaultAllowance;
00348 };
00349
00350
00351 #endif // PTLIB_IPACL_H
00352
00353
00354