TCN_IMPLEMENT_CALL(void, OS, syslog)(TCN_STDARGS, jint level, jstring msg) { TCN_ALLOC_CSTRING(msg); int id = LOG_DEBUG; UNREFERENCED(o); switch (level) { case TCN_LOG_EMERG: id = LOG_EMERG; break; case TCN_LOG_ERROR: id = LOG_ERR; break; case TCN_LOG_NOTICE: id = LOG_NOTICE; break; case TCN_LOG_WARN: id = LOG_WARN; break; case TCN_LOG_INFO: id = LOG_INFO; break; } syslog (id, "%s", J2S(msg)); TCN_FREE_CSTRING(msg); }
/* Simple echo password prompting */ int SSL_password_prompt(tcn_pass_cb_t *data) { int rv = 0; data->password[0] = '\0'; if (data->cb.obj) { JNIEnv *e; jobject o; jstring prompt; tcn_get_java_env(&e); prompt = AJP_TO_JSTRING(data->prompt); if ((o = (*e)->CallObjectMethod(e, data->cb.obj, data->cb.mid[0], prompt))) { TCN_ALLOC_CSTRING(o); if (J2S(o)) { strncpy(data->password, J2S(o), SSL_MAX_PASSWORD_LEN); data->password[SSL_MAX_PASSWORD_LEN-1] = '\0'; rv = (int)strlen(data->password); } TCN_FREE_CSTRING(o); } } else { #ifdef WIN32 rv = WIN32_SSL_password_prompt(data); #else EVP_read_pw_string(data->password, SSL_MAX_PASSWORD_LEN, data->prompt, 0); #endif rv = (int)strlen(data->password); } if (rv > 0) { /* Remove LF char if present */ char *r = strchr(data->password, '\n'); if (r) { *r = '\0'; rv--; } #ifdef WIN32 if ((r = strchr(data->password, '\r'))) { *r = '\0'; rv--; } #endif } return rv; }
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; openlog(d, LOG_CONS | LOG_PID, LOG_LOCAL0); TCN_FREE_CSTRING(domain); }
TCN_IMPLEMENT_CALL(jstring, OS, expand)(TCN_STDARGS, jstring val) { jstring str; TCN_ALLOC_CSTRING(val); UNREFERENCED(o); /* TODO: Make ${ENVAR} expansion */ str = (*e)->NewStringUTF(e, J2S(val)); TCN_FREE_CSTRING(val); return str; }
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(jlong, Address, info)(TCN_STDARGS, jstring hostname, jint family, jint port, jint flags, jlong pool) { apr_pool_t *p = J2P(pool, apr_pool_t *); TCN_ALLOC_CSTRING(hostname); apr_sockaddr_t *sa = NULL; apr_sockaddr_t *sl = NULL; apr_int32_t f; UNREFERENCED(o); GET_S_FAMILY(f, family); TCN_THROW_IF_ERR(apr_sockaddr_info_get(&sa, J2S(hostname), f, (apr_port_t)port, (apr_int32_t)flags, p), sa); sl = sa; /* * apr_sockaddr_info_get may return several address so this is not * go to work in some cases (but as least it works for Linux) * XXX: with AP_ENABLE_V4_MAPPED it is going to work otherwise it won't. */ #if APR_HAVE_IPV6 if (hostname == NULL) { /* Try all address using IPV6 one */ while (sl) { if (sl->family == APR_INET6) break; /* Done */ sl = sl->next; }