void Lexer::token(Token &t) { if ( file.fd() < 0) t.Type( Token::eof); else { token2(t); if (t.Type() == Token::eof) file.Close(); } lasttokentype=t.Type(); if (maildrop.embedded_mode) switch (lasttokentype) { case Token::tokento: case Token::tokencc: case Token::btstring: case Token::tokenxfilter: case Token::dotlock: case Token::flock: case Token::logfile: case Token::log: { Buffer errmsg; errmsg="maildrop: '"; errmsg += t.Name(); errmsg += "' disabled in embedded mode.\n"; errmsg += '\0'; error((const char *)errmsg); t.Type( Token::error ); break; } default: break; } if (VerboseLevel() > 8) { Buffer debug; debug="Tokenized "; debug += t.Name(); debug += '\n'; debug += '\0'; error((const char *)debug); } }
void Newswire::setVerboseLevel(const QString& func, const QString& level) { bool ok; mVerboseLevel = VerboseLevel(level.toInt(&ok)); if(ok and (mVerboseLevel >= eNoVerbose) and (mVerboseLevel <= eMax)) return; QString levelName = level.toUpper(); if(levelName == "QUIET") setVerboseLevel(eNoVerbose); else if(levelName == "INFO") setVerboseLevel(eInfo); else if(levelName == "AMPLE") setVerboseLevel(eAmple); else if(levelName == "MAX") setVerboseLevel(eMax); else { error(func, tr("Verbose level '%1' unknown.").arg(level)); setVerboseLevel(eAmple); } }
int Re::CompileS(const char *ptr, int caseflag, int &errindex) { expr=ptr; origexpr=expr; init(); nextid=0; first=0; isCaret=0; isDummy=0; casesensitive=caseflag; matchFull=0; int rc=0; try { RegExpNode **p=CompileOrClause(&first); if (*expr == '!') { int dummy; ++expr; if ((chainedre=new Re) == 0) outofmem(); if ( chainedre->CompileS(expr, caseflag, dummy) < 0) { expr += dummy; throw -1; } chainedre->prevre=this; if (VerboseLevel() > 7) merr.write("\n*** CHAINED TO ***\n"); } else if (curchar()) throw -1; final=*p=allocnode(); final->thechar=REFINAL;
int delivery(const char *mailbox) { FormatMbox format_mbox; if (format_mbox.HasMsg()) return (0); DeliverDotLock dotlock; Buffer b; if ( *mailbox == '!' || *mailbox == '|' ) { Buffer cmdbuf; if (*mailbox == '!') { b="SENDMAIL"; const char *sendmail=GetVarStr(b); cmdbuf=sendmail; cmdbuf += " -f '' "; cmdbuf += mailbox+1; } else cmdbuf= mailbox+1; cmdbuf += '\0'; if (VerboseLevel() > 0) merr << "maildrop: Delivering to |" << (const char *)cmdbuf << "\n"; PipeFds pipe; if (pipe.Pipe()) throw "Cannot create pipe."; pid_t pid=fork(); if (pid < 0) throw "Cannot fork."; if (pid == 0) { pipe.close1(); dup2(pipe.fds[0], 0); pipe.close0(); try { subshell(cmdbuf); } catch (const char *p) { if (write(2, p, strlen(p)) < 0 || write(2, "\n", 1) < 0) ; /* ignored */ _exit(100); } #if NEED_NONCONST_EXCEPTIONS catch (char *p) { if (write(2, p, strlen(p)) < 0 || write(2, "\n", 1) < 0) ; /* ignored */ _exit(100); } #endif catch (...) { _exit(100); } } Mio pipemio; pipe.close0(); pipemio.fd(pipe.fds[1]); pipe.fds[1]= -1; format_mbox.Init(0); int rc=format_mbox.DeliverTo(pipemio); int wait_stat; while (wait(&wait_stat) != pid) ; if (wait_stat == 0) rc=0; log(mailbox, rc || wait_stat, format_mbox); { Buffer name, val; if (rc) wait_stat= -1; else wait_stat= WIFEXITED(wait_stat) ? WEXITSTATUS(wait_stat):-1; val.append( (unsigned long)wait_stat); name="EXITCODE"; SetVar(name, val); } if (rc) return (-1); } else if (Maildir::IsMaildir(mailbox)) { Maildir deliver_maildir; Mio deliver_file; if ( deliver_maildir.MaildirOpen(mailbox, deliver_file, maildrop.msgptr->MessageSize()) < 0) { #if HAVE_COURIER throw 75; #else throw 77; #endif } format_mbox.Init(0); if (format_mbox.DeliverTo(deliver_file)) { log(mailbox, -1, format_mbox); return (-1); } deliver_maildir.MaildirSave(); log(mailbox, 0, format_mbox); } else // Delivering to a mailbox (hopefully) { if (VerboseLevel() > 0) merr << "maildrop: Delivering to " << mailbox << "\n"; #if USE_DOTLOCK dotlock.LockMailbox(mailbox); #endif struct stat stat_buf; Mio mio; Buffer name_buf; name_buf="UMASK"; const char *um=GetVarStr(name_buf); unsigned int umask_val=077; sscanf(um, "%o", &umask_val); umask_val=umask(umask_val); if (mio.Open(mailbox, O_CREAT | O_WRONLY, 0666) < 0) { umask_val=umask(umask_val); throw "Unable to open mailbox."; } umask_val=umask(umask_val); if (fstat(mio.fd(), &stat_buf) < 0) throw "Unable to open mailbox."; #if USE_FLOCK if (VerboseLevel() > 4) merr << "maildrop: Flock()ing " << mailbox << ".\n"; FileLock::do_filelock(mio.fd()); #endif if (S_ISREG(stat_buf.st_mode)) { if (mio.seek(0L, SEEK_END) < 0) throw "Seek error on mailbox."; dotlock.trap_truncate(mio.fd(), stat_buf.st_size); } if (VerboseLevel() > 4) merr << "maildrop: Appending to " << mailbox << ".\n"; try { format_mbox.Init(1); if ((stat_buf.st_size > 0 && mio.write( #if CRLF_TERM "\r\n", 2 #else "\n", 1 #endif ) < 0) || format_mbox.DeliverTo(mio)) { dotlock.truncate(); log(mailbox, -1, format_mbox); return (-1); } } catch (...) { dotlock.truncate(); log(mailbox, -1, format_mbox); throw; } log(mailbox, 0, format_mbox); } if (VerboseLevel() > 4) merr << "maildrop: Delivery complete.\n"; return (0); }