authreadkeys.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* Copyright (c) 1996 by Sun Microsystems, Inc.
* All Rights Reserved.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* authreadkeys.c - routines to support the reading of the key file
*/
#include <stdio.h>
#include <ctype.h>
#include "ntp_stdlib.h"
#include "ntp_syslog.h"
#ifdef DES
/*
* Types of ascii representations for keys. "Standard" means a 64 bit
* hex number in NBS format, i.e. with the low order bit of each byte
* a parity bit. "NTP" means a 64 bit key in NTP format, with the
* high order bit of each byte a parity bit. "Ascii" means a 1-to-8
* character string whose ascii representation is used as the key.
*/
#define KEY_TYPE_STD 1
#define KEY_TYPE_NTP 2
#define KEY_TYPE_ASCII 3
#endif
#ifdef MD5
/*
* Arbitrary long string of ASCII characters.
*/
#define KEY_TYPE_MD5 4
#endif
/* Forwards */
static char *nexttok P((char **));
/*
* nexttok - basic internal tokenizing routine
*/
static char *
char **str;
{
register char *cp;
char *starttok;
/*
* Space past white space
*/
cp++;
/*
* Save this and space to end of token
*/
cp++;
/*
* If token length is zero return an error, else set end of
* token to zero and return start.
*/
return 0;
*cp++ = '\0';
else
*cp = '\0';
return starttok;
}
/*
* authreadkeys - (re)read keys from a file.
*/
int
const char *file;
{
char *line;
char *token;
int keytype;
#if !defined(VMS) /* wjm - what are these lines doing here? */
#endif /* !VMS */
/*
* Open file. Complain and return if it can't be opened.
*/
return 0;
}
/*
* Remove all existing keys
*/
auth_delkeys();
/*
* Now read lines from the file, looking for key entries
*/
if (token == 0)
continue;
/*
* First is key number. See if it is okay.
*/
if (keyno == 0) {
"cannot change keyid 0, key entry `%s' ignored",
token);
continue;
}
/*
* Next is keytype. See if that is all right.
*/
if (token == 0) {
"no key type for key number %ld, entry ignored",
keyno);
continue;
}
switch (*token) {
#ifdef DES
case 'S':
case 's':
keytype = KEY_TYPE_STD; break;
case 'N':
case 'n':
keytype = KEY_TYPE_NTP; break;
case 'A':
case 'a':
keytype = KEY_TYPE_ASCII; break;
#endif
#ifdef MD5
case 'M':
case 'm':
keytype = KEY_TYPE_MD5; break;
#endif
default:
"invalid key type for key number %ld, entry ignored",
keyno);
continue;
}
/*
* Finally, get key and insert it
*/
if (token == 0) {
"no key for number %ld entry, entry ignored",
keyno);
} else {
switch(keytype) {
#ifdef DES
case KEY_TYPE_STD:
case KEY_TYPE_NTP:
case KEY_TYPE_ASCII:
keyno);
break;
#endif
#ifdef MD5
case KEY_TYPE_MD5:
keyno);
break;
#endif
}
}
}
return 1;
}