|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 3670 (0xe56) Types: TextFile Names: »checkpasswd.c«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦123909933⟧ »./npasswd/npasswd.tar.Z« └─⟦22a202e7d⟧ └─⟦this⟧ »npass-new/npasswd_jpl/old.checkpasswd/checkpasswd.c«
/* -------------------------------------------------------------------- */ /* */ /* Author: Clyde Hoover */ /* Computation Center */ /* The University of Texas at Austin */ /* Austin, Texas 78712 */ /* clyde@emx.utexas.edu */ /* uunet!cs.utexas.edu!ut-emx!clyde */ /* */ /*This code may be distributed freely, provided this notice is retained. */ /* */ /* -------------------------------------------------------------------- */ /* * checkpasswd.c - Password check driver and data initialization */ #ifndef lint static char sccsid[] = "@(#)checkpasswd.c 1.1 5/18/89 (cc.utexas.edu)"; #endif #include "checkpasswd.h" /* * Table of password check parameters * May be modified via the configuration file */ int single_case = 0, /* Single-case pwds ok */ print_only = 0, /* Printable ASCII chars only */ run_length = 3, /* How long chars runs can be */ min_length = 5, /* Minimum length */ max_length = 8; /* Maximum effective length */ /* * Control characters best avoided - commonly-used terminal controls. * Add characters here or replace entire contents via the * configuration file. */ #define ctrl(d) ('d' & 037) char illegalcc[sizeof_illegalcc] = { ctrl(c), /* Interrupt character */ ctrl(d), /* UNIX end-of-file */ ctrl(h), /* Backspace */ /* ctrl(i), */ ctrl(j), /* Newline */ ctrl(m), /* Carriage return */ ctrl(o), /* Flush output */ ctrl(r), /* Retype pending input */ ctrl(s), /* Suspend output */ ctrl(q), /* Resume output */ ctrl(y), /* Suspend program deferred */ ctrl(z), /* Suspend program immediate */ ctrl(\\), /* Quit signal */ ctrl([), /* escape - may do strange things to ttys if echoed */ ctrl(]), /* UNIX telnet escape */ '\0177', /* rubout */ 0 }; /* * The 'pwck_*' routines all use the PWCK_* return * codes, which are then propigated up to the caller of checkpassword(). * * All pwck_* routines in the table below are called thusly: * pwck_*(password, userid, mesg) * password = plaintext password string to test. * userid = the user id which wants to use <password>. * mesg = buffer to place long explanation into * * If more checks are desired, add the functions to the tables below. */ extern int pwck_lexical(), pwck_local(), pwck_passwd(), pwck_dictionary(); typedef int (*function)(); function checkprocs[] = { pwck_lexical, pwck_local, pwck_passwd, pwck_dictionary, 0 }; /* * checkpassword - Password candidate sanity checker. * * Arguments; * password = plain text password string to check. * userid = the uid whom the password is for, -1 to disable. * * Returns: * PWCK_* values (see checkpasswd.h) */ checkpassword(password, userid, mesg) char *password; /* Plaintext of password to check */ int userid; /* The user this is for */ char *mesg; /* Where to stash explanation message */ { int rcode; /* General purpose scratch */ function *checkfunc; /* Check function pointer */ if (password == 0 || *password == 0) return(PWCK_NULL); /* Null password */ mesg[0] = 0; for (checkfunc = checkprocs; *checkfunc; checkfunc++) { if ((rcode = (*checkfunc)(password, userid, mesg)) != PWCK_OK) return(rcode); } return(PWCK_OK); } /* End checkpasswd.c */