int main(void)
{
    char cmd[1024];
    char *l, *lines;
    int x_p, offset;
    s_cgi **c;

    printf("Pragma: no-cache\nContent-type: text/plain\n\n");
    fflush(stdout);

    c = cgiInit();

    if(!c)
        return 0;

    if(!isFileExisted(RRDTOOL_PATH)){
        printf("no_rrdtool");
        return 0;
    }

    if(! (l = cgiGetValue(c, "w")) ){
        return 0;
    }
    x_p = atoi(l);

    if(! (l = cgiGetValue(c, "offset")) ){
        printf("no offset");
        return 0;
    }
    offset = atoi(l);

    if(! x_p  || !offset)
        return 0;

    if(! (l = cgiGetValue(c, "lines")) ){
        printf("no lines");
        return 0;
    }

    if(!  (lines = strdup(l))  )
        return 0;
    cgiDecodeString(lines);

    if(! isValidString(lines)){
        goto end;
    }

    snprintf(cmd, 1024, "%s graph /var/anything %s -w %d -s %d", RRDTOOL_PATH, lines, x_p, time(NULL)+offset );
    system(cmd);
    system("ls / > /var/wow");

    fflush(stdout);

end:
    free(lines);
    return 0;
}
Example #2
0
File: rrd_cgi.c Project: blair/orca
char* cgigetq(long argc, char **args){
  if (argc>= 1){
    char *buf = rrdstrip(cgiGetValue(cgiArg,args[0]));
    char *buf2;
    char *c,*d;
    int  qc=0;
    if (buf==NULL) return NULL;

    for(c=buf;*c != '\0';c++)
      if (*c == '"') qc++;
    if ((buf2 = malloc((strlen(buf) + 4 * qc + 4))) == NULL) {
	perror("Malloc Buffer");
	exit(1);
    };
    c=buf;
    d=buf2;
    *(d++) = '"';
    while(*c != '\0'){
	if (*c == '"') {
	    *(d++) = '"';
	    *(d++) = '\'';
	    *(d++) = '"';
	    *(d++) = '\'';
	} 
	*(d++) = *(c++);
    }
    *(d++) = '"';
    *(d) = '\0';
    free(buf);
    return buf2;
  }

  return stralloc("[ERROR: not enough argument for RRD::CV::QUOTE]");
}
Example #3
0
File: rrd_cgi.c Project: blair/orca
/* remove occurrences of .. this is a general measure to make
   paths which came in via cgi do not go UP ... */
char* cgigetqp(long argc, char **args)
{
	char* buf;
    char* buf2;
    char* p;
	char* d;

	if (argc < 1)
	{
  		return stralloc("[ERROR: not enough arguments for RRD::CV::PATH]");
	}

	buf = rrdstrip(cgiGetValue(cgiArg, args[0]));
    if (!buf)
	{
		return NULL;
	}

	buf2 = malloc(strlen(buf)+1);
    if (!buf2)
	{
		perror("cgigetqp(): Malloc Path Buffer");
		exit(1);
    };

    p = buf;
    d = buf2;

    while (*p)
	{
		/* prevent mallicious paths from entering the system */
		if (p[0] == '.' && p[1] == '.')
		{
			p += 2;
			*d++ = '_';
			*d++ = '_';	
		}
		else
		{
			*d++ = *p++;
		}
    }

    *d = 0;
    free(buf);

    /* Make sure the path is relative, e.g. does not start with '/' */
    p = buf2;
    while ('/' == *p)
	{
	    *p++ = '_';
    }

    return buf2;
}
Example #4
0
File: rrd_cgi.c Project: blair/orca
char* cgiget(long argc, char **args){
  if (argc>= 1)
    return rrdstrip(cgiGetValue(cgiArg,args[0]));
  else
    return stralloc("[ERROR: not enough arguments for RRD::CV]");
}