/* * Developed by Ondrej Jombik * Copyright (c) 2000-2002 Platon SDG, http://www.platon.sk/ * $Platon: maxzaw.cgi.c,v 1.4 2002/04/21 10:03:50 jombik9 Exp $ */ #include #include #ifndef __MSDOS__ #include #include #else #include #endif #include #include "autorun/maxzaw.h" #define BUFSIZE 500 #define AUTHOREMAIL "jombik@pobox.sk" #define SUBJECTSIGN "[maxzaw_form]" #define HTMLFNAME "maxzaw.html" #define DATAFNAME "data/maxzaw.txt" #define TABLE_LINES 20 #define ACTIVE_TIME (60*15) // 15 minut #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #endif typedef enum{ MESSAGE_SENT_NA, MESSAGE_SENT_OK, MESSAGE_SENT_ERR }MESSAGE_SENT_STATUS; MESSAGE_SENT_STATUS postdata2email(const char*e_str,const char*s_str); void maxzaw_form(void); void maxzaw_sent_status(MESSAGE_SENT_STATUS status); void maxzaw_table(void); int main(void){ char buf[BUFSIZE]; FILE*f; enum html_reads hr; MESSAGE_SENT_STATUS sent_status=MESSAGE_SENT_NA; /* Poslanie odkazu na autorov e-mail. */ if(getenv("CONTENT_LENGTH")!=NULL&&atoi(getenv("CONTENT_LENGTH"))){ sent_status=postdata2email(AUTHOREMAIL,SUBJECTSIGN); putenv("CONTENT_LENGTH="); } puts("Content-type: text/html; charset=iso8859-2\n"); if((f=fopen(HTMLFNAME,"rt"))==NULL){ printf("File not found. [%s]
",HTMLFNAME); return(1); } while((hr=html_read(f,buf,sizeof(buf)))!=HTML_EOF){ if(hr==HTML_TEXT)fputs(buf,stdout); else if(hr==HTML_TAG){ if(!strcmp(buf,""))maxzaw_form(); else if(!strcmp(buf,""))maxzaw_sent_status(sent_status); else if(!strcmp(buf,""))maxzaw_table(); else fputs(buf,stdout); } else break; } fclose(f); return(0); } MESSAGE_SENT_STATUS postdata2email(const char*e_str,const char*s_str){ int fDataEmpty=2; if(getenv("CONTENT_LENGTH")!=NULL&&atoi(getenv("CONTENT_LENGTH"))){ register int c; char*tmpfname=tmpnam(NULL); FILE*ftmp; umask(070); if((ftmp=fopen(tmpfname,"wt"))!=NULL){ char sysstr[80]; fprintf(ftmp,"Subject: %s\n",s_str); fprintf(ftmp,"To: %s\n",e_str); fputc('\n',ftmp); while((c=fgetc(stdin))!=EOF){ if(c=='='||c=='&'){ fputc('\n',ftmp); fputc('\n',ftmp); if(fDataEmpty){ if(c=='=')fDataEmpty=1; if(c=='&')fDataEmpty=2; } } else{ if(c=='%'){ char ccode[3]; if(fgets(ccode,3,stdin)!=NULL){ ccode[2]='\0'; sscanf(ccode,"%x",&c); } else c=EOF; } else if(c=='+')c=' '; if(c!=EOF){ fputc(c,ftmp); if(fDataEmpty==1)fDataEmpty=0; } } } fclose(ftmp); if(!fDataEmpty){ sprintf(sysstr,"cat %s | /usr/sbin/sendmail %s",tmpfname,e_str); if(system(sysstr))printf("Failed to `%s`.
",sysstr); } sprintf(sysstr,"rm -i %s",tmpfname); if(system(sysstr))printf("Failed to `%s`.
",sysstr); } else return(MESSAGE_SENT_ERR); umask(022); } else return(MESSAGE_SENT_ERR); return(fDataEmpty?MESSAGE_SENT_NA:MESSAGE_SENT_OK); } void maxzaw_form(void){ puts("\
\
\
\ Oddosielateľ:
\ \

\   \ \
\
\ "); } void maxzaw_sent_status(MESSAGE_SENT_STATUS status){ if(status!=MESSAGE_SENT_NA){ puts("
"); if(status==MESSAGE_SENT_OK)puts("Vasa sprava bola uspesne odoslana."); else puts("Pri posielaní Vašej správy nastali menšie komplikácie.
Správa nebola odoslaná.
"); puts("
"); } } void maxzaw_table(void){ maxzawUserTable ut; maxzaw_user*usr; register int k; puts("\
\ \ \ \ \ \ "); if(!ut.ReadFromFile(DATAFNAME)){ printf("File not found. [%s]
",DATAFNAME); } else{ for(k=0;k"); printf(""); puts(""); puts(""); puts(""); } } puts("
PoradieDátum zaveseniaZawislákDĺžka pobytu
", k%2?"99":"CC",k%2?"FFFFFF":"000000"); puts(""); printf("%d.",k+1); puts(""); { time_t secs_now=(usr->time)-(usr->tonline); char timestr[20]; // staci 17 if(!strftime(timestr,20,"%d.%m.%Y %H:%M",localtime(&secs_now)))puts("N/A"); else{ timestr[19]='\0'; puts(timestr); } } puts(""); printf("%s", (time(NULL)-usr->timenick); puts(""); printf("%ld hod. %ld min.", usr->tonline/3600,usr->tonline/60-((usr->tonline/3600)*60)); puts("
"); }