1 /* 2 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 #ifndef _PACKER_H 6 #define _PACKER_H 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 /* 13 * This program is copyright Alec Muffett 1993. The author disclaims all 14 * responsibility or liability with respect to it's usage or its effect 15 * upon hardware or computer systems, and maintains copyright as set out 16 * in the "LICENCE" document which accompanies distributions of Crack v4.0 17 * and upwards. 18 */ 19 20 #include <stdio.h> 21 #include <ctype.h> 22 #include <string.h> 23 #include <unistd.h> 24 #include <errno.h> 25 #include <stdlib.h> 26 #include <limits.h> 27 #include <sys/types.h> 28 #include <sys/wait.h> 29 #include <sys/stat.h> 30 #include <fcntl.h> 31 #include <synch.h> 32 #include <syslog.h> 33 34 #define PWADMIN "/etc/default/passwd" 35 #define TRUNCSTRINGSIZE (PATH_MAX/4) 36 #define STRINGSIZE PATH_MAX 37 38 #ifndef NUMWORDS 39 #define NUMWORDS 16 40 #endif 41 #define MAXWORDLEN 32 42 #define MAXBLOCKLEN (MAXWORDLEN * NUMWORDS) 43 44 struct pi_header 45 { 46 uint32_t pih_magic; 47 uint32_t pih_numwords; 48 uint16_t pih_blocklen; 49 uint16_t pih_pad; 50 }; 51 52 typedef struct 53 { 54 FILE *ifp; 55 FILE *dfp; 56 FILE *wfp; 57 58 uint32_t flags; 59 #define PFOR_WRITE 0x0001 60 #define PFOR_FLUSH 0x0002 61 #define PFOR_USEHWMS 0x0004 62 63 uint32_t hwms[256]; 64 65 struct pi_header header; 66 67 uint32_t count; 68 char data[NUMWORDS][MAXWORDLEN]; 69 } PWDICT; 70 71 #define PW_WORDS(x) ((x)->header.pih_numwords) 72 #define PIH_MAGIC 0x70775632 73 74 void PWRemove(char *); 75 PWDICT *PWOpen(char *, char *); 76 char *Mangle(char *, char *); 77 78 #define CRACK_TOLOWER(a) (isupper(a)?tolower(a):(a)) 79 #define CRACK_TOUPPER(a) (islower(a)?toupper(a):(a)) 80 #define STRCMP(a, b) strcmp((a), (b)) 81 82 char *Trim(register char *); 83 uint32_t FindPW(PWDICT *, char *); 84 int PWClose(PWDICT *); 85 int PutPW(PWDICT *, char *); 86 char Chop(register char *); 87 char Chomp(register char *); 88 char *GetPW(PWDICT *, uint32_t); 89 90 #define DATABASE_OPEN_FAIL -1 91 #define DICTIONARY_WORD 2 92 #define REVERSE_DICTIONARY_WORD 3 93 94 95 /* Dictionary database dir and prefix */ 96 97 #define CRACK_DIR "/var/passwd" 98 #define CRACK_DICTPATH "/var/passwd/pw_dict" 99 #define DICT_DATABASE_HWM "pw_dict.hwm" 100 #define DICT_DATABASE_PWD "pw_dict.pwd" 101 #define DICT_DATABASE_PWI "pw_dict.pwi" 102 103 int packer(char *, char *); 104 char *Reverse(char *); 105 char *Lowercase(char *); 106 int DictCheck(char *, char *); 107 int make_dict_database(char *, char *); 108 int build_dict_database(char *, char *); 109 int lock_db(char *); 110 void unlock_db(); 111 112 /* Return values for dictionary database checks */ 113 114 #define NO_DICTDATABASE 1 115 #define UPDATE_DICTDATABASE 2 116 #define DICTFILE_ERR -1 117 #define DICTPATH_ERR -2 118 #define DICTDATABASE_BUILD_ERR -3 119 120 #ifdef __cplusplus 121 } 122 #endif 123 124 #endif /* _PACKER_H */ 125