MCPcopy Create free account
hub / github.com/apache/httpd / cgid_server

Function cgid_server

modules/generators/mod_cgid.c:717–1000  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

715}
716
717static int cgid_server(void *data)
718{
719 int sd, sd2, rc;
720 mode_t omask;
721 apr_pool_t *ptrans;
722 server_rec *main_server = data;
723 apr_hash_t *script_hash = apr_hash_make(pcgi);
724 apr_status_t rv;
725
726 apr_pool_create(&ptrans, pcgi);
727 apr_pool_tag(ptrans, "cgid_ptrans");
728
729 apr_signal(SIGCHLD, SIG_IGN);
730 apr_signal(SIGHUP, daemon_signal_handler);
731
732 /* Close our copy of the listening sockets */
733 ap_close_listeners();
734
735 /* cgid should use its own suexec doer */
736 ap_hook_get_suexec_identity(cgid_suexec_id_doer, NULL, NULL,
737 APR_HOOK_REALLY_FIRST);
738 apr_hook_sort_all();
739
740 if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
741 ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, APLOGNO(01242)
742 "Couldn't create unix domain socket");
743 return errno;
744 }
745
746 apr_pool_cleanup_register(pcgi, (void *)((long)sd),
747 close_unix_socket, close_unix_socket);
748
749 omask = umask(0077); /* so that only Apache can use socket */
750 rc = bind(sd, (struct sockaddr *)server_addr, server_addr_len);
751 umask(omask); /* can't fail, so can't clobber errno */
752 if (rc < 0) {
753 ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, APLOGNO(01243)
754 "Couldn't bind unix domain socket %s",
755 sockname);
756 return errno;
757 }
758
759 /* Not all flavors of unix use the current umask for AF_UNIX perms */
760 rv = apr_file_perms_set(sockname, APR_FPROT_UREAD|APR_FPROT_UWRITE|APR_FPROT_UEXECUTE);
761 if (rv != APR_SUCCESS) {
762 ap_log_error(APLOG_MARK, APLOG_CRIT, rv, main_server, APLOGNO(01244)
763 "Couldn't set permissions on unix domain socket %s",
764 sockname);
765 return rv;
766 }
767
768 if (listen(sd, DEFAULT_CGID_LISTENBACKLOG) < 0) {
769 ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, APLOGNO(01245)
770 "Couldn't listen on unix domain socket");
771 return errno;
772 }
773
774 if (!geteuid()) {

Callers 1

cgid_startFunction · 0.85

Calls 7

ap_close_listenersFunction · 0.85
get_reqFunction · 0.85
sock_writeFunction · 0.85
ap_make_dirstr_parentFunction · 0.85
create_argvFunction · 0.85
ap_log_errorFunction · 0.50

Tested by

no test coverage detected