Thema:
Re:Erinnerungen - unvollständig flat
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&auml;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&uuml;nde haben:\n");
     printf("<UL>\n<LI>Sie haben im selben Moment wie ein anderer User Ihren Beitrag abgeschickt.");
     printf(" Bitte dr&uuml;cken Sie die <B>Back</B>-Taste und versuchen es erneut.\n");
     printf("<P>\n<LI>Das Forum wird zur Zeit gewartet (Thread-L&ouml;schung etc.).");
     printf(" Versuchen Sie es bitte in ein paar Minuten erneut!\n");
     printf("<P>\n<LI>Das Forum ist abgest&uuml;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 >