openldap/contrib/whois++/config.c
Hallvard Furuseth 7e6ad5100c Protoized, moved extern definitions to .h files, fixed related bugs.
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.
1998-11-15 22:40:11 +00:00

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 );
}
}