00001
00002
00003
00004
00005
00006
00007
#ifndef __WVCONFEMU_H
00008
#define __WVCONFEMU_H
00009
00010
00011
#include "uniconfroot.h"
00012
#include "wvsorter.h"
00013
00014 #define WvConf WvConfEmu
00015 #define WvConfigSection WvConfigSectionEmu
00016 #define WvConfigSectionList WvConfigSectionListEmu
00017 #define WvConfigEntry WvConfigEntryEmu
00018 #define WvConfigEntryList WvConfigEntryListEmu
00019
00020
00021
class WvConfEmu;
00022
class WvConfigEntryEmu;
00023
class WvConfigSectionEmu;
00024
class WvAuthDaemon;
00025
class WvAuthDaemonSvc;
00026
00027 typedef WvConfEmu WvConfigSectionListEmu;
00028 typedef WvConfigSectionEmu WvConfigEntryListEmu;
00029
00030
00031 class WvConfigEntryEmu
00032 {
00033
public:
00034 const WvString name;
00035 WvString value;
00036 WvConfigEntryEmu(
WvStringParm _name,
WvStringParm _value):
00037
name(_name),
value(_value)
00038 {}
00039 };
00040
00041
00042
DeclareWvDict(
WvConfigEntryEmu,
WvString, name);
00043
00044
00045 class WvConfigSectionEmu
00046 {
00047
private:
00048
const UniConf uniconf;
00049 WvConfigEntryEmuDict entries;
00050
WvStringList values;
00051
public:
00052 const WvString name;
00053 WvConfigSectionEmu(
const UniConf& _uniconf,
WvStringParm _name):
00054 uniconf(_uniconf), entries(42),
name(_name)
00055 {}
00056
WvConfigEntryEmu *operator[] (
WvStringParm s);
00057
const char *get(
WvStringParm entry,
const char *def_val = NULL);
00058
void set(
WvStringParm entry,
WvStringParm value);
00059
void quick_set(
WvStringParm entry,
WvStringParm value);
00060
00061
bool isempty() const;
00062
00063 class Iter;
00064 friend class Iter;
00065
00066 typedef
WvSorter<
WvConfigEntryEmu,
WvConfigSectionEmu, Iter>
Sorter;
00067 };
00068
00069
00070 DeclareWvDict(WvConfigSectionEmu,
WvString, name);
00071
00072
00073 class WvConfigSectionEmu::Iter
00074 {
00075
private:
00076 WvConfigSectionEmu& sect;
00077 UniConf::Iter iter;
00078
WvLink link;
00079 WvConfigEntryEmu* entry;
00080
public:
00081 Iter(WvConfigSectionEmu& _sect):
00082 sect(_sect), iter(_sect.uniconf), link(NULL, false), entry(NULL)
00083 {}
00084 ~Iter();
00085
void rewind();
00086
WvLink *next();
00087
WvLink *cur();
00088 WvConfigEntryEmu* ptr() const;
00089
void* vptr() const;
00090 WvIterStuff(WvConfigEntryEmu);
00091 };
00092
00093
00094
00095 typedef
WvCallback<
void,
void*,
WvStringParm, WvStringParm, WvStringParm, WvStringParm>
WvConfCallback;
00096
00097
00098 class
WvConfEmu
00099 {
00100
private:
00101
struct CallbackInfo
00102 {
00103
WvConfCallback callback;
00104
void* userdata;
00105 WvString section;
00106 WvString key;
00107
void* cookie;
00108 WvString last;
00109 CallbackInfo(
WvConfCallback _callback,
void* _userdata,
00110
WvStringParm _section,
WvStringParm _key,
00111
void* _cookie,
WvStringParm _last):
00112 callback(_callback), userdata(_userdata), section(_section),
00113 key(_key), cookie(_cookie), last(_last)
00114 {}
00115 };
00116
00117
const UniConf uniconf;
00118 WvConfigSectionEmuDict sections;
00119
bool hold;
00120
WvList<CallbackInfo> callbacks;
00121
WvStringList values;
00122
00123
void notify(
const UniConf &_uni,
const UniConfKey &_key);
00124
public:
00125 WvConfEmu(
const UniConf& _uniconf);
00126
void zap();
00127
bool isok()
const;
00128
void load_file(
WvStringParm filename);
00129
void save(
WvStringParm filename);
00130
void save();
00131
void flush();
00132
00133 WvConfigSectionEmu *operator[] (
WvStringParm sect);
00134
00135
void add_callback(
WvConfCallback callback,
void *userdata,
00136
WvStringParm section,
WvStringParm key,
void *cookie);
00137
void del_callback(
WvStringParm section,
WvStringParm key,
void *cookie);
00138
00139
void add_setbool(
bool *b,
WvStringParm _section,
WvStringParm _key);
00140
00141
void add_addname(
WvStringList *list,
WvStringParm sect,
WvStringParm ent);
00142
void del_addname(
WvStringList *list,
WvStringParm sect,
WvStringParm ent);
00143
00144
void add_addfile(WvString *filename,
WvStringParm sect,
WvStringParm ent);
00145
00146 WvString getraw(WvString wvconfstr,
int &parse_error);
00147
int getint(
WvStringParm section,
WvStringParm entry,
int def_val);
00148
const char *get(
WvStringParm section,
WvStringParm entry,
00149
const char *def_val = NULL);
00150
int fuzzy_getint(
WvStringList §,
WvStringParm entry,
00151
int def_val);
00152
const char *fuzzy_get(
WvStringList §,
WvStringParm entry,
00153
const char *def_val = NULL);
00154
00155
void setraw(WvString wvconfstr,
const char *&value,
int &parse_error);
00156
void setint(
WvStringParm section,
WvStringParm entry,
int value);
00157
void set(
WvStringParm section,
WvStringParm entry,
00158
const char *value);
00159
00160
void maybesetint(
WvStringParm section,
WvStringParm entry,
00161
int value);
00162
void maybeset(
WvStringParm section,
WvStringParm entry,
00163
const char *value);
00164
00165
void delete_section(
WvStringParm section);
00166
00167
00168 WvString get_passwd(
WvStringParm sect,
WvStringParm user);
00169 WvString get_passwd(WvStringParm user)
00170 {
return get_passwd(
"Users", user); }
00171 WvString get_passwd2(WvString pwenc);
00172
00173
00174
00175
00176
bool check_passwd(WvStringParm sect, WvStringParm user,
00177 WvStringParm passwd);
00178 bool check_passwd(WvStringParm user, WvStringParm passwd)
00179 {
00180
return check_passwd(
"Users", user, passwd);
00181 }
00182
00183
00184
bool user_exists(WvStringParm sect, WvStringParm user);
00185 bool user_exists(WvStringParm user)
00186 {
00187
return user_exists(
"Users", user);
00188 }
00189
00190
00191
void set_passwd(WvStringParm sect, WvStringParm user, WvStringParm passwd);
00192 void set_passwd(WvStringParm user, WvStringParm passwd)
00193 { set_passwd(
"Users", user, passwd); }
00194 WvString set_passwd2(WvStringParm passwd);
00195
00196
00197
void convert_to_old_pw();
00198
00199
static int check_for_bool_string(
const char *s);
00200
00201
class Iter;
00202
friend class Iter;
00203
00204
private:
00205
00206
00207
00208
00209
00210
00211
00212
00213
private:
00214 WvAuthDaemon *wvauthd;
00215
public:
00216
friend class WvAuthDaemonSvc;
00217 };
00218
00219
00220 class WvConfEmu::Iter
00221 {
00222
WvConfEmu& conf;
00223 UniConf::Iter iter;
00224
WvLink link;
00225
public:
00226 Iter(
WvConfEmu& _conf):
00227 conf(_conf), iter(conf.uniconf), link(NULL, false)
00228 {}
00229
void rewind();
00230
WvLink *next();
00231 WvConfigSectionEmu* ptr() const;
00232 WvIterStuff(WvConfigSectionEmu);
00233 };
00234
00235
00236 #endif