This updated code is running on the same page now.
Code:
#include <stdio.h>
#include <stdlib.h>
int printHeader(void);
int mergeArgv(char *argv[], int maxlen, char *merged);
int main(int argc, char *argv[])
{
char merged[512] = "\0";
char *env = getenv("hello");
printHeader();
printf("%s <br>\n",env);
if (argc > 1)
{
mergeArgv(argv,512, merged);
printf("%s",merged);
}
return 0;
}
/* Turns all the argv strings into one */
int mergeArgv(char *argv[], int maxlen, char *merged)
{
int i;
if (strlen(argv[0]) >= maxlen)
{
return 0;
}
else
{
strcpy(merged,argv[0]);
}
for (i = 1; argv[i]; i++)
{
if (strlen(merged) + strlen(argv[i]) + 1 >= maxlen)
{
return 0;
}
else
{
strcat(merged," ");
strcat(merged,argv[i]);
}
}
return 0;
}
int printHeader(void)
{
printf("Content-type: text/html\n\n");
return 0;
}
It tries to display the environment variable hello, but as you can see from http://www.legcramp.co.uk/cgi-bin/ex?hello=hi
it doesn't work.