Patch adding "nnrpdflags" to readers.conf
Jeffrey M. Vinocur
jeff at litech.org
Sun Jul 17 02:14:51 UTC 2005
Someone recently asked (<42d77fd5$1 at news.yourcomms.net>) in
news.software.nntp for a way to pass "-n" to nnrpd when being spawned
directly from innd. It seemed like a reasonable request, but rather than
add a boolean for whether or not to pass "-n", I just went ahead and added
an 'nnrpdflags' option to inn.conf, for passing arbitrary options whenever
innd spawns an instance of nnrpd.
Russ, I haven't gotten around to setting up subversion yet, so would you
mind committing this to CURRENT? (This patch is shorter than the one I
posted to usenet, as it doesn't include changes to the generated manpages.
It does, however, include one typo fix I happened to notice while
editing.)
On a side note, I finally got to use vectors. Mmm enough libraries like
that and I could forget I'm programming in C. Sadly, I ended up having to
copy back into a straight array to pass to Spawn().
Two flaws in this patch:
- it does straightforward splitting on whitespace, so there's no
way to use nnrpdflags to pass an argument that needs to include
whitespace (e.g. "-r Too\ busy\ now" doesn't do what it should,
but that shouldn't be much of a problem since -r is really
intended for direct use by innd with the throttle string)
- it re-splits the "nnrpdflags" string every time an nnrpd is
spawned; I didn't think this was worth the trouble to optimize
Index: doc/pod/inn.conf.pod
===================================================================
RCS file: /proj/cvs/isc/inn/inn/doc/pod/inn.conf.pod,v
retrieving revision 1.51
diff -u -r1.51 inn.conf.pod
--- doc/pod/inn.conf.pod 2005/04/11 18:25:10 1.51
+++ doc/pod/inn.conf.pod 2005/07/16 21:47:21
@@ -23,7 +23,7 @@
<name>: <value>
(Any amount of whitespace can be put after the colon and is optional.) If
-the value contains embedded whitespace or any of the characers C<[]<>"\:>,
+the value contains embedded whitespace or any of the characters C<[]<>"\:>,
it must be enclosed in double quotes (""). A backslash (C<\>) can be used
to escape quotes and backslashes inside double quotes. <name> is
case-sensitive; C<server> is not the same as C<Server> or C<SERVER>.
@@ -571,6 +571,14 @@
overview information slows down the overview commands, but reduces the
number of "article is missing" errors seen by the client. This is a
boolean value and the default is true.
+
+=item I<nnrpdflags>
+
+When nnrpd(8) is spawned from innd(8), these flags are passed as
+arguments to the nnrpd process. This setting does not affect instances
+of nnrpd that are started in daemon mode, or instances that are started
+via another listener process such as inetd(8) or xinetd(8). This is a
+string value and the default is unset.
=item I<nnrpperlauth>
Index: doc/pod/nnrpd.pod
===================================================================
RCS file: /proj/cvs/isc/inn/inn/doc/pod/nnrpd.pod,v
retrieving revision 1.9
diff -u -r1.9 nnrpd.pod
--- doc/pod/nnrpd.pod 2005/04/11 08:59:26 1.9
+++ doc/pod/nnrpd.pod 2005/07/16 21:47:21
@@ -30,6 +30,12 @@
connections. If you are instead running B<nnrpd> with the B<-D> option,
any configuration changes won't take effect until B<nnrpd> is restarted.
+The F<inn.conf> setting I<nnrpdflags> can be used to pass any of the
+options below to instances of B<nnrpd> that are spawned directly from
+B<innd>. Many options only make sense when B<-D> is used, so these
+options should not be used with I<nnrpdflags>. See also the discussion
+of I<nnrpdflags> in inn.conf(5).
+
When I<nnrpdloadlimit> in F<inn.conf> is not 0, it will also reject
connections if the load average is greater than that value (typically 16).
B<nnrpd> can also prevent high-volume posters from abusing your
Index: include/inn/innconf.h
===================================================================
RCS file: /proj/cvs/isc/inn/inn/include/inn/innconf.h,v
retrieving revision 1.8
diff -u -r1.8 innconf.h
--- include/inn/innconf.h 2004/06/09 22:04:34 1.8
+++ include/inn/innconf.h 2005/07/16 21:47:21
@@ -76,6 +76,7 @@
bool nfsreader; /* Use NFS reader functionality */
long nfsreaderdelay; /* Delay applied to article arrival */
bool nnrpdcheckart; /* Check article existence before returning? */
+ char *nnrpdflags; /* Arguments to pass when spawning nnrpd */
long nnrpdloadlimit; /* Maximum getloadvg() we allow */
bool noreader; /* Refuse to fork nnrpd for readers? */
bool readerswhenstopped; /* Allow nnrpd when server is paused */
Index: innd/rc.c
===================================================================
RCS file: /proj/cvs/isc/inn/inn/innd/rc.c,v
retrieving revision 1.89
diff -u -r1.89 rc.c
--- innd/rc.c 2005/04/14 06:48:02 1.89
+++ innd/rc.c 2005/07/16 21:47:21
@@ -13,6 +13,7 @@
#include "inn/innconf.h"
#include "inn/network.h"
+#include "inn/vector.h"
#include "innd.h"
#define TEST_CONFIG(a, b) \
@@ -386,9 +387,13 @@
void
RChandoff(int fd, HANDOFF h)
{
- const char *argv[6];
+ const char **argv;
char buff[SMBUF];
- int i;
+ int i, j;
+ struct vector *flags;
+
+ flags = vector_split_space(innconf->nnrpdflags, NULL);
+ argv = xmalloc( (flags->count + 6) * sizeof(char*) );
if (RCnnrpd == NULL)
RCnnrpd = concatpath(innconf->pathbin, "nnrpd");
@@ -420,11 +425,17 @@
argv[i++] = "-t";
if (RCslaveflag)
argv[i++] = RCslaveflag;
+
+ for(j = 0; j < flags->count; j++) {
+ argv[i++] = flags->strings[j];
+ }
argv[i] = NULL;
/* Call NNRP; don't send back a QUIT message if Spawn fails since
* that's a major error we want to find out about quickly. */
Spawn(innconf->nicekids, fd, fd, fd, (char * const *)argv);
+ vector_free(flags);
+ free(argv);
}
Index: lib/innconf.c
===================================================================
RCS file: /proj/cvs/isc/inn/inn/lib/innconf.c,v
retrieving revision 1.16
diff -u -r1.16 innconf.c
--- lib/innconf.c 2004/07/03 03:34:59 1.16
+++ lib/innconf.c 2005/07/16 21:47:21
@@ -203,6 +203,7 @@
{ K(nfsreaderdelay), NUMBER (60) },
{ K(nicenewnews), NUMBER (0) },
{ K(nicennrpd), NUMBER (0) },
+ { K(nnrpdflags), STRING ("") },
{ K(nnrpdauthsender), BOOL (false) },
{ K(nnrpdloadlimit), NUMBER (16) },
{ K(nnrpdoverstats), BOOL (false) },
--
Jeffrey M. Vinocur
jeff at litech.org
More information about the inn-workers
mailing list