Edit D:\rfid\apache-tomcat-8.5.32\bin\tomcat-native.tar
tomcat-native-1.2.17-src/ 0000775 0001751 0001751 00000000000 13306201160 014744 5 ustar jfclere jfclere tomcat-native-1.2.17-src/CMakeLists.txt 0000664 0001751 0001751 00000071545 13146304302 017524 0 ustar jfclere jfclere # Runs with 'cmake'. # You must call 'download_deps.sh' first to get openssl and apr source # ( or equivalent commands ). I tried to use 'ExternalProject_Add' to download, but doesn't seem # to do what I need. The source must go to deps/src/{apr,openssl} # For Eclipse: cmake -G "Eclipse CDT4 - Unix Makefiles" # Build: "cmake . ; make VERBOSE=1" # It is still possible to build with libtool: # download_deps.sh # build openssl and apr # cd native # ./buildconf --with-apr=../deps/src/apr # ./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/ssl cmake_minimum_required (VERSION 2.6) project (TOMCAT_JNI) FIND_PACKAGE(JNI REQUIRED) include (${CMAKE_ROOT}/Modules/ExternalProject.cmake) enable_language(ASM-ATT) set(can_use_assembler TRUE) set(DEPS ${TOMCAT_JNI_SOURCE_DIR}/deps/src) include_directories (${TOMCAT_JNI_SOURCE_DIR}/native/include ${DEPS}/apr/include ${DEPS}/apr/include/arch/unix ${DEPS}/openssl ${DEPS}/ ${DEPS}/openssl/include ${DEPS}/openssl/crypto ${DEPS}/openssl/crypto/modes ${DEPS}/openssl/crypto/asn1 ${DEPS}/openssl/crypto/evp ${JAVA_INCLUDE_PATH} ) set (SSL_C_FLAGS "-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -DL_ENDIAN -DTERMIO -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM ") set (CMAKE_C_FLAGS "-pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -DHAVE_OPENSSL -fPIC -DOPENSSL_PIC -m64 -O3 -Wall ${SSL_C_FLAGS}") set (OPENSSL_SRC ${DEPS}/openssl) set (SSL_ASM ${OPENSSL_SRC}/crypto/sha/sha512-x86_64.s ${OPENSSL_SRC}/crypto/sha/sha256-x86_64.s ${OPENSSL_SRC}/crypto/sha/sha1-x86_64.s ${OPENSSL_SRC}/crypto/bn/x86_64-mont5.s ${OPENSSL_SRC}/crypto/bn/x86_64-gf2m.s ${OPENSSL_SRC}/crypto/bn/modexp512-x86_64.s ${OPENSSL_SRC}/crypto/camellia/cmll-x86_64.s ${OPENSSL_SRC}/crypto/md5/md5-x86_64.s ${OPENSSL_SRC}/crypto/whrlpool/wp-x86_64.s ${OPENSSL_SRC}/crypto/rc4/rc4-x86_64.s ${OPENSSL_SRC}/crypto/rc4/rc4-md5-x86_64.s ${OPENSSL_SRC}/crypto/aes/aesni-sha1-x86_64.s ${OPENSSL_SRC}/crypto/aes/aesni-x86_64.s ${OPENSSL_SRC}/crypto/aes/aes-x86_64.s ${OPENSSL_SRC}/crypto/aes/bsaes-x86_64.s ${OPENSSL_SRC}/crypto/bn/x86_64-mont.s ${OPENSSL_SRC}/crypto/aes/vpaes-x86_64.s ${OPENSSL_SRC}/crypto/modes/ghash-x86_64.s ${OPENSSL_SRC}/crypto/x86_64cpuid.s ) # Cmake doesn't support conveneinece libraries ( static ? ) add_library (ssl STATIC ${SSL_ASM} ${OPENSSL_SRC}/crypto/cversion.c ${OPENSSL_SRC}/crypto/ec/ec2_oct.c ${OPENSSL_SRC}/crypto/ec/ecp_smpl.c ${OPENSSL_SRC}/crypto/ec/ec_check.c ${OPENSSL_SRC}/crypto/ec/ecp_nist.c ${OPENSSL_SRC}/crypto/ec/ec_err.c ${OPENSSL_SRC}/crypto/ec/ecp_mont.c ${OPENSSL_SRC}/crypto/ec/ec_key.c ${OPENSSL_SRC}/crypto/ec/ec_asn1.c ${OPENSSL_SRC}/crypto/ec/ecp_nistp256.c ${OPENSSL_SRC}/crypto/ec/ecp_oct.c ${OPENSSL_SRC}/crypto/ec/ec_cvt.c ${OPENSSL_SRC}/crypto/ec/ecp_nistputil.c ${OPENSSL_SRC}/crypto/ec/ecp_nistp521.c ${OPENSSL_SRC}/crypto/ec/ec_print.c ${OPENSSL_SRC}/crypto/ec/eck_prn.c ${OPENSSL_SRC}/crypto/ec/ec_curve.c ${OPENSSL_SRC}/crypto/ec/ec_oct.c ${OPENSSL_SRC}/crypto/ec/ecp_nistp224.c ${OPENSSL_SRC}/crypto/ec/ec_mult.c ${OPENSSL_SRC}/crypto/ec/ec_pmeth.c ${OPENSSL_SRC}/crypto/ec/ec2_smpl.c ${OPENSSL_SRC}/crypto/ec/ec2_mult.c ${OPENSSL_SRC}/crypto/ec/ec_ameth.c ${OPENSSL_SRC}/crypto/ec/ec_lib.c ${OPENSSL_SRC}/crypto/bio/bio_lib.c ${OPENSSL_SRC}/crypto/bio/bss_sock.c ${OPENSSL_SRC}/crypto/bio/bss_log.c ${OPENSSL_SRC}/crypto/bio/bio_cb.c ${OPENSSL_SRC}/crypto/bio/bss_conn.c ${OPENSSL_SRC}/crypto/bio/bss_fd.c ${OPENSSL_SRC}/crypto/bio/bio_err.c ${OPENSSL_SRC}/crypto/bio/bss_file.c ${OPENSSL_SRC}/crypto/bio/bss_bio.c ${OPENSSL_SRC}/crypto/bio/b_print.c ${OPENSSL_SRC}/crypto/bio/b_sock.c ${OPENSSL_SRC}/crypto/bio/b_dump.c ${OPENSSL_SRC}/crypto/bio/bss_acpt.c ${OPENSSL_SRC}/crypto/bio/bss_dgram.c ${OPENSSL_SRC}/crypto/bio/bf_buff.c ${OPENSSL_SRC}/crypto/bio/bss_mem.c ${OPENSSL_SRC}/crypto/bio/bss_null.c ${OPENSSL_SRC}/crypto/bio/bf_nbio.c ${OPENSSL_SRC}/crypto/bio/bf_null.c ${OPENSSL_SRC}/crypto/ebcdic.c ${OPENSSL_SRC}/crypto/sha/sha_one.c ${OPENSSL_SRC}/crypto/sha/sha1dgst.c ${OPENSSL_SRC}/crypto/sha/sha512.c ${OPENSSL_SRC}/crypto/sha/sha_dgst.c ${OPENSSL_SRC}/crypto/sha/sha256.c ${OPENSSL_SRC}/crypto/sha/sha1_one.c ${OPENSSL_SRC}/crypto/bn/bn_err.c ${OPENSSL_SRC}/crypto/bn/bn_print.c ${OPENSSL_SRC}/crypto/bn/bn_exp.c ${OPENSSL_SRC}/crypto/bn/bn_blind.c ${OPENSSL_SRC}/crypto/bn/bn_mpi.c ${OPENSSL_SRC}/crypto/bn/bn_const.c ${OPENSSL_SRC}/crypto/bn/bn_mod.c ${OPENSSL_SRC}/crypto/bn/bn_x931p.c ${OPENSSL_SRC}/crypto/bn/bn_exp2.c ${OPENSSL_SRC}/crypto/bn/bn_prime.c ${OPENSSL_SRC}/crypto/bn/bn_mul.c ${OPENSSL_SRC}/crypto/bn/bn_add.c ${OPENSSL_SRC}/crypto/bn/bn_kron.c ${OPENSSL_SRC}/crypto/bn/bn_sqrt.c ${OPENSSL_SRC}/crypto/bn/bn_depr.c ${OPENSSL_SRC}/crypto/bn/bn_div.c ${OPENSSL_SRC}/crypto/bn/bn_nist.c ${OPENSSL_SRC}/crypto/bn/bn_gf2m.c ${OPENSSL_SRC}/crypto/bn/bn_gcd.c ${OPENSSL_SRC}/crypto/bn/bn_recp.c ${OPENSSL_SRC}/crypto/bn/bn_lib.c ${OPENSSL_SRC}/crypto/bn/bn_rand.c ${OPENSSL_SRC}/crypto/bn/bn_sqr.c ${OPENSSL_SRC}/crypto/bn/bn_shift.c ${OPENSSL_SRC}/crypto/bn/bn_mont.c ${OPENSSL_SRC}/crypto/bn/asm/x86_64-gcc.c ${OPENSSL_SRC}/crypto/bn/bn_ctx.c ${OPENSSL_SRC}/crypto/bn/bn_word.c ${OPENSSL_SRC}/crypto/objects/obj_xref.c ${OPENSSL_SRC}/crypto/objects/o_names.c ${OPENSSL_SRC}/crypto/objects/obj_dat.c ${OPENSSL_SRC}/crypto/objects/obj_lib.c ${OPENSSL_SRC}/crypto/objects/obj_err.c ${OPENSSL_SRC}/crypto/ui/ui_openssl.c ${OPENSSL_SRC}/crypto/ui/ui_util.c ${OPENSSL_SRC}/crypto/ui/ui_err.c ${OPENSSL_SRC}/crypto/ui/ui_compat.c ${OPENSSL_SRC}/crypto/ui/ui_lib.c ${OPENSSL_SRC}/crypto/stack/stack.c ${OPENSSL_SRC}/crypto/x509/x509_ext.c ${OPENSSL_SRC}/crypto/x509/x509_err.c ${OPENSSL_SRC}/crypto/x509/x509rset.c ${OPENSSL_SRC}/crypto/x509/x509_cmp.c ${OPENSSL_SRC}/crypto/x509/x509_req.c ${OPENSSL_SRC}/crypto/x509/x509spki.c ${OPENSSL_SRC}/crypto/x509/by_file.c ${OPENSSL_SRC}/crypto/x509/x509_lu.c ${OPENSSL_SRC}/crypto/x509/x509_set.c ${OPENSSL_SRC}/crypto/x509/x509_vfy.c ${OPENSSL_SRC}/crypto/x509/x509type.c ${OPENSSL_SRC}/crypto/x509/x509name.c ${OPENSSL_SRC}/crypto/x509/x509_vpm.c ${OPENSSL_SRC}/crypto/x509/x509_obj.c ${OPENSSL_SRC}/crypto/x509/x509_def.c ${OPENSSL_SRC}/crypto/x509/x509_att.c ${OPENSSL_SRC}/crypto/x509/x509cset.c ${OPENSSL_SRC}/crypto/x509/x_all.c ${OPENSSL_SRC}/crypto/x509/x509_v3.c ${OPENSSL_SRC}/crypto/x509/x509_trs.c ${OPENSSL_SRC}/crypto/x509/x509_txt.c ${OPENSSL_SRC}/crypto/x509/x509_r2x.c ${OPENSSL_SRC}/crypto/x509/x509_d2.c ${OPENSSL_SRC}/crypto/x509/by_dir.c ${OPENSSL_SRC}/crypto/pem/pem_seal.c ${OPENSSL_SRC}/crypto/pem/pem_sign.c ${OPENSSL_SRC}/crypto/pem/pem_all.c ${OPENSSL_SRC}/crypto/pem/pem_err.c ${OPENSSL_SRC}/crypto/pem/pem_pk8.c ${OPENSSL_SRC}/crypto/pem/pem_info.c ${OPENSSL_SRC}/crypto/pem/pem_x509.c ${OPENSSL_SRC}/crypto/pem/pem_pkey.c ${OPENSSL_SRC}/crypto/pem/pem_xaux.c ${OPENSSL_SRC}/crypto/pem/pem_oth.c ${OPENSSL_SRC}/crypto/pem/pem_lib.c ${OPENSSL_SRC}/crypto/pem/pvkfmt.c ${OPENSSL_SRC}/crypto/cast/c_ecb.c ${OPENSSL_SRC}/crypto/cast/c_ofb64.c ${OPENSSL_SRC}/crypto/cast/c_enc.c ${OPENSSL_SRC}/crypto/cast/c_skey.c ${OPENSSL_SRC}/crypto/cast/c_cfb64.c ${OPENSSL_SRC}/crypto/buffer/buf_err.c ${OPENSSL_SRC}/crypto/buffer/buffer.c ${OPENSSL_SRC}/crypto/buffer/buf_str.c ${OPENSSL_SRC}/crypto/cmac/cm_ameth.c ${OPENSSL_SRC}/crypto/cmac/cmac.c ${OPENSSL_SRC}/crypto/cmac/cm_pmeth.c ${OPENSSL_SRC}/crypto/rc2/rc2ofb64.c ${OPENSSL_SRC}/crypto/rc2/rc2_skey.c ${OPENSSL_SRC}/crypto/rc2/rc2cfb64.c ${OPENSSL_SRC}/crypto/rc2/rc2_cbc.c ${OPENSSL_SRC}/crypto/rc2/rc2_ecb.c ${OPENSSL_SRC}/crypto/lhash/lhash.c ${OPENSSL_SRC}/crypto/lhash/lh_stats.c ${OPENSSL_SRC}/crypto/rand/rand_unix.c ${OPENSSL_SRC}/crypto/rand/rand_os2.c ${OPENSSL_SRC}/crypto/rand/md_rand.c ${OPENSSL_SRC}/crypto/rand/rand_egd.c ${OPENSSL_SRC}/crypto/rand/rand_lib.c ${OPENSSL_SRC}/crypto/rand/rand_nw.c ${OPENSSL_SRC}/crypto/rand/rand_win.c ${OPENSSL_SRC}/crypto/rand/randfile.c ${OPENSSL_SRC}/crypto/rand/rand_err.c ${OPENSSL_SRC}/crypto/uid.c ${OPENSSL_SRC}/crypto/err/err.c ${OPENSSL_SRC}/crypto/err/err_all.c ${OPENSSL_SRC}/crypto/err/err_prn.c ${OPENSSL_SRC}/crypto/bf/bf_ofb64.c ${OPENSSL_SRC}/crypto/bf/bf_skey.c ${OPENSSL_SRC}/crypto/bf/bf_cfb64.c ${OPENSSL_SRC}/crypto/bf/bf_ecb.c ${OPENSSL_SRC}/crypto/bf/bf_enc.c ${OPENSSL_SRC}/crypto/o_dir.c ${OPENSSL_SRC}/crypto/asn1/tasn_new.c ${OPENSSL_SRC}/crypto/asn1/asn_pack.c ${OPENSSL_SRC}/crypto/asn1/tasn_prn.c ${OPENSSL_SRC}/crypto/asn1/asn_moid.c ${OPENSSL_SRC}/crypto/asn1/x_sig.c ${OPENSSL_SRC}/crypto/asn1/p8_pkey.c ${OPENSSL_SRC}/crypto/asn1/a_sign.c ${OPENSSL_SRC}/crypto/asn1/x_pubkey.c ${OPENSSL_SRC}/crypto/asn1/i2d_pr.c ${OPENSSL_SRC}/crypto/asn1/a_bitstr.c ${OPENSSL_SRC}/crypto/asn1/a_object.c ${OPENSSL_SRC}/crypto/asn1/tasn_utl.c ${OPENSSL_SRC}/crypto/asn1/nsseq.c ${OPENSSL_SRC}/crypto/asn1/asn1_gen.c ${OPENSSL_SRC}/crypto/asn1/x_long.c ${OPENSSL_SRC}/crypto/asn1/x_attrib.c ${OPENSSL_SRC}/crypto/asn1/a_time.c ${OPENSSL_SRC}/crypto/asn1/p5_pbev2.c ${OPENSSL_SRC}/crypto/asn1/t_x509.c ${OPENSSL_SRC}/crypto/asn1/x_pkey.c ${OPENSSL_SRC}/crypto/asn1/tasn_dec.c ${OPENSSL_SRC}/crypto/asn1/asn1_par.c ${OPENSSL_SRC}/crypto/asn1/tasn_fre.c ${OPENSSL_SRC}/crypto/asn1/x_crl.c ${OPENSSL_SRC}/crypto/asn1/a_digest.c ${OPENSSL_SRC}/crypto/asn1/t_req.c ${OPENSSL_SRC}/crypto/asn1/f_int.c ${OPENSSL_SRC}/crypto/asn1/d2i_pu.c ${OPENSSL_SRC}/crypto/asn1/d2i_pr.c ${OPENSSL_SRC}/crypto/asn1/a_type.c ${OPENSSL_SRC}/crypto/asn1/f_enum.c ${OPENSSL_SRC}/crypto/asn1/x_name.c ${OPENSSL_SRC}/crypto/asn1/asn1_err.c ${OPENSSL_SRC}/crypto/asn1/x_bignum.c ${OPENSSL_SRC}/crypto/asn1/i2d_pu.c ${OPENSSL_SRC}/crypto/asn1/x_exten.c ${OPENSSL_SRC}/crypto/asn1/a_utctm.c ${OPENSSL_SRC}/crypto/asn1/a_verify.c ${OPENSSL_SRC}/crypto/asn1/a_bool.c ${OPENSSL_SRC}/crypto/asn1/tasn_typ.c ${OPENSSL_SRC}/crypto/asn1/x_val.c ${OPENSSL_SRC}/crypto/asn1/tasn_enc.c ${OPENSSL_SRC}/crypto/asn1/t_spki.c ${OPENSSL_SRC}/crypto/asn1/a_mbstr.c ${OPENSSL_SRC}/crypto/asn1/a_gentm.c ${OPENSSL_SRC}/crypto/asn1/x_spki.c ${OPENSSL_SRC}/crypto/asn1/a_strex.c ${OPENSSL_SRC}/crypto/asn1/a_enum.c ${OPENSSL_SRC}/crypto/asn1/a_octet.c ${OPENSSL_SRC}/crypto/asn1/p5_pbe.c ${OPENSSL_SRC}/crypto/asn1/a_utf8.c ${OPENSSL_SRC}/crypto/asn1/a_d2i_fp.c ${OPENSSL_SRC}/crypto/asn1/t_bitst.c ${OPENSSL_SRC}/crypto/asn1/x_algor.c ${OPENSSL_SRC}/crypto/asn1/ameth_lib.c ${OPENSSL_SRC}/crypto/asn1/bio_asn1.c ${OPENSSL_SRC}/crypto/asn1/asn1_lib.c ${OPENSSL_SRC}/crypto/asn1/t_x509a.c ${OPENSSL_SRC}/crypto/asn1/x_info.c ${OPENSSL_SRC}/crypto/asn1/a_dup.c ${OPENSSL_SRC}/crypto/asn1/a_i2d_fp.c ${OPENSSL_SRC}/crypto/asn1/t_pkey.c ${OPENSSL_SRC}/crypto/asn1/x_nx509.c ${OPENSSL_SRC}/crypto/asn1/x_req.c ${OPENSSL_SRC}/crypto/asn1/a_print.c ${OPENSSL_SRC}/crypto/asn1/t_crl.c ${OPENSSL_SRC}/crypto/asn1/n_pkey.c ${OPENSSL_SRC}/crypto/asn1/a_set.c ${OPENSSL_SRC}/crypto/asn1/f_string.c ${OPENSSL_SRC}/crypto/asn1/asn_mime.c ${OPENSSL_SRC}/crypto/asn1/a_strnid.c ${OPENSSL_SRC}/crypto/asn1/a_bytes.c ${OPENSSL_SRC}/crypto/asn1/x_x509.c ${OPENSSL_SRC}/crypto/asn1/bio_ndef.c ${OPENSSL_SRC}/crypto/asn1/a_int.c ${OPENSSL_SRC}/crypto/asn1/x_x509a.c ${OPENSSL_SRC}/crypto/asn1/evp_asn1.c ${OPENSSL_SRC}/crypto/comp/comp_lib.c ${OPENSSL_SRC}/crypto/comp/comp_err.c ${OPENSSL_SRC}/crypto/comp/c_rle.c ${OPENSSL_SRC}/crypto/comp/c_zlib.c ${OPENSSL_SRC}/crypto/dso/dso_win32.c ${OPENSSL_SRC}/crypto/dso/dso_openssl.c ${OPENSSL_SRC}/crypto/dso/dso_lib.c ${OPENSSL_SRC}/crypto/dso/dso_beos.c ${OPENSSL_SRC}/crypto/dso/dso_err.c ${OPENSSL_SRC}/crypto/dso/dso_dlfcn.c ${OPENSSL_SRC}/crypto/dso/dso_vms.c ${OPENSSL_SRC}/crypto/dso/dso_dl.c ${OPENSSL_SRC}/crypto/dso/dso_null.c ${OPENSSL_SRC}/crypto/o_time.c ${OPENSSL_SRC}/crypto/seed/seed_ecb.c ${OPENSSL_SRC}/crypto/seed/seed_cfb.c ${OPENSSL_SRC}/crypto/seed/seed.c ${OPENSSL_SRC}/crypto/seed/seed_cbc.c ${OPENSSL_SRC}/crypto/seed/seed_ofb.c ${OPENSSL_SRC}/crypto/ts/ts_verify_ctx.c ${OPENSSL_SRC}/crypto/ts/ts_rsp_utils.c ${OPENSSL_SRC}/crypto/ts/ts_rsp_verify.c ${OPENSSL_SRC}/crypto/ts/ts_asn1.c ${OPENSSL_SRC}/crypto/ts/ts_rsp_print.c ${OPENSSL_SRC}/crypto/ts/ts_req_print.c ${OPENSSL_SRC}/crypto/ts/ts_lib.c ${OPENSSL_SRC}/crypto/ts/ts_conf.c ${OPENSSL_SRC}/crypto/ts/ts_req_utils.c ${OPENSSL_SRC}/crypto/ts/ts_rsp_sign.c ${OPENSSL_SRC}/crypto/ts/ts_err.c ${OPENSSL_SRC}/crypto/evp/e_aes_cbc_hmac_sha1.c ${OPENSSL_SRC}/crypto/evp/e_old.c ${OPENSSL_SRC}/crypto/evp/evp_err.c ${OPENSSL_SRC}/crypto/evp/bio_enc.c ${OPENSSL_SRC}/crypto/evp/p_open.c ${OPENSSL_SRC}/crypto/evp/e_bf.c ${OPENSSL_SRC}/crypto/evp/e_rc2.c ${OPENSSL_SRC}/crypto/evp/bio_md.c ${OPENSSL_SRC}/crypto/evp/e_rc4.c ${OPENSSL_SRC}/crypto/evp/p5_crpt.c ${OPENSSL_SRC}/crypto/evp/p5_crpt2.c ${OPENSSL_SRC}/crypto/evp/e_xcbc_d.c ${OPENSSL_SRC}/crypto/evp/e_camellia.c ${OPENSSL_SRC}/crypto/evp/m_md5.c ${OPENSSL_SRC}/crypto/evp/e_rc4_hmac_md5.c ${OPENSSL_SRC}/crypto/evp/m_dss.c ${OPENSSL_SRC}/crypto/evp/evp_enc.c ${OPENSSL_SRC}/crypto/evp/evp_pkey.c ${OPENSSL_SRC}/crypto/evp/e_aes.c ${OPENSSL_SRC}/crypto/evp/p_verify.c ${OPENSSL_SRC}/crypto/evp/p_dec.c ${OPENSSL_SRC}/crypto/evp/e_idea.c ${OPENSSL_SRC}/crypto/evp/evp_acnf.c ${OPENSSL_SRC}/crypto/evp/m_ripemd.c ${OPENSSL_SRC}/crypto/evp/m_sigver.c ${OPENSSL_SRC}/crypto/evp/m_ecdsa.c ${OPENSSL_SRC}/crypto/evp/evp_key.c ${OPENSSL_SRC}/crypto/evp/c_alld.c ${OPENSSL_SRC}/crypto/evp/digest.c ${OPENSSL_SRC}/crypto/evp/m_sha1.c ${OPENSSL_SRC}/crypto/evp/names.c ${OPENSSL_SRC}/crypto/evp/bio_ok.c ${OPENSSL_SRC}/crypto/evp/p_lib.c ${OPENSSL_SRC}/crypto/evp/evp_lib.c ${OPENSSL_SRC}/crypto/evp/pmeth_fn.c ${OPENSSL_SRC}/crypto/evp/m_md2.c ${OPENSSL_SRC}/crypto/evp/p_seal.c ${OPENSSL_SRC}/crypto/evp/evp_pbe.c ${OPENSSL_SRC}/crypto/evp/e_des3.c ${OPENSSL_SRC}/crypto/evp/pmeth_gn.c ${OPENSSL_SRC}/crypto/evp/e_cast.c ${OPENSSL_SRC}/crypto/evp/m_dss1.c ${OPENSSL_SRC}/crypto/evp/m_md4.c ${OPENSSL_SRC}/crypto/evp/m_wp.c ${OPENSSL_SRC}/crypto/evp/e_des.c ${OPENSSL_SRC}/crypto/evp/p_sign.c ${OPENSSL_SRC}/crypto/evp/pmeth_lib.c ${OPENSSL_SRC}/crypto/evp/m_mdc2.c ${OPENSSL_SRC}/crypto/evp/p_enc.c ${OPENSSL_SRC}/crypto/evp/e_rc5.c ${OPENSSL_SRC}/crypto/evp/evp_fips.c ${OPENSSL_SRC}/crypto/evp/c_allc.c ${OPENSSL_SRC}/crypto/evp/bio_b64.c ${OPENSSL_SRC}/crypto/evp/c_all.c ${OPENSSL_SRC}/crypto/evp/m_null.c ${OPENSSL_SRC}/crypto/evp/encode.c ${OPENSSL_SRC}/crypto/evp/m_sha.c ${OPENSSL_SRC}/crypto/evp/e_null.c ${OPENSSL_SRC}/crypto/evp/e_seed.c ${OPENSSL_SRC}/crypto/cryptlib.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_vfy.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_asn.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_ext.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_cl.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_srv.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_lib.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_ht.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_prn.c ${OPENSSL_SRC}/crypto/ocsp/ocsp_err.c ${OPENSSL_SRC}/crypto/camellia/cmll_ofb.c ${OPENSSL_SRC}/crypto/camellia/cmll_cfb.c ${OPENSSL_SRC}/crypto/camellia/cmll_misc.c ${OPENSSL_SRC}/crypto/camellia/cmll_ctr.c ${OPENSSL_SRC}/crypto/camellia/cmll_utl.c ${OPENSSL_SRC}/crypto/camellia/cmll_ecb.c ${OPENSSL_SRC}/crypto/conf/conf_mod.c ${OPENSSL_SRC}/crypto/conf/conf_sap.c ${OPENSSL_SRC}/crypto/conf/conf_def.c ${OPENSSL_SRC}/crypto/conf/conf_lib.c ${OPENSSL_SRC}/crypto/conf/conf_err.c ${OPENSSL_SRC}/crypto/conf/conf_mall.c ${OPENSSL_SRC}/crypto/conf/conf_api.c ${OPENSSL_SRC}/crypto/cpt_err.c ${OPENSSL_SRC}/crypto/md5/md5_one.c ${OPENSSL_SRC}/crypto/md5/md5_dgst.c ${OPENSSL_SRC}/crypto/o_init.c ${OPENSSL_SRC}/crypto/ex_data.c ${OPENSSL_SRC}/crypto/dsa/dsa_vrf.c ${OPENSSL_SRC}/crypto/dsa/dsa_err.c ${OPENSSL_SRC}/crypto/dsa/dsa_gen.c ${OPENSSL_SRC}/crypto/dsa/dsa_ameth.c ${OPENSSL_SRC}/crypto/dsa/dsa_key.c ${OPENSSL_SRC}/crypto/dsa/dsa_lib.c ${OPENSSL_SRC}/crypto/dsa/dsa_asn1.c ${OPENSSL_SRC}/crypto/dsa/dsa_ossl.c ${OPENSSL_SRC}/crypto/dsa/dsa_prn.c ${OPENSSL_SRC}/crypto/dsa/dsa_depr.c ${OPENSSL_SRC}/crypto/dsa/dsa_pmeth.c ${OPENSSL_SRC}/crypto/dsa/dsa_sign.c ${OPENSSL_SRC}/crypto/md4/md4_one.c ${OPENSSL_SRC}/crypto/md4/md4_dgst.c ${OPENSSL_SRC}/crypto/dh/dh_prn.c ${OPENSSL_SRC}/crypto/dh/dh_lib.c ${OPENSSL_SRC}/crypto/dh/dh_pmeth.c ${OPENSSL_SRC}/crypto/dh/dh_gen.c ${OPENSSL_SRC}/crypto/dh/dh_check.c ${OPENSSL_SRC}/crypto/dh/dh_err.c ${OPENSSL_SRC}/crypto/dh/dh_key.c ${OPENSSL_SRC}/crypto/dh/dh_asn1.c ${OPENSSL_SRC}/crypto/dh/dh_depr.c ${OPENSSL_SRC}/crypto/dh/dh_ameth.c ${OPENSSL_SRC}/crypto/txt_db/txt_db.c ${OPENSSL_SRC}/crypto/whrlpool/wp_dgst.c ${OPENSSL_SRC}/crypto/pkcs12/p12_decr.c ${OPENSSL_SRC}/crypto/pkcs12/p12_p8d.c ${OPENSSL_SRC}/crypto/pkcs12/pk12err.c ${OPENSSL_SRC}/crypto/pkcs12/p12_npas.c ${OPENSSL_SRC}/crypto/pkcs12/p12_asn.c ${OPENSSL_SRC}/crypto/pkcs12/p12_p8e.c ${OPENSSL_SRC}/crypto/pkcs12/p12_add.c ${OPENSSL_SRC}/crypto/pkcs12/p12_init.c ${OPENSSL_SRC}/crypto/pkcs12/p12_attr.c ${OPENSSL_SRC}/crypto/pkcs12/p12_mutl.c ${OPENSSL_SRC}/crypto/pkcs12/p12_crt.c ${OPENSSL_SRC}/crypto/pkcs12/p12_utl.c ${OPENSSL_SRC}/crypto/pkcs12/p12_key.c ${OPENSSL_SRC}/crypto/pkcs12/p12_kiss.c ${OPENSSL_SRC}/crypto/pkcs12/p12_crpt.c ${OPENSSL_SRC}/crypto/rc4/rc4_utl.c ${OPENSSL_SRC}/crypto/cms/cms_dd.c ${OPENSSL_SRC}/crypto/cms/cms_ess.c ${OPENSSL_SRC}/crypto/cms/cms_pwri.c ${OPENSSL_SRC}/crypto/cms/cms_sd.c ${OPENSSL_SRC}/crypto/cms/cms_io.c ${OPENSSL_SRC}/crypto/cms/cms_smime.c ${OPENSSL_SRC}/crypto/cms/cms_cd.c ${OPENSSL_SRC}/crypto/cms/cms_att.c ${OPENSSL_SRC}/crypto/cms/cms_lib.c ${OPENSSL_SRC}/crypto/cms/cms_asn1.c ${OPENSSL_SRC}/crypto/cms/cms_err.c ${OPENSSL_SRC}/crypto/cms/cms_env.c ${OPENSSL_SRC}/crypto/cms/cms_enc.c ${OPENSSL_SRC}/crypto/aes/aes_wrap.c ${OPENSSL_SRC}/crypto/aes/aes_ofb.c ${OPENSSL_SRC}/crypto/aes/aes_misc.c ${OPENSSL_SRC}/crypto/aes/aes_ctr.c ${OPENSSL_SRC}/crypto/aes/aes_cfb.c ${OPENSSL_SRC}/crypto/aes/aes_ecb.c ${OPENSSL_SRC}/crypto/aes/aes_ige.c ${OPENSSL_SRC}/crypto/ecdsa/ecs_ossl.c ${OPENSSL_SRC}/crypto/ecdsa/ecs_err.c ${OPENSSL_SRC}/crypto/ecdsa/ecs_asn1.c ${OPENSSL_SRC}/crypto/ecdsa/ecs_vrf.c ${OPENSSL_SRC}/crypto/ecdsa/ecs_lib.c ${OPENSSL_SRC}/crypto/ecdsa/ecs_sign.c ${OPENSSL_SRC}/crypto/rsa/rsa_prn.c ${OPENSSL_SRC}/crypto/rsa/rsa_chk.c ${OPENSSL_SRC}/crypto/rsa/rsa_lib.c ${OPENSSL_SRC}/crypto/rsa/rsa_asn1.c ${OPENSSL_SRC}/crypto/rsa/rsa_pss.c ${OPENSSL_SRC}/crypto/rsa/rsa_x931.c ${OPENSSL_SRC}/crypto/rsa/rsa_none.c ${OPENSSL_SRC}/crypto/rsa/rsa_null.c ${OPENSSL_SRC}/crypto/rsa/rsa_ameth.c ${OPENSSL_SRC}/crypto/rsa/rsa_oaep.c ${OPENSSL_SRC}/crypto/rsa/rsa_pk1.c ${OPENSSL_SRC}/crypto/rsa/rsa_saos.c ${OPENSSL_SRC}/crypto/rsa/rsa_depr.c ${OPENSSL_SRC}/crypto/rsa/rsa_err.c ${OPENSSL_SRC}/crypto/rsa/rsa_ssl.c ${OPENSSL_SRC}/crypto/rsa/rsa_eay.c ${OPENSSL_SRC}/crypto/rsa/rsa_sign.c ${OPENSSL_SRC}/crypto/rsa/rsa_pmeth.c ${OPENSSL_SRC}/crypto/rsa/rsa_gen.c ${OPENSSL_SRC}/crypto/rsa/rsa_crpt.c ${OPENSSL_SRC}/crypto/mdc2/mdc2_one.c ${OPENSSL_SRC}/crypto/mdc2/mdc2dgst.c ${OPENSSL_SRC}/crypto/idea/i_skey.c ${OPENSSL_SRC}/crypto/idea/i_ofb64.c ${OPENSSL_SRC}/crypto/idea/i_ecb.c ${OPENSSL_SRC}/crypto/idea/i_cbc.c ${OPENSSL_SRC}/crypto/idea/i_cfb64.c ${OPENSSL_SRC}/crypto/modes/cbc128.c ${OPENSSL_SRC}/crypto/modes/cfb128.c ${OPENSSL_SRC}/crypto/modes/ccm128.c ${OPENSSL_SRC}/crypto/modes/xts128.c ${OPENSSL_SRC}/crypto/modes/ctr128.c ${OPENSSL_SRC}/crypto/modes/gcm128.c ${OPENSSL_SRC}/crypto/modes/ofb128.c ${OPENSSL_SRC}/crypto/modes/cts128.c ${OPENSSL_SRC}/crypto/ecdh/ech_err.c ${OPENSSL_SRC}/crypto/ecdh/ech_ossl.c ${OPENSSL_SRC}/crypto/ecdh/ech_key.c ${OPENSSL_SRC}/crypto/ecdh/ech_lib.c ${OPENSSL_SRC}/crypto/srp/srp_vfy.c ${OPENSSL_SRC}/crypto/srp/srp_lib.c ${OPENSSL_SRC}/crypto/engine/tb_digest.c ${OPENSSL_SRC}/crypto/engine/tb_asnmth.c ${OPENSSL_SRC}/crypto/engine/tb_dh.c ${OPENSSL_SRC}/crypto/engine/tb_dsa.c ${OPENSSL_SRC}/crypto/engine/tb_cipher.c ${OPENSSL_SRC}/crypto/engine/eng_dyn.c ${OPENSSL_SRC}/crypto/engine/eng_fat.c ${OPENSSL_SRC}/crypto/engine/eng_ctrl.c ${OPENSSL_SRC}/crypto/engine/eng_cnf.c ${OPENSSL_SRC}/crypto/engine/eng_rdrand.c ${OPENSSL_SRC}/crypto/engine/tb_ecdsa.c ${OPENSSL_SRC}/crypto/engine/tb_rsa.c ${OPENSSL_SRC}/crypto/engine/eng_cryptodev.c ${OPENSSL_SRC}/crypto/engine/tb_ecdh.c ${OPENSSL_SRC}/crypto/engine/eng_pkey.c ${OPENSSL_SRC}/crypto/engine/tb_pkmeth.c ${OPENSSL_SRC}/crypto/engine/eng_table.c ${OPENSSL_SRC}/crypto/engine/eng_rsax.c ${OPENSSL_SRC}/crypto/engine/tb_rand.c ${OPENSSL_SRC}/crypto/engine/eng_err.c ${OPENSSL_SRC}/crypto/engine/eng_list.c ${OPENSSL_SRC}/crypto/engine/eng_lib.c ${OPENSSL_SRC}/crypto/engine/eng_openssl.c ${OPENSSL_SRC}/crypto/engine/eng_all.c ${OPENSSL_SRC}/crypto/engine/eng_init.c ${OPENSSL_SRC}/crypto/engine/tb_store.c ${OPENSSL_SRC}/crypto/o_str.c ${OPENSSL_SRC}/crypto/krb5/krb5_asn.c ${OPENSSL_SRC}/crypto/fips_ers.c ${OPENSSL_SRC}/crypto/pqueue/pqueue.c ${OPENSSL_SRC}/crypto/o_fips.c ${OPENSSL_SRC}/crypto/pkcs7/pk7_mime.c ${OPENSSL_SRC}/crypto/pkcs7/pk7_lib.c ${OPENSSL_SRC}/crypto/pkcs7/pk7_attr.c ${OPENSSL_SRC}/crypto/pkcs7/pk7_smime.c ${OPENSSL_SRC}/crypto/pkcs7/pk7_asn1.c ${OPENSSL_SRC}/crypto/pkcs7/pkcs7err.c ${OPENSSL_SRC}/crypto/pkcs7/bio_pk7.c ${OPENSSL_SRC}/crypto/pkcs7/pk7_doit.c ${OPENSSL_SRC}/crypto/mem_dbg.c ${OPENSSL_SRC}/crypto/mem.c ${OPENSSL_SRC}/crypto/hmac/hm_pmeth.c ${OPENSSL_SRC}/crypto/hmac/hm_ameth.c ${OPENSSL_SRC}/crypto/hmac/hmac.c ${OPENSSL_SRC}/crypto/des/ofb_enc.c ${OPENSSL_SRC}/crypto/des/fcrypt_b.c ${OPENSSL_SRC}/crypto/des/qud_cksm.c ${OPENSSL_SRC}/crypto/des/cbc_cksm.c ${OPENSSL_SRC}/crypto/des/str2key.c ${OPENSSL_SRC}/crypto/des/rand_key.c ${OPENSSL_SRC}/crypto/des/des_enc.c ${OPENSSL_SRC}/crypto/des/cfb_enc.c ${OPENSSL_SRC}/crypto/des/ofb64ede.c ${OPENSSL_SRC}/crypto/des/cfb64enc.c ${OPENSSL_SRC}/crypto/des/ofb64enc.c ${OPENSSL_SRC}/crypto/des/enc_read.c ${OPENSSL_SRC}/crypto/des/fcrypt.c ${OPENSSL_SRC}/crypto/des/xcbc_enc.c ${OPENSSL_SRC}/crypto/des/cfb64ede.c ${OPENSSL_SRC}/crypto/des/des_old2.c ${OPENSSL_SRC}/crypto/des/pcbc_enc.c ${OPENSSL_SRC}/crypto/des/set_key.c ${OPENSSL_SRC}/crypto/des/ede_cbcm_enc.c ${OPENSSL_SRC}/crypto/des/ecb3_enc.c ${OPENSSL_SRC}/crypto/des/read2pwd.c ${OPENSSL_SRC}/crypto/des/rpc_enc.c ${OPENSSL_SRC}/crypto/des/ecb_enc.c ${OPENSSL_SRC}/crypto/des/des_old.c ${OPENSSL_SRC}/crypto/des/enc_writ.c ${OPENSSL_SRC}/crypto/des/cbc_enc.c ${OPENSSL_SRC}/crypto/x509v3/v3_pcons.c ${OPENSSL_SRC}/crypto/x509v3/v3_crld.c ${OPENSSL_SRC}/crypto/x509v3/v3_ncons.c ${OPENSSL_SRC}/crypto/x509v3/pcy_cache.c ${OPENSSL_SRC}/crypto/x509v3/v3_info.c ${OPENSSL_SRC}/crypto/x509v3/v3_genn.c ${OPENSSL_SRC}/crypto/x509v3/v3_bcons.c ${OPENSSL_SRC}/crypto/x509v3/v3_skey.c ${OPENSSL_SRC}/crypto/x509v3/v3_pku.c ${OPENSSL_SRC}/crypto/x509v3/v3_extku.c ${OPENSSL_SRC}/crypto/x509v3/pcy_data.c ${OPENSSL_SRC}/crypto/x509v3/v3_purp.c ${OPENSSL_SRC}/crypto/x509v3/v3_lib.c ${OPENSSL_SRC}/crypto/x509v3/v3_pmaps.c ${OPENSSL_SRC}/crypto/x509v3/v3_pcia.c ${OPENSSL_SRC}/crypto/x509v3/v3_sxnet.c ${OPENSSL_SRC}/crypto/x509v3/v3_enum.c ${OPENSSL_SRC}/crypto/x509v3/v3_alt.c ${OPENSSL_SRC}/crypto/x509v3/v3_akey.c ${OPENSSL_SRC}/crypto/x509v3/v3_ia5.c ${OPENSSL_SRC}/crypto/x509v3/pcy_tree.c ${OPENSSL_SRC}/crypto/x509v3/v3_int.c ${OPENSSL_SRC}/crypto/x509v3/v3_utl.c ${OPENSSL_SRC}/crypto/x509v3/v3_pci.c ${OPENSSL_SRC}/crypto/x509v3/v3_asid.c ${OPENSSL_SRC}/crypto/x509v3/v3_akeya.c ${OPENSSL_SRC}/crypto/x509v3/v3_cpols.c ${OPENSSL_SRC}/crypto/x509v3/pcy_node.c ${OPENSSL_SRC}/crypto/x509v3/v3_bitst.c ${OPENSSL_SRC}/crypto/x509v3/v3_prn.c ${OPENSSL_SRC}/crypto/x509v3/v3_addr.c ${OPENSSL_SRC}/crypto/x509v3/pcy_lib.c ${OPENSSL_SRC}/crypto/x509v3/pcy_map.c ${OPENSSL_SRC}/crypto/x509v3/v3_conf.c ${OPENSSL_SRC}/crypto/x509v3/v3err.c ${OPENSSL_SRC}/crypto/x509v3/v3_ocsp.c ${OPENSSL_SRC}/crypto/ripemd/rmd_one.c ${OPENSSL_SRC}/crypto/ripemd/rmd_dgst.c ${OPENSSL_SRC}/engines/ccgost/gost_ameth.c ${OPENSSL_SRC}/engines/ccgost/gost_params.c ${OPENSSL_SRC}/engines/ccgost/e_gost_err.c ${OPENSSL_SRC}/engines/ccgost/gost_crypt.c ${OPENSSL_SRC}/engines/ccgost/gosthash.c ${OPENSSL_SRC}/engines/ccgost/gost_keywrap.c ${OPENSSL_SRC}/engines/ccgost/gost94_keyx.c ${OPENSSL_SRC}/engines/ccgost/gost89.c ${OPENSSL_SRC}/engines/ccgost/gost_pmeth.c ${OPENSSL_SRC}/engines/ccgost/gost_eng.c ${OPENSSL_SRC}/engines/ccgost/gost_asn1.c ${OPENSSL_SRC}/engines/ccgost/gost_md.c ${OPENSSL_SRC}/engines/ccgost/gost2001_keyx.c ${OPENSSL_SRC}/engines/ccgost/gost_sign.c ${OPENSSL_SRC}/engines/ccgost/gost_ctl.c ${OPENSSL_SRC}/engines/ccgost/gost2001.c ${OPENSSL_SRC}/engines/e_ubsec.c ${OPENSSL_SRC}/engines/e_atalla.c ${OPENSSL_SRC}/engines/e_padlock.c ${OPENSSL_SRC}/engines/e_gmp.c ${OPENSSL_SRC}/engines/e_nuron.c ${OPENSSL_SRC}/engines/e_aep.c ${OPENSSL_SRC}/engines/e_4758cca.c ${OPENSSL_SRC}/engines/e_chil.c ${OPENSSL_SRC}/engines/e_sureware.c ${OPENSSL_SRC}/engines/e_capi.c ${OPENSSL_SRC}/engines/e_cswift.c ${OPENSSL_SRC}/ssl/s3_pkt.c ${OPENSSL_SRC}/ssl/d1_meth.c ${OPENSSL_SRC}/ssl/d1_lib.c ${OPENSSL_SRC}/ssl/s23_lib.c ${OPENSSL_SRC}/ssl/s3_enc.c ${OPENSSL_SRC}/ssl/ssl_cert.c ${OPENSSL_SRC}/ssl/tls_srp.c ${OPENSSL_SRC}/ssl/ssl_lib.c ${OPENSSL_SRC}/ssl/s2_lib.c ${OPENSSL_SRC}/ssl/ssl_err.c ${OPENSSL_SRC}/ssl/t1_clnt.c ${OPENSSL_SRC}/ssl/s3_srvr.c ${OPENSSL_SRC}/ssl/t1_meth.c ${OPENSSL_SRC}/ssl/ssl_rsa.c ${OPENSSL_SRC}/ssl/d1_pkt.c ${OPENSSL_SRC}/ssl/bio_ssl.c ${OPENSSL_SRC}/ssl/ssl_algs.c ${OPENSSL_SRC}/ssl/d1_srtp.c ${OPENSSL_SRC}/ssl/s23_pkt.c ${OPENSSL_SRC}/ssl/s2_clnt.c ${OPENSSL_SRC}/ssl/ssl_sess.c ${OPENSSL_SRC}/ssl/kssl.c ${OPENSSL_SRC}/ssl/s3_meth.c ${OPENSSL_SRC}/ssl/ssl_stat.c ${OPENSSL_SRC}/ssl/t1_srvr.c ${OPENSSL_SRC}/ssl/s2_srvr.c ${OPENSSL_SRC}/ssl/s23_clnt.c ${OPENSSL_SRC}/ssl/s3_both.c ${OPENSSL_SRC}/ssl/ssl_asn1.c ${OPENSSL_SRC}/ssl/ssl_err2.c ${OPENSSL_SRC}/ssl/s3_clnt.c ${OPENSSL_SRC}/ssl/t1_reneg.c ${OPENSSL_SRC}/ssl/t1_enc.c ${OPENSSL_SRC}/ssl/d1_both.c ${OPENSSL_SRC}/ssl/d1_srvr.c ${OPENSSL_SRC}/ssl/s3_lib.c ${OPENSSL_SRC}/ssl/s23_meth.c ${OPENSSL_SRC}/ssl/s2_enc.c ${OPENSSL_SRC}/ssl/s2_pkt.c ${OPENSSL_SRC}/ssl/ssl_txt.c ${OPENSSL_SRC}/ssl/d1_clnt.c ${OPENSSL_SRC}/ssl/ssl_ciph.c ${OPENSSL_SRC}/ssl/s23_srvr.c ${OPENSSL_SRC}/ssl/t1_lib.c ${OPENSSL_SRC}/ssl/d1_enc.c ${OPENSSL_SRC}/ssl/s2_meth.c ) add_library (apr-1 STATIC deps/src/apr/tables/apr_hash.c deps/src/apr/tables/apr_tables.c deps/src/apr/network_io/unix/inet_ntop.c deps/src/apr/network_io/unix/inet_pton.c deps/src/apr/network_io/unix/socket_util.c deps/src/apr/network_io/unix/sockopt.c deps/src/apr/network_io/unix/sendrecv.c deps/src/apr/network_io/unix/multicast.c deps/src/apr/network_io/unix/sockaddr.c deps/src/apr/network_io/unix/sockets.c deps/src/apr/file_io/unix/fullrw.c deps/src/apr/file_io/unix/filedup.c deps/src/apr/file_io/unix/filepath.c deps/src/apr/file_io/unix/buffer.c deps/src/apr/file_io/unix/fileacc.c deps/src/apr/file_io/unix/dir.c deps/src/apr/file_io/unix/filepath_util.c deps/src/apr/file_io/unix/flock.c deps/src/apr/file_io/unix/copy.c deps/src/apr/file_io/unix/seek.c deps/src/apr/file_io/unix/mktemp.c deps/src/apr/file_io/unix/tempdir.c deps/src/apr/file_io/unix/pipe.c deps/src/apr/file_io/unix/open.c deps/src/apr/file_io/unix/filestat.c deps/src/apr/file_io/unix/readwrite.c deps/src/apr/mmap/unix/mmap.c deps/src/apr/mmap/unix/common.c deps/src/apr/user/unix/userinfo.c deps/src/apr/user/unix/groupinfo.c deps/src/apr/misc/unix/charset.c deps/src/apr/misc/unix/getopt.c deps/src/apr/misc/unix/errorcodes.c deps/src/apr/misc/unix/otherchild.c deps/src/apr/misc/unix/env.c deps/src/apr/misc/unix/rand.c deps/src/apr/misc/unix/start.c deps/src/apr/misc/unix/version.c deps/src/apr/shmem/unix/shm.c deps/src/apr/dso/unix/dso.c deps/src/apr/memory/unix/apr_pools.c deps/src/apr/passwd/apr_getpass.c deps/src/apr/support/unix/waitio.c deps/src/apr/random/unix/apr_random.c deps/src/apr/random/unix/sha2_glue.c deps/src/apr/random/unix/sha2.c deps/src/apr/locks/unix/thread_rwlock.c deps/src/apr/locks/unix/proc_mutex.c deps/src/apr/locks/unix/global_mutex.c deps/src/apr/locks/unix/thread_cond.c deps/src/apr/locks/unix/thread_mutex.c deps/src/apr/atomic/unix/s390.c deps/src/apr/atomic/unix/mutex.c deps/src/apr/atomic/unix/builtins.c deps/src/apr/atomic/unix/ppc.c deps/src/apr/atomic/unix/ia32.c deps/src/apr/atomic/unix/solaris.c deps/src/apr/threadproc/unix/signals.c deps/src/apr/threadproc/unix/proc.c deps/src/apr/threadproc/unix/thread.c deps/src/apr/threadproc/unix/threadpriv.c deps/src/apr/threadproc/unix/procsup.c deps/src/apr/strings/apr_snprintf.c deps/src/apr/strings/apr_strings.c deps/src/apr/strings/apr_strnatcmp.c deps/src/apr/strings/apr_cpystrn.c deps/src/apr/strings/apr_strtok.c deps/src/apr/strings/apr_fnmatch.c deps/src/apr/time/unix/timestr.c deps/src/apr/time/unix/time.c deps/src/apr/poll/unix/poll.c deps/src/apr/poll/unix/select.c deps/src/apr/poll/unix/pollset.c deps/src/apr/poll/unix/port.c deps/src/apr/poll/unix/kqueue.c deps/src/apr/poll/unix/pollcb.c deps/src/apr/poll/unix/epoll.c ) #deps/src/apr/exports.c #deps/src/apr/export_vars.c # TODO: platform var add_library (tcnative-1 SHARED native/os/unix/system.c native/os/unix/uxpipe.c native/src/lock.c native/src/info.c native/src/os.c native/src/address.c native/src/poll.c native/src/stdlib.c native/src/jnilib.c native/src/mmap.c native/src/proc.c native/src/sslinfo.c native/src/file.c native/src/thread.c native/src/network.c native/src/sslutils.c native/src/sslnetwork.c native/src/dir.c native/src/shm.c native/src/multicast.c native/src/sslcontext.c native/src/sslconf.c native/src/user.c native/src/pool.c native/src/bb.c native/src/misc.c native/src/ssl.c native/src/error.c ) target_link_libraries(tcnative-1 apr-1) target_link_libraries(tcnative-1 ssl) tomcat-native-1.2.17-src/build.xml 0000664 0001751 0001751 00000043756 13223462106 016613 0 ustar jfclere jfclere <?xml version="1.0"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Build file for Tomcat Native --> <project name="Tomcat Native" default="compile" basedir="."> <!-- Give user a chance to override without editing this file (and without typing -D each time it compiles it --> <property file="${user.home}/.ant.properties" /> <property file="${user.home}/build.properties" /> <property file=".ant.properties" /> <property file="build.properties" /> <property file="build.properties.default"/> <!-- Initialization properties --> <property name="project" value="tomcat-native" /> <property name="name" value="Tomcat Native" /> <property name="title" value="Tomcat Native Library"/> <property name="year" value="2018" /> <property name="test.runner" value="junit.textui.TestRunner"/> <property name="version" value="${version.major}.${version.minor}.${version.build}${version.suffix}" /> <property name="version.number" value="${version.major}.${version.minor}.${version.build}.${version.patch}" /> <property name="version.major.minor" value="${version.major}.${version.minor}" /> <property name="final.name" value="${project}-${version}" /> <property name="build.dir" value="./dist"/> <property name="build.src" value="${build.dir}/src"/> <property name="build.dest" value="${build.dir}/classes"/> <property name="src.dir" value="."/> <property name="dist.root" value="./dist"/> <property name="ant.home" value="."/> <property name="docs.src" value="./xdocs"/> <property name="docs.dest" value="${dist.root}/doc"/> <property name="docs.dest.print" value="${dist.root}/doc/printable"/> <property name="test.dir" value="${build.dest}/test"/> <property name="examples.dir" value="${build.dest}/examples"/> <property name="tc.library.path" value="${basedir}/native/.libs"/> <!-- The base directory for component sources --> <property name="source.home" value="java"/> <!-- Tests To Run --> <property name="test.name" value="**/Test*.java"/> <!-- Build classpath --> <path id="classpath"> <pathelement location="${build.dest}/java"/> </path> <!-- Test classpath --> <path id="test.classpath"> <pathelement location="${build.dest}/java"/> <pathelement location="${build.dest}/test"/> <pathelement location="${junit.jar}"/> <pathelement location="${hamcrest.jar}"/> </path> <!-- Examples classpath --> <path id="examples.classpath"> <pathelement location="${build.dest}/java"/> <pathelement location="${build.dest}/examples"/> </path> <!-- =================================================================== --> <!-- prints the environment --> <!-- =================================================================== --> <target name="env"> <echo message="java.home = ${java.home}"/> <echo message="user.home = ${user.home}"/> <!-- <echo message="java.class.path = ${java.class.path}"/> --> <echo message="tc.library.path = ${tc.library.path}"/> <echo message=""/> </target> <target name="prepare" depends="env"> <mkdir dir="${build.dir}"/> <mkdir dir="${basedir}/logs"/> </target> <!-- Download and dependency building --> <target name="proxyflags"> <!-- check proxy parameters. --> <condition property="useproxy"> <equals arg1="${proxy.use}" arg2="on" /> </condition> </target> <target name="setproxy" depends="proxyflags" if="useproxy"> <taskdef name="setproxy" classname="org.apache.tools.ant.taskdefs.optional.net.SetProxy" /> <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" proxyuser="${proxy.user}" proxypassword="${proxy.password}" /> <echo message="Using ${proxy.host}:${proxy.port} to download ${sourcefile}"/> </target> <target name="testexist"> <echo message="Testing for ${destfile}"/> <available file="${destfile}" property="exist"/> </target> <target name="downloadgz" unless="exist" depends="setproxy,testexist"> <!-- Download and extract the package --> <get src="${sourcefile}" dest="${base.path}/file.tar.gz" /> <gunzip src="${base.path}/file.tar.gz" dest="${base.path}/file.tar"/> <untar src="${base.path}/file.tar" dest="${base.path}"/> <delete file="${base.path}/file.tar"/> <delete file="${base.path}/file.tar.gz"/> </target> <target name="downloadzip" unless="exist" depends="setproxy,testexist"> <!-- Download and extract the package --> <get src="${sourcefile}" dest="${base.path}/file.zip" /> <mkdir dir="${destdir}" /> <unzip src="${base.path}/file.zip" dest="${destdir}"/> <delete file="${base.path}/file.zip"/> </target> <target name="downloadfile" unless="exist" depends="setproxy,testexist"> <!-- Download extract the file --> <mkdir dir="${destdir}" /> <get src="${sourcefile}" dest="${destfile}" /> </target> <target name="download" description="Download needed dependencies"> <mkdir dir="${base.path}"/> <antcall target="downloadfile"> <param name="sourcefile" value="${junit.loc}"/> <param name="destfile" value="${junit.jar}"/> <param name="destdir" value="${junit.home}"/> </antcall> <antcall target="downloadfile"> <param name="sourcefile" value="${hamcrest.loc}"/> <param name="destfile" value="${hamcrest.jar}"/> <param name="destdir" value="${hamcrest.home}"/> </antcall> </target> <!-- =================================================================== --> <!-- Creates the API documentation --> <!-- =================================================================== --> <target name="javadocs" description="Java documentation"> <mkdir dir="${docs.dest}"/> <mkdir dir="${docs.dest}/api"/> <javadoc sourcepath="${build.src}/java" destdir="${docs.dest}/api" author="true" version="true" overview="${src.dir}/java/overview.html" packagenames="org.apache.tomcat.*" windowtitle="${title} (Version ${version})" doctitle="<h1>${title} (Version ${version})</h1>" bottom="Copyright 2002-2018 The Apache Software Foundation.<!-- Licensed under the Apache License, Version 2.0 (the 'License'); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.-->"> <classpath refid="classpath"/> </javadoc> </target> <!-- =================================================================== --> <!-- Cleans up the build directory --> <!-- =================================================================== --> <target name="clean" description="Clean build directory"> <delete dir="${build.dir}"/> </target> <!-- =================================================================== --> <!-- Compiles the source directory --> <!-- =================================================================== --> <target name="compile" depends="prepare" description="Compile Java sources"> <mkdir dir="${build.dest}"/> <mkdir dir="${build.dest}/java"/> <mkdir dir="${build.src}"/> <mkdir dir="${build.src}/java"/> <tstamp> <format property="TODAY" pattern="MMM d yyyy" locale="en"/> <format property="TSTAMP" pattern="hh:mm:ss"/> </tstamp> <!-- Copy static resource files --> <filter token="VERSION" value="${version}"/> <filter token="VERSION_NUMBER" value="${version.number}"/> <filter token="VERSION_BUILT" value="${TODAY} ${TSTAMP}"/> <copy todir="${build.src}/java" filtering="yes" encoding="ISO-8859-1"> <fileset dir="${src.dir}/java"> <include name="**/*.java"/> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> <javac srcdir="${build.src}/java" destdir="${build.dest}/java" source="${compile.source}" target="${compile.target}" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}" encoding="ISO-8859-1" includeantruntime="false"> <classpath refid="classpath"/> </javac> <copy todir="${build.dest}/java" filtering="yes" encoding="ISO-8859-1"> <fileset dir="${build.src}/java"> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> </target> <!-- ================================================================== --> <!-- Make Tomcat Native jar --> <!-- ================================================================== --> <target name="jar" depends="compile" description="Generates the Jar file"> <jar destfile="${build.dir}/${final.name}.jar" basedir="${build.dir}/classes/java" excludes="**/*.java"> <manifest> <section name="org/apache/tomcat/jni"> <attribute name="Specification-Title" value="Tomcat Native"/> <attribute name="Specification-Version" value="${version}"/> <attribute name="Specification-Vendor" value="Apache Software Foundation"/> <attribute name="Implementation-Title" value="org.apache.tomcat.jni"/> <attribute name="Implementation-Vendor" value="Apache Software Foundation"/> <attribute name="Implementation-Vendor-Id" value="org.apache"/> <attribute name="Implementation-Version" value="${version} (build ${DSTAMP} ${TSTAMP})"/> </section> </manifest> </jar> </target> <!-- =================================================================== --> <!-- Compiles the test directory --> <!-- =================================================================== --> <target name="compile-tests" depends="compile" description="Compile Java test classes"> <mkdir dir="${build.dest}"/> <mkdir dir="${build.dest}/test"/> <mkdir dir="${build.src}"/> <mkdir dir="${build.src}/test"/> <tstamp> <format property="TODAY" pattern="MMM d yyyy" locale="en"/> <format property="TSTAMP" pattern="hh:mm:ss"/> </tstamp> <!-- Copy static resource files --> <filter token="VERSION" value="${version}"/> <filter token="VERSION_NUMBER" value="${version.number}"/> <filter token="VERSION_BUILT" value="${TODAY} ${TSTAMP}"/> <copy todir="${build.src}/test" filtering="yes" encoding="ISO-8859-1"> <fileset dir="${src.dir}/test"> <include name="**/*.java"/> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> <javac srcdir="${build.src}/test" destdir="${build.dest}/test" source="${compile.source}" target="${compile.target}" debug="on" deprecation="${compile.deprecation}" optimize="${compile.optimize}" encoding="ISO-8859-1" includeantruntime="false"> <classpath refid="test.classpath"/> </javac> <copy todir="${build.dest}/test" filtering="yes" encoding="ISO-8859-1"> <fileset dir="${build.src}/test"> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> </target> <!-- =================================================================== --> <!-- Junit tests --> <!-- =================================================================== --> <target name="test" depends="compile-tests" description="Run the tests"> <echo message="Running Tomcat Native package tests ..."/> <junit printsummary="yes" fork="yes" dir="." showoutput="yes" haltonfailure="${test.failonerror}" > <formatter type="plain"/> <jvmarg value="-Djava.library.path=${tc.library.path}"/> <classpath refid="test.classpath" /> <batchtest todir="${basedir}/logs"> <!-- Include all by default --> <fileset dir="test" includes="${test.name}"> <!-- Exclude helper classes --> <exclude name="**/Tester*.java" /> </fileset> </batchtest> </junit> </target> <!-- =================================================================== --> <!-- Compiles the examples directory --> <!-- =================================================================== --> <target name="compile-examples" depends="compile" description="Compile example Java classes"> <mkdir dir="${build.dest}"/> <mkdir dir="${build.dest}/examples"/> <mkdir dir="${build.src}"/> <mkdir dir="${build.src}/examples"/> <tstamp> <format property="TODAY" pattern="MMM d yyyy" locale="en"/> <format property="TSTAMP" pattern="hh:mm:ss"/> </tstamp> <!-- Copy static resource files --> <filter token="VERSION" value="${version}"/> <filter token="VERSION_NUMBER" value="${version.number}"/> <filter token="VERSION_BUILT" value="${TODAY} ${TSTAMP}"/> <copy todir="${build.src}/examples" filtering="yes" encoding="ISO-8859-1"> <fileset dir="${src.dir}/examples"> <include name="**/*.java"/> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> <javac srcdir="${build.src}/examples" destdir="${build.dest}/examples" source="${compile.source}" target="${compile.target}" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}" encoding="ISO-8859-1"> <classpath refid="examples.classpath"/> </javac> <copy todir="${build.dest}/examples" filtering="yes" encoding="ISO-8859-1"> <fileset dir="${build.src}/examples"> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> </target> <!-- =================================================================== --> <!-- executes the examples --> <!-- =================================================================== --> <target name="run-echo" depends="compile-examples" description="Run the Echo example"> <echo message="Running Tomcat Native Echo example ..."/> <java dir="${examples.dir}" classname="org.apache.tomcat.jni.Echo" fork="yes" failonerror="${test.failonerror}"> <classpath refid="examples.classpath"/> <env key="PATH" path="${tc.library.path}:${java.library.path}"/> <env key="Path" path="${tc.library.path}:${java.library.path}"/> <jvmarg value="-Djava.library.path=${tc.library.path}"/> </java> </target> <target name="run-ssl-server" depends="compile-examples" description="Run the SSL Server example"> <echo message="Running Tomcat Native SSL Server example ..."/> <java dir="${examples.dir}" classname="org.apache.tomcat.jni.SSLServer" fork="yes" failonerror="${test.failonerror}"> <env key="PATH" path="${tc.library.path}:${java.library.path}"/> <env key="Path" path="${tc.library.path}:${java.library.path}"/> <classpath refid="examples.classpath"/> <jvmarg value="-Djava.library.path=${tc.library.path}"/> </java> </target> <target name="run-local-server" depends="compile-examples" description="Run the Local Server example"> <echo message="Running Tomcat Native Local Server example ..."/> <java dir="${examples.dir}" classname="org.apache.tomcat.jni.LocalServer" fork="yes" failonerror="${test.failonerror}"> <classpath refid="examples.classpath"/> <env key="PATH" path="${tc.library.path}:${java.library.path}"/> <env key="Path" path="${tc.library.path}:${java.library.path}"/> <jvmarg value="-Djava.library.path=${tc.library.path}"/> </java> </target> </project> tomcat-native-1.2.17-src/native/ 0000775 0001751 0001751 00000000000 13306201160 016232 5 ustar jfclere jfclere tomcat-native-1.2.17-src/native/os/ 0000775 0001751 0001751 00000000000 13306201151 016653 5 ustar jfclere jfclere tomcat-native-1.2.17-src/native/os/netware/ 0000775 0001751 0001751 00000000000 13306201152 020321 5 ustar jfclere jfclere tomcat-native-1.2.17-src/native/os/netware/system.c 0000664 0001751 0001751 00000002351 12530044054 022016 0 ustar jfclere jfclere /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "apr.h" #include "apr_pools.h" #include "apr_network_io.h" #include "apr_poll.h" #include "tcn.h" TCN_IMPLEMENT_CALL(jboolean, OS, is)(TCN_STDARGS, jint type) { UNREFERENCED_STDARGS; if (type == 2) return JNI_TRUE; else return JNI_FALSE; } TCN_IMPLEMENT_CALL(jint, OS, info)(TCN_STDARGS, jlongArray inf) { UNREFERENCED_STDARGS; UNREFERENCED(inf); return APR_ENOTIMPL; } tomcat-native-1.2.17-src/native/os/win32/ 0000775 0001751 0001751 00000000000 13306201152 017616 5 ustar jfclere jfclere tomcat-native-1.2.17-src/native/os/win32/ntpipe.c 0000664 0001751 0001751 00000035155 12530044054 021276 0 ustar jfclere jfclere /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** NT Pipes network wrapper */ #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0500 #endif #define STRICT #include <winsock2.h> #include <mswsock.h> #include <ws2tcpip.h> #include <sddl.h> #include "tcn.h" #include "apr_thread_mutex.h" #include "apr_poll.h" #ifdef TCN_DO_STATISTICS #include "apr_atomic.h" static volatile apr_uint32_t ntp_created = 0; static volatile apr_uint32_t ntp_closed = 0; static volatile apr_uint32_t ntp_cleared = 0; static volatile apr_uint32_t ntp_accepted = 0; void ntp_network_dump_statistics() { fprintf(stderr, "NT Network Statistics ..\n"); fprintf(stderr, "Sockets created : %d\n", ntp_created); fprintf(stderr, "Sockets accepted : %d\n", ntp_accepted); fprintf(stderr, "Sockets closed : %d\n", ntp_closed); fprintf(stderr, "Sockets cleared : %d\n", ntp_cleared); } #endif #define DEFNAME "\\\\.\\PIPE\\TOMCATNATIVEPIPE" #define DEFNAME_FMT "\\\\.\\PIPE\\TOMCATNATIVEPIPE%08X%08X" #define DEFSIZE 8192 #define DEFTIMEOUT 60000 #define TCN_NTP_UNKNOWN 0 #define TCN_NTP_CLIENT 1 #define TCN_NTP_SERVER 2 typedef struct { apr_pool_t *pool; apr_socket_t *sock; /* Dummy socket */ OVERLAPPED rd_o; OVERLAPPED wr_o; HANDLE h_pipe; HANDLE rd_event; HANDLE wr_event; DWORD timeout; int mode; /* Client or server mode */ int nmax; DWORD sndbuf; DWORD rcvbuf; char name[MAX_PATH+1]; SECURITY_ATTRIBUTES sa; } tcn_ntp_conn_t; static const char *NTSD_STRING = "D:" /* Discretionary ACL */ "(D;OICI;GA;;;BG)" /* Deny access to Built-in Guests */ "(D;OICI;GA;;;AN)" /* Deny access to Anonymous Logon */ "(A;OICI;GRGWGX;;;AU)" /* Allow read/write/execute to Authenticated Users */ "(A;OICI;GA;;;BA)" /* Allow full control to Administrators */ "(A;OICI;GA;;;LS)" /* Allow full control to Local service account */ "(A;OICI;GA;;;SY)"; /* Allow full control to Local system */ static apr_status_t APR_THREAD_FUNC ntp_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; if (t < 0) con->timeout = INFINITE; else con->timeout = (DWORD)(apr_time_as_msec(t)); return APR_SUCCESS; } static apr_status_t APR_THREAD_FUNC ntp_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t*)sock; if (con->timeout == INFINITE) *t = -1; else *t = con->timeout * 1000; return APR_SUCCESS; } static APR_INLINE apr_status_t APR_THREAD_FUNC ntp_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; apr_status_t rv = APR_SUCCESS; switch (opt) { case APR_SO_SNDBUF: con->sndbuf = (DWORD)on; break; case APR_SO_RCVBUF: con->rcvbuf = (DWORD)on; break; default: rv = APR_EINVAL; break; } return rv; } static APR_INLINE apr_status_t APR_THREAD_FUNC ntp_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; apr_status_t rv = APR_SUCCESS; switch (opt) { case APR_SO_SNDBUF: *on = con->sndbuf; break; case APR_SO_RCVBUF: *on = con->rcvbuf; break; default: rv = APR_EINVAL; break; } return rv; } static apr_status_t ntp_cleanup(void *data) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)data; if (con) { if (con->h_pipe) { FlushFileBuffers(con->h_pipe); CloseHandle(con->h_pipe); con->h_pipe = NULL; } if (con->rd_event) { CloseHandle(con->rd_event); con->rd_event = NULL; } if (con->wr_event) { CloseHandle(con->wr_event); con->wr_event= NULL; } } #ifdef TCN_DO_STATISTICS apr_atomic_inc32(&ntp_cleared); #endif return APR_SUCCESS; } static apr_status_t APR_THREAD_FUNC ntp_socket_shutdown(apr_socket_t *sock, apr_shutdown_how_e how) { UNREFERENCED(how); return ntp_cleanup(sock);; } static apr_status_t APR_THREAD_FUNC ntp_socket_close(apr_socket_t *sock) { #ifdef TCN_DO_STATISTICS apr_atomic_inc32(&ntp_closed); #endif return ntp_cleanup(sock);; } static apr_status_t APR_THREAD_FUNC ntp_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; DWORD readed; if (!ReadFile(con->h_pipe, buf, (DWORD)*len, &readed, &con->rd_o)) { DWORD err = GetLastError(); if (err == ERROR_IO_PENDING) { DWORD r = WaitForSingleObject(con->rd_event, con->timeout); if (r == WAIT_TIMEOUT) return APR_TIMEUP; else if (r != WAIT_OBJECT_0) return APR_EOF; } else if (err == ERROR_BROKEN_PIPE || err == ERROR_NO_DATA) { /* Server closed the pipe */ return APR_EOF; } GetOverlappedResult(con->h_pipe, &con->rd_o, &readed, FALSE); } *len = readed; return APR_SUCCESS; } static apr_status_t APR_THREAD_FUNC ntp_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; DWORD written; if (!WriteFile(con->h_pipe, buf, (DWORD)*len, &written, &con->wr_o)) { DWORD err = GetLastError(); if (err == ERROR_IO_PENDING) { DWORD r = WaitForSingleObject(con->wr_event, con->timeout); if (r == WAIT_TIMEOUT) return APR_TIMEUP; else if (r != WAIT_OBJECT_0) return APR_EOF; } else if (err == ERROR_BROKEN_PIPE || err == ERROR_NO_DATA) { /* Server closed the pipe */ return APR_EOF; } GetOverlappedResult(con->h_pipe, &con->wr_o, &written, FALSE); } *len = written; return APR_SUCCESS; } static apr_status_t APR_THREAD_FUNC ntp_socket_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len) { tcn_ntp_conn_t *con = (tcn_ntp_conn_t *)sock; apr_status_t rv; apr_size_t written = 0; apr_int32_t i; for (i = 0; i < nvec; i++) { apr_size_t rd = vec[i].iov_len; if ((rv = ntp_socket_send((apr_socket_t *)con, vec[i].iov_base, &rd)) != APR_SUCCESS) { *len = written; return rv; } written += rd; } *len = written; return APR_SUCCESS; } static apr_status_t ntp_socket_cleanup(void *data) { tcn_socket_t *s = (tcn_socket_t *)data; if (s->net->cleanup) { (*s->net->cleanup)(s->opaque); s->net->cleanup = NULL; } #ifdef TCN_DO_STATISTICS apr_atomic_inc32(&ntp_cleared); #endif return APR_SUCCESS; } static tcn_nlayer_t ntp_socket_layer = { TCN_SOCKET_NTPIPE, ntp_cleanup, ntp_socket_close, ntp_socket_shutdown, ntp_socket_opt_get, ntp_socket_opt_set, ntp_socket_timeout_get, ntp_socket_timeout_set, ntp_socket_send, ntp_socket_sendv, ntp_socket_recv }; static BOOL create_DACL(LPSECURITY_ATTRIBUTES psa) { return ConvertStringSecurityDescriptorToSecurityDescriptor( NTSD_STRING, SDDL_REVISION_1, &(psa->lpSecurityDescriptor), NULL); } TCN_IMPLEMENT_CALL(jlong, Local, create)(TCN_STDARGS, jstring name, jlong pool) { apr_pool_t *p = J2P(pool, apr_pool_t *); tcn_socket_t *s = NULL; tcn_ntp_conn_t *con = NULL; TCN_ALLOC_CSTRING(name); UNREFERENCED(o); TCN_ASSERT(pool != 0); #ifdef TCN_DO_STATISTICS ntp_created++; #endif con = (tcn_ntp_conn_t *)apr_pcalloc(p, sizeof(tcn_ntp_conn_t)); con->pool = p; con->mode = TCN_NTP_UNKNOWN; con->nmax = PIPE_UNLIMITED_INSTANCES; con->timeout = DEFTIMEOUT; con->sndbuf = DEFSIZE; con->rcvbuf = DEFSIZE; if (J2S(name)) { strncpy(con->name, J2S(name), MAX_PATH); con->name[MAX_PATH] = '\0'; TCN_FREE_CSTRING(name); } else strcpy(con->name, DEFNAME); con->sa.nLength = sizeof(con->sa); con->sa.bInheritHandle = TRUE; if (!create_DACL(&con->sa)) { tcn_ThrowAPRException(e, apr_get_os_error()); return 0; } s = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t)); s->pool = p; s->net = &ntp_socket_layer; s->opaque = con; apr_pool_cleanup_register(p, (const void *)s, ntp_socket_cleanup, apr_pool_cleanup_null); fflush(stderr); return P2J(s); } TCN_IMPLEMENT_CALL(jint, Local, bind)(TCN_STDARGS, jlong sock, jlong sa) { tcn_socket_t *s = J2P(sock, tcn_socket_t *); UNREFERENCED_STDARGS; UNREFERENCED(sa); TCN_ASSERT(sock != 0); if (s->net->type == TCN_SOCKET_NTPIPE) { tcn_ntp_conn_t *c = (tcn_ntp_conn_t *)s->opaque; c->mode = TCN_NTP_SERVER; return APR_SUCCESS; } else return APR_EINVAL; } TCN_IMPLEMENT_CALL(jint, Local, listen)(TCN_STDARGS, jlong sock, jint backlog) { tcn_socket_t *s = J2P(sock, tcn_socket_t *); UNREFERENCED_STDARGS; TCN_ASSERT(sock != 0); if (s->net->type == TCN_SOCKET_NTPIPE) { tcn_ntp_conn_t *c = (tcn_ntp_conn_t *)s->opaque; c->mode = TCN_NTP_SERVER; if (backlog > 0) c->nmax = backlog; else c->nmax = PIPE_UNLIMITED_INSTANCES; return APR_SUCCESS; } else return APR_EINVAL; } TCN_IMPLEMENT_CALL(jlong, Local, accept)(TCN_STDARGS, jlong sock) { tcn_socket_t *s = J2P(sock, tcn_socket_t *); apr_pool_t *p = NULL; tcn_socket_t *a = NULL; tcn_ntp_conn_t *con = NULL; UNREFERENCED(o); TCN_ASSERT(sock != 0); TCN_THROW_IF_ERR(apr_pool_create(&p, s->pool), p); if (s->net->type == TCN_SOCKET_NTPIPE) { tcn_ntp_conn_t *c = (tcn_ntp_conn_t *)s->opaque; con = (tcn_ntp_conn_t *)apr_pcalloc(p, sizeof(tcn_ntp_conn_t)); con->pool = p; con->mode = TCN_NTP_SERVER; con->nmax = c->nmax; con->timeout = c->timeout; strcpy(con->name, c->name); con->h_pipe = CreateNamedPipe(con->name, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, con->nmax, con->sndbuf, con->rcvbuf, con->timeout, &c->sa); if (con->h_pipe == INVALID_HANDLE_VALUE) { tcn_ThrowAPRException(e, apr_get_os_error()); goto cleanup; } /* Block until a client connects */ if (!ConnectNamedPipe(con->h_pipe, NULL)) { DWORD err = GetLastError(); if (err != ERROR_PIPE_CONNECTED) { CloseHandle(con->h_pipe); tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(err)); goto cleanup; } } /* Create overlapped events */ con->rd_event = CreateEvent(NULL, TRUE, FALSE, NULL); con->rd_o.hEvent = con->rd_event; con->wr_event = CreateEvent(NULL, TRUE, FALSE, NULL); con->wr_o.hEvent = con->wr_event; } else { tcn_ThrowAPRException(e, APR_ENOTIMPL); goto cleanup; } if (con) { #ifdef TCN_DO_STATISTICS apr_atomic_inc32(&ntp_accepted); #endif a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t)); a->pool = p; a->net = &ntp_socket_layer; a->opaque = con; apr_pool_cleanup_register(p, (const void *)a, ntp_socket_cleanup, apr_pool_cleanup_null); } return P2J(a); cleanup: if (p) apr_pool_destroy(p); return 0; } TCN_IMPLEMENT_CALL(jint, Local, connect)(TCN_STDARGS, jlong sock, jlong sa) { tcn_socket_t *s = J2P(sock, tcn_socket_t *); apr_pool_t *p = NULL; tcn_socket_t *a = NULL; tcn_ntp_conn_t *con = NULL; UNREFERENCED(o); UNREFERENCED(sa); TCN_ASSERT(sock != 0); if (s->net->type != TCN_SOCKET_NTPIPE) return APR_ENOTSOCK; con = (tcn_ntp_conn_t *)s->opaque; if (con->mode == TCN_NTP_SERVER) return APR_EINVAL; con->mode = TCN_NTP_CLIENT; while (TRUE) { con->h_pipe = CreateFile(con->name, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE , NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if (con->h_pipe != INVALID_HANDLE_VALUE) break; if (GetLastError() == ERROR_PIPE_BUSY) { /* All pipe instances are busy, so wait for * timeout value specified by the server process in * the CreateNamedPipe function. */ if (!WaitNamedPipe(con->name, NMPWAIT_USE_DEFAULT_WAIT)) return apr_get_os_error(); } else return apr_get_os_error(); } /* Create overlapped events */ con->rd_event = CreateEvent(NULL, TRUE, FALSE, NULL); con->rd_o.hEvent = con->rd_event; con->wr_event = CreateEvent(NULL, TRUE, FALSE, NULL); con->wr_o.hEvent = con->wr_event; return APR_SUCCESS; } tomcat-native-1.2.17-src/native/os/win32/libtcnative.rc 0000664 0001751 0001751 00000005167 13203020730 022456 0 ustar jfclere jfclere #include <windows.h> LANGUAGE 0x9,0x1 1 11 logmessages.bin #define TCN_COPYRIGHT "Licensed to the Apache Software Foundation (ASF) under " \ "one or more contributor license agreements. See the " \ "NOTICE file distributed with this work for additional " \ "information regarding copyright ownership." #define TCN_LICENSE "The ASF licenses this file to You under the Apache " \ "License, Version 2.0 (the ""License""); you may not use " \ "this file except in compliance with the License. You " \ "may obtain a copy of the License at\r\n\r\n" \ "http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n" \ "Unless required by applicable law or agreed to in " \ "writing, software distributed under the License is " \ "distributed on an ""AS IS"" BASIS, WITHOUT WARRANTIES " \ "OR CONDITIONS OF ANY KIND, either express or implied. " \ "See the License for the specific language governing " \ "permissions and limitations under the License." #define TCN_VERSION "1.2.17" 1000 ICON "apache.ico" 1001 DIALOGEX 0, 0, 252, 51 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION CAPTION "Password prompt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON 1000,-1,8,6,21,20 LTEXT "Some of your private key files are encrypted for security reasons.\nIn order to read them you have to provide the pass phrases.", -1,29,5,220,19 LTEXT "Enter password:",-1,7,28,75,8 EDITTEXT 1002,67,27,174,12,ES_PASSWORD | ES_AUTOHSCROLL END 1 VERSIONINFO FILEVERSION 1,2,17,0 PRODUCTVERSION 1,2,17,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", TCN_LICENSE "\0" VALUE "CompanyName", "Apache Software Foundation\0" VALUE "FileDescription", "Tomcat Native Java Library\0" VALUE "FileVersion", TCN_VERSION "\0" VALUE "InternalName", "libtcnative-1\0" VALUE "LegalCopyright", TCN_COPYRIGHT "\0" VALUE "OriginalFilename", "libtcnative-1.dll\0" VALUE "ProductName", "Tomcat Native Java Library\0" VALUE "ProductVersion", TCN_VERSION "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END tomcat-native-1.2.17-src/native/os/win32/system.c 0000664 0001751 0001751 00000032532 13047053203 021317 0 ustar jfclere jfclere /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0500 #endif #include <winsock2.h> #include <mswsock.h> #include <ws2tcpip.h> #include <tlhelp32.h> #include "apr.h" #include "apr_pools.h" #include "apr_poll.h" #include "apr_network_io.h" #include "apr_arch_misc.h" /* for apr_os_level */ #include "apr_arch_atime.h" /* for FileTimeToAprTime */ #include "tcn.h" #ifdef HAVE_OPENSSL #include "ssl_private.h" #endif #pragma warning(push) #pragma warning(disable : 4201) #if (_WIN32_WINNT < 0x0501) #include <winternl.h> #endif #include <psapi.h> #pragma warning(pop) static CRITICAL_SECTION dll_critical_section; /* dll's critical section */ static HINSTANCE dll_instance = NULL; static SYSTEM_INFO dll_system_info; static HANDLE h_kernel = NULL; static HANDLE h_ntdll = NULL; static char dll_file_name[MAX_PATH]; typedef BOOL (WINAPI *pfnGetSystemTimes)(LPFILETIME, LPFILETIME, LPFILETIME); static pfnGetSystemTimes fnGetSystemTimes = NULL; #if (_WIN32_WINNT < 0x0501) typedef NTSTATUS (WINAPI *pfnNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG); static pfnNtQuerySystemInformation fnNtQuerySystemInformation = NULL; #endif BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, LPVOID reserved) { switch (reason) { /** The DLL is loading due to process * initialization or a call to LoadLibrary. */ case DLL_PROCESS_ATTACH: InitializeCriticalSection(&dll_critical_section); dll_instance = instance; GetSystemInfo(&dll_system_info); if ((h_kernel = LoadLibrary("kernel32.dll")) != NULL) fnGetSystemTimes = (pfnGetSystemTimes)GetProcAddress(h_kernel, "GetSystemTimes"); if (fnGetSystemTimes == NULL) { FreeLibrary(h_kernel); h_kernel = NULL; #if (_WIN32_WINNT < 0x0501) if ((h_ntdll = LoadLibrary("ntdll.dll")) != NULL) fnNtQuerySystemInformation = (pfnNtQuerySystemInformation)GetProcAddress(h_ntdll, "NtQuerySystemInformation"); if (fnNtQuerySystemInformation == NULL) { FreeLibrary(h_ntdll); h_ntdll = NULL; } #endif } GetModuleFileName(instance, dll_file_name, sizeof(dll_file_name)); break; /** The attached process creates a new thread. */ case DLL_THREAD_ATTACH: break; /** The thread of the attached process terminates. */ case DLL_THREAD_DETACH: #ifdef HAVE_OPENSSL ERR_remove_thread_state(NULL); #endif break; /** DLL unload due to process termination * or FreeLibrary. */ case DLL_PROCESS_DETACH: if (h_kernel) FreeLibrary(h_kernel); if (h_ntdll) FreeLibrary(h_ntdll); DeleteCriticalSection(&dll_critical_section); break; default: break; } return TRUE; UNREFERENCED_PARAMETER(reserved); } TCN_IMPLEMENT_CALL(jstring, OS, syserror)(TCN_STDARGS, jint err) { jstring str; void *buf; UNREFERENCED(o); if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL)) { str = AJP_TO_JSTRING("Unknown Error"); } else { str = AJP_TO_JSTRING((const char *)buf); LocalFree(buf); } return str; } TCN_IMPLEMENT_CALL(jstring, OS, expand)(TCN_STDARGS, jstring val) { jstring str; jchar buf[TCN_BUFFER_SZ] = L""; DWORD len; TCN_ALLOC_WSTRING(val); UNREFERENCED(o); TCN_INIT_WSTRING(val); len = ExpandEnvironmentStringsW(J2W(val), buf, TCN_BUFFER_SZ - 1); if (len > (TCN_BUFFER_SZ - 1)) { jchar *dbuf = malloc((len + 1) * 2); ExpandEnvironmentStringsW(J2W(val), dbuf, len); str = (*e)->NewString(e, dbuf, lstrlenW(dbuf)); free(dbuf); } else str = (*e)->NewString(e, buf, lstrlenW(buf)); TCN_FREE_WSTRING(val); return str; } #define LOG_MSG_EMERG 0xC0000001L #define LOG_MSG_ERROR 0xC0000002L #define LOG_MSG_NOTICE 0x80000003L #define LOG_MSG_WARN 0x80000004L #define LOG_MSG_INFO 0x40000005L #define LOG_MSG_DEBUG 0x00000006L #define LOG_MSG_DOMAIN "Native" static char log_domain[MAX_PATH] = "Native"; static void init_log_source(const char *domain) { HKEY key; DWORD ts; char event_key[MAX_PATH]; strcpy(event_key, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\"); strcat(event_key, domain); if (!RegCreateKey(HKEY_LOCAL_MACHINE, event_key, &key)) { RegSetValueEx(key, "EventMessageFile", 0, REG_SZ, (LPBYTE)&dll_file_name[0], lstrlenA(dll_file_name) + 1); ts = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; RegSetValueEx(key, "TypesSupported", 0, REG_DWORD, (LPBYTE) &ts, sizeof(DWORD)); RegCloseKey(key); } strcpy(log_domain, domain); } TCN_IMPLEMENT_CALL(void, OS, sysloginit)(TCN_STDARGS, jstring domain) { const char *d; TCN_ALLOC_CSTRING(domain); UNREFERENCED(o); if ((d = J2S(domain)) == NULL) d = LOG_MSG_DOMAIN; init_log_source(d); TCN_FREE_CSTRING(domain); } TCN_IMPLEMENT_CALL(void, OS, syslog)(TCN_STDARGS, jint level, jstring msg) { TCN_ALLOC_CSTRING(msg); DWORD id = LOG_MSG_DEBUG; WORD il = EVENTLOG_SUCCESS; HANDLE source; const char *messages[1]; UNREFERENCED(o); switch (level) { case TCN_LOG_EMERG: id = LOG_MSG_EMERG; il = EVENTLOG_ERROR_TYPE; break; case TCN_LOG_ERROR: id = LOG_MSG_ERROR; il = EVENTLOG_ERROR_TYPE; break; case TCN_LOG_NOTICE: id = LOG_MSG_NOTICE; il = EVENTLOG_WARNING_TYPE; break; case TCN_LOG_WARN: id = LOG_MSG_WARN; il = EVENTLOG_WARNING_TYPE; break; case TCN_LOG_INFO: id = LOG_MSG_INFO; il = EVENTLOG_INFORMATION_TYPE; break; } messages[0] = J2S(msg); source = RegisterEventSource(NULL, log_domain); if (source != NULL) { ReportEvent(source, il, 0, id, NULL, 1, 0, messages, NULL); DeregisterEventSource(source); } TCN_FREE_CSTRING(msg); } TCN_IMPLEMENT_CALL(jboolean, OS, is)(TCN_STDARGS, jint type) { UNREFERENCED_STDARGS; #ifdef _WIN64 if (type == 4) return JNI_TRUE; else #endif if (type == 3) return JNI_TRUE; else return JNI_FALSE; } TCN_IMPLEMENT_CALL(jint, OS, info)(TCN_STDARGS, jlongArray inf) { MEMORYSTATUSEX ms; ULONGLONG st[4]; FILETIME ft[4]; PROCESS_MEMORY_COUNTERS pmc; jint rv; int i; jsize ilen = (*e)->GetArrayLength(e, inf); jlong *pvals = (*e)->GetLongArrayElements(e, inf, NULL); if (ilen < 16) { return APR_EINVAL; } for (i = 0; i < 16; i++) pvals[i] = 0; ms.dwLength = sizeof(MEMORYSTATUSEX); UNREFERENCED(o); if (GlobalMemoryStatusEx(&ms)) { pvals[0] = (jlong)ms.ullTotalPhys; pvals[1] = (jlong)ms.ullAvailPhys; pvals[2] = (jlong)ms.ullTotalPageFile; pvals[3] = (jlong)ms.ullAvailPageFile; /* Slots 4 and 5 are for shared memory */ pvals[6] = (jlong)ms.dwMemoryLoad; } else goto cleanup; memset(st, 0, sizeof(st)); if (fnGetSystemTimes) { if ((*fnGetSystemTimes)(&ft[0], &ft[1], &ft[2])) { st[0] = (((ULONGLONG)ft[0].dwHighDateTime << 32) | ft[0].dwLowDateTime) / 10; st[1] = (((ULONGLONG)ft[1].dwHighDateTime << 32) | ft[1].dwLowDateTime) / 10; st[2] = (((ULONGLONG)ft[2].dwHighDateTime << 32) | ft[2].dwLowDateTime) / 10; } else goto cleanup; } #if (_WIN32_WINNT < 0x0501) else if (fnNtQuerySystemInformation) { BYTE buf[2048]; /* This should ne enough for 32 processors */ NTSTATUS rs = (*fnNtQuerySystemInformation)(SystemProcessorPerformanceInformation, (LPVOID)buf, 2048, NULL); if (rs == 0) { PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION pspi = (PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)&buf[0]; DWORD i; /* Calculate all processors */ for (i = 0; i < dll_system_info.dwNumberOfProcessors; i++) { st[0] += pspi[i].IdleTime.QuadPart / 10; st[1] += pspi[i].KernelTime.QuadPart / 10; st[2] += pspi[i].UserTime.QuadPart / 10; } } else goto cleanup; } #endif pvals[7] = st[0]; pvals[8] = st[1]; pvals[9] = st[2]; memset(st, 0, sizeof(st)); if (GetProcessTimes(GetCurrentProcess(), &ft[0], &ft[1], &ft[2], &ft[3])) { FileTimeToAprTime((apr_time_t *)&st[0], &ft[0]); st[1] = (((ULONGLONG)ft[2].dwHighDateTime << 32) | ft[2].dwLowDateTime) / 10; st[2] = (((ULONGLONG)ft[3].dwHighDateTime << 32) | ft[3].dwLowDateTime) / 10; } pvals[10] = st[0]; pvals[11] = st[1]; pvals[12] = st[2]; if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) { pvals[13] = pmc.WorkingSetSize; pvals[14] = pmc.PeakWorkingSetSize; pvals[15] = pmc.PageFaultCount; } (*e)->ReleaseLongArrayElements(e, inf, pvals, 0); return APR_SUCCESS; cleanup: rv = apr_get_os_error(); (*e)->ReleaseLongArrayElements(e, inf, pvals, 0); return rv; } #ifdef HAVE_OPENSSL static DWORD WINAPI password_thread(void *data) { tcn_pass_cb_t *cb = (tcn_pass_cb_t *)data; MSG msg; HWINSTA hwss; HWINSTA hwsu; HDESK hwds; HDESK hwdu; HWND hwnd; /* Ensure connection to service window station and desktop, and * save their handles. */ GetDesktopWindow(); hwss = GetProcessWindowStation(); hwds = GetThreadDesktop(GetCurrentThreadId()); /* Impersonate the client and connect to the User's * window station and desktop. */ hwsu = OpenWindowStation("WinSta0", FALSE, MAXIMUM_ALLOWED); if (hwsu == NULL) { ExitThread(1); return 1; } SetProcessWindowStation(hwsu); hwdu = OpenDesktop("Default", 0, FALSE, MAXIMUM_ALLOWED); if (hwdu == NULL) { SetProcessWindowStation(hwss); CloseWindowStation(hwsu); ExitThread(1); return 1; } SetThreadDesktop(hwdu); hwnd = CreateDialog(dll_instance, MAKEINTRESOURCE(1001), NULL, NULL); if (hwnd != NULL) ShowWindow(hwnd, SW_SHOW); else { ExitThread(1); return 1; } while (1) { if (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) { if (msg.message == WM_KEYUP) { int nVirtKey = (int)msg.wParam; if (nVirtKey == VK_ESCAPE) { DestroyWindow(hwnd); break; } else if (nVirtKey == VK_RETURN) { HWND he = GetDlgItem(hwnd, 1002); if (he) { int n = GetWindowText(he, cb->password, SSL_MAX_PASSWORD_LEN - 1); cb->password[n] = '\0'; } DestroyWindow(hwnd); break; } } TranslateMessage(&msg); DispatchMessage(&msg); } else Sleep(100); } /* Restore window station and desktop. */ SetThreadDesktop(hwds); SetProcessWindowStation(hwss); CloseDesktop(hwdu); CloseWindowStation(hwsu); ExitThread(0); return 0; } int WIN32_SSL_password_prompt(tcn_pass_cb_t *data) { DWORD id; HANDLE thread; /* TODO: See how to display this from service mode */ thread = CreateThread(NULL, 0, password_thread, data, 0, &id); WaitForSingleObject(thread, INFINITE); CloseHandle(thread); return (int)strlen(data->password); } #endif tomcat-native-1.2.17-src/native/os/win32/registry.c 0000664 0001751 0001751 00000055431 12530044054 021646 0 ustar jfclere jfclere /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #include <winsock2.h> #include <mswsock.h> #include <ws2tcpip.h> #include <shlwapi.h> #include <tlhelp32.h> #include "apr.h" #include "apr_pools.h" #include "apr_arch_misc.h" /* for apr_os_level */ #include "apr_arch_atime.h" /* for FileTimeToAprTime */ #include "tcn.h" #define SAFE_CLOSE_KEY(k) \ if ((k) != NULL && (k) != INVALID_HANDLE_VALUE) { \ RegCloseKey((k)); \ (k) = NULL; \ } typedef struct { apr_pool_t *pool; HKEY root; HKEY key; } tcn_nt_registry_t; #define TCN_HKEY_CLASSES_ROOT 1 #define TCN_HKEY_CURRENT_CONFIG 2 #define TCN_HKEY_CURRENT_USER 3 #define TCN_HKEY_LOCAL_MACHINE 4 #define TCN_HKEY_USERS 5 static const struct { HKEY k; } TCN_KEYS[] = { INVALID_HANDLE_VALUE, HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, INVALID_HANDLE_VALUE }; #define TCN_KEY_ALL_ACCESS 0x0001 #define TCN_KEY_CREATE_LINK 0x0002 #define TCN_KEY_CREATE_SUB_KEY 0x0004 #define TCN_KEY_ENUMERATE_SUB_KEYS 0x0008 #define TCN_KEY_EXECUTE 0x0010 #define TCN_KEY_NOTIFY 0x0020 #define TCN_KEY_QUERY_VALUE 0x0040 #define TCN_KEY_READ 0x0080 #define TCN_KEY_SET_VALUE 0x0100 #define TCN_KEY_WOW64_64KEY 0x0200 #define TCN_KEY_WOW64_32KEY 0x0400 #define TCN_KEY_WRITE 0x0800 #define TCN_REGSAM(s, x) \ s = 0; \ if (x & TCN_KEY_ALL_ACCESS) \ s |= KEY_ALL_ACCESS; \ if (x & TCN_KEY_CREATE_LINK) \ s |= KEY_CREATE_LINK; \ if (x & TCN_KEY_CREATE_SUB_KEY) \ s |= KEY_CREATE_SUB_KEY; \ if (x & TCN_KEY_ENUMERATE_SUB_KEYS) \ s |= KEY_ENUMERATE_SUB_KEYS; \ if (x & TCN_KEY_EXECUTE) \ s |= KEY_EXECUTE; \ if (x & TCN_KEY_NOTIFY) \ s |= KEY_NOTIFY; \ if (x & TCN_KEY_READ) \ s |= KEY_READ; \ if (x & TCN_KEY_SET_VALUE) \ s |= KEY_SET_VALUE; \ if (x & TCN_KEY_WOW64_64KEY) \ s |= KEY_WOW64_64KEY; \ if (x & TCN_KEY_WOW64_32KEY) \ s |= KEY_WOW64_32KEY; \ if (x & TCN_KEY_WRITE) \ s |= KEY_WRITE #define TCN_REG_BINARY 1 #define TCN_REG_DWORD 2 #define TCN_REG_EXPAND_SZ 3 #define TCN_REG_MULTI_SZ 4 #define TCN_REG_QWORD 5 #define TCN_REG_SZ 6 static const struct { DWORD t; } TCN_REGTYPES[] = { REG_NONE, REG_BINARY, REG_DWORD, REG_EXPAND_SZ, REG_MULTI_SZ, REG_QWORD, REG_SZ, REG_NONE }; static apr_status_t registry_cleanup(void *data) { tcn_nt_registry_t *reg = (tcn_nt_registry_t *)data; if (reg) { SAFE_CLOSE_KEY(reg->key); } return APR_SUCCESS; } TCN_IMPLEMENT_CALL(jlong, Registry, create)(TCN_STDARGS, jint root, jstring name, jint sam, jlong pool) { apr_pool_t *p = J2P(pool, apr_pool_t *); tcn_nt_registry_t *reg = NULL; TCN_ALLOC_WSTRING(name); HKEY key; LONG rc; REGSAM s; UNREFERENCED(o); TCN_ASSERT(pool != 0); if (root < TCN_HKEY_CLASSES_ROOT || root > TCN_HKEY_USERS) { tcn_ThrowException(e, "Invalid Registry Root Key"); goto cleanup; } if (sam < TCN_KEY_ALL_ACCESS || root > TCN_KEY_WRITE) { tcn_ThrowException(e, "Invalid Registry Key Security"); goto cleanup; } reg = (tcn_nt_registry_t *)apr_palloc(p, sizeof(tcn_nt_registry_t)); reg->pool = p; reg->root = TCN_KEYS[root].k; reg->key = NULL; TCN_INIT_WSTRING(name); TCN_REGSAM(s, sam); rc = RegCreateKeyExW(reg->root, J2W(name), 0, NULL, REG_OPTION_NON_VOLATILE, s, NULL, &key, NULL); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } reg->key = key; apr_pool_cleanup_register(p, (const void *)reg, registry_cleanup, apr_pool_cleanup_null); cleanup: TCN_FREE_WSTRING(name); return P2J(reg); } TCN_IMPLEMENT_CALL(jlong, Registry, open)(TCN_STDARGS, jint root, jstring name, jint sam, jlong pool) { apr_pool_t *p = J2P(pool, apr_pool_t *); tcn_nt_registry_t *reg = NULL; TCN_ALLOC_WSTRING(name); HKEY key; LONG rc; REGSAM s; UNREFERENCED(o); TCN_ASSERT(pool != 0); if (root < TCN_HKEY_CLASSES_ROOT || root > TCN_HKEY_USERS) { tcn_ThrowException(e, "Invalid Registry Root Key"); goto cleanup; } if (sam < TCN_KEY_ALL_ACCESS || root > TCN_KEY_WRITE) { tcn_ThrowException(e, "Invalid Registry Key Security"); goto cleanup; } reg = (tcn_nt_registry_t *)apr_palloc(p, sizeof(tcn_nt_registry_t)); reg->pool = p; reg->root = TCN_KEYS[root].k; reg->key = NULL; TCN_INIT_WSTRING(name); TCN_REGSAM(s, sam); rc = RegOpenKeyExW(reg->root, J2W(name), 0, s, &key); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } reg->key = key; apr_pool_cleanup_register(p, (const void *)reg, registry_cleanup, apr_pool_cleanup_null); cleanup: TCN_FREE_WSTRING(name); return P2J(reg); } TCN_IMPLEMENT_CALL(jint, Registry, close)(TCN_STDARGS, jlong reg) { tcn_nt_registry_t *r = J2P(reg, tcn_nt_registry_t *); UNREFERENCED_STDARGS; TCN_ASSERT(reg != 0); registry_cleanup(r); apr_pool_cleanup_kill(r->pool, r, registry_cleanup); return APR_SUCCESS; } TCN_IMPLEMENT_CALL(jint, Registry, getType)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD v; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, &v, NULL, NULL); if (rc != ERROR_SUCCESS) v = -rc; TCN_FREE_WSTRING(name); switch (v) { case REG_BINARY: v = TCN_REG_BINARY; break; case REG_DWORD: v = TCN_REG_DWORD; break; case REG_EXPAND_SZ: v = TCN_REG_EXPAND_SZ; break; case REG_MULTI_SZ: v = TCN_REG_MULTI_SZ; break; case REG_QWORD: v = TCN_REG_QWORD; break; case REG_SZ: v = TCN_REG_SZ; break; case REG_DWORD_BIG_ENDIAN: v = 0; break; } return v; } TCN_IMPLEMENT_CALL(jint, Registry, getSize)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD v; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, NULL, &v); if (rc != ERROR_SUCCESS) v = -rc; TCN_FREE_WSTRING(name); return v; } TCN_IMPLEMENT_CALL(jint, Registry, getValueI)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD t, l; DWORD v = 0; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, &t, NULL, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } if (t == REG_DWORD) { l = sizeof(DWORD); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, (LPBYTE)&v, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } } else if (t == REG_SZ || t == REG_BINARY || t == REG_MULTI_SZ || t == REG_EXPAND_SZ) v = l; else { v = 0; tcn_ThrowException(e, "Unable to convert the value to integer"); } cleanup: TCN_FREE_WSTRING(name); return v; } TCN_IMPLEMENT_CALL(jlong, Registry, getValueJ)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD t, l; UINT64 v = 0; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, &t, NULL, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } if (t == REG_DWORD) { DWORD tv; l = sizeof(DWORD); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, (LPBYTE)&tv, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } v = tv; } else if (t == REG_QWORD) { l = sizeof(UINT64); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, (LPBYTE)&v, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } } else if (t == REG_SZ || t == REG_BINARY || t == REG_MULTI_SZ || t == REG_EXPAND_SZ) v = l; else { v = 0; tcn_ThrowException(e, "Unable to convert the value to long"); } cleanup: TCN_FREE_WSTRING(name); return v; } TCN_IMPLEMENT_CALL(jstring, Registry, getValueS)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD t, l; jstring v = NULL; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, &t, NULL, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } if (t == REG_SZ || t == REG_EXPAND_SZ) { jchar *vw = (jchar *)malloc(l); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, (LPBYTE)vw, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); free(vw); goto cleanup; } v = (*e)->NewString((e), vw, lstrlenW(vw)); free(vw); } cleanup: TCN_FREE_WSTRING(name); return v; } TCN_IMPLEMENT_CALL(jbyteArray, Registry, getValueB)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD t, l; jbyteArray v = NULL; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, &t, NULL, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } if (t == REG_BINARY) { BYTE *b = (BYTE *)malloc(l); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, b, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); free(b); goto cleanup; } v = tcn_new_arrayb(e, b, l); free(b); } cleanup: TCN_FREE_WSTRING(name); return v; } static jsize get_multi_sz_count(LPCWSTR str) { LPCWSTR p = str; jsize cnt = 0; for ( ; p && *p; p++) { cnt++; while (*p) p++; } return cnt; } TCN_IMPLEMENT_CALL(jobjectArray, Registry, getValueA)(TCN_STDARGS, jlong key, jstring name) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD t, l; jobjectArray v = NULL; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegQueryValueExW(k->key, J2W(name), NULL, &t, NULL, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } if (t == REG_MULTI_SZ) { jsize cnt = 0; jchar *p; jchar *vw = (jchar *)malloc(l); rc = RegQueryValueExW(k->key, J2W(name), NULL, NULL, (LPBYTE)vw, &l); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); free(vw); goto cleanup; } cnt = get_multi_sz_count(vw); if (cnt) { jsize idx = 0; v = tcn_new_arrays(e, cnt); for (p = vw ; p && *p; p++) { jstring s; jchar *b = p; while (*p) p++; s = (*e)->NewString((e), b, (jsize)(p - b)); (*e)->SetObjectArrayElement((e), v, idx++, s); } } free(vw); } cleanup: TCN_FREE_WSTRING(name); return v; } TCN_IMPLEMENT_CALL(jint, Registry, setValueI)(TCN_STDARGS, jlong key, jstring name, jint val) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; DWORD v = (DWORD)val; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegSetValueExW(k->key, J2W(name), 0, REG_DWORD, (CONST BYTE *)&v, sizeof(DWORD)); TCN_FREE_WSTRING(name); return v; } TCN_IMPLEMENT_CALL(jint, Registry, setValueJ)(TCN_STDARGS, jlong key, jstring name, jlong val) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; UINT64 v = (UINT64)val; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); rc = RegSetValueExW(k->key, J2W(name), 0, REG_QWORD, (CONST BYTE *)&v, sizeof(UINT64)); TCN_FREE_WSTRING(name); return rc; } TCN_IMPLEMENT_CALL(jint, Registry, setValueS)(TCN_STDARGS, jlong key, jstring name, jstring val) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); TCN_ALLOC_WSTRING(val); LONG rc; DWORD len; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); TCN_INIT_WSTRING(val); len = lstrlenW(J2W(val)); rc = RegSetValueExW(k->key, J2W(name), 0, REG_SZ, (CONST BYTE *)J2W(val), (len + 1) * 2); TCN_FREE_WSTRING(name); TCN_FREE_WSTRING(val); return rc; } TCN_IMPLEMENT_CALL(jint, Registry, setValueE)(TCN_STDARGS, jlong key, jstring name, jstring val) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); TCN_ALLOC_WSTRING(val); LONG rc; DWORD len; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); TCN_INIT_WSTRING(val); len = lstrlenW(J2W(val)); rc = RegSetValueExW(k->key, J2W(name), 0, REG_EXPAND_SZ, (CONST BYTE *)J2W(val), (len + 1) * 2); TCN_FREE_WSTRING(name); TCN_FREE_WSTRING(val); return rc; } TCN_IMPLEMENT_CALL(jint, Registry, setValueA)(TCN_STDARGS, jlong key, jstring name, jobjectArray vals) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); LONG rc; jsize i, len; jsize sl = 0; jchar *msz, *p; UNREFERENCED(o); TCN_ASSERT(key != 0); TCN_INIT_WSTRING(name); len = (*e)->GetArrayLength((e), vals); for (i = 0; i < len; i++) { jstring s = (jstring)(*e)->GetObjectArrayElement((e), vals, i); sl += (*e)->GetStringLength((e), s) + 1; } sl = (sl + 1) * 2; p = msz = (jchar *)calloc(1, sl); for (i = 0; i < len; i++) { jsize l; jstring s = (jstring)(*e)->GetObjectArrayElement((e), vals, i); l = (*e)->GetStringLength((e), s); wcsncpy(p, (*e)->GetStringChars(e, s, 0), l); p += l + 1; } rc = RegSetValueExW(k->key, J2W(name), 0, REG_MULTI_SZ, (CONST BYTE *)msz, sl); TCN_FREE_WSTRING(name); free(msz); return rc; } TCN_IMPLEMENT_CALL(jint, Registry, setValueB)(TCN_STDARGS, jlong key, jstring name, jbyteArray val) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); TCN_ALLOC_WSTRING(name); jsize nbytes = (*e)->GetArrayLength(e, val); jbyte *bytes = (*e)->GetByteArrayElements(e, val, NULL); LONG rc; rc = RegSetValueExW(k->key, J2W(name), 0, REG_BINARY, bytes, (DWORD)nbytes); (*e)->ReleaseByteArrayElements(e, val, bytes, JNI_ABORT); TCN_FREE_WSTRING(name); return rc; } #define MAX_VALUE_NAME 4096 TCN_IMPLEMENT_CALL(jobjectArray, Registry, enumKeys)(TCN_STDARGS, jlong key) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); LONG rc; jobjectArray v = NULL; jsize cnt = 0; WCHAR achKey[MAX_PATH]; WCHAR achClass[MAX_PATH] = L""; DWORD cchClassName = MAX_PATH; DWORD cSubKeys; DWORD cbMaxSubKey; DWORD cchMaxClass; DWORD cValues; DWORD cchMaxValue; DWORD cbMaxValueData; DWORD cbSecurityDescriptor; FILETIME ftLastWriteTime; DWORD cchValue = MAX_VALUE_NAME; UNREFERENCED(o); TCN_ASSERT(key != 0); rc = RegQueryInfoKeyW(k->key, achClass, &cchClassName, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, &cValues, &cchMaxValue, &cbMaxValueData, &cbSecurityDescriptor, &ftLastWriteTime); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } cnt = cSubKeys; if (cnt) { jsize idx = 0; v = tcn_new_arrays(e, cnt); for (idx = 0; idx < cnt; idx++) { jstring s; DWORD achKeyLen = MAX_PATH; rc = RegEnumKeyExW(k->key, idx, achKey, &achKeyLen, NULL, NULL, NULL, &ftLastWriteTime); if (rc == (DWORD)ERROR_SUCCESS) { s = (*e)->NewString((e), achKey, lstrlenW(achKey)); (*e)->SetObjectArrayElement((e), v, idx, s); } } } cleanup: return v; } TCN_IMPLEMENT_CALL(jobjectArray, Registry, enumValues)(TCN_STDARGS, jlong key) { tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); LONG rc; jobjectArray v = NULL; jsize cnt = 0; WCHAR achClass[MAX_PATH] = L""; DWORD cchClassName = MAX_PATH; DWORD cSubKeys; DWORD cbMaxSubKey; DWORD cchMaxClass; DWORD cValues; DWORD cchMaxValue; DWORD cbMaxValueData; DWORD cbSecurityDescriptor; FILETIME ftLastWriteTime; WCHAR achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; UNREFERENCED(o); TCN_ASSERT(key != 0); /* Get the class name and the value count. */ rc = RegQueryInfoKeyW(k->key, achClass, &cchClassName, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, &cValues, &cchMaxValue, &cbMaxValueData, &cbSecurityDescriptor, &ftLastWriteTime); if (rc != ERROR_SUCCESS) { tcn_ThrowAPRException(e, APR_FROM_OS_ERROR(rc)); goto cleanup; } cnt = cValues; if (cnt) { jsize idx = 0; v = tcn_new_arrays(e, cnt); for (idx = 0; idx < cnt; idx++) { jstring s; cchValue = MAX_VALUE_NAME; achValue[0] = '\0'; rc = RegEnumValueW(k->key, idx, achValue, &cchValue, NULL, NULL, // &dwType, NULL, // &bData, NULL); // &bcData if (rc == (DWORD)ERROR_SUCCESS) { s = (*e)->NewString((e), achValue, lstrlenW(achValue)); (*e)->SetObjectArrayElement((e), v, idx, s); } } } cleanup: return v; } TCN_IMPLEMENT_CALL(jint, Registry, deleteKey)(TCN_STDARGS, jint root, jstring name, jboolean only_if_empty) { DWORD rv; TCN_ALLOC_WSTRING(name); UNREFERENCED(o); if (root < TCN_HKEY_CLASSES_ROOT || root > TCN_HKEY_USERS) { rv = EBADF; goto cleanup; } TCN_INIT_WSTRING(name); if (only_if_empty) rv = SHDeleteEmptyKeyW(TCN_KEYS[root].k, J2W(name)); else rv = SHDeleteKeyW(TCN_KEYS[root].k, J2W(name)); cleanup: TCN_FREE_WSTRING(name); return rv; } TCN_IMPLEMENT_CALL(jint, Registry, deleteValue)(TCN_STDARGS, jlong key, jstring name) { LONG rv; TCN_ALLOC_WSTRING(name); tcn_nt_registry_t *k = J2P(key, tcn_nt_registry_t *); UNREFERENCED(o); TCN_INIT_WSTRING(name); rv = RegDeleteValueW(k->key, J2W(name)); TCN_FREE_WSTRING(name); return (jint)rv; } tomcat-native-1.2.17-src/native/os/win32/logmessages.bin 0000664 0001751 0001751 00000000340 10517277132 022632 0 ustar jfclere jfclere 4 @ @P ? ?l ? ? D e b u g : % 1 I n f o : % 1 N o t i c e : % 1 W a r n : % 1 E m e r g : % 1 E r r o r : % 1 tomcat-native-1.2.17-src/native/os/win32/logmessages.mc 0000664 0001751 0001751 00000001017 10316754413 022462 0 ustar jfclere jfclere MessageId=0x1 Severity=Error SymbolicName=LOG_MSG_EMERG Language=English Emerg: %1 . MessageId=0x2 Severity=Error SymbolicName=LOG_MSG_ERROR Language=English Error: %1 . MessageId=0x3 Severity=Warning SymbolicName=LOG_MSG_NOTICE Language=English Notice: %1 . MessageId=0x4 Severity=Warning SymbolicName=LOG_MSG_WARN Language=English Warn: %1 . MessageId=0x5 Severity=Informational SymbolicName=LOG_MSG_INFO Language=English Info: %1 . MessageId=0x6 Severity=Success SymbolicName=LOG_MSG_DEBUG Language=English Debug: %1 . tomcat-native-1.2.17-src/native/os/win32/apache.ico 0000664 0001751 0001751 00000002066 10517277132 021553 0 ustar jfclere jfclere ? &