aboutsummaryrefslogtreecommitdiff
path: root/jabberd
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2007-06-05 12:29:00 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2007-06-05 12:29:00 +0000
commitba2ebb820881508c10afcdc3283447de1e4d85c2 (patch)
tree98dea2b5f7957c1969dca7a75fb8839c7e0cb236 /jabberd
parent2c586254cf3fd476367b66eb9fab086bbc405674 (diff)
downloadgsc-ba2ebb820881508c10afcdc3283447de1e4d85c2.tar.gz
gsc-ba2ebb820881508c10afcdc3283447de1e4d85c2.tar.bz2
* jabberd/jabberd.h: Fix typo
* jabberd/progman.c (struct prog.pidfile): New member (register_prog): Take 6th argument, specifying the file to be deleted before startup. (register_transport, register_jabber_process): Update calls to register_prog (prog_start): Remove pidfile if requested (progman_dump_stats): Minor fix * jabberd/main.c: New configuration keyword (in `transport' section): `pidfile' * doc/gsc.texi: Update git-svn-id: file:///svnroot/gsc/trunk@258 d2de0444-eb31-0410-8365-af798a554d48
Diffstat (limited to 'jabberd')
-rw-r--r--jabberd/jabberd.h5
-rw-r--r--jabberd/main.c13
-rw-r--r--jabberd/progman.c39
3 files changed, 46 insertions, 11 deletions
diff --git a/jabberd/jabberd.h b/jabberd/jabberd.h
index 336a023..ee00e21 100644
--- a/jabberd/jabberd.h
+++ b/jabberd/jabberd.h
@@ -48,9 +48,10 @@
#define SLEEPTIME 5*60
#define MAXSPAWN 10
-void register_trasport (char *tag, char **argv, int retr[2], char **depv);
+void register_transport (char *tag, char **argv, int retr[2], char **depv,
+ char *pidfile);
void register_jabber_process (char *cmd, char *cfg);
-void logmsg(int prio, char *fmt, ...);
+void logmsg (int prio, char *fmt, ...);
void signal_setup (RETSIGTYPE (*sf)(int));
void *emalloc (size_t size);
diff --git a/jabberd/main.c b/jabberd/main.c
index e726d3a..a206bc9 100644
--- a/jabberd/main.c
+++ b/jabberd/main.c
@@ -422,6 +422,7 @@ struct transport_rec
int retr[2];
int depc;
char **depv;
+ char *pidfile;
};
static void
@@ -471,6 +472,14 @@ cfg_transport_depend (struct cfg_file *file, char *kw, char *val, void *data)
}
void
+cfg_transport_pidfile (struct cfg_file *file, char *kw, char *val,
+ void *data)
+{
+ struct transport_rec *prec = data;
+ prec->pidfile = strdup (val);
+}
+
+void
cfg_transport (struct cfg_file *file, char *kw, char *val, void *unused)
{
int rc;
@@ -484,6 +493,7 @@ cfg_transport (struct cfg_file *file, char *kw, char *val, void *unused)
{ "stderr", cfg_transport_stderr },
{ "facility", cfg_transport_facility },
{ "depend", cfg_transport_depend },
+ { "pidfile", cfg_transport_pidfile },
{ NULL }
};
memset (&rec, 0, sizeof rec);
@@ -499,9 +509,10 @@ cfg_transport (struct cfg_file *file, char *kw, char *val, void *unused)
config_file, file->line, strerror (rc));
return;
}
- register_transport (rec.tag, argv, rec.retr, rec.depv);
+ register_transport (rec.tag, argv, rec.retr, rec.depv, rec.pidfile);
free (rec.tag);
free (rec.command);
+ free (rec.pidfile);
argcv_free (rec.depc, rec.depv);
argcv_free (argc, argv);
}
diff --git a/jabberd/progman.c b/jabberd/progman.c
index da53615..240ab16 100644
--- a/jabberd/progman.c
+++ b/jabberd/progman.c
@@ -38,6 +38,7 @@ struct prog
int argc;
char **argv; /* Command line arguments */
int retr[2];
+ char *pidfile; /* Pidfile location */
time_t timestamp; /* Time of last startup */
size_t count; /* Number of failed starts since timestamp */
int disabled; /* 1 if this entry is disabled */
@@ -116,7 +117,8 @@ register_retr (int type, struct prog *master, pid_t pid)
}
void
-register_prog (int type, char *tag, char **argv, int retr[2], char **depv)
+register_prog (int type, char *tag, char **argv, int retr[2], char **depv,
+ char *pidfile)
{
struct prog *p, *newp;
char *pstr;
@@ -153,7 +155,9 @@ register_prog (int type, char *tag, char **argv, int retr[2], char **depv)
size += strlen (argv[i]);
size += i + sizeof (argv[0]) * (i + 1) + sizeof (*newp)
+ (tag ? (strlen (tag) + 1) : 0);
-
+ if (pidfile)
+ size += strlen (pidfile) + 1;
+
newp = emalloc (size);
memset (newp, 0, sizeof(*newp));
newp->type = type;
@@ -178,6 +182,14 @@ register_prog (int type, char *tag, char **argv, int retr[2], char **depv)
else
newp->tag = newp->v.p.argv[0];
+ if (pidfile)
+ {
+ newp->v.p.pidfile = strcpy (pstr, pidfile);
+ pstr += strlen (pstr) + 1;
+ }
+ else
+ newp->v.p.pidfile = NULL;
+
if (depv)
{
newp->depend = (char**) pstr;
@@ -214,12 +226,13 @@ register_prog (int type, char *tag, char **argv, int retr[2], char **depv)
}
void
-register_transport (char *tag, char **argv, int retr[2], char **depv)
+register_transport (char *tag, char **argv, int retr[2], char **depv,
+ char *pidfile)
{
static char *std_dep[] = { "all", NULL };
if (!depv)
depv = std_dep;
- register_prog (TYPE_TRANSPORT, tag, argv, retr, depv);
+ register_prog (TYPE_TRANSPORT, tag, argv, retr, depv, pidfile);
}
void
@@ -236,10 +249,13 @@ register_jabber_process (char *cmd, char *cfg)
argv[argc++] = cfg;
}
if (debug_level > 2)
- argv[argc++] = "-D";
+ {
+ argv[argc++] = "-D";
+ retr[RETR_ERR] = LOG_DEBUG;
+ }
argv[argc] = NULL;
- register_prog (TYPE_CORE, NULL, argv, retr, NULL);
+ register_prog (TYPE_CORE, NULL, argv, retr, NULL, NULL);
}
static struct prog *
@@ -351,6 +367,13 @@ prog_start (struct prog *prog)
logmsg (LOG_DEBUG, "starting %s", prog->tag);
+ if (prog->v.p.pidfile)
+ {
+ if (unlink (prog->v.p.pidfile) && errno != ENOENT)
+ logmsg (LOG_ERR, "%s: cannot remove pidfile `%s': %s",
+ prog->tag, prog->v.p.pidfile, strerror (errno));
+ }
+
retr[RETR_OUT] = open_retranslator (prog, RETR_OUT);
retr[RETR_ERR] = open_retranslator (prog, RETR_ERR);
@@ -597,9 +620,9 @@ progman_dump_stats (const char *filename)
else if (prog->v.p.disabled)
{
char buf[48];
-
+ time_t t = prog->v.p.timestamp + SLEEPTIME;
strftime (buf, sizeof buf, "%c",
- localtime (&prog->v.p.timestamp));
+ localtime (&t));
fprintf (fp, "[disabled; scheduled for %s]", buf);
}
else

Return to:

Send suggestions and report system problems to the System administrator.