diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2016-05-11 20:59:46 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2016-05-11 20:59:46 -0400 |
| commit | 08179823849c92caa30c3c71ddb3cfd95b8a27e8 (patch) | |
| tree | cf5450549f665884ff7a097bbaae27e23864af74 /ws2a/newbug.c | |
| parent | 34ab0b3c5c24b0a325912bab5b06f858008a99ce (diff) | |
| download | webpage-08179823849c92caa30c3c71ddb3cfd95b8a27e8.tar.gz webpage-08179823849c92caa30c3c71ddb3cfd95b8a27e8.tar.bz2 webpage-08179823849c92caa30c3c71ddb3cfd95b8a27e8.zip | |
Started work on bug creation
Diffstat (limited to 'ws2a/newbug.c')
| -rw-r--r-- | ws2a/newbug.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/ws2a/newbug.c b/ws2a/newbug.c index e69de29..8ffa7f0 100644 --- a/ws2a/newbug.c +++ b/ws2a/newbug.c @@ -0,0 +1,182 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdint.h> + +char* replaceHTML(char* str){ + //printf("Replaceing:%s\n",str); + char* nstr = malloc((sizeof(char)*strlen(str)) + 1); + if(nstr == NULL){ + printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10); + printf("Failed to allocate memory!\n"); + } + + int strp = 0; + int nstrp = 0; + while(str[strp] != '\0'){ + //printf("Strp=%d nstrp=%d\n",strp,nstrp); + if(str[strp] == '+'){ + nstr[nstrp] = ' '; + strp++; + nstrp++; + }else if(str[strp] == '%'){ + //printf("Hit encodeing!\n"); + int hex = 0; + sscanf(str+strp,"%%%2x",&hex); + //printf("Was:%c(%d)\n",(char)hex,hex); + if(hex == 0x0D){ + strp+=3; + continue; + } + if(hex == 0x0A){ + nstr[nstrp] = '\\'; + nstr[nstrp+1] = 'n'; + nstrp+=2; + strp+=3; + continue; + } + nstr[nstrp] = (char)hex; + nstrp++; + strp+=3; + }else if(str[strp] == '\n'){ + nstr[nstrp] = '\\'; + nstr[nstrp+1] = 'n'; + nstrp+=2; + strp++; + }else{ + nstr[nstrp] = str[strp]; + nstrp++; + strp++; + } + } + nstr[nstrp] = '\0'; + //printf("Done, str is now:%s\n",nstr); + return nstr; +} + +unsigned long hash(unsigned char *str){ + unsigned long hash = 5381; + int c; + + while (c = *str++) + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + + return hash; +} + +char* useridhash(char* str){ + char* hash = calloc(sizeof(char)*20,sizeof(char)); + int i = (int)str[0]; + int len = strlen(str); + int tloop = i*20; + unsigned int hashp = 0; + unsigned int strp = 0; + i = 0; + while(i < tloop){ + printf("i:%d hashp:%u strp:%u tloop:%d\n",i,hashp,strp,tloop); + char tchar = str[strp%len]; + hash[hashp%20] += str[strp%len]; + str[strp%len]+=1; + hashp+=(int)tchar; + strp+=(int)(hashp*hashp); + i++; + } + i = 0; + printf("Before characterizeing the hash, it was: %s\n",hash); + while(i < 20){ + //printf("Normalizeing %c(%u) as %c(%u)\n",hash[i],(unsigned int)hash[i],(hash[i] % 92) + 32,(hash[i] % 92) + 32); + unsigned int hashnum = hash[i]; + unsigned int modedhashnum = hashnum % 92; + //printf("hashnum was %u, after mod it is:%u\n",hashnum,modedhashnum); + hash[i] = modedhashnum + 32; + i++; + } + printf("Resulting hash was:%s\n",hash); + return hash; +} + +int main(){ + //char* data = getenv("QUERY_STRING"); + //char data[20] = "?id=1"; + char* hardip = getenv("REMOTE_ADDR"); + char data[] = "name=Apickx&id=test&shortdesc=test+creation&longdesc=this+is+a+long+description&captcha=damaged+crazy"; + + char name[20]; + char userid[20]; + char shortdesc[128]; + char longdesc[4096]; + char captcha[30]; + + char* iname = strtok(data,"&"); + char* iuserid = strtok(NULL,"&"); + char* ishortdesc = strtok(NULL,"&"); + char* ilongdesc = strtok(NULL,"&"); + char* icaptcha = strtok(NULL,"&"); + + sscanf(iname,"name=%s",name); + sscanf(iuserid,"id=%s",userid); + sscanf(ishortdesc,"shortdesc=%s",shortdesc); + sscanf(ilongdesc,"longdesc=%s",longdesc); + sscanf(icaptcha,"captcha=%s",captcha); + + printf("name:%s\nid:%s\nshort:%s\nlong:%s\ncaptcha:%s\n",name,userid,shortdesc,longdesc,captcha); + + //Check captcha + char captchapath[100]; + char* captchadecoded = replaceHTML(captcha); + sprintf(captchapath,"../ws2a/captchas/%s.txt",captchadecoded); + + FILE* captchafile = fopen(captchapath,"r"); + if(captchafile == NULL){ + printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10); + printf("Captcha incorrect:No file found"); + return; + } + unsigned long inputhash = hash(captchadecoded); + free(captchadecoded); + unsigned long filehash = 0; + fscanf(captchafile,"%lu",&filehash); + if(filehash != inputhash){ + printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10); + printf("Captcha incorrect:Bad hash"); + return; + } + + //If we had the correct captcha, remove it. + char command[100]; + sprintf(command,"rm \"%s.txt\"",captchapath); + system(command); + + //Create new bug + FILE* lastbugfile = fopen("../ws2a/bugs/lastbug","r+"); + if(lastbugfile == NULL){ + printf("Unable to open LastBugFile!"); + } + unsigned long long lastbug = 0; + fscanf(lastbugfile,"%llu",&lastbug); + fseek(lastbugfile,0,SEEK_SET); + lastbug++; + fprintf(lastbugfile,"%llu",lastbug); + fclose(lastbugfile); + + char* dname = replaceHTML(name); + char* duid = useridhash(userid); + time_t rawtime; + struct tm * timeinfo; + time(&rawtime); + timeinfo = localtime(&rawtime); + char* dshortd = replaceHTML(shortdesc); + char* dlongd = replaceHTML(longdesc); + printf("Right before printing to file\n"); + char newfilepath[100]; + sprintf(newfilepath,"../ws2a/bugs/%llu",lastbug); + FILE* newfile = fopen(newfilepath,"w"); + fprintf(lastbugfile,"%s\n%s\n%s%s\n0:\n%s\n",dname,duid,asctime(timeinfo),dshortd,dlongd); + fclose(newfile); + free(dname); + free(duid); + free(dshortd); + free(dlongd); + + return 0; +} |
