--- pgp/src/config.c 2018/04/24 16:38:44 1.1.1.2 +++ pgp/src/config.c 2018/04/24 16:39:27 1.1.1.3 @@ -13,6 +13,15 @@ #include "usuals.h" #include "fileio.h" #include "pgp.h" +#include "config.h" +#include "charset.h" + +static int lookup( char *key, int keyLength, char *keyWords[], int range ); +static int extractToken( char *buffer, int *endIndex, int *length ); +static int getaString( char *buffer, int *endIndex ); +static int getAssignment( char *buffer, int *endIndex, INPUT_TYPE settingType ); +static void processAssignment( int intrinsicIndex ); + /* The external config variables we can set here are referenced in pgp.h */ /* Return values */ @@ -30,17 +39,17 @@ enum { NO_ERROR, ILLEGAL_CHAR_ERROR, LIN #define LINEBUF_SIZE 100 /* Size of input buffer */ -int line; /* The line on which an error occurred */ -int errCount; /* Total error count */ -boolean hasError; /* Whether this line has an error in it */ +static int line; /* The line on which an error occurred */ +static int errCount; /* Total error count */ +static boolean hasError; /* Whether this line has an error in it */ /* The settings parsed out by getAssignment() */ -char str[ LINEBUF_SIZE ]; -int value; -boolean flag; -char *errtag; /* prefix for printing error messages */ -char optstr[100]; /* option being processed */ +static char str[ LINEBUF_SIZE ]; +static int value; +static boolean flag; +static char *errtag; /* prefix for printing error messages */ +static char optstr[100]; /* option being processed */ /* A .CFG file roughly follows the format used in the world-famous HPACK archiver and is as follows: @@ -66,10 +75,6 @@ char optstr[100]; /* option being proces - If strings have spaces or the '#' character inside them they must be surrounded by quote marks '"' */ -/* The types of input we can expect */ - -typedef enum { BOOL, NUMERIC, STRING } INPUT_TYPE; - /* Intrinsic variables */ #define NO_INTRINSICS (sizeof(intrinsics) / sizeof(intrinsics[0])) @@ -78,47 +83,58 @@ enum { ARMOR, COMPRESS, SHOWPASS, KEEPBINARY, LANGUAGE, MYNAME, TEXTMODE, TMP, TZFIX, VERBOSE, BAKRING, ARMORLINES, COMPLETES_NEEDED, MARGINALS_NEEDED, PAGER, - CERT_DEPTH, CHARSET, CLEAR + CERT_DEPTH, CHARSET, CLEAR, SELF_ENCRYPT, + INTERACTIVE, + /* options below this line can only be used as command line + * "long" options */ +#define CONFIG_INTRINSICS BATCHMODE + BATCHMODE, FORCE }; -char *intrinsics[] = +static char *intrinsics[] = { "ARMOR", "COMPRESS", "SHOWPASS", "KEEPBINARY", "LANGUAGE", "MYNAME", "TEXTMODE", "TMP", "TZFIX", "VERBOSE", "BAKRING", "ARMORLINES", "COMPLETES_NEEDED", "MARGINALS_NEEDED", "PAGER", - "CERT_DEPTH", "CHARSET", "CLEARSIG", + "CERT_DEPTH", "CHARSET", "CLEARSIG", "ENCRYPTTOSELF", + "INTERACTIVE", + /* command line only */ + "BATCHMODE", "FORCE", }; -INPUT_TYPE intrinsicType[] = +static INPUT_TYPE intrinsicType[] = { BOOL, BOOL, BOOL, BOOL, STRING, - STRING, BOOL, STRING, NUMERIC, BOOL, STRING, + STRING, BOOL, STRING, NUMERIC, NUMERIC, STRING, NUMERIC, NUMERIC, NUMERIC, STRING, - NUMERIC, STRING, BOOL + NUMERIC, STRING, BOOL, BOOL, + BOOL, + /* command line only */ + BOOL, BOOL, }; /* Possible settings for variables */ #define NO_SETTINGS 2 -char *settings[] = { "OFF", "ON" }; +static char *settings[] = { "OFF", "ON" }; /* Search a list of keywords for a match */ -int lookup( char *key, int keyLength, char *keyWords[], int range ) +static int lookup( char *key, int keyLength, char *keyWords[], int range ) { - int index, pos, matches = 0; + int indx, pos = 0, matches = 0; strncpy(optstr, key, keyLength); optstr[keyLength] = '\0'; /* Make the search case insensitive */ - for( index = 0; index < keyLength; index++ ) - key[ index ] = to_upper( key[ index ] ); + for( indx = 0; indx < keyLength; indx++ ) + key[ indx ] = to_upper( key[ indx ] ); - for( index = 0; index < range; index++ ) - if( !strncmp( key, keyWords[ index ], keyLength ) ) - { if (strlen(keyWords[index]) == keyLength) - return index; /* exact match */ - pos = index; + for( indx = 0; indx < range; indx++ ) + if( !strncmp( key, keyWords[ indx ], keyLength ) ) + { if (strlen(keyWords[indx]) == keyLength) + return indx; /* exact match */ + pos = indx; ++matches; } @@ -131,21 +147,21 @@ int lookup( char *key, int keyLength, ch } /* Extract a token from a buffer */ -int extractToken( char *buffer, int *endIndex, int *length ) +static int extractToken( char *buffer, int *endIndex, int *length ) { - int index = 0, tokenStart; + int indx = 0, tokenStart; char ch; /* Skip whitespace */ - for( ch = buffer[ index ]; ch && ( ch == ' ' || ch == '\t' ); ch = buffer[ index ] ) - index++; - tokenStart = index; + for( ch = buffer[ indx ]; ch && ( ch == ' ' || ch == '\t' ); ch = buffer[ indx ] ) + indx++; + tokenStart = indx; /* Find end of setting */ - while( index < LINEBUF_SIZE && ( ch = buffer[ index ] ) != '\0' && ch != ' ' && ch != '\t' ) - index++; - *endIndex += index; - *length = index - tokenStart; + while( indx < LINEBUF_SIZE && ( ch = buffer[ indx ] ) != '\0' && ch != ' ' && ch != '\t' ) + indx++; + *endIndex += indx; + *length = indx - tokenStart; /* Return start position of token in buffer */ return( tokenStart ); @@ -153,7 +169,7 @@ int extractToken( char *buffer, int *end /* Get a string constant */ -int getaString( char *buffer, int *endIndex ) +static int getaString( char *buffer, int *endIndex ) { boolean noQuote = FALSE; int stringIndex = 0, bufIndex = 1; @@ -218,7 +234,7 @@ int getaString( char *buffer, int *endIn } /* Get an assignment to an intrinsic */ -int getAssignment( char *buffer, int *endIndex, INPUT_TYPE settingType ) +static int getAssignment( char *buffer, int *endIndex, INPUT_TYPE settingType ) { int settingIndex = 0, length; @@ -271,7 +287,7 @@ int getAssignment( char *buffer, int *en /* Process an assignment */ -void processAssignment( int intrinsicIndex ) +static void processAssignment( int intrinsicIndex ) { if( !hasError ) switch( intrinsicIndex ) @@ -306,7 +322,7 @@ void processAssignment( int intrinsicInd case TEXTMODE: if( flag ) - lit_mode = MODE_TEXT; + literal_mode = MODE_TEXT; break; case TMP: @@ -321,7 +337,13 @@ void processAssignment( int intrinsicInd break; case VERBOSE: - verbose = flag; + switch (value) + { + case 0: quietmode = TRUE; verbose = FALSE; break; + case 1: quietmode = FALSE; verbose = FALSE; break; + case 2: quietmode = FALSE; verbose = TRUE; break; + default: quietmode = FALSE; verbose = FALSE; + } break; case ARMORLINES: @@ -361,7 +383,17 @@ void processAssignment( int intrinsicInd case CLEAR: clear_signatures = flag; break; - + + case SELF_ENCRYPT: + encrypt_to_self = flag; + break; + + case INTERACTIVE: + interactive_add = flag; + break; + + case BATCHMODE: batchmode = flag; break; + case FORCE: force_flag = flag; break; } } @@ -371,7 +403,7 @@ void processAssignment( int intrinsicInd int processConfigLine( char *option ) { - int index, intrinsicIndex; + int indx, intrinsicIndex; char ch; /* Give it a pseudo-linenumber of 0 */ @@ -379,20 +411,20 @@ int processConfigLine( char *option ) errtag = "pgp"; errCount = 0; - for( index = 0; - index < LINEBUF_SIZE && ( ch = option[ index ] ) != '\0' && + for( indx = 0; + indx < LINEBUF_SIZE && ( ch = option[ indx ] ) != '\0' && ch != ' ' && ch != '\t' && ch != '='; - index++ ); - if( ( intrinsicIndex = lookup( ( char * ) option, index, intrinsics, NO_INTRINSICS ) ) == ERROR ) + indx++ ); + if( ( intrinsicIndex = lookup( ( char * ) option, indx, intrinsics, NO_INTRINSICS ) ) == ERROR ) return -1; - if (option[index] == '\0' && intrinsicType[intrinsicIndex] == BOOL) + if (option[indx] == '\0' && intrinsicType[intrinsicIndex] == BOOL) { /* boolean option, no '=' means TRUE */ flag = TRUE; processAssignment(intrinsicIndex); } else /* Get the value to set to, either as a string, a numeric value, or a boolean flag */ - if (getAssignment( ( char * ) option + index, &index, intrinsicType[ intrinsicIndex ] ) != ERROR) + if (getAssignment( ( char * ) option + indx, &indx, intrinsicType[ intrinsicIndex ] ) != ERROR) processAssignment( intrinsicIndex ); return(errCount ? -1 : 0); } @@ -403,7 +435,7 @@ int processConfigFile( char *configFileN FILE *configFilePtr; int ch = 0, theCh; int errType, errPos = 0, lineBufCount, intrinsicIndex; - int index; + int indx; char inBuffer[ LINEBUF_SIZE ]; line = 1; @@ -420,7 +452,8 @@ int processConfigFile( char *configFileN while( ch != EOF ) { /* Skip whitespace */ - while( ( ( ch = getc( configFilePtr ) ) == ' ' || ch == '\t' ) && ch != EOF ); + while( ( ( ch = getc( configFilePtr ) ) == ' ' || ch == '\t' ) && ch != EOF ) + ; /* Get a line into the inBuffer */ hasError = FALSE; @@ -479,11 +512,12 @@ int processConfigFile( char *configFileN break; default: - for( index = 0; - index < LINEBUF_SIZE && ( ch = inBuffer[ index ] ) != '\0' + for( indx = 0; + indx < LINEBUF_SIZE && ( ch = inBuffer[ indx ] ) != '\0' && ch != ' ' && ch != '\t' && ch != '='; - index++ ); - if( ( intrinsicIndex = lookup( inBuffer, index, intrinsics, NO_INTRINSICS ) ) == ERROR ) + indx++ ) + ; + if( ( intrinsicIndex = lookup( inBuffer, indx, intrinsics, CONFIG_INTRINSICS ) ) == ERROR ) { errCount++; } @@ -491,7 +525,7 @@ int processConfigFile( char *configFileN { /* Get the value to set to, either as a string, a numeric value, or a boolean flag */ - getAssignment( inBuffer + index, &index, intrinsicType[ intrinsicIndex ] ); + getAssignment( inBuffer + indx, &indx, intrinsicType[ intrinsicIndex ] ); processAssignment( intrinsicIndex ); } }