DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦558981921⟧ TextFile

    Length: 3598 (0xe0e)
    Types: TextFile
    Names: »checkpasswd.c«

Derivation

└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
    └─⟦123909933⟧ »./npasswd/npasswd.tar.Z« 
        └─⟦22a202e7d⟧ 
            └─⟦this⟧ »npass-new/cracklib/checkpasswd.c« 
            └─⟦this⟧ »npass-new/npasswd_jpl/cracklib/checkpasswd.c« 

TextFile

/*--------------------------------------------------------------------------
 Glue code to match crack's checker with npasswd
 Dan Kegel (dank@blacks.jpl.nasa.gov)
--------------------------------------------------------------------------*/
#include <string.h>
#include <malloc.h>
#include <varargs.h>
#include <stdio.h>

#ifndef	CONFIG_FILE /* Set configuration file name */
# ifdef	DEBUG
#	define	CONFIG_FILE	"checkpasswd.cf" 
# else
#	define	CONFIG_FILE	"/usr/adm/checkpasswd.cf"
# endif	/* DEBUG */
#endif	/* CONFIG_FILE */

static char configfile[256] = CONFIG_FILE;

/*--------------------------------------------------------------------------
 Password candidate sanity checker.
 Returns 1 if <pwd> is ok to use as a password
 0 if not & an appropriate error message is issued
--------------------------------------------------------------------------*/
checkpasswd(userid, password)
    int	userid;
    char *password;
{
    char *s;
    char *GoodPass();

    readconfig(configfile);

    if (password == 0 || *password == 0) {
	printf("Password is empty.\n");
	return 0;
    }

    s = GoodPass(password);
    if (s != NULL) {
	printf("%s\n", s);
	return 0;
    }
    return 1;
}

/*--------------------------------------------------------------------------
 set parameters for checkpasswd
 e.g setcheckpasswd("-c", <configfile>, 0);
--------------------------------------------------------------------------*/
void
setcheckpasswd(va_alist)
va_dcl		/* List of options */
{
    va_list	optlist;
    char	*optx;

    va_start(optlist);
    while (optx = va_arg(optlist, char *)) {
	if (*optx == '-') {
	    char c = *++optx;

	    switch (c) {
	    case 'c':	/* -c config-file */
		if (*++optx)
		    strcpy(configfile, optx);
		else {
		    optx = va_arg(optlist, char *);
		    if (optx)
			strcpy(configfile, optx);
		}
		break;
	    default:
		fprintf(stderr, "setcheckpasswd: Unknown option %c\n", c);
	    }
	}
    }
    va_end(optlist);
}

/*--------------------------------------------------------------------------
 Add a dictionary to the list of places to check.
--------------------------------------------------------------------------*/
static void
add_dict(fname)
    char *fname;
{
    extern char *dikshunarys[];
    char **d;
    char *fnamecopy;

    fnamecopy = malloc(strlen(fname)+1);
    strcpy(fnamecopy, fname);

    /* Find end of list */
    for (d=dikshunarys; *d; d++) ;
    /* Append this dictionary */
    *d++ = fnamecopy;
    *d = NULL;
}


#define BLANKS " \t\n"

/*--------------------------------------------------------------------------
 Read the configuration file 
 Only allowed command is 'dictionary dictname'.
 Returns 1 if success, 0 if not found and -1 if error
--------------------------------------------------------------------------*/
int
readconfig(filename)
char	*filename;
{
    char	buf[BUFSIZ];	/* Read buffer */
    FILE	*fp;		/* File pointer */
    int	lineno = 0;	/* Current line number in config file */
    static int done = 0;

    if (done) return 1;
    done = 1;

    if ((fp = fopen(filename, "r")) == NULL) {
#ifdef	DEBUG
	printf("No config file\n");
#endif
	/* Use default dictionary. */
	add_dict("/usr/dict/words");
	return(0);
    }

    while (fgets(buf, sizeof(buf), fp) != NULL) {
	char *cmd, *arg;

	lineno++;

	cmd = strtok(buf, BLANKS);
	if (cmd == NULL || *cmd == '#') continue;
	arg = strtok(NULL, BLANKS);

	if (strcmp(cmd, "dictionary") == 0)
	    add_dict(arg);
	else
	    fprintf(stderr, "\"%s\", line %d: Unrecognized keyword '%s'.\n",
		filename, lineno, cmd);
    }
    (void) fclose(fp);
    return(1);
}