{
ServiceFunctionHook *newfcn;
char *message;
- char error[SIZ];
- strcpy(error, "");
newfcn = (ServiceFunctionHook *) malloc(sizeof(ServiceFunctionHook));
message = (char*) malloc (SIZ + SIZ);
newfcn->ServiceName = ServiceName;
if (sockpath != NULL) {
- newfcn->msock = ctdl_uds_server(sockpath, CtdlGetConfigInt("c_maxsessions"), error);
+ newfcn->msock = ctdl_uds_server(sockpath, CtdlGetConfigInt("c_maxsessions"));
snprintf(message, SIZ, "extensions: unix domain socket '%s': ", sockpath);
}
else if (tcp_port <= 0) { /* port -1 to disable */
return;
}
else {
- newfcn->msock = ctdl_tcp_server(CtdlGetConfigStr("c_ip_addr"),
- tcp_port,
- CtdlGetConfigInt("c_maxsessions"),
- error);
+ newfcn->msock = ctdl_tcp_server(CtdlGetConfigStr("c_ip_addr"), tcp_port, CtdlGetConfigInt("c_maxsessions"));
snprintf(message, SIZ, "extensions: TCP port %s:%d: (%s) ",
CtdlGetConfigStr("c_ip_addr"), tcp_port, ServiceName);
}
syslog(LOG_INFO, "%s", message);
}
else {
- AddPortError(message, error);
+ AddPortError(message, "failed");
strcat(message, "FAILED.");
syslog(LOG_ERR, "%s", message);
free(newfcn);
* port_number port number to bind
* queue_len number of incoming connections to allow in the queue
*/
-int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len, char *errormessage)
+int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len)
{
struct protoent *p;
struct sockaddr_in6 sin6;
{
ip_version = 4;
if (inet_pton(AF_INET, ip_addr, &sin4.sin_addr) <= 0) {
- snprintf(errormessage, SIZ, "Error binding to [%s] : %s", ip_addr, strerror(errno));
- syslog(LOG_ALERT, "tcpserver: %s", errormessage);
+ syslog(LOG_ALERT, "tcpserver: inet_pton: %m");
return (-1);
}
}
{
ip_version = 6;
if (inet_pton(AF_INET6, ip_addr, &sin6.sin6_addr) <= 0) {
- snprintf(errormessage, SIZ, "Error binding to [%s] : %s", ip_addr, strerror(errno));
- syslog(LOG_ALERT, "tcpserver: %s", errormessage);
+ syslog(LOG_ALERT, "tcpserver: inet_pton: %m");
return (-1);
}
}
if (port_number == 0) {
- snprintf(errormessage, SIZ, "Can't start: no port number specified.");
- syslog(LOG_ALERT, "tcpserver: %s", errormessage);
+ syslog(LOG_ALERT, "tcpserver: no port number was specified");
return (-1);
}
sin6.sin6_port = htons((u_short) port_number);
sin4.sin_port = htons((u_short) port_number);
p = getprotobyname("tcp");
+ if (p == NULL) {
+ syslog(LOG_ALERT, "tcpserver: getprotobyname: %m");
+ return (-1);
+ }
s = socket( ((ip_version == 6) ? PF_INET6 : PF_INET), SOCK_STREAM, (p->p_proto));
if (s < 0) {
- snprintf(errormessage, SIZ, "Can't create a listening socket: %s", strerror(errno));
- syslog(LOG_ALERT, "tcpserver: %s", errormessage);
+ syslog(LOG_ALERT, "tcpserver: socket: %m");
return (-1);
}
/* Set some socket options that make sense. */
}
if (b < 0) {
- snprintf(errormessage, SIZ, "Can't bind: %s", strerror(errno));
- syslog(LOG_ALERT, "tcpserver: %s", errormessage);
+ syslog(LOG_ALERT, "tcpserver: bind: %m");
return (-1);
}
fcntl(s, F_SETFL, O_NONBLOCK);
if (listen(s, ((queue_len >= 5) ? queue_len : 5) ) < 0) {
- snprintf(errormessage, SIZ, "Can't listen: %s", strerror(errno));
- syslog(LOG_ALERT, "tcpserver: %s", errormessage);
+ syslog(LOG_ALERT, "tcpserver: listen: %m");
return (-1);
}
return (s);
/*
* Create a Unix domain socket and listen on it
*/
-int ctdl_uds_server(char *sockpath, int queue_len, char *errormessage)
+int ctdl_uds_server(char *sockpath, int queue_len)
{
struct sockaddr_un addr;
int s;
i = unlink(sockpath);
if ((i != 0) && (errno != ENOENT)) {
- snprintf(errormessage, SIZ, "can't unlink %s: %s", sockpath, strerror(errno));
- syslog(LOG_ERR, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: %m");
return(-1);
}
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s < 0) {
- snprintf(errormessage, SIZ, "can't create a socket: %s", strerror(errno));
- syslog(LOG_ERR, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: socket: %m");
return(-1);
}
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- snprintf(errormessage, SIZ, "can't bind: %s", strerror(errno));
- syslog(LOG_ERR, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: bind: %m");
return(-1);
}
/* set to nonblock - we need this for some obscure situations */
if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) {
- snprintf(errormessage, SIZ, "can't set socket to non-blocking: %s", strerror(errno));
- syslog(LOG_ERR, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: fcntl: %m");
close(s);
return(-1);
}
if (listen(s, actual_queue_len) < 0) {
- snprintf(errormessage, SIZ, "can't listen: %s", strerror(errno));
- syslog(LOG_ERR, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: listen: %m");
return(-1);
}