OUString PolicyReader::assureQuotedToken()
{
OUString token( getQuotedToken() ); if (token.isEmpty())
error( u"unexpected end of file!" ); return token;
}
OUString PolicyReader::getQuotedToken()
{
skipWhiteSpace();
OUStringBuffer buf( 32 );
sal_Unicode c = get(); if ('\"' != c)
error( u"expected quoting >\"< character!" );
c = get(); while ('\0' != c && '\"' != c)
{
buf.append( c );
c = get();
} return buf.makeStringAndClear();
}
OUString PolicyReader::assureToken()
{
OUString token( getToken() ); if ( token.isEmpty())
error( u"unexpected end of file!" ); return token;
}
OUString PolicyReader::getToken()
{
skipWhiteSpace();
sal_Unicode c = get(); if (isCharToken( c )) return OUString( &c, 1 );
OUStringBuffer buf( 32 ); while ('\0' != c && !isCharToken( c ) && !isWhiteSpace( c ))
{
buf.append( c );
c = get();
}
back( c ); return buf.makeStringAndClear();
}
void PolicyReader::skipWhiteSpace()
{
sal_Unicode c; do
{
c = get();
} while (isWhiteSpace( c )); // seeking next non-whitespace char
if ('/' == c) // C/C++ like comment
{
c = get(); if ('/' == c) // C++ like comment
{ do
{
c = get();
} while ('\n' != c && '\0' != c); // seek eol/eof
skipWhiteSpace(); // cont skip on next line
} elseif ('*' == c) // C like comment
{ bool fini = true; do
{
c = get(); if ('*' == c)
{
c = get();
fini = ('/' == c || '\0' == c);
} else
{
fini = ('\0' == c);
}
} while (! fini);
skipWhiteSpace(); // cont skip on next line
} else
{
error( u"expected C/C++ like comment!" );
}
} elseif ('#' == c) // script like comment
{ do
{
c = get();
} while ('\n' != c && '\0' != c); // seek eol/eof
skipWhiteSpace(); // cont skip on next line
}
else// is token char
{
back( c );
}
}
sal_Unicode PolicyReader::get()
{ if ('\0' != m_back) // one char push back possible
{
sal_Unicode c = m_back;
m_back = '\0'; return c;
} elseif (m_pos == m_line.getLength()) // provide newline as whitespace
{
++m_pos; return'\n';
} elseif (m_pos > m_line.getLength()) // read new line
{
sal_Bool eof;
oslFileError rc = ::osl_isEndOfFile( m_file, &eof ); if (osl_File_E_None != rc)
error( u"checking eof failed!" ); if (eof) return'\0';
rc = ::osl_readLine( m_file, reinterpret_cast< sal_Sequence ** >( &m_line ) ); if (osl_File_E_None != rc)
error( u"read line failed!" );
++m_linepos; if (! m_line.getLength()) // empty line read
{
m_pos = 1; // read new line next time return'\n';
}
m_pos = 0;
} return (m_line.getConstArray()[ m_pos++ ]);
}
void FilePolicy::refresh()
{ // read out file (the .../file-name value had originally been set in // cppu::add_access_control_entries (cppuhelper/source/servicefactory.cxx) // depending on various UNO_AC* bootstrap variables that are no longer // supported, so this is effectively dead code):
OUString fileName;
m_xComponentContext->getValueByName( "/implementations/" + IMPL_NAME + "/file-name" ) >>= fileName; if ( fileName.isEmpty() )
{ throw RuntimeException(
u"name of policy file unknown!"_ustr,
getXWeak() );
}
PolicyReader reader( fileName, m_ac );
// fill these two
Sequence< Any > defaultPermissions;
t_permissions userPermissions;
OUString token( reader.getToken() ); while (!token.isEmpty())
{ if ( token != s_grant )
reader.error( u"expected >grant< token!" );
OUString userId;
token = reader.assureToken(); if ( token == s_user ) // next token is user-id
{
userId = reader.assureQuotedToken();
token = reader.assureToken();
} if ( token != s_openBrace )
reader.error( u"expected opening brace >{<!" );
token = reader.assureToken(); // permissions list while ( token != s_closingBrace )
{ if ( token != s_permission )
reader.error( u"expected >permission< or closing brace >}<!" );
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.