Home | History | Annotate | Download | only in authtok_check
      1 /*
      2  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
      3  * Use is subject to license terms.
      4  */
      5 
      6 /*
      7  * This program is copyright Alec Muffett 1993. The author disclaims all
      8  * responsibility or liability with respect to it's usage or its effect
      9  * upon hardware or computer systems, and maintains copyright as set out
     10  * in the "LICENCE" document which accompanies distributions of Crack v4.0
     11  * and upwards.
     12  */
     13 
     14 #include "packer.h"
     15 
     16 
     17 static char *r_destructors[] = {
     18 	":",			/* noop - must do this to test raw word. */
     19 	"[",			/* trimming leading/trailing junk */
     20 	"]",
     21 	"[[",
     22 	"]]",
     23 	"[[[",
     24 	"]]]",
     25 
     26 	"/?p@?p",		/* purging out punctuation/symbols/junk */
     27 	"/?s@?s",
     28 	"/?X@?X",
     29 	/* attempt reverse engineering of password strings */
     30 	"/$s$s",
     31 	"/$s$s/0s0o",
     32 	"/$s$s/0s0o/2s2a",
     33 	"/$s$s/0s0o/2s2a/3s3e",
     34 	"/$s$s/0s0o/2s2a/3s3e/5s5s",
     35 	"/$s$s/0s0o/2s2a/3s3e/5s5s/1s1i",
     36 	"/$s$s/0s0o/2s2a/3s3e/5s5s/1s1l",
     37 	"/$s$s/0s0o/2s2a/3s3e/5s5s/1s1i/4s4a",
     38 	"/$s$s/0s0o/2s2a/3s3e/5s5s/1s1i/4s4h",
     39 	"/$s$s/0s0o/2s2a/3s3e/5s5s/1s1l/4s4a",
     40 	"/$s$s/0s0o/2s2a/3s3e/5s5s/1s1l/4s4h",
     41 	"/$s$s/0s0o/2s2a/3s3e/5s5s/4s4a",
     42 	"/$s$s/0s0o/2s2a/3s3e/5s5s/4s4h",
     43 	"/$s$s/0s0o/2s2a/3s3e/5s5s/4s4a",
     44 	"/$s$s/0s0o/2s2a/3s3e/5s5s/4s4h",
     45 	"/$s$s/0s0o/2s2a/3s3e/1s1i",
     46 	"/$s$s/0s0o/2s2a/3s3e/1s1l",
     47 	"/$s$s/0s0o/2s2a/3s3e/1s1i/4s4a",
     48 	"/$s$s/0s0o/2s2a/3s3e/1s1i/4s4h",
     49 	"/$s$s/0s0o/2s2a/3s3e/1s1l/4s4a",
     50 	"/$s$s/0s0o/2s2a/3s3e/1s1l/4s4h",
     51 	"/$s$s/0s0o/2s2a/3s3e/4s4a",
     52 	"/$s$s/0s0o/2s2a/3s3e/4s4h",
     53 	"/$s$s/0s0o/2s2a/3s3e/4s4a",
     54 	"/$s$s/0s0o/2s2a/3s3e/4s4h",
     55 	"/$s$s/0s0o/2s2a/5s5s",
     56 	"/$s$s/0s0o/2s2a/5s5s/1s1i",
     57 	"/$s$s/0s0o/2s2a/5s5s/1s1l",
     58 	"/$s$s/0s0o/2s2a/5s5s/1s1i/4s4a",
     59 	"/$s$s/0s0o/2s2a/5s5s/1s1i/4s4h",
     60 	"/$s$s/0s0o/2s2a/5s5s/1s1l/4s4a",
     61 	"/$s$s/0s0o/2s2a/5s5s/1s1l/4s4h",
     62 	"/$s$s/0s0o/2s2a/5s5s/4s4a",
     63 	"/$s$s/0s0o/2s2a/5s5s/4s4h",
     64 	"/$s$s/0s0o/2s2a/5s5s/4s4a",
     65 	"/$s$s/0s0o/2s2a/5s5s/4s4h",
     66 	"/$s$s/0s0o/2s2a/1s1i",
     67 	"/$s$s/0s0o/2s2a/1s1l",
     68 	"/$s$s/0s0o/2s2a/1s1i/4s4a",
     69 	"/$s$s/0s0o/2s2a/1s1i/4s4h",
     70 	"/$s$s/0s0o/2s2a/1s1l/4s4a",
     71 	"/$s$s/0s0o/2s2a/1s1l/4s4h",
     72 	"/$s$s/0s0o/2s2a/4s4a",
     73 	"/$s$s/0s0o/2s2a/4s4h",
     74 	"/$s$s/0s0o/2s2a/4s4a",
     75 	"/$s$s/0s0o/2s2a/4s4h",
     76 	"/$s$s/0s0o/3s3e",
     77 	"/$s$s/0s0o/3s3e/5s5s",
     78 	"/$s$s/0s0o/3s3e/5s5s/1s1i",
     79 	"/$s$s/0s0o/3s3e/5s5s/1s1l",
     80 	"/$s$s/0s0o/3s3e/5s5s/1s1i/4s4a",
     81 	"/$s$s/0s0o/3s3e/5s5s/1s1i/4s4h",
     82 	"/$s$s/0s0o/3s3e/5s5s/1s1l/4s4a",
     83 	"/$s$s/0s0o/3s3e/5s5s/1s1l/4s4h",
     84 	"/$s$s/0s0o/3s3e/5s5s/4s4a",
     85 	"/$s$s/0s0o/3s3e/5s5s/4s4h",
     86 	"/$s$s/0s0o/3s3e/5s5s/4s4a",
     87 	"/$s$s/0s0o/3s3e/5s5s/4s4h",
     88 	"/$s$s/0s0o/3s3e/1s1i",
     89 	"/$s$s/0s0o/3s3e/1s1l",
     90 	"/$s$s/0s0o/3s3e/1s1i/4s4a",
     91 	"/$s$s/0s0o/3s3e/1s1i/4s4h",
     92 	"/$s$s/0s0o/3s3e/1s1l/4s4a",
     93 	"/$s$s/0s0o/3s3e/1s1l/4s4h",
     94 	"/$s$s/0s0o/3s3e/4s4a",
     95 	"/$s$s/0s0o/3s3e/4s4h",
     96 	"/$s$s/0s0o/3s3e/4s4a",
     97 	"/$s$s/0s0o/3s3e/4s4h",
     98 	"/$s$s/0s0o/5s5s",
     99 	"/$s$s/0s0o/5s5s/1s1i",
    100 	"/$s$s/0s0o/5s5s/1s1l",
    101 	"/$s$s/0s0o/5s5s/1s1i/4s4a",
    102 	"/$s$s/0s0o/5s5s/1s1i/4s4h",
    103 	"/$s$s/0s0o/5s5s/1s1l/4s4a",
    104 	"/$s$s/0s0o/5s5s/1s1l/4s4h",
    105 	"/$s$s/0s0o/5s5s/4s4a",
    106 	"/$s$s/0s0o/5s5s/4s4h",
    107 	"/$s$s/0s0o/5s5s/4s4a",
    108 	"/$s$s/0s0o/5s5s/4s4h",
    109 	"/$s$s/0s0o/1s1i",
    110 	"/$s$s/0s0o/1s1l",
    111 	"/$s$s/0s0o/1s1i/4s4a",
    112 	"/$s$s/0s0o/1s1i/4s4h",
    113 	"/$s$s/0s0o/1s1l/4s4a",
    114 	"/$s$s/0s0o/1s1l/4s4h",
    115 	"/$s$s/0s0o/4s4a",
    116 	"/$s$s/0s0o/4s4h",
    117 	"/$s$s/0s0o/4s4a",
    118 	"/$s$s/0s0o/4s4h",
    119 	"/$s$s/2s2a",
    120 	"/$s$s/2s2a/3s3e",
    121 	"/$s$s/2s2a/3s3e/5s5s",
    122 	"/$s$s/2s2a/3s3e/5s5s/1s1i",
    123 	"/$s$s/2s2a/3s3e/5s5s/1s1l",
    124 	"/$s$s/2s2a/3s3e/5s5s/1s1i/4s4a",
    125 	"/$s$s/2s2a/3s3e/5s5s/1s1i/4s4h",
    126 	"/$s$s/2s2a/3s3e/5s5s/1s1l/4s4a",
    127 	"/$s$s/2s2a/3s3e/5s5s/1s1l/4s4h",
    128 	"/$s$s/2s2a/3s3e/5s5s/4s4a",
    129 	"/$s$s/2s2a/3s3e/5s5s/4s4h",
    130 	"/$s$s/2s2a/3s3e/5s5s/4s4a",
    131 	"/$s$s/2s2a/3s3e/5s5s/4s4h",
    132 	"/$s$s/2s2a/3s3e/1s1i",
    133 	"/$s$s/2s2a/3s3e/1s1l",
    134 	"/$s$s/2s2a/3s3e/1s1i/4s4a",
    135 	"/$s$s/2s2a/3s3e/1s1i/4s4h",
    136 	"/$s$s/2s2a/3s3e/1s1l/4s4a",
    137 	"/$s$s/2s2a/3s3e/1s1l/4s4h",
    138 	"/$s$s/2s2a/3s3e/4s4a",
    139 	"/$s$s/2s2a/3s3e/4s4h",
    140 	"/$s$s/2s2a/3s3e/4s4a",
    141 	"/$s$s/2s2a/3s3e/4s4h",
    142 	"/$s$s/2s2a/5s5s",
    143 	"/$s$s/2s2a/5s5s/1s1i",
    144 	"/$s$s/2s2a/5s5s/1s1l",
    145 	"/$s$s/2s2a/5s5s/1s1i/4s4a",
    146 	"/$s$s/2s2a/5s5s/1s1i/4s4h",
    147 	"/$s$s/2s2a/5s5s/1s1l/4s4a",
    148 	"/$s$s/2s2a/5s5s/1s1l/4s4h",
    149 	"/$s$s/2s2a/5s5s/4s4a",
    150 	"/$s$s/2s2a/5s5s/4s4h",
    151 	"/$s$s/2s2a/5s5s/4s4a",
    152 	"/$s$s/2s2a/5s5s/4s4h",
    153 	"/$s$s/2s2a/1s1i",
    154 	"/$s$s/2s2a/1s1l",
    155 	"/$s$s/2s2a/1s1i/4s4a",
    156 	"/$s$s/2s2a/1s1i/4s4h",
    157 	"/$s$s/2s2a/1s1l/4s4a",
    158 	"/$s$s/2s2a/1s1l/4s4h",
    159 	"/$s$s/2s2a/4s4a",
    160 	"/$s$s/2s2a/4s4h",
    161 	"/$s$s/2s2a/4s4a",
    162 	"/$s$s/2s2a/4s4h",
    163 	"/$s$s/3s3e",
    164 	"/$s$s/3s3e/5s5s",
    165 	"/$s$s/3s3e/5s5s/1s1i",
    166 	"/$s$s/3s3e/5s5s/1s1l",
    167 	"/$s$s/3s3e/5s5s/1s1i/4s4a",
    168 	"/$s$s/3s3e/5s5s/1s1i/4s4h",
    169 	"/$s$s/3s3e/5s5s/1s1l/4s4a",
    170 	"/$s$s/3s3e/5s5s/1s1l/4s4h",
    171 	"/$s$s/3s3e/5s5s/4s4a",
    172 	"/$s$s/3s3e/5s5s/4s4h",
    173 	"/$s$s/3s3e/5s5s/4s4a",
    174 	"/$s$s/3s3e/5s5s/4s4h",
    175 	"/$s$s/3s3e/1s1i",
    176 	"/$s$s/3s3e/1s1l",
    177 	"/$s$s/3s3e/1s1i/4s4a",
    178 	"/$s$s/3s3e/1s1i/4s4h",
    179 	"/$s$s/3s3e/1s1l/4s4a",
    180 	"/$s$s/3s3e/1s1l/4s4h",
    181 	"/$s$s/3s3e/4s4a",
    182 	"/$s$s/3s3e/4s4h",
    183 	"/$s$s/3s3e/4s4a",
    184 	"/$s$s/3s3e/4s4h",
    185 	"/$s$s/5s5s",
    186 	"/$s$s/5s5s/1s1i",
    187 	"/$s$s/5s5s/1s1l",
    188 	"/$s$s/5s5s/1s1i/4s4a",
    189 	"/$s$s/5s5s/1s1i/4s4h",
    190 	"/$s$s/5s5s/1s1l/4s4a",
    191 	"/$s$s/5s5s/1s1l/4s4h",
    192 	"/$s$s/5s5s/4s4a",
    193 	"/$s$s/5s5s/4s4h",
    194 	"/$s$s/5s5s/4s4a",
    195 	"/$s$s/5s5s/4s4h",
    196 	"/$s$s/1s1i",
    197 	"/$s$s/1s1l",
    198 	"/$s$s/1s1i/4s4a",
    199 	"/$s$s/1s1i/4s4h",
    200 	"/$s$s/1s1l/4s4a",
    201 	"/$s$s/1s1l/4s4h",
    202 	"/$s$s/4s4a",
    203 	"/$s$s/4s4h",
    204 	"/$s$s/4s4a",
    205 	"/$s$s/4s4h",
    206 	"/0s0o",
    207 	"/0s0o/2s2a",
    208 	"/0s0o/2s2a/3s3e",
    209 	"/0s0o/2s2a/3s3e/5s5s",
    210 	"/0s0o/2s2a/3s3e/5s5s/1s1i",
    211 	"/0s0o/2s2a/3s3e/5s5s/1s1l",
    212 	"/0s0o/2s2a/3s3e/5s5s/1s1i/4s4a",
    213 	"/0s0o/2s2a/3s3e/5s5s/1s1i/4s4h",
    214 	"/0s0o/2s2a/3s3e/5s5s/1s1l/4s4a",
    215 	"/0s0o/2s2a/3s3e/5s5s/1s1l/4s4h",
    216 	"/0s0o/2s2a/3s3e/5s5s/4s4a",
    217 	"/0s0o/2s2a/3s3e/5s5s/4s4h",
    218 	"/0s0o/2s2a/3s3e/5s5s/4s4a",
    219 	"/0s0o/2s2a/3s3e/5s5s/4s4h",
    220 	"/0s0o/2s2a/3s3e/1s1i",
    221 	"/0s0o/2s2a/3s3e/1s1l",
    222 	"/0s0o/2s2a/3s3e/1s1i/4s4a",
    223 	"/0s0o/2s2a/3s3e/1s1i/4s4h",
    224 	"/0s0o/2s2a/3s3e/1s1l/4s4a",
    225 	"/0s0o/2s2a/3s3e/1s1l/4s4h",
    226 	"/0s0o/2s2a/3s3e/4s4a",
    227 	"/0s0o/2s2a/3s3e/4s4h",
    228 	"/0s0o/2s2a/3s3e/4s4a",
    229 	"/0s0o/2s2a/3s3e/4s4h",
    230 	"/0s0o/2s2a/5s5s",
    231 	"/0s0o/2s2a/5s5s/1s1i",
    232 	"/0s0o/2s2a/5s5s/1s1l",
    233 	"/0s0o/2s2a/5s5s/1s1i/4s4a",
    234 	"/0s0o/2s2a/5s5s/1s1i/4s4h",
    235 	"/0s0o/2s2a/5s5s/1s1l/4s4a",
    236 	"/0s0o/2s2a/5s5s/1s1l/4s4h",
    237 	"/0s0o/2s2a/5s5s/4s4a",
    238 	"/0s0o/2s2a/5s5s/4s4h",
    239 	"/0s0o/2s2a/5s5s/4s4a",
    240 	"/0s0o/2s2a/5s5s/4s4h",
    241 	"/0s0o/2s2a/1s1i",
    242 	"/0s0o/2s2a/1s1l",
    243 	"/0s0o/2s2a/1s1i/4s4a",
    244 	"/0s0o/2s2a/1s1i/4s4h",
    245 	"/0s0o/2s2a/1s1l/4s4a",
    246 	"/0s0o/2s2a/1s1l/4s4h",
    247 	"/0s0o/2s2a/4s4a",
    248 	"/0s0o/2s2a/4s4h",
    249 	"/0s0o/2s2a/4s4a",
    250 	"/0s0o/2s2a/4s4h",
    251 	"/0s0o/3s3e",
    252 	"/0s0o/3s3e/5s5s",
    253 	"/0s0o/3s3e/5s5s/1s1i",
    254 	"/0s0o/3s3e/5s5s/1s1l",
    255 	"/0s0o/3s3e/5s5s/1s1i/4s4a",
    256 	"/0s0o/3s3e/5s5s/1s1i/4s4h",
    257 	"/0s0o/3s3e/5s5s/1s1l/4s4a",
    258 	"/0s0o/3s3e/5s5s/1s1l/4s4h",
    259 	"/0s0o/3s3e/5s5s/4s4a",
    260 	"/0s0o/3s3e/5s5s/4s4h",
    261 	"/0s0o/3s3e/5s5s/4s4a",
    262 	"/0s0o/3s3e/5s5s/4s4h",
    263 	"/0s0o/3s3e/1s1i",
    264 	"/0s0o/3s3e/1s1l",
    265 	"/0s0o/3s3e/1s1i/4s4a",
    266 	"/0s0o/3s3e/1s1i/4s4h",
    267 	"/0s0o/3s3e/1s1l/4s4a",
    268 	"/0s0o/3s3e/1s1l/4s4h",
    269 	"/0s0o/3s3e/4s4a",
    270 	"/0s0o/3s3e/4s4h",
    271 	"/0s0o/3s3e/4s4a",
    272 	"/0s0o/3s3e/4s4h",
    273 	"/0s0o/5s5s",
    274 	"/0s0o/5s5s/1s1i",
    275 	"/0s0o/5s5s/1s1l",
    276 	"/0s0o/5s5s/1s1i/4s4a",
    277 	"/0s0o/5s5s/1s1i/4s4h",
    278 	"/0s0o/5s5s/1s1l/4s4a",
    279 	"/0s0o/5s5s/1s1l/4s4h",
    280 	"/0s0o/5s5s/4s4a",
    281 	"/0s0o/5s5s/4s4h",
    282 	"/0s0o/5s5s/4s4a",
    283 	"/0s0o/5s5s/4s4h",
    284 	"/0s0o/1s1i",
    285 	"/0s0o/1s1l",
    286 	"/0s0o/1s1i/4s4a",
    287 	"/0s0o/1s1i/4s4h",
    288 	"/0s0o/1s1l/4s4a",
    289 	"/0s0o/1s1l/4s4h",
    290 	"/0s0o/4s4a",
    291 	"/0s0o/4s4h",
    292 	"/0s0o/4s4a",
    293 	"/0s0o/4s4h",
    294 	"/2s2a",
    295 	"/2s2a/3s3e",
    296 	"/2s2a/3s3e/5s5s",
    297 	"/2s2a/3s3e/5s5s/1s1i",
    298 	"/2s2a/3s3e/5s5s/1s1l",
    299 	"/2s2a/3s3e/5s5s/1s1i/4s4a",
    300 	"/2s2a/3s3e/5s5s/1s1i/4s4h",
    301 	"/2s2a/3s3e/5s5s/1s1l/4s4a",
    302 	"/2s2a/3s3e/5s5s/1s1l/4s4h",
    303 	"/2s2a/3s3e/5s5s/4s4a",
    304 	"/2s2a/3s3e/5s5s/4s4h",
    305 	"/2s2a/3s3e/5s5s/4s4a",
    306 	"/2s2a/3s3e/5s5s/4s4h",
    307 	"/2s2a/3s3e/1s1i",
    308 	"/2s2a/3s3e/1s1l",
    309 	"/2s2a/3s3e/1s1i/4s4a",
    310 	"/2s2a/3s3e/1s1i/4s4h",
    311 	"/2s2a/3s3e/1s1l/4s4a",
    312 	"/2s2a/3s3e/1s1l/4s4h",
    313 	"/2s2a/3s3e/4s4a",
    314 	"/2s2a/3s3e/4s4h",
    315 	"/2s2a/3s3e/4s4a",
    316 	"/2s2a/3s3e/4s4h",
    317 	"/2s2a/5s5s",
    318 	"/2s2a/5s5s/1s1i",
    319 	"/2s2a/5s5s/1s1l",
    320 	"/2s2a/5s5s/1s1i/4s4a",
    321 	"/2s2a/5s5s/1s1i/4s4h",
    322 	"/2s2a/5s5s/1s1l/4s4a",
    323 	"/2s2a/5s5s/1s1l/4s4h",
    324 	"/2s2a/5s5s/4s4a",
    325 	"/2s2a/5s5s/4s4h",
    326 	"/2s2a/5s5s/4s4a",
    327 	"/2s2a/5s5s/4s4h",
    328 	"/2s2a/1s1i",
    329 	"/2s2a/1s1l",
    330 	"/2s2a/1s1i/4s4a",
    331 	"/2s2a/1s1i/4s4h",
    332 	"/2s2a/1s1l/4s4a",
    333 	"/2s2a/1s1l/4s4h",
    334 	"/2s2a/4s4a",
    335 	"/2s2a/4s4h",
    336 	"/2s2a/4s4a",
    337 	"/2s2a/4s4h",
    338 	"/3s3e",
    339 	"/3s3e/5s5s",
    340 	"/3s3e/5s5s/1s1i",
    341 	"/3s3e/5s5s/1s1l",
    342 	"/3s3e/5s5s/1s1i/4s4a",
    343 	"/3s3e/5s5s/1s1i/4s4h",
    344 	"/3s3e/5s5s/1s1l/4s4a",
    345 	"/3s3e/5s5s/1s1l/4s4h",
    346 	"/3s3e/5s5s/4s4a",
    347 	"/3s3e/5s5s/4s4h",
    348 	"/3s3e/5s5s/4s4a",
    349 	"/3s3e/5s5s/4s4h",
    350 	"/3s3e/1s1i",
    351 	"/3s3e/1s1l",
    352 	"/3s3e/1s1i/4s4a",
    353 	"/3s3e/1s1i/4s4h",
    354 	"/3s3e/1s1l/4s4a",
    355 	"/3s3e/1s1l/4s4h",
    356 	"/3s3e/4s4a",
    357 	"/3s3e/4s4h",
    358 	"/3s3e/4s4a",
    359 	"/3s3e/4s4h",
    360 	"/5s5s",
    361 	"/5s5s/1s1i",
    362 	"/5s5s/1s1l",
    363 	"/5s5s/1s1i/4s4a",
    364 	"/5s5s/1s1i/4s4h",
    365 	"/5s5s/1s1l/4s4a",
    366 	"/5s5s/1s1l/4s4h",
    367 	"/5s5s/4s4a",
    368 	"/5s5s/4s4h",
    369 	"/5s5s/4s4a",
    370 	"/5s5s/4s4h",
    371 	"/1s1i",
    372 	"/1s1l",
    373 	"/1s1i/4s4a",
    374 	"/1s1i/4s4h",
    375 	"/1s1l/4s4a",
    376 	"/1s1l/4s4h",
    377 	"/4s4a",
    378 	"/4s4h",
    379 	"/4s4a",
    380 	"/4s4h",
    381 	/* done */
    382 	(char *)0
    383 };
    384 
    385 
    386 int
    387 FascistLook(PWDICT *pwp, char *instring)
    388 {
    389 	int i;
    390 	char *password;
    391 	uint32_t notfound;
    392 	char rpassword[PATH_MAX];
    393 
    394 	notfound = PW_WORDS(pwp);
    395 
    396 	(void) strlcpy(rpassword, instring, TRUNCSTRINGSIZE);
    397 	password = rpassword;
    398 
    399 	(void) strcpy(password, Lowercase(password));
    400 	(void) Trim(password);
    401 
    402 	/*
    403 	 * it should be safe to use Mangle with its reliance on PATH_SIZE
    404 	 * since password cannot be longer than TRUNCSTRINGSIZE;
    405 	 * nonetheless this is not an elegant solution
    406 	 */
    407 
    408 	for (i = 0; r_destructors[i]; i++) {
    409 		char *a;
    410 
    411 		if (!(a = Mangle(password, r_destructors[i]))) {
    412 			continue;
    413 		}
    414 
    415 		if (FindPW(pwp, a) != notfound) {
    416 			return (DICTIONARY_WORD);
    417 		}
    418 	}
    419 
    420 	(void) strlcpy(password, Reverse(password), PATH_MAX);
    421 
    422 	for (i = 0; r_destructors[i]; i++) {
    423 		char *a;
    424 
    425 		if (!(a = Mangle(password, r_destructors[i]))) {
    426 			continue;
    427 		}
    428 		if (FindPW(pwp, a) != notfound) {
    429 			return (REVERSE_DICTIONARY_WORD);
    430 		}
    431 	}
    432 
    433 	return (0);
    434 }
    435 
    436 int
    437 DictCheck(char *password, char *path)
    438 {
    439 	PWDICT *pwp;
    440 	int r;
    441 
    442 	if ((pwp = PWOpen(path, "rF")) == NULL)
    443 		return (DATABASE_OPEN_FAIL);
    444 
    445 	r = FascistLook(pwp, password);
    446 	(void) PWClose(pwp);
    447 	return (r);
    448 }
    449