From 4712b0316d24bcf2824b4ef3004d750315c56626 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 7 Feb 2011 18:53:55 +0300 Subject: [PATCH] * Add manual pages for rspamd and rspamc. Fix bug with extracting urls from tags without quotes. --- CMakeLists.txt | 6 +- doc/rspamc.1 | 219 +++++++++++++++++++++++++++++++++++++++++++++++++ doc/rspamc.pod | 96 ++++++++++++++++++++++ doc/rspamd.8 | 191 ++++++++++++++++++++++++++++++++++++++++++ doc/rspamd.pod | 79 ++++++++++++++++++ src/message.c | 2 +- 6 files changed, 591 insertions(+), 2 deletions(-) create mode 100644 doc/rspamc.1 create mode 100644 doc/rspamc.pod create mode 100644 doc/rspamd.8 create mode 100644 doc/rspamd.pod diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f9084cf0..78293ee92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -594,7 +594,7 @@ ADD_SUBDIRECTORY(src/client) ADD_SUBDIRECTORY(src/json) # ADD_SUBDIRECTORY(src/evdns) -ADD_SUBDIRECTORY(src/plugins/custom) +# ADD_SUBDIRECTORY(src/plugins/custom) SET(TOKENIZERSSRC src/tokenizers/tokenizers.c src/tokenizers/osb.c) @@ -812,6 +812,10 @@ FOREACH(LUA_CONF ${LUA_CONFIGS}) ENDIF(NOT EXISTS ${DESTDIR}/${ETC_PREFIX}/rspamd/lua/${LUA_CONF}) ENDFOREACH(LUA_CONF) +# Manual pages +INSTALL(FILES "doc/rspamd.8" DESTINATION man/man8) +INSTALL(FILES "doc/rspamc.1" DESTINATION man/man1) + # Perl lib IF(ENABLE_PERL MATCHES "ON") INSTALL(CODE "EXECUTE_PROCESS(COMMAND make install WORKING_DIRECTORY perl)") diff --git a/doc/rspamc.1 b/doc/rspamc.1 new file mode 100644 index 000000000..2dc9242c2 --- /dev/null +++ b/doc/rspamc.1 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "rspamc 1" +.TH rspamc 1 "2011-02-07" "rspamd-0.3.6" "Rspamd documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "RSPAMC" +.IX Header "RSPAMC" +rspamc \- a simple client for rspamd spam filtering system +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +rspamc [\fB\-h\fR \fIhost[:port]\fR] [\fB\-p\fR] +[\fB\-i\fR \fIip\fR] [\fB\-s\fR \fIstatfile\fR] [\fB\-w\fR \fIweight\fR] +[\fB\-P\fR \fIpassword\fR] [\fB\-f\fR \fIflag\fR] [command] [file [file ...]] +.PP +rspamc [\fB\-\-help\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRspamc\fR is a simple client for checking messages using rspamd or for learning rspamd by messages. +\&\fBRspamc\fR has several mandatory options for learning: \fIpassword\fR and \fIstatfile\fR. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-h\fR \fIhost[:port]\fR, \fB\-\-connect\fR \fIhost[:port]\fR" 4 +.IX Item "-h host[:port], --connect host[:port]" +Specify host and port for connecting to rspamd server. Default host is \fIlocalhost\fR and +default port is \fI11333\fR for checking messages and \fI11334\fR for learning and statistic. +.IP "\fB\-p\fR, \fB\-\-pass\-all\fR" 4 +.IX Item "-p, --pass-all" +Pass all filters when checking messages. Ignored in case of learning. +.IP "\fB\-P\fR \fIpassword\fR, \fB\-\-password\fR \fIpassword\fR" 4 +.IX Item "-P password, --password password" +Specify controller's password. Mandatory option for learning. +.IP "\fB\-s\fR \fIstatfile\fR, \fB\-\-statfile\fR \fIstatfile\fR" 4 +.IX Item "-s statfile, --statfile statfile" +Specify statfile's symbol to learn message. Mandatory option for learning. +.IP "\fB\-i\fR \fIip\fR, \fB\-\-ip\fR \fIip\fR" 4 +.IX Item "-i ip, --ip ip" +Add \s-1IP\s0 header when scanning message. Useful for checking messages and emulating that client comes from +specific \s-1IP\s0 address. +.IP "\fB\-w\fR \fIweight\fR, \fB\-\-weight\fR \fIweight\fR" 4 +.IX Item "-w weight, --weight weight" +Weight of message for fuzzy operations. +.IP "\fB\-f\fR \fIflag\fR, \fB\-\-flag\fR \fIflag\fR" 4 +.IX Item "-f flag, --flag flag" +Weight of message for fuzzy operations. +.SH "RETURN VALUE" +.IX Header "RETURN VALUE" +On exit \fBrspamc\fR returns 0 if operation was successfull and error code otherwise. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Check stdin: +.PP +.Vb 1 +\& rspamc < some_file +.Ve +.PP +Check files: +.PP +.Vb 1 +\& rspamc symbols file1 file2 file3 +.Ve +.PP +Learn files: +.PP +.Vb 1 +\& rspamc \-P pass \-s BAYES_SPAM file1 file2 file3 +.Ve +.PP +Add fuzzy hash to set 2: +.PP +.Vb 1 +\& rspamc \-P pass \-f 2 \-w 10 fuzzy_add file1 file2 +.Ve +.PP +Delete fuzzy hash from other server: +.PP +.Vb 1 +\& rspamc \-P pass \-h hostname:11334 \-f 2 fuzzy_del file1 file2 +.Ve +.PP +Get statistics: +.PP +.Vb 1 +\& rspamc stat +.Ve +.SH "AUTHOR" +.IX Header "AUTHOR" +Vsevolod Stakhov +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright 2011 by Vsevolod Stakhov . +.PP +This program is free software; you may redistribute it and/or modify it +under the terms of \s-1BSD\s0 license. diff --git a/doc/rspamc.pod b/doc/rspamc.pod new file mode 100644 index 000000000..14de89b92 --- /dev/null +++ b/doc/rspamc.pod @@ -0,0 +1,96 @@ +=head1 RSPAMC + +rspamc - a simple client for rspamd spam filtering system + +=head1 SYNOPSIS + +rspamc [B<-h> I] [B<-p>] +[B<-i> I] [B<-s> I] [B<-w> I] +[B<-P> I] [B<-f> I] [command] [file [file ...]] + +rspamc [B<--help>] + +=head1 DESCRIPTION + +B is a simple client for checking messages using rspamd or for learning rspamd by messages. +B has several mandatory options for learning: I and I. + +=head1 OPTIONS + +=over 4 + +=item B<-h> I, B<--connect> I + +Specify host and port for connecting to rspamd server. Default host is I and +default port is I<11333> for checking messages and I<11334> for learning and statistic. + +=item B<-p>, B<--pass-all> + +Pass all filters when checking messages. Ignored in case of learning. + +=item B<-P> I, B<--password> I + +Specify controller's password. Mandatory option for learning. + +=item B<-s> I, B<--statfile> I + +Specify statfile's symbol to learn message. Mandatory option for learning. + +=item B<-i> I, B<--ip> I + +Add IP header when scanning message. Useful for checking messages and emulating that client comes from +specific IP address. + +=item B<-w> I, B<--weight> I + +Weight of message for fuzzy operations. + +=item B<-f> I, B<--flag> I + +Weight of message for fuzzy operations. + + +=back + +=head1 RETURN VALUE + +On exit B returns 0 if operation was successfull and error code otherwise. + +=head1 EXAMPLES + +Check stdin: + + rspamc < some_file + +Check files: + + rspamc symbols file1 file2 file3 + +Learn files: + + rspamc -P pass -s BAYES_SPAM file1 file2 file3 + +Add fuzzy hash to set 2: + + rspamc -P pass -f 2 -w 10 fuzzy_add file1 file2 + +Delete fuzzy hash from other server: + + rspamc -P pass -h hostname:11334 -f 2 fuzzy_del file1 file2 + +Get statistics: + + rspamc stat + +=head1 AUTHOR + +Vsevolod Stakhov + +=head1 COPYRIGHT AND LICENSE + +Copyright 2011 by Vsevolod Stakhov . + +This program is free software; you may redistribute it and/or modify it +under the terms of BSD license. + +=cut \ No newline at end of file diff --git a/doc/rspamd.8 b/doc/rspamd.8 new file mode 100644 index 000000000..e0a0a540a --- /dev/null +++ b/doc/rspamd.8 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "rspamd 8" +.TH rspamd 8 "2011-02-07" "rspamd-0.3.6" "Rspamd documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "RSPAMD" +.IX Header "RSPAMD" +rspamd \- main daemon for rspamd spam filtering system +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +rspamd [\fB\-c\fR \fIconfig_file\fR] [\fB\-f\fR] +[\fB\-u\fR \fIuser\fR] [\fB\-g\fR \fIgroup\fR] [\fB\-p\fR \fIpidfile\fR] +[\fB\-t\fR] [\fB\-d\fR] +.PP +rspamd [\fB\-\-help\fR] +.PP +rspamd [\fB\-t\fR] +.PP +rspamd [\fB\-C\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRspamd\fR filtering system is designed to be fast, modular and easily extendable system. +\&\fBRspamd\fR core is written in C language using event driven paradigma. +Plugins for \fBrspamd\fR can be written in lua. +\&\fBRspamd\fR is designed to process connections completely asynchronous and do not block anywhere in code. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-c\fR \fIconfig_file\fR, \fB\-\-config\fR \fIconfig_file\fR" 4 +.IX Item "-c config_file, --config config_file" +Specify the path where rspamd config is placed. Default is rspamd.xml. +.IP "\fB\-u\fR \fIuser\fR, \fB\-\-user\fR \fIuser\fR" 4 +.IX Item "-u user, --user user" +Specify user rspamd run as. It is possible only when rspamd is launched by super-user as it +calls \fIsetuid\fR\|(2) after spawning workers. +.IP "\fB\-g\fR \fIgroup\fR, \fB\-\-group\fR \fIgroup\fR" 4 +.IX Item "-g group, --group group" +Specify group rspamd run as. +.IP "\fB\-p\fR \fIpidfile\fR, \fB\-\-pidfile\fR \fIpidfile\fR" 4 +.IX Item "-p pidfile, --pidfile pidfile" +Path to pid file where rspamd pid would be stored. Directory containing pidfile must be +writeable by \fBrspamd\fR. +.IP "\fB\-f\fR, \fB\-\-no\-fork\fR" 4 +.IX Item "-f, --no-fork" +Do not daemonize after launch. Usable for debugging purposes. +.IP "\fB\-t\fR, \fB\-\-config\-test\fR" 4 +.IX Item "-t, --config-test" +Just perform test of configuration. Return zero exit code when configuration is \s-1OK\s0. +.IP "\fB\-C\fR, \fB\-\-counters\fR" 4 +.IX Item "-C, --counters" +Show counters for all symbols. Usable when symbols cache is saved. +.IP "\fB\-d\fR, \fB\-\-debug\fR" 4 +.IX Item "-d, --debug" +Turn on debugging mode in logging. +.SH "RETURN VALUE" +.IX Header "RETURN VALUE" +On exit \fBrspamd\fR returns 0 if operation was successfull and error code otherwise. +.SH "AUTHOR" +.IX Header "AUTHOR" +Vsevolod Stakhov +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright 2011 by Vsevolod Stakhov . +.PP +This program is free software; you may redistribute it and/or modify it +under the terms of \s-1BSD\s0 license. diff --git a/doc/rspamd.pod b/doc/rspamd.pod new file mode 100644 index 000000000..0167fc602 --- /dev/null +++ b/doc/rspamd.pod @@ -0,0 +1,79 @@ +=head1 RSPAMD + +rspamd - main daemon for rspamd spam filtering system + +=head1 SYNOPSIS + +rspamd [B<-c> I] [B<-f>] +[B<-u> I] [B<-g> I] [B<-p> I] +[B<-t>] [B<-d>] + +rspamd [B<--help>] + +rspamd [B<-t>] + +rspamd [B<-C>] + +=head1 DESCRIPTION + +B filtering system is designed to be fast, modular and easily extendable system. +B core is written in C language using event driven paradigma. +Plugins for B can be written in lua. +B is designed to process connections completely asynchronous and do not block anywhere in code. + +=head1 OPTIONS + +=over 4 + +=item B<-c> I, B<--config> I + +Specify the path where rspamd config is placed. Default is rspamd.xml. + +=item B<-u> I, B<--user> I + +Specify user rspamd run as. It is possible only when rspamd is launched by super-user as it +calls setuid(2) after spawning workers. + +=item B<-g> I, B<--group> I + +Specify group rspamd run as. + +=item B<-p> I, B<--pidfile> I + +Path to pid file where rspamd pid would be stored. Directory containing pidfile must be +writeable by B. + +=item B<-f>, B<--no-fork> + +Do not daemonize after launch. Usable for debugging purposes. + +=item B<-t>, B<--config-test> + +Just perform test of configuration. Return zero exit code when configuration is OK. + +=item B<-C>, B<--counters> + +Show counters for all symbols. Usable when symbols cache is saved. + +=item B<-d>, B<--debug> + +Turn on debugging mode in logging. + +=back + +=head1 RETURN VALUE + +On exit B returns 0 if operation was successfull and error code otherwise. + +=head1 AUTHOR + +Vsevolod Stakhov + +=head1 COPYRIGHT AND LICENSE + +Copyright 2011 by Vsevolod Stakhov . + +This program is free software; you may redistribute it and/or modify it +under the terms of BSD license. + +=cut \ No newline at end of file diff --git a/src/message.c b/src/message.c index 010edf22b..83ce3b91d 100644 --- a/src/message.c +++ b/src/message.c @@ -112,7 +112,7 @@ strip_html_tags (struct worker_task *task, memory_pool_t * pool, struct mime_tex case 1: /* HTML/XML */ lc = '>'; in_q = state = 0; - erase = !add_html_node (task, pool, part, tbegin, p - tbegin - 1, &level_ptr); + erase = !add_html_node (task, pool, part, tbegin, p - tbegin, &level_ptr); break; case 2: /* PHP */ -- 2.39.5