void clientLscsConnectionsOpen(void) { int fd; enter_suid(); struct sockaddr_un addr_UNIX; addr_UNIX.sun_family = AF_LOCAL; char path[4096]; snprintf(path, 4096, "/tmp/xiaosi%d", opt_squid_id); strcpy(addr_UNIX.sun_path,path); unlink(path); fd = comm_open_un(SOCK_STREAM, PF_LOCAL, path, COMM_NONBLOCKING, "LSCS Socket"); leave_suid(); comm_listen(fd); commSetSelect(fd, COMM_SELECT_READ, lscsAccept, NULL, 0); /* * We need to set a defer handler here so that we don't * peg the CPU with select() when we hit the FD limit. */ commSetDefer(fd, httpAcceptDefer, NULL); debug(191, 1) ("Accepting LSCS connections at %s, FD %d.\n", path, fd); }
static void vmessage(int loglevel, const char *format, va_list ap) { /* FIXME: try to log messages of any size */ #define BUFSIZE 256 char buf[BUFSIZE]; /* FIXME: logging to console if errors and logfile still not initilized */ if (syslog_init) vsyslog(loglevel, format, ap); if (logfile || !daemon_mode) { /* FIXME: %m format */ char str[BUFSIZE]; char timestamp[BUFSIZE]; time_t t = time(NULL); struct tm *ptm = localtime(&t); int saved_errno = errno; char *errstr = strerror(saved_errno); char *p; vsnprintf(str, BUFSIZE, format, ap); strftime(timestamp, BUFSIZE, "%b %d %H:%M:%S", ptm); snprintf(buf, BUFSIZE, "%s %s[%d]: %s\n", timestamp, program, (int) getpid(), str); if (p = strstr(buf, "%m")) { char newbuf[BUFSIZE]; strncpy(newbuf, buf, p - buf); strcpy(newbuf, errstr); strcpy(newbuf, p + 2); } } if (logfile) { FILE *log; enter_suid(); log = fopen(logfile, "a"); leave_suid(); if (!log) { /* FIXME: don't try write to file */ /* error("can't open logfile %s:%m", logfile); */ } else { fprintf(log, buf); fclose(log); } } if (!daemon_mode) { fprintf(stderr, buf); } }
int main (int argc, char **argv) { leave_suid(); if ( (program = strrchr(argv[0], '/')) == 0 ) program = argv[0]; else program ++; parse_args(argc, argv); debug("start up"); initlog(program, facility, logfile); debug("init log"); #ifndef NO_FORK if (daemon_mode) { if (daemon(0, 0)) av_shutdown(1); } #endif set_signals(); signal(SIGPIPE, SIG_IGN); if (create_pid_file()) /* bug - don't call shutdown - it removes pidfile */ av_shutdown(1); notice("started"); if ( !no_check && (drweb_ver = dw_getversion()) != -1 ) { notice("drwebd %d.%d found", drweb_ver/100, drweb_ver % 100); } else { no_check = 1; } if ( !no_check && (drweb_id = dw_getid()) != NULL ) { notice("drwebd id = <%s>", drweb_id ); } if ( !no_check ) { dw_getbaseinfo(); } main_loop(); av_shutdown(0); return 0; }
static void m3u8Event(void *args) { if(!is_m3u8_prefetch_alive()){ debug(207,3)("m3u8_prefetch dont run,now starting it!\n"); enter_suid(); int cid = fork(); if (cid == 0) { int ret = execl("/usr/local/squid/bin/m3u8_prefetch", "m3u8_prefetch","15101",(char *)0); if (ret < 0) { debug(207,3)("(m3u8) --> execl error : %s\n",xstrerror()); } exit(-1); } leave_suid(); } eventAdd("m3u8Event", m3u8Event, NULL, 30, 0); }
void icpConnectionsOpen(void) { u_short port; struct in_addr addr; struct sockaddr_in xaddr; int x; socklen_t len; wordlist *s; if (Config2.Accel.on && !Config.onoff.accel_with_proxy) return; if ((port = Config.Port.icp) <= 0) return; enter_suid(); theInIcpConnection = comm_open(SOCK_DGRAM, 0, Config.Addrs.udp_incoming, port, COMM_NONBLOCKING, "ICP Socket"); leave_suid(); if (theInIcpConnection < 0) fatal("Cannot open ICP Port"); commSetSelect(theInIcpConnection, COMM_SELECT_READ, icpHandleUdp, NULL, 0); for (s = Config.mcast_group_list; s; s = s->next) ipcache_nbgethostbyname(s->key, mcastJoinGroups, NULL); debug(12, 1) ("Accepting ICP messages at %s, port %d, FD %d.\n", inet_ntoa(Config.Addrs.udp_incoming), (int) port, theInIcpConnection); if ((addr = Config.Addrs.udp_outgoing).s_addr != no_addr.s_addr) { enter_suid(); theOutIcpConnection = comm_open(SOCK_DGRAM, 0, addr, port, COMM_NONBLOCKING, "ICP Port"); leave_suid(); if (theOutIcpConnection < 0) fatal("Cannot open Outgoing ICP Port"); commSetSelect(theOutIcpConnection, COMM_SELECT_READ, icpHandleUdp, NULL, 0); debug(12, 1) ("Outgoing ICP messages on port %d, FD %d.\n", (int) port, theOutIcpConnection); fd_note(theOutIcpConnection, "Outgoing ICP socket"); fd_note(theInIcpConnection, "Incoming ICP socket"); } else { theOutIcpConnection = theInIcpConnection; } memset(&theOutICPAddr, '\0', sizeof(struct in_addr)); len = sizeof(struct sockaddr_in); memset(&xaddr, '\0', len); x = getsockname(theOutIcpConnection, (struct sockaddr *) &xaddr, &len); if (x < 0) debug(50, 1) ("theOutIcpConnection FD %d: getsockname: %s\n", theOutIcpConnection, xstrerror()); else theOutICPAddr = xaddr.sin_addr; }