equal
deleted
inserted
replaced
1 --- src/tcsd/svrside.c 2010-06-09 13:19:00.000000000 -0700 |
1 --- src/tcsd/svrside.c 2010-06-09 13:19:00.000000000 -0700 |
2 +++ src/tcsd/svrside.c 2012-04-11 14:37:28.993408000 -0700 |
2 +++ src/tcsd/svrside.c 2012-04-19 11:27:31.232524632 -0700 |
3 @@ -27,6 +27,15 @@ |
3 @@ -27,6 +27,15 @@ |
4 #include <arpa/inet.h> |
4 #include <arpa/inet.h> |
5 #include <errno.h> |
5 #include <errno.h> |
6 #include <getopt.h> |
6 #include <getopt.h> |
7 +#ifdef SOLARIS |
7 +#ifdef SOLARIS |
208 - unsigned client_len; |
208 - unsigned client_len; |
209 + unsigned client_len, serv_len; |
209 + unsigned client_len, serv_len; |
210 char *hostname = NULL; |
210 char *hostname = NULL; |
211 struct passwd *pwd; |
211 struct passwd *pwd; |
212 struct hostent *client_hostent = NULL; |
212 struct hostent *client_hostent = NULL; |
213 @@ -245,26 +418,49 @@ |
213 @@ -245,26 +418,50 @@ |
214 if ((result = tcsd_startup())) |
214 if ((result = tcsd_startup())) |
215 return (int)result; |
215 return (int)result; |
216 |
216 |
217 - sd = socket(AF_INET, SOCK_STREAM, 0); |
217 - sd = socket(AF_INET, SOCK_STREAM, 0); |
218 - if (sd < 0) { |
218 - if (sd < 0) { |
229 + |
229 + |
230 + memset(&serv_addr, 0, sizeof (serv_addr)); |
230 + memset(&serv_addr, 0, sizeof (serv_addr)); |
231 + serv_addr.un.sun_family = AF_UNIX; |
231 + serv_addr.un.sun_family = AF_UNIX; |
232 + strncpy(serv_addr.un.sun_path, TCSD_DEFAULT_SOCKET, |
232 + strncpy(serv_addr.un.sun_path, TCSD_DEFAULT_SOCKET, |
233 + sizeof (serv_addr.un.sun_path)); |
233 + sizeof (serv_addr.un.sun_path)); |
|
234 + (void) unlink(TCSD_DEFAULT_SOCKET); |
234 + |
235 + |
235 + } else { /* TCP socket */ |
236 + } else { /* TCP socket */ |
236 + sd = socket(AF_INET, SOCK_STREAM, 0); |
237 + sd = socket(AF_INET, SOCK_STREAM, 0); |
237 + if (sd < 0) { |
238 + if (sd < 0) { |
238 + LogError("Failed socket: %s", strerror(errno)); |
239 + LogError("Failed socket: %s", strerror(errno)); |
277 + } |
278 + } |
278 + if (bind(sd, (struct sockaddr *) &serv_addr, serv_len) < 0) { |
279 + if (bind(sd, (struct sockaddr *) &serv_addr, serv_len) < 0) { |
279 LogError("Failed bind: %s", strerror(errno)); |
280 LogError("Failed bind: %s", strerror(errno)); |
280 return -1; |
281 return -1; |
281 } |
282 } |
282 @@ -285,7 +481,6 @@ |
283 @@ -285,7 +482,6 @@ |
283 LogError("Failed listen: %s", strerror(errno)); |
284 LogError("Failed listen: %s", strerror(errno)); |
284 return -1; |
285 return -1; |
285 } |
286 } |
286 - client_len = (unsigned)sizeof(client_addr); |
287 - client_len = (unsigned)sizeof(client_addr); |
287 |
288 |
288 if (getenv("TCSD_FOREGROUND") == NULL) { |
289 if (getenv("TCSD_FOREGROUND") == NULL) { |
289 if (daemon(0, 0) == -1) { |
290 if (daemon(0, 0) == -1) { |
290 @@ -295,6 +490,12 @@ |
291 @@ -295,6 +491,12 @@ |
291 } |
292 } |
292 } |
293 } |
293 |
294 |
294 +#ifdef SOLARIS |
295 +#ifdef SOLARIS |
295 + /* For Solaris, drop privileges for security. */ |
296 + /* For Solaris, drop privileges for security. */ |
298 +#endif /* SOLARIS */ |
299 +#endif /* SOLARIS */ |
299 + |
300 + |
300 LogInfo("%s: TCSD up and running.", PACKAGE_STRING); |
301 LogInfo("%s: TCSD up and running.", PACKAGE_STRING); |
301 do { |
302 do { |
302 newsd = accept(sd, (struct sockaddr *) &client_addr, &client_len); |
303 newsd = accept(sd, (struct sockaddr *) &client_addr, &client_len); |
303 @@ -314,20 +515,22 @@ |
304 @@ -314,20 +516,22 @@ |
304 } |
305 } |
305 LogDebug("accepted socket %i", newsd); |
306 LogDebug("accepted socket %i", newsd); |
306 |
307 |
307 - if ((client_hostent = gethostbyaddr((char *) &client_addr.sin_addr, |
308 - if ((client_hostent = gethostbyaddr((char *) &client_addr.sin_addr, |
308 - sizeof(client_addr.sin_addr), |
309 - sizeof(client_addr.sin_addr), |