171 lines
3.6 KiB
C++
Executable File
171 lines
3.6 KiB
C++
Executable File
/*
|
|
* Copyright (c) 1992 - 1994 by Sun Microsystems, Inc.
|
|
*/
|
|
|
|
#pragma ident "@(#)Table.cc 1.4 94/10/03 SMI"
|
|
|
|
|
|
#include "FNSP_InitialContext.hh"
|
|
|
|
|
|
// This file contains the code that implements the FNSP_InitialContext::Table
|
|
// class and its IterationPosition subclass.
|
|
|
|
FNSP_InitialContext::IterationPosition::IterationPosition()
|
|
{
|
|
position = (void *)new int;
|
|
*(int *)position = 0;
|
|
}
|
|
|
|
|
|
FNSP_InitialContext::IterationPosition::
|
|
IterationPosition(const IterationPosition &src)
|
|
{
|
|
position = (void *)new int;
|
|
*(int *)position = *(int *)src.position;
|
|
}
|
|
|
|
|
|
FNSP_InitialContext::IterationPosition&
|
|
FNSP_InitialContext::IterationPosition::operator=(const IterationPosition &src)
|
|
{
|
|
*(int *)position = *(int *)src.position;
|
|
return (*this);
|
|
}
|
|
|
|
|
|
FNSP_InitialContext::IterationPosition::~IterationPosition()
|
|
{
|
|
delete position;
|
|
}
|
|
|
|
|
|
// return pointer to first entry containing given name
|
|
// return 0 if not found
|
|
|
|
FNSP_InitialContext::Entry*
|
|
FNSP_InitialContext::Table::find(const FN_string &name)
|
|
{
|
|
int i;
|
|
|
|
// find first entry with given name
|
|
for (i = 0; i < size; i++)
|
|
if (entry[i]->find_name(name))
|
|
return (entry[i]);
|
|
return (0);
|
|
}
|
|
|
|
|
|
|
|
// Return a pointer to the first entry and set iteration pointer.
|
|
|
|
FNSP_InitialContext::Entry*
|
|
FNSP_InitialContext::Table::first(IterationPosition &iter_pos)
|
|
{
|
|
*(int *)iter_pos.position = 0;
|
|
return (entry[0]);
|
|
}
|
|
|
|
|
|
// Advance the iteration pointer and return a pointer to the entry
|
|
// If the iteration position is out of bounds, return 0.
|
|
|
|
FNSP_InitialContext::Entry*
|
|
FNSP_InitialContext::Table::next(IterationPosition &iter_pos)
|
|
{
|
|
int &p = *(int *)iter_pos.position;
|
|
|
|
if ((0 <= p) && (p < (size - 1))) {
|
|
p++;
|
|
return (entry[p]);
|
|
} else {
|
|
return (0);
|
|
}
|
|
}
|
|
|
|
|
|
// Constructor for Table
|
|
|
|
#include "FNSP_entries.hh"
|
|
|
|
FNSP_InitialContext::Table::Table()
|
|
{
|
|
}
|
|
|
|
FNSP_InitialContext::CustomTable::CustomTable() : Table()
|
|
{
|
|
// %%% not supported yet
|
|
size = 0;
|
|
}
|
|
|
|
FNSP_InitialContext::GlobalTable::GlobalTable() : Table()
|
|
{
|
|
#ifdef DEBUG
|
|
size = 3;
|
|
#else
|
|
size = 1;
|
|
#endif /* DEBUG */
|
|
entry = new Entry* [size];
|
|
|
|
entry[0] = new FNSP_InitialContext_GlobalEntry;
|
|
#ifdef DEBUG
|
|
entry[1] = new FNSP_InitialContext_GlobalDNSEntry;
|
|
entry[2] = new FNSP_InitialContext_GlobalX500Entry;
|
|
#endif /* DEBUG */
|
|
}
|
|
|
|
|
|
FNSP_InitialContext::HostTable::HostTable() : Table()
|
|
{
|
|
size = 8;
|
|
entry = new Entry* [size];
|
|
|
|
entry[0] = new FNSP_InitialContext_ThisHostEntry;
|
|
entry[1] = new FNSP_InitialContext_HostOrgUnitEntry;
|
|
entry[2] = new FNSP_InitialContext_HostOrgEntry;
|
|
entry[3] = new FNSP_InitialContext_HostENSEntry;
|
|
entry[4] = new FNSP_InitialContext_HostUserEntry;
|
|
entry[5] = new FNSP_InitialContext_HostHostEntry;
|
|
entry[6] = new FNSP_InitialContext_HostSiteEntry;
|
|
entry[7] = new FNSP_InitialContext_HostSiteRootEntry;
|
|
}
|
|
|
|
FNSP_InitialContext::UserTable::UserTable(uid_t uid, UserTable* nxt)
|
|
: Table()
|
|
{
|
|
my_uid = uid;
|
|
#ifdef FN_IC_EXTENSIONS
|
|
size = 8;
|
|
#else
|
|
size = 4;
|
|
#endif /* FN_IC_EXTENSIONS */
|
|
|
|
entry = new Entry* [size];
|
|
next_table = nxt;
|
|
|
|
entry[0] = new FNSP_InitialContext_ThisUserEntry(uid);
|
|
entry[1] = new FNSP_InitialContext_UserOrgUnitEntry(uid);
|
|
entry[2] = new FNSP_InitialContext_UserSiteEntry;
|
|
entry[3] = new FNSP_InitialContext_UserENSEntry;
|
|
#ifdef FN_IC_EXTENSIONS
|
|
entry[4] = new FNSP_InitialContext_UserOrgEntry();
|
|
entry[5] = new FNSP_InitialContext_UserUserEntry;
|
|
entry[6] = new FNSP_InitialContext_UserHostEntry;
|
|
entry[7] = new FNSP_InitialContext_UserSiteRootEntry;
|
|
#endif /* FN_IC_EXTENSIONS */
|
|
}
|
|
|
|
const FNSP_InitialContext::UserTable*
|
|
FNSP_InitialContext::UserTable::find_user_table(uid_t uid) const
|
|
{
|
|
if (my_uid == uid)
|
|
return (this);
|
|
|
|
// try next table
|
|
if (next_table)
|
|
return (next_table->find_user_table(uid));
|
|
|
|
// no more to try
|
|
return (0);
|
|
}
|