예제 #1
0
static int
valid_path(request_rec *r, const char *value)
{
  char *p = apr_pstrdup(r->pool, value);
  char *uri;
  char *tmp;
  char *name;
  char *val;
  char *pstat;

  DBG(r, "start valid_path() unparsed_uri:[%s] value:[%s]", r->unparsed_uri, value);
  if (chxj_starts_with(r->unparsed_uri, "http://")) {
    uri = strchr(&r->unparsed_uri[sizeof("http://")], '/');
    if (uri != NULL) {
      uri = apr_pstrdup(r->pool, uri);
    }
  }
  else if (chxj_starts_with(r->unparsed_uri, "https://")) {
    uri = strchr(&r->unparsed_uri[sizeof("https://")], '/');
    if (uri != NULL) {
      uri = apr_pstrdup(r->pool, uri);
    }
  }
  else if (chxj_starts_with(r->unparsed_uri, "/")) {
    uri = apr_pstrdup(r->pool, r->unparsed_uri);
  }
  else {
    uri = apr_pstrdup(r->pool, "/");
  }
  
  if ((tmp = strchr(uri, '?'))) {
    *tmp = '\0';
  }
  DBG(r, "uri=[%s]", uri);
  name = apr_strtok(p, "=", &pstat);
  val = apr_strtok(NULL, "=", &pstat);
  name = qs_trim_string(r->pool, name);
  val = qs_trim_string(r->pool, val);
  DBG(r, "name=[%s] val=[%s]", name, val);
  
  DBG(r, "val:[%s] vs uri:[%s]", val, uri);
  if (! chxj_starts_with(uri, val)) {
    DBG(r, "end valid_path() unparsed_uri:[%s] value:[%s] (false)", r->unparsed_uri, value);
    return CHXJ_FALSE;
  }
  DBG(r, "end valid_path() unparsed_uri:[%s] value:[%s] (true)", r->unparsed_uri, value);
  return CHXJ_TRUE;
}
예제 #2
0
파일: chxj_css.c 프로젝트: atkonn/mod_chxj
static char *
s_path_to_fullurl(apr_pool_t *pool, const char *base_url, const char *base_path, const char *uri)
{
  char *new_url = NULL;
  if (chxj_starts_with(uri, "http")) {
    return apr_pstrdup(pool, uri);
  }

  if (*uri == '/') {
    return apr_pstrcat(pool, base_url, uri, NULL);
  }

  new_url = apr_pstrcat(pool, base_url, base_path, NULL);
  if (new_url[strlen(new_url)-1] == '/') {
    new_url = apr_pstrcat(pool, new_url, uri, NULL);
  }
  else {
    new_url = apr_pstrcat(pool, new_url, "/", uri, NULL);
  }
  return new_url;
}
예제 #3
0
파일: chxj_css.c 프로젝트: atkonn/mod_chxj
char *
chxj_css_rgb_func_to_value(apr_pool_t *pool, const char *rgb_func_string)
{
  char *s = apr_pstrdup(pool, rgb_func_string);
  if (chxj_starts_with(s, "rgb")) {
    s += 3;
    s = qs_trim_string(pool, s);
    if (*s == '(') s++;
    int len = strlen(s);
    if (s[len - 1] == ')') s[len-1] = 0;
    char *pstat;
    char *red   = qs_trim_string(pool, apr_strtok(s, ",", &pstat));
    char *green = qs_trim_string(pool, apr_strtok(NULL, ",", &pstat));
    char *blue  = qs_trim_string(pool, apr_strtok(NULL, ",", &pstat));
    int red_per_flag   = 0;
    int green_per_flag = 0;
    int blue_per_flag  = 0;
    if (red && (pstat = strchr(red, '%'))) {
      *pstat = 0;
      red_per_flag = 1;
    }
    else {
      red = "0";
    }
    if (green && (pstat = strchr(green, '%'))) {
      *pstat = 0;
      green_per_flag = 1;
    }
    else {
      green = "0";
    }
    if (blue && (pstat = strchr(blue, '%'))) {
      *pstat = 0;
      blue_per_flag = 1;
    }
    else {
      blue = "0";
    }
    double d_red   = (double)chxj_atoi(red);
    double d_green = (double)chxj_atoi(green);
    double d_blue  = (double)chxj_atoi(blue);
    if (red_per_flag) {
      d_red   /= 100.0;
      d_red   *= 255;
    }
    if (green_per_flag) {
      d_green /= 100.0;
      d_green *= 255;
    }
    if (blue_per_flag) {
      d_blue  /= 100.0;
      d_blue  *= 255;
    }
    char *ret = apr_psprintf(pool, "#%02x%02x%02x", (int)d_red, (int)d_green, (int)d_blue);
    return ret;
  }
  else if (s[0] == '#') {
    if (strlen(&s[1]) == 3) {
      char red[2];
      char green[2];
      char blue[2];
      red[0]   = s[1];
      green[0] = s[2];
      blue[0]  = s[3];
      red[1]   = 0;
      green[1] = 0;
      blue[1]  = 0;
      int ired   = chxj_axtoi(red);
      int igreen = chxj_axtoi(green);
      int iblue  = chxj_axtoi(blue);
      return apr_psprintf(pool, "#%02x%02x%02x", ired * 0x10 + ired, igreen * 0x10 + igreen, iblue * 0x10 + iblue);
    }
  }
  else {
    switch(*s) {
    case 'a':
    case 'A':
      if (STRCASEEQ('q','Q', &s[1], "qua")) {
        /* aqua */
        return apr_pstrdup(pool, "#00ffff");
      }
      break;
    case 'b':
    case 'B':
      if (s[1] == 'l' || s[1] == 'L') {
        if (s[2] == 'a' || s[2] == 'A') {
          if (STRCASEEQ('c','C',&s[3], "ck")) {
            /* black */
            return apr_pstrdup(pool, "#000000");
          }
        }
        else if (s[2] == 'u' || s[2] == 'U') {
          if (s[3] == 'e' || s[3] == 'E') {
            /* blue */
            return apr_pstrdup(pool, "#0000ff");
          }
        }
      }
      break;
    case 'f':
    case 'F':
      if (STRCASEEQ('u','U',&s[1], "uchsia")) {
        /* fuchsia */
        return apr_pstrdup(pool, "#ff00ff");
      }
      break;
    case 'g':
    case 'G':
      if (s[1] == 'r'||s[1] == 'R') {
        if (STRCASEEQ('a','A', &s[2], "ay")) {
          /* gray */
          return apr_pstrdup(pool, "#808080");
        }
        else if (STRCASEEQ('e','E',&s[2], "een")) {
          /* green */
          return apr_pstrdup(pool, "#008000");
        }
      }
      break;
    case 'l':
    case 'L':
      if (STRCASEEQ('i','I', &s[1], "ime")) {
        /* lime */
        return apr_pstrdup(pool, "#00ff00");
      }
      break;
    case 'm':
    case 'M':
      if (STRCASEEQ('a','A', &s[1], "aroon")) {
        /* maroon */
        return apr_pstrdup(pool, "#800000");
      }
      break;
    case 'n':
    case 'N':
      if (STRCASEEQ('a','A', &s[1], "avy")) {
        /* navy */
        return apr_pstrdup(pool, "#000080");
      }
      break;
    case 'o':
    case 'O':
      if (STRCASEEQ('l','L', &s[1], "live")) {
        /* olive */
        return apr_pstrdup(pool, "#808000");
      }
      break;
    case 'p':
    case 'P':
      if (STRCASEEQ('u','U', &s[1], "urple")) {
        /* purple */
        return apr_pstrdup(pool, "#800080");
      }
      break;
    case 'r':
    case 'R':
      if (STRCASEEQ('e','E', &s[1], "ed")) {
        /* red */
        return apr_pstrdup(pool, "#ff0000");
      }
      break;
    case 's':
    case 'S':
      if (STRCASEEQ('i','I', &s[1], "ilver")) {
        /* silver */
        return apr_pstrdup(pool, "#c0c0c0");
      }
      break;
    case 't':
    case 'T':
      if (STRCASEEQ('e','E', &s[1], "eal")) {
        /* teal */
        return apr_pstrdup(pool, "#008080");
      }
      break;
    case 'w':
    case 'W':
      if (STRCASEEQ('h','H', &s[1], "hite")) {
        /* white */
        return apr_pstrdup(pool, "#ffffff");
      }
      break;
    case 'y':
    case 'Y':
      if (STRCASEEQ('y','Y', &s[1], "ellow")) {
        /* yellow */
        return apr_pstrdup(pool, "#ffff00");
      }
      break;
    default:
      break;
    }
  }
  return s;
}