00001
00002
00003
00004
00005
00006
00007
00008
00009
#include "unisecuregen.h"
00010
#include "wvmoniker.h"
00011
#include "wvstringlist.h"
00012
#include "wvtclstring.h"
00013
#include "wvlog.h"
00014
00015
00016 UniSecureGen::UniSecureGen(
UniConfGen *_gen,
UniPermGen *_perms) :
00017
UniFilterGen(_gen),
00018 perms(_perms)
00019 {
00020 }
00021
00022
00023 UniSecureGen::UniSecureGen(
WvStringParm moniker,
UniPermGen *_perms) :
00024
UniFilterGen(NULL)
00025 {
00026
UniConfGen *_gen = wvcreate<UniConfGen>(moniker);
00027 assert(_gen &&
"Moniker doesn't get us a generator!");
00028 setinner(_gen);
00029 perms = _perms;
00030 }
00031
00032
00033 void UniSecureGen::setcredentials(
const UniPermGen::Credentials &_cred)
00034 {
00035 cred.
user = _cred.
user;
00036 cred.
groups.zap();
00037 WvStringTable::Iter i(_cred.
groups);
00038
for (i.rewind(); i.next(); )
00039 cred.
groups.add(
new WvString(*i),
true);
00040 }
00041
00042
00043 void UniSecureGen::setcredentials(
WvStringParm user,
const WvStringList &groups)
00044 {
00045 cred.
user = user;
00046 cred.
groups.zap();
00047 WvStringList::Iter i(groups);
00048
for (i.rewind(); i.next(); )
00049 cred.
groups.add(
new WvString(*i),
true);
00050 }
00051
00052
00053 WvString UniSecureGen::get(
const UniConfKey &key)
00054 {
00055
if (findperm(key, UniPermGen::READ))
00056 {
00057
WvString val = UniFilterGen::get(key);
00058
return val;
00059 }
00060
return WvString::null;
00061 }
00062
00063
00064 bool UniSecureGen::exists(
const UniConfKey &key)
00065 {
00066
if (findperm(key.
removelast(), UniPermGen::EXEC))
00067
return UniFilterGen::exists(key);
00068
return false;
00069 }
00070
00071
00072 void UniSecureGen::set(
const UniConfKey &key,
WvStringParm value)
00073 {
00074
if (findperm(key, UniPermGen::WRITE))
00075 UniFilterGen::set(key, value);
00076 }
00077
00078
00079 bool UniSecureGen::haschildren(
const UniConfKey &key)
00080 {
00081
if (findperm(key, UniPermGen::EXEC))
00082
return UniFilterGen::haschildren(key);
00083
return false;
00084 }
00085
00086
00087 UniConfGen::Iter *
UniSecureGen::iterator(
const UniConfKey &key)
00088 {
00089
if (findperm(key, UniPermGen::EXEC))
00090
return UniFilterGen::iterator(key);
00091
return new UniConfGen::NullIter();
00092 }
00093
00094
00095
void UniSecureGen::gencallback(
const UniConfKey &key,
WvStringParm value,
00096
void *userdata)
00097 {
00098
if (findperm(key, UniPermGen::READ))
00099 delta(key, value);
00100 }
00101
00102
00103
bool UniSecureGen::findperm(
const UniConfKey &key, UniPermGen::Type type)
00104 {
00105
if (!drilldown(key))
00106
return false;
00107
else
00108
return perms->
getperm(key, cred, type);
00109 }
00110
00111
00112
bool UniSecureGen::drilldown(
const UniConfKey &key)
00113 {
00114
UniConfKey check;
00115
UniConfKey left = key;
00116
00117
while (!left.
isempty())
00118 {
00119
00120
if (!perms->
getperm(check, cred, UniPermGen::EXEC))
00121
return false;
00122
00123
00124
00125
00126
00127 check.
append(left.
first());
00128 left = left.
removefirst();
00129 }
00130
return true;
00131 }