#define SYSLOG_NAMES
#include <syslog.h>
-static int optd = 0;
-
static int decode(char *name, CODE *codetab)
{
register CODE *c;
}
static int
-myopenlog(const char *sock) {
- int fd;
- static struct sockaddr_un s_addr; /* AF_UNIX address of local logger */
-
- if (strlen(sock) >= sizeof(s_addr.sun_path))
- errx(EXIT_FAILURE, _("openlog %s: pathname too long"), sock);
+myopenlog(const char *sock, int optd)
+{
+ int fd;
+ static struct sockaddr_un s_addr; /* AF_UNIX address of local logger */
- s_addr.sun_family = AF_UNIX;
- (void)strcpy(s_addr.sun_path, sock);
+ if (strlen(sock) >= sizeof(s_addr.sun_path))
+ errx(EXIT_FAILURE, _("openlog %s: pathname too long"), sock);
- if ((fd = socket(AF_UNIX, optd ? SOCK_DGRAM : SOCK_STREAM, 0)) == -1)
- err(EXIT_FAILURE, _("socket %s"), sock);
+ s_addr.sun_family = AF_UNIX;
+ (void)strcpy(s_addr.sun_path, sock);
- if (connect(fd, (struct sockaddr *) &s_addr, sizeof(s_addr)) == -1)
- err(EXIT_FAILURE, _("connect %s"), sock);
+ if (optd == 0) {
+ if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
+ goto udp_socket;
+ if (connect(fd, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1) {
+ close(fd);
+ goto udp_socket;
+ }
+ } else {
+ udp_socket:
+ if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
+ err(EXIT_FAILURE, _("socket %s"), sock);
+ if (connect(fd, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1)
+ err(EXIT_FAILURE, _("connect %s"), sock);
+ }
- return fd;
+ return fd;
}
static int
char *usock = NULL;
char *udpserver = NULL;
char *udpport = NULL;
- int LogSock = -1;
+ int LogSock = -1, optd = 0;
static const struct option longopts[] = {
{ "id", no_argument, 0, 'i' },
else if (udpserver)
LogSock = udpopenlog(udpserver,udpport);
else
- LogSock = myopenlog(usock);
+ LogSock = myopenlog(usock, optd);
/* log input line if appropriate */
if (argc > 0) {