Antwort auf den Beitrag "Re:Erinnerungen - unvollständig" posten:
Nickname:
Passwort:
Thema:
Nachricht:
>Falls die Programmierer unter uns noch etwas zum Lachen brauchen - das ist der vollständige Code unseres ersten Forums in seiner vollen Hässlichkeit :-) > >#include <stdio.h> >#include <stdlib.h> >#include <string.h> >#include <ctype.h> >#include <time.h> >#ifdef _Windows > #include <dos.h> >#else > #include <sys/stat.h> >#endif > >#include "cgitools.h" >#include "bretttools.h" >#include "htmlexport.h" > >#define FORUM_VERSION "0.1.9" > >/* > Forumsauswahl : > FORUM_MAN Maniacforum > FORUM_PCX PCX-Forum > FORUM_OPM OPM-Forum >*/ > >#ifndef FORUM_NAME > > #define FORUM_OPM > >#endif > > > >/******************************** Hauptprogramm *******************************/ > >int main(void) >{ > char *antwort; > char *Name, *Passwort, *Titel, *Nachricht, *OrgMsg, *BasisMsg, *OrgTitel, *OrgName; >/* char *OrgName; > int RequestNotify; >*/ > char StrNr[1024]; > char StrName[1024]; > char StrPasswort[1024]; > char StrEmail[1024]; > char StrOrt[1024]; >/* > char StrProfile[1024]; >*/ > > FILE *Datei, *CurMes, *Pass, *DateiMerk; > FILE *Output, *Log; > char FileName[2048]; > char FileName2[2048]; > > time_t t; > struct tm *tblock; > char zeit[50],zeit_long[50]; > char weekday[][3]={"So","Mo","Di","Mi","Do","Fr","Sa"}; > char weekday_long[][11]={"Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"}; > char monat[][10]={"Januar","Februar","März", > "April","Mai","Juni", > "Juli","August","September", > "Oktober","November","Dezember"}; > > int pw; /* Schalter aus ini-Datei */ > int quote; > int logging; > int RefCheck; >/* int Notify; */ > int ClickableLinks; > int SortOrder; > int redi; > unsigned long int Umbruch; > unsigned long int DupCheck; > > unsigned long int anz,AntwortAnz; > char TempStr[2048]; > char tmp[2048]; > char tmp2[2048]; > int len; > int found=0; > char *pStr; > char FORUM_NAME[2048]; > char ADMIN_EMAIL[2048]; > char HTML_DIR[2048]; /* Verz. aus ini-Datei */ > char HTML_URL[2048]; > char PROFILE_URL[2048]; > char CGI_URL[2048]; > >#ifdef FORUM_OPM > strcpy(ADMIN_EMAIL,"xxx@opm-net.de"); >#endif >#ifdef FORUM_PCX > strcpy(ADMIN_EMAIL,"xxx@opm-net.de"); >#endif >#ifdef FORUM_MAN > strcpy(ADMIN_EMAIL,"xxx@maniac-online.de"); >#endif > > CreateBusyFile(ADMIN_EMAIL); > >/*INI-Datei auslesen*/ > > GetConfig("./forum.ini","LogFile",TempStr,ADMIN_EMAIL); > logging=atoi(TempStr); > GetConfig("./forum.ini","Quoten",TempStr,ADMIN_EMAIL); > quote=atoi(TempStr); > GetConfig("./forum.ini","Passwort",TempStr,ADMIN_EMAIL); > pw=atoi(TempStr); > GetConfig("./forum.ini","RefererCheck",TempStr,ADMIN_EMAIL); > RefCheck=atoi(TempStr); > GetConfig("./forum.ini","Umbruch",TempStr,ADMIN_EMAIL); > Umbruch=atol(TempStr); > GetConfig("./forum.ini","DupCheck",TempStr,ADMIN_EMAIL); > DupCheck=atol(TempStr); > >/* > GetConfig("brett.ini","Notify",TempStr); > Notify=atoi(TempStr); >*/ > GetConfig("./forum.ini","ClickableLinks",TempStr,ADMIN_EMAIL); > ClickableLinks=atoi(TempStr); > GetConfig("./forum.ini","SortOrder",TempStr,ADMIN_EMAIL); > SortOrder=atoi(TempStr); > if ((SortOrder<0)||(SortOrder>2)) ConfigError(ADMIN_EMAIL); > GetConfig("./forum.ini","Name",FORUM_NAME,ADMIN_EMAIL); > GetConfig("./forum.ini","AdminEmail",ADMIN_EMAIL,ADMIN_EMAIL); > GetConfig("./forum.ini","HTMLDir",HTML_DIR,ADMIN_EMAIL); > GetConfig("./forum.ini","BaseURL",HTML_URL,ADMIN_EMAIL); > GetConfig("./forum.ini","ProfileURL",PROFILE_URL,ADMIN_EMAIL); > GetConfig("./forum.ini","ScriptURL",CGI_URL,ADMIN_EMAIL); > > if ((strcmp(HTML_DIR,"")==0)||(strcmp(HTML_URL,"")==0)||(strcmp(CGI_URL,"")==0)) ConfigError(ADMIN_EMAIL); > >#ifndef DEBUG >/*Fehler bei fehlendem CONTENT*/ > if ((getenv("CONTENT_LENGTH")==NULL)||(atol(getenv("CONTENT_LENGTH"))==0)) { > printf("content-type: text/plain\n\n"); > printf(FORUM_VERSION); > remove("./busy.tmp"); > exit(0); > } >#endif > >/*REFERER ueberpruefen*/ > > if (RefCheck==1){ > if(getenv("HTTP_REFERER")!=NULL) { > if(strncmp(getenv("HTTP_REFERER"),HTML_URL,strlen(HTML_URL))!=0) { > printf("Location: %s/error_ref.html\n\n",HTML_URL); > remove("./busy.tmp"); > exit(0); > } > } > else { > printf("Location: %s/error_ref.html\n\n",HTML_URL); > remove("./busy.tmp"); > exit(0); > } > } > >#ifndef DEBUG > antwort=(char*)malloc(atol(getenv("CONTENT_LENGTH"))+1); >#else > antwort=(char*)malloc(50000); >#endif > > if (antwort==NULL) MemoryError(); > scanf("%s",antwort); > >/*Name und ggf. Passwort einlesen und ueberpruefen*/ > > len=GetElementLength(antwort,"nname"); > if (len==0) Name=strdup(""); > else { > Name=(char*)malloc(len+1); > if (Name==NULL) MemoryError(); > ReadElement(antwort,"nname",Name); > }; > if (pw==1) { > len=GetElementLength(antwort,"passw"); > if (len==0) Passwort=strdup(""); > else { > Passwort=(char*)malloc(len+1); > if (Passwort==NULL) MemoryError(); > ReadElement(antwort,"passw",Passwort); > } > } > else { > Passwort=(char*)malloc(10); > sprintf(Passwort,"(Kein PW)"); > } > >/*Titel einlesen und bei fehlen des Titel eine Fehlermeldung ausgeben*/ > > len=GetElementLength(antwort,"thema"); > if (len==0) Titel=strdup(""); > else { > Titel=(char*)malloc(len+1); > if (Titel==NULL) MemoryError(); > ReadElement(antwort,"thema",Titel); > } > > if ((strcmp(Name,"")==0)||(strcmp(Titel,"")==0)) { > printf("Location: %s/error_titel.html\n\n",HTML_URL); > remove("./busy.tmp"); > exit(0); > } > >/*Zeitstring basteln*/ > > time(&t); > tblock=localtime(&t); > sprintf(zeit,"%s, %i.%i.%i, %02i:%02i",weekday[tblock->tm_wday],tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900,tblock->tm_hour,tblock->tm_min); > >/*Passwort ueberpruefen*/ > > if (pw==1){ > Pass=fopen("../passwds.dat","rt"); > if (Pass==NULL) { >/* printf("Location: %s/error_config.html\n\n",HTML_URL);*/ > printf("content-type: text/html\n\n"); > printf("<HTML><HEAD>\n"); > printf("<style type=\"text/css\">\n<!--\n"); > printf("p, li { font-family:Verdana, Arial; }\n"); > printf("#g { background-color:#818392; }\n"); > printf("#q { background-color:#B4B6C5; }\n"); > printf("a:link { text-decoration:none; }\n"); > printf("a:visited { text-decoration:none; }\n"); > printf("a:hover { color:#818392; text-decoration:none; }\n"); > printf("//-->\n</style>\n</HEAD>\n"); > printf("<BODY bgcolor=#A3A4B6 text=#000000 link=#ffffff alink=#818392 vlink=#ffffff>\n"); > printf("<TABLE CELLPADDING=1 CELLSPACING=0 BORDER=0 bgcolor=000000>\n<TR>\n"); > printf("<TD><TABLE WIDTH=714 CELLPADDING=4 CELLSPACING=1 BORDER=0>\n<TR>\n"); > printf("<TD id=g><P><BR><FONT SIZE=\"3\"><B>Es gab ein Problem beim Schreiben Ihrer Nachricht!"); > printf("</TD>\n</TR>\n<TR>\n<TD id=q><P><BR>Das kann folgende Gründe haben:\n"); > printf("<UL>\n<LI>Sie haben im selben Moment wie ein anderer User Ihren Beitrag abgeschickt."); > printf(" Bitte drücken Sie die <B>Back</B>-Taste und versuchen es erneut.\n"); > printf("<P>\n<LI>Das Forum wird zur Zeit gewartet (Thread-Löschung etc.)."); > printf(" Versuchen Sie es bitte in ein paar Minuten erneut!\n"); > printf("<P>\n<LI>Das Forum ist abgestürzt. Sollte nach mehreren Versuchen diese Meldung erscheinen,"); > printf(" benachrichtigen Sie bitte den <A HREF=\"mailto:%s\">Betreiber</A> dieses Forums!\n",ADMIN_EMAIL); > printf("</TD>\n</TR>\n</TABLE></TD></TR>\n"); > printf("<TR><TD COLSPAN=4 ALIGN=center bgcolor=#a3a4b6><p style=\"margin-top:4px;\"><FONT SIZE=1 ID=v>"); > printf("Dieses Forum wurde programmiert von <A HREF=\"mailto:TorstenRentsch@bigfoot.com\">Torsten Rentsch</A> und"); > printf(" <A HREF=\"mailto:MichaelSchletter@gmx.de\">Michael Schletter</A></TD></TR>\n</TABLE>\n"); > printf("</BODY>\n</HTML>\n"); > remove("./busy.tmp"); > exit(0); > } > while ((!feof(Pass))&&(found==0)){ > fgets(tmp,2047,Pass); > if (strchr(tmp,',')==NULL) pStr=NULL; > else pStr=strtok(tmp,","); > if (pStr) { strcpy(StrNr, pStr); strcpy(pStr,strtok(NULL,",")); } > else strcpy(StrNr,""); > if (pStr) { strcpy(StrName, pStr); strcpy(pStr,strtok(NULL,",")); } > else strcpy(StrName,""); > if (pStr) { strcpy(StrPasswort, pStr); pStr=strtok(NULL,","); } > else strcpy(StrPasswort,""); >/* > if (pStr) { strcpy(StrProfile, pStr); pStr=strtok(NULL,","); } > else strcpy(StrProfile,""); >*/ > if (pStr) { strcpy(StrEmail, pStr); pStr=strtok(NULL,","); } > else strcpy(StrEmail,""); > if (pStr) pStr=strtok(NULL,",");??/* überspringen der Real-Emailadresse */ > if (pStr) { strcpy(StrOrt, pStr); pStr=strtok(NULL,","); } > else strcpy(StrOrt,""); > if (pStr) { redi=atoi(pStr); } /* atoi stoert sich nicht an abschliessenden \n */ > else redi=0; > > if (strcmp(StrName,Name)==0) > if(strcmp(StrPasswort,Passwort)==0) found=1; > } > > if (found==0) { > printf("Location: %s/error_regi.html\n\n",HTML_URL); > if (logging==1) { /* Logdatei schreiben */ > Log=fopen("./forum.log","at"); > fprintf(Log,"%s | %s | %s (NICHT GEFUNDEN) | %s | %s\n",Titel,Name,Passwort,zeit,getenv("REMOTE_ADDR")); > fclose(Log); > } > remove("./busy.tmp"); > exit(0); > } > } > else { > if (GetElementLength(antwort,"email")!=0) ReadElement(antwort,"email",StrEmail); > else strcpy(StrEmail," "); > strcpy(StrOrt," "); > } > > if (logging==1){ > Log=fopen("./forum.log","at"); > fprintf(Log,"%s | %s | %s | %s | %s\n",Titel,Name,Passwort,zeit,getenv("REMOTE_ADDR")); > fclose(Log); > } > >/*Emailbenachrichtigung verschicken ?*/ >/* > len=GetElementLength(antwort,"orgname"); > if (len==0) OrgName=strdup(""); > else { > OrgName=(char*)malloc(len+1); > if (OrgName==NULL) MemoryError(); > ReadElement(antwort,"orgname",OrgName); > } > > if ((strcmp(OrgName,"")!=0)&&(Notify==1)){ > SendEmailNotify(OrgName); > } >*/ >/*------------------------------ Parameter einlesen --------------------------*/ > > len=GetElementLength(antwort,"nachricht"); > if (len==0) Nachricht=strdup(""); > else { > Nachricht=(char*)malloc(len+1); > if (Nachricht==NULL) MemoryError(); > ReadElement(antwort,"nachricht",Nachricht); > } > len=GetElementLength(antwort,"orginalmsg"); > if (len==0) OrgMsg=strdup(""); > else { > OrgMsg=(char*)malloc(len+1); > if (OrgMsg==NULL) MemoryError(); > ReadElement(antwort,"orginalmsg",OrgMsg); > } > len=GetElementLength(antwort,"basismsg"); > if (len==0) BasisMsg=strdup(""); > else { > BasisMsg=(char*)malloc(len+1); > if (BasisMsg==NULL) MemoryError(); > ReadElement(antwort,"basismsg",BasisMsg); > } > len=GetElementLength(antwort,"orginaltitel"); > if (len==0) OrgTitel=strdup(""); > else { > OrgTitel=(char*)malloc(len+1); > if (OrgTitel==NULL) MemoryError(); > ReadElement(antwort,"orginaltitel",OrgTitel); > } > len=GetElementLength(antwort,"orginalname"); > if (len==0) OrgName=strdup(""); > else { > OrgName=(char*)malloc(len+1); > if (OrgName==NULL) MemoryError(); > ReadElement(antwort,"orginalname",OrgName); > } > >/* > if (GetElementLength(antwort,"notify")!=0) RequestNotify=1; > else RequestNotify=0; >*/ > >/*------------------------------- Mehrfachpostings verhindern-----------------*/ > > if (DupCheck>0) > { > sprintf(TempStr,"%s %s %s\n",OrgMsg,Titel,Name); > DuplicateCheck(TempStr,DupCheck,HTML_URL); > } > >/*------------------------------- Anzahl der Nachrichten erhoehen ------------*/ > > CurMes=fopen("./curmsg.ini","r+t"); > if (CurMes==NULL) { > printf("Location: %s/error_config.html\n\n",HTML_URL); > exit(0); > } > > fgets(TempStr,1023,CurMes); > anz=atol(TempStr); > anz++; > rewind(CurMes); > fprintf(CurMes,"%lu",anz); > fclose(CurMes); > >/*Messagedatei schreiben*/ > if (strcmp(OrgMsg,"0")==0) sprintf(BasisMsg,"%lu",anz); > > sprintf(FileName,"%s/data/%08lu.html",HTML_DIR,anz); > Datei=fopen(FileName,"wt"); > if (Datei==NULL) { > printf("Location: %s/error_config.html\n\n",HTML_URL); > exit(0); > } > >/* Einbinden des forumanbieterabhängigen Teils zum Schreiben der Messagedatei */ > >#ifdef FORUM_MAN > #include "message_man.c" >#endif >#ifdef FORUM_PCX > #include "message_pcx.c" >#endif >#ifdef FORUM_OPM > #include "message_opm.c" >#endif > > fclose(Datei); > >#ifndef _Windows > /*UNIX-Rechte setzen*/ > chmod(FileName,S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH); >#endif > >/*Aktualisierungsdatum in top_x.html aendern bzw. Zeile neu eintragen*/ > if ((SortOrder==0)||(SortOrder==2)) { /* nach letzter Antw. sort. */ > strcpy(FileName,HTML_DIR); > strcat(FileName,"/forum.tmp"); > Output=fopen(FileName,"w+t"); > > strcpy(FileName,HTML_DIR); > strcat(FileName,"/top_s.html"); > Datei=fopen(FileName,"rt"); > if (Datei==NULL) { > printf("Location: %s/error_config.html\n\n",HTML_URL); > exit(0); > } > DateiMerk=fopen(FileName,"rt"); > > do { > if (fgets(TempStr,2047,Datei)==NULL) break; > fprintf(Output,"%s",TempStr); > } while ((!feof(Datei))&&(strstr(TempStr,"<!--msg0-->")==NULL)); > >/* Einbinden des forumanbieterabhängigen Teils zum Aktualisieren der top_s Datei */ >#ifdef FORUM_MAN > #include "top_s_man.c" >#endif >#ifdef FORUM_PCX > #include "top_s_pcx.c" >#endif >#ifdef FORUM_OPM > #include "top_s_opm.c" >#endif > > fclose(DateiMerk); > fclose(Output); > fclose(Datei); > }; > > if ((SortOrder==1)||(SortOrder==2)) { /* normal */ > strcpy(FileName,HTML_DIR); > strcat(FileName,"/forum1.tmp"); > Output=fopen(FileName,"w+t"); > > strcpy(FileName,HTML_DIR); > strcat(FileName,"/top_u.html"); > Datei=fopen(FileName,"rt"); > if (Datei==NULL) { > printf("Location: %s/error_config.html\n\n",HTML_URL); > exit(0); > } > >/* Einbinden des forumanbieterabhängigen Teils zum Aktualisieren der top_u Datei */ >#ifdef FORUM_MAN > #include "top_u_man.c" >#endif >#ifdef FORUM_PCX > #include "top_u_pcx.c" >#endif >#ifdef FORUM_OPM > #include "top_u_opm.c" >#endif > > fclose(Datei); > fclose(Output); > }; > > > if ((SortOrder==0)||(SortOrder==2)) { > strcpy(FileName,HTML_DIR); > strcat(FileName,"/top_s.html"); > remove(FileName); > strcpy(FileName,HTML_DIR); > strcat(FileName,"/forum.tmp"); > strcpy(FileName2,HTML_DIR); > strcat(FileName2,"/top_s.html"); > rename(FileName,FileName2); >#ifndef _Windows > chmod(FileName2,S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH); >#endif > } > if ((SortOrder==1)||(SortOrder==2)) { > strcpy(FileName,HTML_DIR); > strcat(FileName,"/top_u.html"); > remove(FileName); > strcpy(FileName,HTML_DIR); > strcat(FileName,"/forum1.tmp"); > strcpy(FileName2,HTML_DIR); > strcat(FileName2,"/top_u.html"); > rename(FileName,FileName2); >#ifndef _Windows > chmod(FileName2,S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH); >#endif > } > >/*Threaddatei erstellen bzw. aktualisieren*/ > > if (strcmp(OrgMsg,"0")==0) sprintf(BasisMsg,"%08lu",anz); > sprintf(FileName,"%s/data/t%08lu.tmp",HTML_DIR,atol(BasisMsg)); > Output=fopen(FileName,"w+t"); > if (Output==NULL) { > printf("Location: %s/error_config.html\n\n",HTML_URL); > exit(0); > } > >/* Einbinden des forumanbieterabhängigen Teils zum Aktualisieren der thread Datei */ >#ifdef FORUM_MAN > #include "thread_man.c" >#endif >#ifdef FORUM_PCX > #include "thread_pcx.c" >#endif >#ifdef FORUM_OPM > #include "thread_opm.c" >#endif > > fclose(Output); > if (strcmp(OrgMsg,"0")!=0) { > sprintf(FileName,"%s/data/t%08lu.html",HTML_DIR,atol(BasisMsg)); > remove(FileName); > } > sprintf(FileName,"%s/data/t%08lu.tmp",HTML_DIR,atol(BasisMsg)); > sprintf(FileName2,"%s/data/t%08lu.html",HTML_DIR,atol(BasisMsg)); > rename(FileName,FileName2); >#ifndef _Windows > chmod(FileName2,S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH); >#endif > >/* > printf("Location: %s/confirm.html\n\n",HTML_URL); >*/ > >#ifdef FORUM_MAN > ShowConfirm_PCX(anz,Titel,SortOrder,HTML_URL); >#endif >#ifdef FORUM_PCX > ShowConfirm_PCX(anz,Titel,SortOrder,HTML_URL); >#endif >#ifdef FORUM_OPM > ShowConfirm_OPM(anz,Titel,SortOrder,HTML_URL); >#endif > > > remove("./busy.tmp"); > > free(Name); > free(Passwort); > free(Titel); > free(Nachricht); > free(OrgMsg); > free(BasisMsg); > free(antwort); >/* > if (Notify==1) free(OrgName); >*/ > return 0; >}
mailbenachrichtigung?