mirror of
https://github.com/samba-team/samba.git
synced 2025-02-08 05:57:51 +03:00
Add support for duplicating stderr into our logfiles.
This is for two things: To allow panic actions etc to pump out backtraces to stderr and to allow vangrind to put its stuff in a logfile - making it possible to debug smbd when launched from inetd. I've also cleaned up some of the duplicate names in procedures between smbd and nmbd. Andrew Bartlett (This used to be commit 4bcb32731984b4aef1d4911a168a4e7a10d32fd4)
This commit is contained in:
parent
129b3966c0
commit
714abda3e7
@ -602,6 +602,12 @@ BOOL reopen_logs( void )
|
||||
force_check_log_size();
|
||||
(void)umask(oldumask);
|
||||
|
||||
/* Take over stderr to catch ouput into logs */
|
||||
if (sys_dup2(dbf->fd, 2) == -1) {
|
||||
close_low_fds(True); /* Close stderr too, if dup2 can't point it
|
||||
at the logfile */
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -503,30 +503,33 @@ void make_dir_struct(char *buf,char *mask,char *fname,SMB_OFF_T size,int mode,ti
|
||||
/*******************************************************************
|
||||
close the low 3 fd's and open dev/null in their place
|
||||
********************************************************************/
|
||||
void close_low_fds(void)
|
||||
void close_low_fds(BOOL stderr_too)
|
||||
{
|
||||
#ifndef VALGRIND
|
||||
int fd;
|
||||
int i;
|
||||
close(0); close(1);
|
||||
#ifndef __INSURE__
|
||||
close(2);
|
||||
#endif
|
||||
|
||||
if (stderr_too) {
|
||||
close(2);
|
||||
}
|
||||
|
||||
/* try and use up these file descriptors, so silly
|
||||
library routines writing to stdout etc won't cause havoc */
|
||||
for (i=0;i<3;i++) {
|
||||
fd = sys_open("/dev/null",O_RDWR,0);
|
||||
if (fd < 0) fd = sys_open("/dev/null",O_WRONLY,0);
|
||||
if (fd < 0) {
|
||||
DEBUG(0,("Can't open /dev/null\n"));
|
||||
return;
|
||||
}
|
||||
if (fd != i) {
|
||||
DEBUG(0,("Didn't get file descriptor %d\n",i));
|
||||
return;
|
||||
}
|
||||
if (i == 2 && !stderr_too)
|
||||
continue;
|
||||
|
||||
fd = sys_open("/dev/null",O_RDWR,0);
|
||||
if (fd < 0) fd = sys_open("/dev/null",O_WRONLY,0);
|
||||
if (fd < 0) {
|
||||
DEBUG(0,("Can't open /dev/null\n"));
|
||||
return;
|
||||
}
|
||||
if (fd != i) {
|
||||
DEBUG(0,("Didn't get file descriptor %d\n",i));
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -680,7 +683,8 @@ void become_daemon(void)
|
||||
#endif /* HAVE_SETSID */
|
||||
|
||||
/* Close fd's 0,1,2. Needed if started by rsh */
|
||||
close_low_fds();
|
||||
close_low_fds(False); /* Don't close stderr, let the debug system
|
||||
attach it to the logfile */
|
||||
}
|
||||
|
||||
|
||||
|
@ -133,7 +133,7 @@ static BOOL open_sockets_inetd(void)
|
||||
smbd_set_server_fd(dup(0));
|
||||
|
||||
/* close our standard file descriptors */
|
||||
close_low_fds();
|
||||
close_low_fds(False); /* Don't close stderr */
|
||||
|
||||
set_socket_options(smbd_server_fd(),"SO_KEEPALIVE");
|
||||
set_socket_options(smbd_server_fd(), user_socket_options);
|
||||
@ -151,7 +151,7 @@ static void msg_exit_server(int msg_type, pid_t src, void *buf, size_t len)
|
||||
Open the socket communication.
|
||||
****************************************************************************/
|
||||
|
||||
static BOOL open_sockets(BOOL is_daemon,int port)
|
||||
static BOOL open_sockets_smbd(BOOL is_daemon,int port)
|
||||
{
|
||||
int num_interfaces = iface_count();
|
||||
int fd_listenset[FD_SETSIZE];
|
||||
@ -187,7 +187,7 @@ static BOOL open_sockets(BOOL is_daemon,int port)
|
||||
*/
|
||||
|
||||
if(num_interfaces > FD_SETSIZE) {
|
||||
DEBUG(0,("open_sockets: Too many interfaces specified to bind to. Number was %d \
|
||||
DEBUG(0,("open_sockets_smbd: Too many interfaces specified to bind to. Number was %d \
|
||||
max can be %d\n",
|
||||
num_interfaces, FD_SETSIZE));
|
||||
return False;
|
||||
@ -199,7 +199,7 @@ max can be %d\n",
|
||||
struct in_addr *ifip = iface_n_ip(i);
|
||||
|
||||
if(ifip == NULL) {
|
||||
DEBUG(0,("open_sockets: interface %d has NULL IP address !\n", i));
|
||||
DEBUG(0,("open_sockets_smbd: interface %d has NULL IP address !\n", i));
|
||||
continue;
|
||||
}
|
||||
s = fd_listenset[i] = open_socket_in(SOCK_STREAM, port, 0, ifip->s_addr, True);
|
||||
@ -233,7 +233,7 @@ max can be %d\n",
|
||||
set_socket_options(s,user_socket_options);
|
||||
|
||||
if (listen(s, 5) == -1) {
|
||||
DEBUG(0,("open_sockets: listen: %s\n",
|
||||
DEBUG(0,("open_sockets_smbd: listen: %s\n",
|
||||
strerror(errno)));
|
||||
close(s);
|
||||
return False;
|
||||
@ -309,7 +309,7 @@ max can be %d\n",
|
||||
continue;
|
||||
|
||||
if (smbd_server_fd() == -1) {
|
||||
DEBUG(0,("open_sockets: accept: %s\n",
|
||||
DEBUG(0,("open_sockets_smbd: accept: %s\n",
|
||||
strerror(errno)));
|
||||
continue;
|
||||
}
|
||||
@ -323,7 +323,7 @@ max can be %d\n",
|
||||
|
||||
/* close our standard file
|
||||
descriptors */
|
||||
close_low_fds();
|
||||
close_low_fds(False);
|
||||
am_parent = 0;
|
||||
|
||||
set_socket_options(smbd_server_fd(),"SO_KEEPALIVE");
|
||||
@ -837,7 +837,7 @@ static void usage(char *pname)
|
||||
start_background_queue();
|
||||
*/
|
||||
|
||||
if (!open_sockets(is_daemon,port))
|
||||
if (!open_sockets_smbd(is_daemon,port))
|
||||
exit(1);
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user