From: Jean-Marc Pigeon (Delson) Date: Mon, 19 May 2025 11:40:57 +0000 (-0400) Subject: Starting to implement the "sender" program X-Git-Tag: tag-0.8~98 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=5cea0bb1a77d2afab6a087ef2aafa7ffa428b788;p=jmp%2Fmailleur Starting to implement the "sender" program --- diff --git a/Makefile b/Makefile index 1ef9110..5b9fd49 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,23 @@ sorter : clean debug -r $(TESTDIR) #-------------------------------------------------------------------- +#To test sender +sender : clean debug newtest + @ bin/$@ \ + -d 2 \ + -c ./conf/feeder.conf.dvl \ + -r $(TESTDIR) \ + example.com-1747652224-0002.todo + +dbgsend : clean debug + @ gdb \ + --args \ + bin/sender \ + -f \ + -d2 \ + -c ./conf/feeder.conf.dvl \ + -r $(TESTDIR) +#-------------------------------------------------------------------- #testing feed FEEDPAR = \ $(TESTIP) \ diff --git a/app/sender.c b/app/sender.c index 25a015a..0efa306 100644 --- a/app/sender.c +++ b/app/sender.c @@ -10,6 +10,7 @@ /********************************************************/ #include #include +#include #include #include @@ -26,56 +27,32 @@ /* procedure to scan all files */ /* */ /********************************************************/ -static _Bool scantrans() +static _Bool scantodo(char *fname) { -#define OPEP "sorter.c:scantrans," +#define OPEP "sorter.c:scantodo," _Bool status; -char **fname; -TRATYP **trans; int phase; _Bool proceed; status=false; -fname=(char **)0; -trans=(TRATYP **)0; phase=0; proceed=true; while (proceed==true) { switch (phase) { case 0 : //Getting the list of file - fname=eml_getqfilelist(fname,".trans"); - if (fname==(char **)0) - phase=999; //Nothing to do + if (eml_renameqfile(fname,EXTODO,EXDOING)==false) { + (void) rou_alert(0,"%s Unable to rename file <%s.%s>",OPEP,fname,EXDOING); + phase=999; //No need to go further + } break; case 1 : //Building the "trans" list - if (fname!=(char **)0) { //walways - char **ptr; - - ptr=fname; - while (*ptr!=(char *)0) { - FILE *qfile; - - (void) rou_alert(0,"%s fame=<%s>",OPEP,*ptr); - if ((qfile=eml_openqfile(*ptr))!=(FILE *)0) { - trans=eml_scanqfile(trans,qfile); - (void) eml_closeqfile(qfile); - (void) eml_deleteqfile(*ptr); - } - ptr++; - } - fname=(char **)rou_freelist((void *)fname,(genfree_t)rou_freestr); - } break; - case 2 : //scanning translit - if (trans!=(TRATYP **)0) { - TRATYP **ptr; - - ptr=trans; - (void) eml_todoqfile(ptr); - trans=(TRATYP **)rou_freelist((void **)trans,(genfree_t)eml_freetra); - status=true; + case 2 : //job completed + if (eml_renameqfile(fname,EXDOING,EXDONE)==false) { + (void) rou_alert(0,"%s Unable to rename file <%s.%s>",OPEP,fname,EXDONE); + phase=999; //No need to go further } break; default : //SAFE Guard @@ -115,11 +92,17 @@ while (proceed==true) { //(void) fprintf(stdout,"JMPDBG main phase='%d'\n",phase); switch (phase) { case 0 : //checking parameters - if ((params=par_getparams(argc,argv,"c:d:fhi:r:v"))==(ARGTYP *)0) { + if ((params=par_getparams(argc,argv,"c:d:fh:r:v"))==(ARGTYP *)0) { + proceed=false; //no need to go further + } + break; + case 1 : //do we have a parameter + if (params->argc<=0) { + (void) rou_alert(0,"%s todo filename missing (exiting)",SENDER); proceed=false; //no need to go further } break; - case 1 : //Preparing scan + case 2 : //Preparing scan (void) rou_modesubrou(true); (void) sig_modeunisig(true); (void) rou_setappname(SENDER); @@ -127,13 +110,34 @@ while (proceed==true) { (void) openlog(appname,LOG_NDELAY|LOG_PID,LOG_DAEMON); (void) closelog(); break; - case 2 : //Scanning all file - phase--; //Looping on same phase - if ((hangup==true)||(reload==true)) - phase=999; //Process - if (scantrans()==false) - phase=999; - (void) sleep(5); + case 3 : //scanning parameters list + if (params!=(ARGTYP *)0) { //always + int num; + + num=0; + while (numargc) { + char *fname; + char *ptr; + + fname=params->argv[num]; + if ((hangup==true)||(reload==true)) + break; + if ((ptr=strrchr(fname,'.'))==(char *)0) { + (void) rou_alert(0,"%s unable to find <%s> extension",SENDER,fname); + break; + } + *ptr='\000'; + ptr++; + if (strcmp(ptr,EXTODO)!=0) { + (void) rou_alert(0,"%s wrong extension for file <%s.%s>", + SENDER,fname,ptr); + break; + } + if (scantodo(fname)==false) + break; + num++; + } + } break; default : //end of task params=par_freeparams(params); diff --git a/app/sorter.c b/app/sorter.c index ff427f4..c6a335e 100644 --- a/app/sorter.c +++ b/app/sorter.c @@ -44,7 +44,7 @@ proceed=true; while (proceed==true) { switch (phase) { case 0 : //Getting the list of file - fname=eml_getqfilelist(fname,".trans"); + fname=eml_getqfilelist(fname,EXTRANS); if (fname==(char **)0) phase=999; //Nothing to do break; diff --git a/data-feed/feed02.tst b/data-feed/feed02.tst index 2dcf94f..39c56c4 100644 --- a/data-feed/feed02.tst +++ b/data-feed/feed02.tst @@ -11,6 +11,8 @@ S:HELO example.com R:250-mailleur.example.com, link (cleartext) ready,... S:MAIL FROM: R:250 2.1.3 postmaster@example.com.. sender ok +S:RCPT TO: +R:250 2.6.4 Address accepted S:RCPT TO: R:250 2.6.4 Address accepted S:RCPT TO: diff --git a/data-queue/00313-20250517142512-0184-0000.trans b/data-queue/00313-20250517142512-0184-0000.trans deleted file mode 100644 index 2d29ccc..0000000 --- a/data-queue/00313-20250517142512-0184-0000.trans +++ /dev/null @@ -1,3 +0,0 @@ -R 1747506312 0 00313-20250517142512-0184-0000 postmaster@example.com dom1user1@subdom1.example.com -R 1747506312 0 00313-20250517142512-0184-0000 postmaster@example.com dom2user1@subdom2.example.com -R 1747506312 0 00313-20250517142512-0184-0000 postmaster@example.com dom2user2@subdom2.example.com diff --git a/data-queue/00317-20250517142513-0859-0000.trans b/data-queue/00317-20250517142513-0859-0000.trans deleted file mode 100644 index bbe8b52..0000000 --- a/data-queue/00317-20250517142513-0859-0000.trans +++ /dev/null @@ -1,4 +0,0 @@ -R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom1user1@subdom1.example.com -R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom1user2@subdom1.example.com -R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom2user1@subdom2.example.com -R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom2user2@subdom2.example.com diff --git a/data-queue/00326-20250517142515-0493-0000.trans b/data-queue/00326-20250517142515-0493-0000.trans deleted file mode 100644 index 1a1488e..0000000 --- a/data-queue/00326-20250517142515-0493-0000.trans +++ /dev/null @@ -1,4 +0,0 @@ -R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom1user1@subdom1.example.com -R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom1user2@subdom1.example.com -R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom2user1@subdom2.example.com -R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom2user2@subdom2.example.com diff --git a/data-queue/00313-20250517142512-0184-0000 b/data-queue/24634-20250519065528-0893-0000 similarity index 100% rename from data-queue/00313-20250517142512-0184-0000 rename to data-queue/24634-20250519065528-0893-0000 diff --git a/data-queue/24634-20250519065528-0893-0000.trans b/data-queue/24634-20250519065528-0893-0000.trans new file mode 100644 index 0000000..e883f2c --- /dev/null +++ b/data-queue/24634-20250519065528-0893-0000.trans @@ -0,0 +1,4 @@ +L 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com webmaster@example.com +R 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com dom1user1@subdom1.example.com +R 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com dom2user1@subdom2.example.com +R 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com dom2user2@subdom2.example.com diff --git a/data-queue/00317-20250517142513-0859-0000 b/data-queue/24643-20250519065530-0650-0000 similarity index 100% rename from data-queue/00317-20250517142513-0859-0000 rename to data-queue/24643-20250519065530-0650-0000 diff --git a/data-queue/24643-20250519065530-0650-0000.trans b/data-queue/24643-20250519065530-0650-0000.trans new file mode 100644 index 0000000..8b85ccd --- /dev/null +++ b/data-queue/24643-20250519065530-0650-0000.trans @@ -0,0 +1,4 @@ +R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom1user1@subdom1.example.com +R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom1user2@subdom1.example.com +R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom2user1@subdom2.example.com +R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom2user2@subdom2.example.com diff --git a/data-queue/00326-20250517142515-0493-0000 b/data-queue/24649-20250519065532-0284-0000 similarity index 100% rename from data-queue/00326-20250517142515-0493-0000 rename to data-queue/24649-20250519065532-0284-0000 diff --git a/data-queue/24649-20250519065532-0284-0000.trans b/data-queue/24649-20250519065532-0284-0000.trans new file mode 100644 index 0000000..5a54423 --- /dev/null +++ b/data-queue/24649-20250519065532-0284-0000.trans @@ -0,0 +1,4 @@ +R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom1user1@subdom1.example.com +R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom1user2@subdom1.example.com +R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom2user1@subdom2.example.com +R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom2user2@subdom2.example.com diff --git a/data-queue/example.com-1747652224-0002.todo b/data-queue/example.com-1747652224-0002.todo new file mode 100644 index 0000000..2e9bd5c --- /dev/null +++ b/data-queue/example.com-1747652224-0002.todo @@ -0,0 +1 @@ +L,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com webmaster@example.com diff --git a/data-queue/subdom1.example.com-1747523810-0000.todo b/data-queue/subdom1.example.com-1747523810-0000.todo deleted file mode 100644 index de7f6db..0000000 --- a/data-queue/subdom1.example.com-1747523810-0000.todo +++ /dev/null @@ -1,5 +0,0 @@ -R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom1user1@subdom1.example.com -R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom1user2@subdom1.example.com -R,1747506312,0 00313-20250517142512-0184-0000 postmaster@example.com dom1user1@subdom1.example.com -R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom1user1@subdom1.example.com -R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom1user2@subdom1.example.com diff --git a/data-queue/subdom1.example.com-1747652224-0000.todo b/data-queue/subdom1.example.com-1747652224-0000.todo new file mode 100644 index 0000000..6f4e7ea --- /dev/null +++ b/data-queue/subdom1.example.com-1747652224-0000.todo @@ -0,0 +1,5 @@ +R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom1user1@subdom1.example.com +R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom1user2@subdom1.example.com +R,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com dom1user1@subdom1.example.com +R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom1user1@subdom1.example.com +R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom1user2@subdom1.example.com diff --git a/data-queue/subdom2.example.com-1747523810-0001.todo b/data-queue/subdom2.example.com-1747523810-0001.todo deleted file mode 100644 index 2b6bc9c..0000000 --- a/data-queue/subdom2.example.com-1747523810-0001.todo +++ /dev/null @@ -1,6 +0,0 @@ -R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom2user1@subdom2.example.com -R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom2user2@subdom2.example.com -R,1747506312,0 00313-20250517142512-0184-0000 postmaster@example.com dom2user1@subdom2.example.com -R,1747506312,0 00313-20250517142512-0184-0000 postmaster@example.com dom2user2@subdom2.example.com -R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom2user1@subdom2.example.com -R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom2user2@subdom2.example.com diff --git a/data-queue/subdom2.example.com-1747652224-0001.todo b/data-queue/subdom2.example.com-1747652224-0001.todo new file mode 100644 index 0000000..4bf9286 --- /dev/null +++ b/data-queue/subdom2.example.com-1747652224-0001.todo @@ -0,0 +1,6 @@ +R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom2user1@subdom2.example.com +R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom2user2@subdom2.example.com +R,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com dom2user1@subdom2.example.com +R,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com dom2user2@subdom2.example.com +R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom2user1@subdom2.example.com +R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom2user2@subdom2.example.com diff --git a/lib/geseml.c b/lib/geseml.c index ca2941c..2564fda 100644 --- a/lib/geseml.c +++ b/lib/geseml.c @@ -236,11 +236,10 @@ PUBLIC _Bool eml_todoqfile(TRATYP **list) { #define OPEP "geseml.c:eml_todoqfile," +#define EXTOBE "tobedone" _Bool done; REFTYP **domlist; -const char *tobedone="tobedone"; -const char *todo="todo"; done=false; domlist=(REFTYP **)0; @@ -273,7 +272,7 @@ if (domlist!=(REFTYP **)0) { while (proceed==true) { switch (phase) { case 0 : //Opening qfile - if ((qfile=eml_createqfile(qname,tobedone))==(FILE *)0) + if ((qfile=eml_createqfile(qname,EXTOBE))==(FILE *)0) phase=999; //Trouble trouble break; case 1 : //Opening qfile @@ -291,7 +290,7 @@ if (domlist!=(REFTYP **)0) { (void) eml_closeqfile(qfile); break; case 3 : //file ready, renaming file, - (void) eml_renameqfile(qname,tobedone,todo); + (void) eml_renameqfile(qname,EXTOBE,EXTODO); break; default : //SAFE Guard proceed=false; @@ -306,5 +305,6 @@ if (domlist!=(REFTYP **)0) { (void) free(domlist); } return done; +#undef EXTOBE #undef OPEP } diff --git a/lib/lvleml.c b/lib/lvleml.c index 463e9c9..ed565a2 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -329,7 +329,7 @@ while (proceed==true) { phase=999; //Trouble trouble break; case 5 : //renameing directive - if (eml_renameqfile(contact->cursesid,"tmp","trans")==false) + if (eml_renameqfile(contact->cursesid,"tmp",EXTRANS)==false) phase=999; //Trouble trouble break; case 6 : //everything fine diff --git a/lib/unieml.c b/lib/unieml.c index 49190d8..f93f161 100644 --- a/lib/unieml.c +++ b/lib/unieml.c @@ -405,7 +405,7 @@ while (proceed==true) { ptr=data->d_name; if (taille>0) { ptr=strstr(data->d_name,ext); - if ((ptr!=(char *)0)&&(strlen(ptr)!=taille)) + if ((ptr!=(char *)0)&&(strlen(ptr)!=taille)&&(*(ptr-1)!='.')) ptr=(char *)0; } if (ptr!=(char *)0) { diff --git a/lib/unieml.h b/lib/unieml.h index 0b33d62..5ed8f8a 100644 --- a/lib/unieml.h +++ b/lib/unieml.h @@ -22,6 +22,11 @@ #define NOTEML 553 //Not an email address #define MISSMX 563 //NO MX found for recipient +//defining extensions +#define EXTODO "todo" //todo qfile extension +#define EXDONE "done" //todo file processing completed +#define EXDOING "doing" //todo file in sending mode +#define EXTRANS "trans" //trans qfile extension //list of keyword typedef enum { //list of SMTP protocol keyword