int rv;
int ret;
SECKEY_TraverseKeys(SECKEYKeyDBHandle *handle, 		 SECStatus (* keyfunc)(DBT *k, DBT *d, void *pdata),		 void *udata ){    DBT data;    DBT key;    SECStatus status;    int rv;    if (handle == NULL) {	return(SECFailure);    }    rv = (* handle->db->seq)(handle->db, &key, &data, R_FIRST);    if ( rv ) {	return(SECFailure);    }        do {	/* skip version record */	if ( data.size > 1 ) {	    if ( key.size == ( sizeof(SALT_STRING) - 1 ) ) {		if ( PORT_Memcmp(key.data, SALT_STRING, key.size) == 0 ) {		    continue;		}	    }	    /* skip password check */	    if ( key.size == KEYDB_PW_CHECK_LEN ) {		if ( PORT_Memcmp(key.data, KEYDB_PW_CHECK_STRING,				 KEYDB_PW_CHECK_LEN) == 0 ) {		    continue;		}	    }	    	    status = (* keyfunc)(&key, &data, udata);	    if (status != SECSuccess) {		return(status);	    }	}    } while ( (* handle->db->seq)(handle->db, &key, &data, R_NEXT) == 0 );    return(SECSuccess);}