mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
7e6ad5100c
Most function and variable definitions are now preceded by its extern definition, for error checking. Retyped a number of functions, usually to return void. Fixed a number of printf format errors. API changes (in ldap/include): Added avl_dup_ok, avl_prefixapply, removed ber_fatten (probably typo for ber_flatten), retyped ldap_sort_strcasecmp, grew lutil.h. A number of `extern' declarations are left (some added by protoize), to be cleaned away later. Mostly strdup(), strcasecmp(), mktemp(), optind, optarg, errno.
225 lines
5.1 KiB
C
225 lines
5.1 KiB
C
#if !defined(lint)
|
|
static char copyright[] = "Copyright 1992 The University of Adelaide";
|
|
#endif
|
|
|
|
/*
|
|
* C O N F I G
|
|
*
|
|
* Author: Mark R. Prior
|
|
* Communications and Systems Branch
|
|
* Information Technology Division
|
|
* The University of Adelaide
|
|
* E-mail: mrp@itd.adelaide.edu.au
|
|
* Date: October 1992
|
|
* Version: 1.7
|
|
* Description:
|
|
* Process the configuration file.
|
|
*
|
|
* Redistribution and use in source and binary forms are permitted
|
|
* provided that the above copyright notice and this paragraph are
|
|
* duplicated in all such forms and that any documentation,
|
|
* advertising materials, and other materials related to such
|
|
* distribution and use acknowledge that the software was developed
|
|
* by the University of Adelaide. The name of the University may not
|
|
* be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
*/
|
|
|
|
#include "whois++.h"
|
|
#include <stdlib.h>
|
|
|
|
static struct {
|
|
char *str;
|
|
int cmd;
|
|
} commands[] = {
|
|
#define CMD_BASE 1
|
|
"base", CMD_BASE,
|
|
#define CMD_LDAP 2
|
|
"ldaphost", CMD_LDAP,
|
|
#define CMD_HELPDIR 3
|
|
"helpdir", CMD_HELPDIR,
|
|
#define CMD_USER 4
|
|
"user", CMD_USER,
|
|
#define CMD_PASSWORD 5
|
|
"password", CMD_PASSWORD,
|
|
#define CMD_CONFIGDIR 6
|
|
"configdir", CMD_CONFIGDIR,
|
|
#define CMD_CONTACT 7
|
|
"contact", CMD_CONTACT,
|
|
#define CMD_HOSTNAME 8
|
|
"hostname", CMD_HOSTNAME,
|
|
#define CMD_LANGUAGE 9
|
|
"language", CMD_LANGUAGE,
|
|
#define CMD_BANNER 10
|
|
"banner", CMD_BANNER,
|
|
#define CMD_TEMPLATE 11
|
|
"template", CMD_TEMPLATE,
|
|
NULL, NULL
|
|
};
|
|
|
|
static void
|
|
nextLine( FILE *fp )
|
|
{
|
|
/*
|
|
* We probably should check that the user hasn't put anything else
|
|
* on the line but I can't be bothered!
|
|
*/
|
|
register int c;
|
|
|
|
while ((c = getc(fp)) != EOF && c != '\n')
|
|
;
|
|
}
|
|
|
|
/*
|
|
* Get next word, skipping blanks & comments.
|
|
*/
|
|
static int
|
|
getWord( char *buffer, int size, FILE *fp )
|
|
{
|
|
char *cp;
|
|
int c, string;
|
|
|
|
string = 0;
|
|
cp = buffer;
|
|
while ((c = getc(fp)) != EOF) {
|
|
if (c == '#') {
|
|
while ((c = getc(fp)) != EOF && c != '\n')
|
|
;
|
|
continue;
|
|
}
|
|
if (c == '\n') {
|
|
if (cp != buffer)
|
|
ungetc(c, fp);
|
|
break;
|
|
} else if (c == '\\') {
|
|
c = getc(fp);
|
|
if (c == EOF)
|
|
c = '\n';
|
|
} else if (c == '"') {
|
|
string = !string;
|
|
continue;
|
|
}
|
|
if (!string && isspace(c)) {
|
|
while (isspace(c = getc(fp)) && c != '\n')
|
|
;
|
|
ungetc(c, fp);
|
|
if (cp != buffer) /* Trailing whitespace */
|
|
break;
|
|
continue; /* Leading whitespace */
|
|
}
|
|
if (cp >= buffer+size-1)
|
|
break;
|
|
*cp++ = c;
|
|
}
|
|
*cp = '\0';
|
|
return (cp != buffer);
|
|
}
|
|
|
|
void
|
|
readConfiguration( FILE *config )
|
|
{
|
|
char buffer[BUFSIZ];
|
|
char *s;
|
|
int i;
|
|
|
|
/*
|
|
* A procedure to read in the configuration parameters.
|
|
* At the moment this is just a "quick hack" and it should be
|
|
* replaced in the next version by a proper scanner.
|
|
*/
|
|
|
|
while ( getWord( buffer, BUFSIZ, config ) != NULL ) {
|
|
for ( i = 0; commands[i].str != NULL; i++ )
|
|
if ( EQ( buffer, commands[i].str ) )
|
|
break;
|
|
if ( commands[i].str == NULL ) {
|
|
printFormatted( lineLength, TRUE, stdout,
|
|
"Unrecognised command <%s>", buffer );
|
|
exit( 1 );
|
|
}
|
|
if ( getWord( buffer, BUFSIZ, config ) == NULL ) {
|
|
printFormatted( lineLength, TRUE, stdout,
|
|
"value missing in configuration file" );
|
|
exit( 1 );
|
|
}
|
|
switch ( commands[i].cmd ) {
|
|
case CMD_BASE:
|
|
base = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_LDAP:
|
|
ldaphost = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_HELPDIR:
|
|
helpDir = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_USER:
|
|
user = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_PASSWORD:
|
|
password = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_CONFIGDIR:
|
|
configDir = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_CONTACT:
|
|
contact = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_HOSTNAME:
|
|
hostname = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_LANGUAGE:
|
|
defaultLanguage = lowerCase( strdup( buffer ) );
|
|
break;
|
|
|
|
case CMD_BANNER:
|
|
banner = strdup( buffer );
|
|
break;
|
|
|
|
case CMD_TEMPLATE:
|
|
if ( templateTranslationTable == NULL
|
|
&& ( templateTranslationTable = (table *)malloc(sizeof(table)*tableSize) ) == NULL ) {
|
|
printFormatted( lineLength, TRUE, stdout,
|
|
"Malloc failed" );
|
|
exit( 1 );
|
|
} else if ( numberOfTemplates+1 == tableSize ) {
|
|
tableSize += TABLE_INCREMENT;
|
|
if ( ( templateTranslationTable = (table *)realloc(templateTranslationTable, sizeof(table)*tableSize) ) == NULL ) {
|
|
printFormatted( lineLength, TRUE, stdout,
|
|
"Realloc failed" );
|
|
exit( 1 );
|
|
}
|
|
}
|
|
templateTranslationTable[numberOfTemplates].key =
|
|
lowerCase( strdup( buffer ) );
|
|
if ( getWord( buffer, BUFSIZ, config ) == NULL ) {
|
|
printFormatted( lineLength, TRUE, stdout,
|
|
"objectClass missing in config file" );
|
|
exit( 1 );
|
|
}
|
|
templateTranslationTable[numberOfTemplates].value =
|
|
lowerCase( strdup( buffer ) );
|
|
numberOfTemplates++;
|
|
break;
|
|
|
|
default:
|
|
printFormatted( lineLength, TRUE, stdout,
|
|
"Attribute <%s> not recognised.",
|
|
buffer );
|
|
break;
|
|
|
|
}
|
|
nextLine( config );
|
|
}
|
|
}
|