rendered paste bodySQLVHOST_BACKEND_GETVHOST(mod_postgresql_vhost_get_vhost) {
plugin_data *p = p_d;
int nFields;
PGresult *result;
UNUSED(host);
char *fValue;
char *vhostID;
char *vhostDIR;
/* no host specified? */
if (!con->uri.authority->used) return HANDLER_GO_ON;
vhostDIR = (char *) g_hash_table_lookup(vhost_table, con->uri.authority->ptr);
if (vhostDIR == NULL)
{
PGresult *result;
//g_hash_table_insert(person_table, contact, person);
mod_postgresql_vhost_patch_connection(srv, con, p);
if (!p->conf.conn) return HANDLER_GO_ON;
/* TODO: Change to a stored proc to simiplify this */
/* build and run SQL query */
buffer_copy_string_buffer(p->tmp_buf, p->conf.postgresql_pre);
if (p->conf.postgresql_post->used) {
buffer_append_string_buffer(p->tmp_buf, con->uri.authority);
buffer_append_string_buffer(p->tmp_buf, p->conf.postgresql_post);
}
result = PQexec(p->conf.conn, p->tmp_buf->ptr);
// For Async requests. Database will block/slow down your daemon
// result = PQsendQuery(p->conf.conn, p->tmp_buf->ptr);
//
if (result == NULL) {
log_error_write(srv, __FILE__, __LINE__, "s", "postgresql malloc failure");
return HANDLER_GO_ON;
}
if (PQresultStatus(result) != PGRES_TUPLES_OK)
{
log_error_write(srv, __FILE__, __LINE__, "ss", "PQerrorMessage :", PQerrorMessage(p->conf.conn));
PQclear(result);
// Fixme:
// Will test for bad connection in another place
//PQfinish(p->conf.conn);
return HANDLER_GO_ON;
}
// Fixme: We checked for tupels already, but will add more sanity
nFields = PQnfields(result);
if (PQntuples(result) < 1 || nFields < 1 ||
(fValue = PQgetvalue(result, 0, 0)) == NULL || !*fValue) {
/* no such virtual host */
PQclear(result);
return HANDLER_GO_ON;
}
#ifdef WITH_DEBUGGING
log_error_write(srv, __FILE__, __LINE__, "ss", " PQgetvalue :", PQgetvalue(result, 0, 0));
#endif
buffer_copy_string(docroot, fValue);
g_hash_table_insert(vhost_table, con->uri.authority->ptr , fValue);
PQclear(result);
}
else
{
log_error_write(srv, __FILE__, __LINE__, "ss", " The buffered docroot isssss :", vhostDIR);
buffer_copy_string(docroot, vhostDIR);
}
return 0;
}