mirror of
https://github.com/openbsd/src.git
synced 2025-01-10 06:47:55 -08:00
work on making log.c similar in all daemons:
move daemon-local functions into new logmsg.c, and reduce the (mostly whitespace) differences so that log.c's can be diffed easily. ok claudio@, feedback from henning@, deraadt@, reyk@
This commit is contained in:
parent
0e505e7302
commit
02cd9e4b93
@ -1,7 +1,7 @@
|
||||
# $OpenBSD: Makefile,v 1.29 2010/05/26 16:44:32 nicm Exp $
|
||||
# $OpenBSD: Makefile,v 1.30 2016/09/02 14:00:29 benno Exp $
|
||||
|
||||
PROG= bgpd
|
||||
SRCS= bgpd.c session.c log.c parse.y config.c \
|
||||
SRCS= bgpd.c session.c log.c logmsg.c parse.y config.c \
|
||||
rde.c rde_rib.c rde_decide.c rde_prefix.c mrt.c kroute.c \
|
||||
control.c pfkey.c rde_update.c rde_attr.c printconf.c \
|
||||
rde_filter.c pftable.c name2id.c util.c carp.c timer.c
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: bgpd.c,v 1.185 2016/06/20 20:12:52 benno Exp $ */
|
||||
/* $OpenBSD: bgpd.c,v 1.186 2016/09/02 14:00:29 benno Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
@ -117,6 +117,7 @@ main(int argc, char *argv[])
|
||||
|
||||
conffile = CONFFILE;
|
||||
bgpd_process = PROC_MAIN;
|
||||
log_procname = log_procnames[bgpd_process];
|
||||
|
||||
log_init(1); /* log to stderr until daemonized */
|
||||
log_verbose(1);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: bgpd.h,v 1.294 2016/06/06 15:59:10 benno Exp $ */
|
||||
/* $OpenBSD: bgpd.h,v 1.295 2016/09/02 14:00:29 benno Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
@ -33,6 +33,8 @@
|
||||
|
||||
#include <imsg.h>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#define BGP_VERSION 4
|
||||
#define BGP_PORT 179
|
||||
#define CONFFILE "/etc/bgpd.conf"
|
||||
@ -1079,4 +1081,134 @@ int af2aid(sa_family_t, u_int8_t, u_int8_t *);
|
||||
struct sockaddr *addr2sa(struct bgpd_addr *, u_int16_t);
|
||||
void sa2addr(struct sockaddr *, struct bgpd_addr *);
|
||||
|
||||
static const char * const log_procnames[] = {
|
||||
"parent",
|
||||
"SE",
|
||||
"RDE"
|
||||
};
|
||||
|
||||
/* logmsg.c and needed by bgpctl */
|
||||
static const char * const statenames[] = {
|
||||
"None",
|
||||
"Idle",
|
||||
"Connect",
|
||||
"Active",
|
||||
"OpenSent",
|
||||
"OpenConfirm",
|
||||
"Established"
|
||||
};
|
||||
|
||||
static const char * const msgtypenames[] = {
|
||||
"NONE",
|
||||
"OPEN",
|
||||
"UPDATE",
|
||||
"NOTIFICATION",
|
||||
"KEEPALIVE",
|
||||
"RREFRESH"
|
||||
};
|
||||
|
||||
static const char * const eventnames[] = {
|
||||
"None",
|
||||
"Start",
|
||||
"Stop",
|
||||
"Connection opened",
|
||||
"Connection closed",
|
||||
"Connection open failed",
|
||||
"Fatal error",
|
||||
"ConnectRetryTimer expired",
|
||||
"HoldTimer expired",
|
||||
"KeepaliveTimer expired",
|
||||
"OPEN message received",
|
||||
"KEEPALIVE message received",
|
||||
"UPDATE message received",
|
||||
"NOTIFICATION received"
|
||||
};
|
||||
|
||||
static const char * const errnames[] = {
|
||||
"none",
|
||||
"Header error",
|
||||
"error in OPEN message",
|
||||
"error in UPDATE message",
|
||||
"HoldTimer expired",
|
||||
"Finite State Machine error",
|
||||
"Cease"
|
||||
};
|
||||
|
||||
static const char * const suberr_header_names[] = {
|
||||
"none",
|
||||
"synchronization error",
|
||||
"wrong length",
|
||||
"unknown message type"
|
||||
};
|
||||
|
||||
static const char * const suberr_open_names[] = {
|
||||
"none",
|
||||
"version mismatch",
|
||||
"AS unacceptable",
|
||||
"BGPID invalid",
|
||||
"optional parameter error",
|
||||
"authentication error",
|
||||
"unacceptable holdtime",
|
||||
"unsupported capability",
|
||||
"group membership conflict", /* draft-ietf-idr-bgp-multisession-07 */
|
||||
"group membership required" /* draft-ietf-idr-bgp-multisession-07 */
|
||||
};
|
||||
|
||||
static const char * const suberr_fsm_names[] = {
|
||||
"unspecified error",
|
||||
"received unexpected message in OpenSent",
|
||||
"received unexpected message in OpenConfirm",
|
||||
"received unexpected message in Established"
|
||||
};
|
||||
|
||||
static const char * const suberr_update_names[] = {
|
||||
"none",
|
||||
"attribute list error",
|
||||
"unknown well-known attribute",
|
||||
"well-known attribute missing",
|
||||
"attribute flags error",
|
||||
"attribute length wrong",
|
||||
"origin unacceptable",
|
||||
"loop detected",
|
||||
"nexthop unacceptable",
|
||||
"optional attribute error",
|
||||
"network unacceptable",
|
||||
"AS-Path unacceptable"
|
||||
};
|
||||
|
||||
static const char * const suberr_cease_names[] = {
|
||||
"none",
|
||||
"max-prefix exceeded",
|
||||
"administratively down",
|
||||
"peer unconfigured",
|
||||
"administrative reset",
|
||||
"connection rejected",
|
||||
"other config change",
|
||||
"collision",
|
||||
"resource exhaustion"
|
||||
};
|
||||
|
||||
static const char * const ctl_res_strerror[] = {
|
||||
"no error",
|
||||
"no such neighbor",
|
||||
"permission denied",
|
||||
"neighbor does not have this capability",
|
||||
"config file has errors, reload failed",
|
||||
"previous reload still running",
|
||||
"out of memory",
|
||||
"not a cloned peer",
|
||||
"peer still active, down peer first"
|
||||
};
|
||||
|
||||
static const char * const timernames[] = {
|
||||
"None",
|
||||
"ConnectRetryTimer",
|
||||
"KeepaliveTimer",
|
||||
"HoldTimer",
|
||||
"IdleHoldTimer",
|
||||
"IdleHoldResetTimer",
|
||||
"CarpUndemoteTimer",
|
||||
""
|
||||
};
|
||||
|
||||
#endif /* __BGPD_H__ */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: log.c,v 1.60 2016/08/08 21:44:00 renato Exp $ */
|
||||
/* $OpenBSD: log.c,v 1.61 2016/09/02 14:00:29 benno Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
@ -16,52 +16,19 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <syslog.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "bgpd.h"
|
||||
#include "session.h"
|
||||
#include "log.h"
|
||||
|
||||
int debug;
|
||||
int verbose;
|
||||
|
||||
char *
|
||||
log_fmt_peer(const struct peer_config *peer)
|
||||
{
|
||||
const char *ip;
|
||||
char *pfmt, *p;
|
||||
|
||||
ip = log_addr(&peer->remote_addr);
|
||||
if ((peer->remote_addr.aid == AID_INET && peer->remote_masklen != 32) ||
|
||||
(peer->remote_addr.aid == AID_INET6 &&
|
||||
peer->remote_masklen != 128)) {
|
||||
if (asprintf(&p, "%s/%u", ip, peer->remote_masklen) == -1)
|
||||
fatal(NULL);
|
||||
} else {
|
||||
if ((p = strdup(ip)) == NULL)
|
||||
fatal(NULL);
|
||||
}
|
||||
|
||||
if (peer->descr[0]) {
|
||||
if (asprintf(&pfmt, "neighbor %s (%s)", p, peer->descr) ==
|
||||
-1)
|
||||
fatal(NULL);
|
||||
} else {
|
||||
if (asprintf(&pfmt, "neighbor %s", p) == -1)
|
||||
fatal(NULL);
|
||||
}
|
||||
free(p);
|
||||
return (pfmt);
|
||||
}
|
||||
int debug;
|
||||
int verbose;
|
||||
const char *log_procname;
|
||||
|
||||
void
|
||||
log_init(int n_debug)
|
||||
@ -111,45 +78,6 @@ vlog(int pri, const char *fmt, va_list ap)
|
||||
vsyslog(pri, fmt, ap);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
log_peer_warn(const struct peer_config *peer, const char *emsg, ...)
|
||||
{
|
||||
char *p, *nfmt;
|
||||
va_list ap;
|
||||
|
||||
p = log_fmt_peer(peer);
|
||||
if (emsg == NULL) {
|
||||
if (asprintf(&nfmt, "%s: %s", p, strerror(errno)) == -1)
|
||||
fatal(NULL);
|
||||
} else {
|
||||
if (asprintf(&nfmt, "%s: %s: %s", p, emsg, strerror(errno)) ==
|
||||
-1)
|
||||
fatal(NULL);
|
||||
}
|
||||
va_start(ap, emsg);
|
||||
vlog(LOG_CRIT, nfmt, ap);
|
||||
va_end(ap);
|
||||
free(p);
|
||||
free(nfmt);
|
||||
}
|
||||
|
||||
void
|
||||
log_peer_warnx(const struct peer_config *peer, const char *emsg, ...)
|
||||
{
|
||||
char *p, *nfmt;
|
||||
va_list ap;
|
||||
|
||||
p = log_fmt_peer(peer);
|
||||
if (asprintf(&nfmt, "%s: %s", p, emsg) == -1)
|
||||
fatal(NULL);
|
||||
va_start(ap, emsg);
|
||||
vlog(LOG_CRIT, nfmt, ap);
|
||||
va_end(ap);
|
||||
free(p);
|
||||
free(nfmt);
|
||||
}
|
||||
|
||||
void
|
||||
log_warn(const char *emsg, ...)
|
||||
{
|
||||
@ -217,15 +145,15 @@ fatal(const char *emsg, ...)
|
||||
va_end(ap);
|
||||
|
||||
if (emsg == NULL)
|
||||
logit(LOG_CRIT, "fatal in %s: %s", procnames[bgpd_process],
|
||||
logit(LOG_CRIT, "fatal in %s: %s", log_procname,
|
||||
strerror(errno));
|
||||
else
|
||||
if (errno)
|
||||
logit(LOG_CRIT, "fatal in %s: %s: %s",
|
||||
procnames[bgpd_process], s, strerror(errno));
|
||||
log_procname, s, strerror(errno));
|
||||
else
|
||||
logit(LOG_CRIT, "fatal in %s: %s",
|
||||
procnames[bgpd_process], s);
|
||||
log_procname, s);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
@ -236,109 +164,3 @@ fatalx(const char *emsg)
|
||||
errno = 0;
|
||||
fatal(emsg);
|
||||
}
|
||||
|
||||
void
|
||||
log_statechange(struct peer *peer, enum session_state nstate,
|
||||
enum session_events event)
|
||||
{
|
||||
char *p;
|
||||
|
||||
/* don't clutter the logs with constant Connect -> Active -> Connect */
|
||||
if (nstate == STATE_CONNECT && peer->state == STATE_ACTIVE &&
|
||||
peer->prev_state == STATE_CONNECT)
|
||||
return;
|
||||
if (nstate == STATE_ACTIVE && peer->state == STATE_CONNECT &&
|
||||
peer->prev_state == STATE_ACTIVE)
|
||||
return;
|
||||
|
||||
peer->lasterr = 0;
|
||||
p = log_fmt_peer(&peer->conf);
|
||||
logit(LOG_INFO, "%s: state change %s -> %s, reason: %s",
|
||||
p, statenames[peer->state], statenames[nstate], eventnames[event]);
|
||||
free(p);
|
||||
}
|
||||
|
||||
void
|
||||
log_notification(const struct peer *peer, u_int8_t errcode, u_int8_t subcode,
|
||||
u_char *data, u_int16_t datalen, const char *dir)
|
||||
{
|
||||
char *p;
|
||||
const char *suberrname = NULL;
|
||||
int uk = 0;
|
||||
|
||||
p = log_fmt_peer(&peer->conf);
|
||||
switch (errcode) {
|
||||
case ERR_HEADER:
|
||||
if (subcode >= sizeof(suberr_header_names)/sizeof(char *))
|
||||
uk = 1;
|
||||
else
|
||||
suberrname = suberr_header_names[subcode];
|
||||
break;
|
||||
case ERR_OPEN:
|
||||
if (subcode >= sizeof(suberr_open_names)/sizeof(char *))
|
||||
uk = 1;
|
||||
else
|
||||
suberrname = suberr_open_names[subcode];
|
||||
break;
|
||||
case ERR_UPDATE:
|
||||
if (subcode >= sizeof(suberr_update_names)/sizeof(char *))
|
||||
uk = 1;
|
||||
else
|
||||
suberrname = suberr_update_names[subcode];
|
||||
break;
|
||||
case ERR_CEASE:
|
||||
if (subcode >= sizeof(suberr_cease_names)/sizeof(char *))
|
||||
uk = 1;
|
||||
else
|
||||
suberrname = suberr_cease_names[subcode];
|
||||
break;
|
||||
case ERR_HOLDTIMEREXPIRED:
|
||||
if (subcode != 0)
|
||||
uk = 1;
|
||||
break;
|
||||
case ERR_FSM:
|
||||
if (subcode >= sizeof(suberr_fsm_names)/sizeof(char *))
|
||||
uk = 1;
|
||||
else
|
||||
suberrname = suberr_fsm_names[subcode];
|
||||
break;
|
||||
default:
|
||||
logit(LOG_CRIT, "%s: %s notification, unknown errcode "
|
||||
"%u, subcode %u", p, dir, errcode, subcode);
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
|
||||
if (uk)
|
||||
logit(LOG_CRIT, "%s: %s notification: %s, unknown subcode %u",
|
||||
p, dir, errnames[errcode], subcode);
|
||||
else {
|
||||
if (suberrname == NULL)
|
||||
logit(LOG_CRIT, "%s: %s notification: %s", p,
|
||||
dir, errnames[errcode]);
|
||||
else
|
||||
logit(LOG_CRIT, "%s: %s notification: %s, %s",
|
||||
p, dir, errnames[errcode], suberrname);
|
||||
}
|
||||
free(p);
|
||||
}
|
||||
|
||||
void
|
||||
log_conn_attempt(const struct peer *peer, struct sockaddr *sa)
|
||||
{
|
||||
char *p;
|
||||
const char *b;
|
||||
|
||||
if (peer == NULL) { /* connection from non-peer, drop */
|
||||
b = log_sockaddr(sa);
|
||||
logit(LOG_INFO, "connection from non-peer %s refused", b);
|
||||
} else {
|
||||
/* only log if there is a chance that the session may come up */
|
||||
if (peer->conf.down && peer->state == STATE_IDLE)
|
||||
return;
|
||||
p = log_fmt_peer(&peer->conf);
|
||||
logit(LOG_INFO, "Connection attempt from %s while session is "
|
||||
"in state %s", p, statenames[peer->state]);
|
||||
free(p);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: log.h,v 1.17 2015/10/24 08:06:45 claudio Exp $ */
|
||||
/* $OpenBSD: log.h,v 1.18 2016/09/02 14:00:29 benno Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
@ -16,131 +16,31 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
static const char * const statenames[] = {
|
||||
"None",
|
||||
"Idle",
|
||||
"Connect",
|
||||
"Active",
|
||||
"OpenSent",
|
||||
"OpenConfirm",
|
||||
"Established"
|
||||
};
|
||||
#ifndef LOG_H
|
||||
#define LOG_H
|
||||
|
||||
static const char * const msgtypenames[] = {
|
||||
"NONE",
|
||||
"OPEN",
|
||||
"UPDATE",
|
||||
"NOTIFICATION",
|
||||
"KEEPALIVE",
|
||||
"RREFRESH"
|
||||
};
|
||||
#include <stdarg.h>
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
static const char * const eventnames[] = {
|
||||
"None",
|
||||
"Start",
|
||||
"Stop",
|
||||
"Connection opened",
|
||||
"Connection closed",
|
||||
"Connection open failed",
|
||||
"Fatal error",
|
||||
"ConnectRetryTimer expired",
|
||||
"HoldTimer expired",
|
||||
"KeepaliveTimer expired",
|
||||
"OPEN message received",
|
||||
"KEEPALIVE message received",
|
||||
"UPDATE message received",
|
||||
"NOTIFICATION received"
|
||||
};
|
||||
extern const char *log_procname;
|
||||
|
||||
static const char * const errnames[] = {
|
||||
"none",
|
||||
"Header error",
|
||||
"error in OPEN message",
|
||||
"error in UPDATE message",
|
||||
"HoldTimer expired",
|
||||
"Finite State Machine error",
|
||||
"Cease"
|
||||
};
|
||||
void log_init(int);
|
||||
void log_verbose(int);
|
||||
void logit(int, const char *, ...)
|
||||
__attribute__((__format__ (printf, 2, 3)));
|
||||
void vlog(int, const char *, va_list)
|
||||
__attribute__((__format__ (printf, 2, 0)));
|
||||
void log_warn(const char *, ...)
|
||||
__attribute__((__format__ (printf, 1, 2)));
|
||||
void log_warnx(const char *, ...)
|
||||
__attribute__((__format__ (printf, 1, 2)));
|
||||
void log_info(const char *, ...)
|
||||
__attribute__((__format__ (printf, 1, 2)));
|
||||
void log_debug(const char *, ...)
|
||||
__attribute__((__format__ (printf, 1, 2)));
|
||||
void fatal(const char *, ...) __dead
|
||||
__attribute__((__format__ (printf, 1, 2)));
|
||||
void fatalx(const char *) __dead
|
||||
__attribute__((__format__ (printf, 1, 0)));
|
||||
|
||||
static const char * const suberr_header_names[] = {
|
||||
"none",
|
||||
"synchronization error",
|
||||
"wrong length",
|
||||
"unknown message type"
|
||||
};
|
||||
|
||||
static const char * const suberr_open_names[] = {
|
||||
"none",
|
||||
"version mismatch",
|
||||
"AS unacceptable",
|
||||
"BGPID invalid",
|
||||
"optional parameter error",
|
||||
"authentication error",
|
||||
"unacceptable holdtime",
|
||||
"unsupported capability",
|
||||
"group membership conflict", /* draft-ietf-idr-bgp-multisession-07 */
|
||||
"group membership required" /* draft-ietf-idr-bgp-multisession-07 */
|
||||
};
|
||||
|
||||
static const char * const suberr_fsm_names[] = {
|
||||
"unspecified error",
|
||||
"received unexpected message in OpenSent",
|
||||
"received unexpected message in OpenConfirm",
|
||||
"received unexpected message in Established"
|
||||
};
|
||||
|
||||
static const char * const suberr_update_names[] = {
|
||||
"none",
|
||||
"attribute list error",
|
||||
"unknown well-known attribute",
|
||||
"well-known attribute missing",
|
||||
"attribute flags error",
|
||||
"attribute length wrong",
|
||||
"origin unacceptable",
|
||||
"loop detected",
|
||||
"nexthop unacceptable",
|
||||
"optional attribute error",
|
||||
"network unacceptable",
|
||||
"AS-Path unacceptable"
|
||||
};
|
||||
|
||||
static const char * const suberr_cease_names[] = {
|
||||
"none",
|
||||
"max-prefix exceeded",
|
||||
"administratively down",
|
||||
"peer unconfigured",
|
||||
"administrative reset",
|
||||
"connection rejected",
|
||||
"other config change",
|
||||
"collision",
|
||||
"resource exhaustion"
|
||||
};
|
||||
|
||||
static const char * const procnames[] = {
|
||||
"parent",
|
||||
"SE",
|
||||
"RDE"
|
||||
};
|
||||
|
||||
static const char * const ctl_res_strerror[] = {
|
||||
"no error",
|
||||
"no such neighbor",
|
||||
"permission denied",
|
||||
"neighbor does not have this capability",
|
||||
"config file has errors, reload failed",
|
||||
"previous reload still running",
|
||||
"out of memory",
|
||||
"not a cloned peer",
|
||||
"peer still active, down peer first"
|
||||
};
|
||||
|
||||
static const char * const timernames[] = {
|
||||
"None",
|
||||
"ConnectRetryTimer",
|
||||
"KeepaliveTimer",
|
||||
"HoldTimer",
|
||||
"IdleHoldTimer",
|
||||
"IdleHoldResetTimer",
|
||||
"CarpUndemoteTimer",
|
||||
""
|
||||
};
|
||||
#endif /* LOG_H */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: rde.c,v 1.348 2016/08/08 21:44:00 renato Exp $ */
|
||||
/* $OpenBSD: rde.c,v 1.349 2016/09/02 14:00:29 benno Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
@ -168,6 +168,9 @@ rde_main(int debug, int verbose)
|
||||
int timeout;
|
||||
u_int8_t aid;
|
||||
|
||||
bgpd_process = PROC_RDE;
|
||||
log_procname = log_procnames[bgpd_process];
|
||||
|
||||
log_init(debug);
|
||||
log_verbose(verbose);
|
||||
|
||||
@ -180,7 +183,6 @@ rde_main(int debug, int verbose)
|
||||
fatal("chdir(\"/\")");
|
||||
|
||||
setproctitle("route decision engine");
|
||||
bgpd_process = PROC_RDE;
|
||||
|
||||
if (setgroups(1, &pw->pw_gid) ||
|
||||
setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: session.c,v 1.352 2016/08/08 21:44:00 renato Exp $ */
|
||||
/* $OpenBSD: session.c,v 1.353 2016/09/02 14:00:29 benno Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004, 2005 Henning Brauer <henning@openbsd.org>
|
||||
@ -202,6 +202,9 @@ session_main(int debug, int verbose)
|
||||
void *newp;
|
||||
short events;
|
||||
|
||||
bgpd_process = PROC_SE;
|
||||
log_procname = log_procnames[bgpd_process];
|
||||
|
||||
log_init(debug);
|
||||
log_verbose(verbose);
|
||||
|
||||
@ -214,7 +217,6 @@ session_main(int debug, int verbose)
|
||||
fatal("chdir(\"/\")");
|
||||
|
||||
setproctitle("session engine");
|
||||
bgpd_process = PROC_SE;
|
||||
pfkeysock = pfkey_init(&sysdep);
|
||||
|
||||
if (setgroups(1, &pw->pw_gid) ||
|
||||
|
Loading…
Reference in New Issue
Block a user