/* when changing defaults, remember to update the manpage */
static const char *sitename, *remote_host;
-static const char *feedfile, *path_cli;
+static const char *feedfile, *path_cli, *path_cli_dir;
static int quiet_multiple=0;
static int become_daemon=1, try_filemon=1;
static int try_stream=1;
memset(&sa,0,sizeof(sa));
int maxlen= sizeof(sa.un.sun_path);
+ if (!path_cli) {
+ info("control command line disabled");
+ return;
+ }
+
int pathlen= strlen(path_cli);
- if (pathlen > maxlen)
- NOCLI("cli socket path %s too long (%d>%d)", path_cli, pathlen, maxlen);
+ if (pathlen > maxlen) {
+ warn("no cli listener, because cli socket path %s too long (%d>%d)",
+ path_cli, pathlen, maxlen);
+ return;
+ }
+
+ if (path_cli_dir) {
+ int r= mkdir(path_cli_dir, 0700);
+ if (r && errno!=EEXIST)
+ NOCLI("create cli socket directory %s", path_cli_dir);
+ }
int r= unlink(path_cli);
if (r && errno!=ENOENT)
cli_master= socket(PF_UNIX, SOCK_STREAM, 0);
if (cli_master<0) NOCLI("create new cli master socket");
- int sl= strlen(sa.un.sun_path) + offsetof(struct sockaddr_un, sun_path);
+ int sl= pathlen + offsetof(struct sockaddr_un, sun_path);
sa.un.sun_family= AF_UNIX;
memcpy(sa.un.sun_path, path_cli, pathlen);
{0,"no-filemon", 0, &try_filemon, op_setint, 0 },
{'C',"inndconf", "F", &inndconffile, op_string },
{'P',"port", "PORT", &port, op_integer },
-{0,"cli", 0, &path_cli, op_string },
+{0,"cli", "DIR/|PATH", &path_cli, op_string },
{0,"help", 0, 0, help },
{0,"max-connections", "N", &max_connections, op_integer },
*store /= period_seconds;
}
-static void assemble_path(const char **path_io, const char *suffix,
- const char *what) {
- const char *const specified= *path_io;
- if (!specified[0]) badusage("%s, if specified, must be nonempty", what);
- if (specified[strlen(specified)-1]=='/')
- *path_io= xasprintf("%s%s%s", specified, sitename, suffix);
+static int path_ends_slash(const char *specified) {
+ int l= strlen(specified);
+ assert(l);
+ return specified[l-1] == '/';
}
int main(int argc, char **argv) {
badusage("bad input data ratio must be between 0..100");
max_bad_data_ratio *= 0.01;
- if (!feedfile) feedfile= xasprintf("%s/%s",innconf->pathoutgoing,sitename);
- else assemble_path(&feedfile, "", "feed filename");
-
- if (path_cli) path_cli= xasprintf("%s_cli", feedfile);
- else assemble_path(&path_cli, "%s_cli", "cli socket path");
+ if (!feedfile) {
+ feedfile= xasprintf("%s/%s",innconf->pathoutgoing,sitename);
+ } else if (!feedfile[0]) {
+ badusage("feed filename, if specified, must be nonempty");
+ } else if (path_ends_slash(feedfile)) {
+ feedfile= xasprintf("%s%s", feedfile, sitename);
+ }
+
+ if (!path_cli) {
+ path_cli_dir= xasprintf("%s/innduct", innconf->pathrun);
+ } else if (!path_cli[0] || !strcmp(path_cli,"none")) {
+ path_cli= 0; /* ok, don't then */
+ } else if (path_ends_slash(path_cli)) {
+ path_cli_dir= xasprintf("%.*s", strlen(path_cli)-1, path_cli);
+ }
+ if (path_cli_dir)
+ path_cli= xasprintf("%s/%s", path_cli_dir, sitename);
if (max_queue_per_ipf<0)
max_queue_per_ipf= max_queue_per_conn * 2;
instead of the default
.BR inn.conf .
.TP
-.BR \-\-cli= \fIDIR\fR / |\fIPATH\fR
+.BR \-\-cli= \fICLI-DIR\fR / |\fICLI-PATH\fR| none
Listen for control command line connections on
-.IB DIR / site _cli
+.IB CLI-DIR / site
(if the value ends with a
.BR /)
or
-.I PATH
+.I CLI-PATH
(if it doesn't). See CONTROLLING INNDUCT, below.
-This option may be essential, if the
-path to
-.I feedfile
+This option may be essential, if
+.I pathrun
+or
+.I site
is too long, as there is a fairly short limit on the paths to AF_UNIX
-sockets. The default is
-.IR feedfile \fB_cli\fR.
+sockets. If specified as
+.IR CLI-DIR \fB/\fR,
+the directory will be created with mode 700 if necessary.
+The default is
+.IB pathrun /innduct/
+which means to create that directory and listen on
+.RB \fIpathrun\fR /innduct/ \fIsite\fR.
.TP
.BI \-\-port= PORT
Connect to port
.LP
innduct listens on an AF_UNIX socket, and provides a command-line
interface which can be used to trigger various events and for
-debugging. The socket is called
-.IB feedfile _cli
+debugging. innduct listens on
+.IB pathrun /innduct/ site
and when connected reads and writes lines (with unix line endings).
-It can most easily be accessed with a program like
+The cli can most easily be accessed with a program like
.I netcat-openbsd
(eg
-.B nc.openbsd -U
-.IR feedfile \fB_cli\fR)
+.B nc.openbsd -U /var/run/news/innduct/
+.IR site )
or
.IR socat .
The prompt is
you rename it to match the pattern \fIfeedfile\fR\fB_backlog\fR*, as
otherwise innduct may find and process the file and read it to EOF
before you have finished creating it.
-.IP \fIfeedfile\fR_cli
+.IP \fIpathrun\fR\fB/innduct/\fB\fIsite\fR
.IX Item "control command line socket"
Default AF_UNIX listening socket for the control command line. See
CONTROLLING INNDUCT, above.
state to this text file. This is mostly useful for debugging.
.IP /etc/news/inn.conf
.IX Item inn.conf
-Used to find
+Used for
.IR pathoutgoing
-if none is specified, for finding how to communicate with innd,
-and also for
+(to compute default
+.IR feedfile
+and associated paths),
+.IR pathrun
+(to compute default
+.IR CLI-DIR
+and
+.IR CLI-PATH ),
+for finding how to communicate with innd, and also for
.IR sourceaddress
and/or
.IR sourceaddress6 .