Diff for /embedaddon/lighttpd/src/mod_scgi.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2013/10/14 10:32:47 version 1.1.1.2, 2014/06/15 20:20:06
Line 351  static handler_ctx * handler_ctx_init(void) { Line 351  static handler_ctx * handler_ctx_init(void) {
         handler_ctx * hctx;          handler_ctx * hctx;
   
         hctx = calloc(1, sizeof(*hctx));          hctx = calloc(1, sizeof(*hctx));
        assert(hctx);        force_assert(hctx);
   
         hctx->fde_ndx = -1;          hctx->fde_ndx = -1;
   
Line 495  static int scgi_extension_insert(scgi_exts *ext, buffe Line 495  static int scgi_extension_insert(scgi_exts *ext, buffe
         if (i == ext->used) {          if (i == ext->used) {
                 /* filextension is new */                  /* filextension is new */
                 fe = calloc(1, sizeof(*fe));                  fe = calloc(1, sizeof(*fe));
                assert(fe);                force_assert(fe);
                 fe->key = buffer_init();                  fe->key = buffer_init();
                 buffer_copy_string_buffer(fe->key, key);                  buffer_copy_string_buffer(fe->key, key);
   
Line 504  static int scgi_extension_insert(scgi_exts *ext, buffe Line 504  static int scgi_extension_insert(scgi_exts *ext, buffe
                 if (ext->size == 0) {                  if (ext->size == 0) {
                         ext->size = 8;                          ext->size = 8;
                         ext->exts = malloc(ext->size * sizeof(*(ext->exts)));                          ext->exts = malloc(ext->size * sizeof(*(ext->exts)));
                        assert(ext->exts);                        force_assert(ext->exts);
                 } else if (ext->used == ext->size) {                  } else if (ext->used == ext->size) {
                         ext->size += 8;                          ext->size += 8;
                         ext->exts = realloc(ext->exts, ext->size * sizeof(*(ext->exts)));                          ext->exts = realloc(ext->exts, ext->size * sizeof(*(ext->exts)));
                        assert(ext->exts);                        force_assert(ext->exts);
                 }                  }
                 ext->exts[ext->used++] = fe;                  ext->exts[ext->used++] = fe;
         } else {          } else {
Line 518  static int scgi_extension_insert(scgi_exts *ext, buffe Line 518  static int scgi_extension_insert(scgi_exts *ext, buffe
         if (fe->size == 0) {          if (fe->size == 0) {
                 fe->size = 4;                  fe->size = 4;
                 fe->hosts = malloc(fe->size * sizeof(*(fe->hosts)));                  fe->hosts = malloc(fe->size * sizeof(*(fe->hosts)));
                assert(fe->hosts);                force_assert(fe->hosts);
         } else if (fe->size == fe->used) {          } else if (fe->size == fe->used) {
                 fe->size += 4;                  fe->size += 4;
                 fe->hosts = realloc(fe->hosts, fe->size * sizeof(*(fe->hosts)));                  fe->hosts = realloc(fe->hosts, fe->size * sizeof(*(fe->hosts)));
                assert(fe->hosts);                force_assert(fe->hosts);
         }          }
   
         fe->hosts[fe->used++] = fh;          fe->hosts[fe->used++] = fh;
Line 670  static int scgi_spawn_connection(server *srv, Line 670  static int scgi_spawn_connection(server *srv,
   
 #ifdef HAVE_SYS_UN_H  #ifdef HAVE_SYS_UN_H
                 scgi_addr_un.sun_family = AF_UNIX;                  scgi_addr_un.sun_family = AF_UNIX;
                strcpy(scgi_addr_un.sun_path, proc->socket->ptr);                if (proc->socket->used > sizeof(scgi_addr_un.sun_path)) {
                         log_error_write(srv, __FILE__, __LINE__, "sB",
                                         "ERROR: Unix Domain socket filename too long:",
                                         proc->socket);
                         return -1;
                 }
                 memcpy(scgi_addr_un.sun_path, proc->socket->ptr, proc->socket->used);
   
 #ifdef SUN_LEN  #ifdef SUN_LEN
                 servlen = SUN_LEN(&scgi_addr_un);                  servlen = SUN_LEN(&scgi_addr_un);
Line 752  static int scgi_spawn_connection(server *srv, Line 758  static int scgi_spawn_connection(server *srv,
                 if (setsockopt(scgi_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {                  if (setsockopt(scgi_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
                         log_error_write(srv, __FILE__, __LINE__, "ss",                          log_error_write(srv, __FILE__, __LINE__, "ss",
                                         "socketsockopt failed:", strerror(errno));                                          "socketsockopt failed:", strerror(errno));
                           close(scgi_fd);
                         return -1;                          return -1;
                 }                  }
   
Line 762  static int scgi_spawn_connection(server *srv, Line 769  static int scgi_spawn_connection(server *srv,
                                 proc->socket,                                  proc->socket,
                                 proc->port,                                  proc->port,
                                 strerror(errno));                                  strerror(errno));
                           close(scgi_fd);
                         return -1;                          return -1;
                 }                  }
   
                 if (-1 == listen(scgi_fd, 1024)) {                  if (-1 == listen(scgi_fd, 1024)) {
                         log_error_write(srv, __FILE__, __LINE__, "ss",                          log_error_write(srv, __FILE__, __LINE__, "ss",
                                 "listen failed:", strerror(errno));                                  "listen failed:", strerror(errno));
                           close(scgi_fd);
                         return -1;                          return -1;
                 }                  }
   
Line 918  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 927  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
         plugin_data *p = p_d;          plugin_data *p = p_d;
         data_unset *du;          data_unset *du;
         size_t i = 0;          size_t i = 0;
           scgi_extension_host *df = NULL;
   
         config_values_t cv[] = {          config_values_t cv[] = {
                 { "scgi.server",              NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },       /* 0 */                  { "scgi.server",              NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
Line 925  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 935  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                 { NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }                  { NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
         };          };
   
        p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));        p->config_storage = calloc(1, srv->config_context->used * sizeof(plugin_config *));
   
         for (i = 0; i < srv->config_context->used; i++) {          for (i = 0; i < srv->config_context->used; i++) {
                 plugin_config *s;                  plugin_config *s;
Line 942  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 952  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                 ca = ((data_config *)srv->config_context->data[i])->value;                  ca = ((data_config *)srv->config_context->data[i])->value;
   
                 if (0 != config_insert_values_global(srv, ca, cv)) {                  if (0 != config_insert_values_global(srv, ca, cv)) {
                        return HANDLER_ERROR;                        goto error;
                 }                  }
   
                 /*                  /*
Line 957  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 967  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                 log_error_write(srv, __FILE__, __LINE__, "sss",                                  log_error_write(srv, __FILE__, __LINE__, "sss",
                                                 "unexpected type for key: ", "scgi.server", "array of strings");                                                  "unexpected type for key: ", "scgi.server", "array of strings");
   
                                return HANDLER_ERROR;                                goto error;
                         }                          }
   
   
Line 975  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 985  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                         "unexpected type for key: ", "scgi.server",                                                          "unexpected type for key: ", "scgi.server",
                                                         "[", da->value->data[j]->key, "](string)");                                                          "[", da->value->data[j]->key, "](string)");
   
                                        return HANDLER_ERROR;                                        goto error;
                                 }                                  }
   
                                 /*                                  /*
Line 993  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1003  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                 for (n = 0; n < da_ext->value->used; n++) {                                  for (n = 0; n < da_ext->value->used; n++) {
                                         data_array *da_host = (data_array *)da_ext->value->data[n];                                          data_array *da_host = (data_array *)da_ext->value->data[n];
   
                                         scgi_extension_host *df;  
   
                                         config_values_t fcv[] = {                                          config_values_t fcv[] = {
                                                 { "host",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */                                                  { "host",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
                                                 { "docroot",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */                                                  { "docroot",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
Line 1023  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1031  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                                 "scgi.server",                                                                  "scgi.server",
                                                                 "[", da_host->key, "](string)");                                                                  "[", da_host->key, "](string)");
   
                                                return HANDLER_ERROR;                                                goto error;
                                         }                                          }
   
                                         df = scgi_host_init();                                          df = scgi_host_init();
Line 1055  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1063  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
   
   
                                         if (0 != config_insert_values_internal(srv, da_host->value, fcv)) {                                          if (0 != config_insert_values_internal(srv, da_host->value, fcv)) {
                                                return HANDLER_ERROR;                                                goto error;
                                         }                                          }
   
                                         if ((!buffer_is_empty(df->host) || df->port) &&                                          if ((!buffer_is_empty(df->host) || df->port) &&
Line 1063  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1071  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                 log_error_write(srv, __FILE__, __LINE__, "s",                                                  log_error_write(srv, __FILE__, __LINE__, "s",
                                                                 "either host+port or socket");                                                                  "either host+port or socket");
   
                                                return HANDLER_ERROR;                                                goto error;
                                         }                                          }
   
                                         if (!buffer_is_empty(df->unixsocket)) {                                          if (!buffer_is_empty(df->unixsocket)) {
Line 1073  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1081  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                 if (df->unixsocket->used > sizeof(un.sun_path) - 2) {                                                  if (df->unixsocket->used > sizeof(un.sun_path) - 2) {
                                                         log_error_write(srv, __FILE__, __LINE__, "s",                                                          log_error_write(srv, __FILE__, __LINE__, "s",
                                                                         "path of the unixdomain socket is too large");                                                                          "path of the unixdomain socket is too large");
                                                        return HANDLER_ERROR;                                                        goto error;
                                                 }                                                  }
                                         } else {                                          } else {
                                                 /* tcp/ip */                                                  /* tcp/ip */
Line 1087  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1095  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                                         da_host->key,                                                                          da_host->key,
                                                                         "host");                                                                          "host");
   
                                                        return HANDLER_ERROR;                                                        goto error;
                                                 } else if (df->port == 0) {                                                  } else if (df->port == 0) {
                                                         log_error_write(srv, __FILE__, __LINE__, "sbbbs",                                                          log_error_write(srv, __FILE__, __LINE__, "sbbbs",
                                                                         "missing key (short):",                                                                          "missing key (short):",
Line 1095  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1103  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                                         da_ext->key,                                                                          da_ext->key,
                                                                         da_host->key,                                                                          da_host->key,
                                                                         "port");                                                                          "port");
                                                        return HANDLER_ERROR;                                                        goto error;
                                                 }                                                  }
                                         }                                          }
   
Line 1145  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1153  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
                                                         if (scgi_spawn_connection(srv, p, df, proc)) {                                                          if (scgi_spawn_connection(srv, p, df, proc)) {
                                                                 log_error_write(srv, __FILE__, __LINE__, "s",                                                                  log_error_write(srv, __FILE__, __LINE__, "s",
                                                                                 "[ERROR]: spawning fcgi failed.");                                                                                  "[ERROR]: spawning fcgi failed.");
                                                                return HANDLER_ERROR;                                                                scgi_process_free(proc);
                                                                 goto error;
                                                         }                                                          }
   
                                                         proc->next = df->first;                                                          proc->next = df->first;
Line 1176  SETDEFAULTS_FUNC(mod_scgi_set_defaults) { Line 1185  SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
   
                                         /* if extension already exists, take it */                                          /* if extension already exists, take it */
                                         scgi_extension_insert(s->exts, da_ext->key, df);                                          scgi_extension_insert(s->exts, da_ext->key, df);
                                           df = NULL;
                                 }                                  }
                         }                          }
                 }                  }
         }          }
   
         return HANDLER_GO_ON;          return HANDLER_GO_ON;
   
   error:
           if (NULL != df) scgi_host_free(df);
           return HANDLER_ERROR;
 }  }
   
 static int scgi_set_state(server *srv, handler_ctx *hctx, scgi_connection_state_t state) {  static int scgi_set_state(server *srv, handler_ctx *hctx, scgi_connection_state_t state) {
Line 1332  static int scgi_establish_connection(server *srv, hand Line 1346  static int scgi_establish_connection(server *srv, hand
 #ifdef HAVE_SYS_UN_H  #ifdef HAVE_SYS_UN_H
                 /* use the unix domain socket */                  /* use the unix domain socket */
                 scgi_addr_un.sun_family = AF_UNIX;                  scgi_addr_un.sun_family = AF_UNIX;
                strcpy(scgi_addr_un.sun_path, proc->socket->ptr);                if (proc->socket->used > sizeof(scgi_addr_un.sun_path)) {
                         log_error_write(srv, __FILE__, __LINE__, "sB",
                                         "ERROR: Unix Domain socket filename too long:",
                                         proc->socket);
                         return -1;
                 }
                 memcpy(scgi_addr_un.sun_path, proc->socket->ptr, proc->socket->used);
 
 #ifdef SUN_LEN  #ifdef SUN_LEN
                 servlen = SUN_LEN(&scgi_addr_un);                  servlen = SUN_LEN(&scgi_addr_un);
 #else  #else
Line 2997  TRIGGER_FUNC(mod_scgi_handle_trigger) { Line 3018  TRIGGER_FUNC(mod_scgi_handle_trigger) {
                                         if (scgi_spawn_connection(srv, p, host, fp)) {                                          if (scgi_spawn_connection(srv, p, host, fp)) {
                                                 log_error_write(srv, __FILE__, __LINE__, "s",                                                  log_error_write(srv, __FILE__, __LINE__, "s",
                                                                 "ERROR: spawning fcgi failed.");                                                                  "ERROR: spawning fcgi failed.");
                                                   scgi_process_free(fp);
                                                 return HANDLER_ERROR;                                                  return HANDLER_ERROR;
                                         }                                          }
   

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>