| Thema: |
|
||
| Autor: | Transistor | ||
| Datum: | 03.12.24 17:50 | ||
| Antwort auf: | Erinnerungen - unvollständig von Transistor | ||
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; } |
|||
| < antworten > | |||