⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
		}	}	argc -= isc_commandline_index;	argv += isc_commandline_index;	if (argc > 0) {		usage();		ns_main_earlyfatal("extra command line arguments");	}}static isc_result_tcreate_managers(void) {	isc_result_t result;#ifdef ISC_PLATFORM_USETHREADS	unsigned int cpus_detected;#endif#ifdef ISC_PLATFORM_USETHREADS	cpus_detected = isc_os_ncpus();	if (ns_g_cpus == 0)		ns_g_cpus = cpus_detected;	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,		      ISC_LOG_INFO, "found %u CPU%s, using %u worker thread%s",		      cpus_detected, cpus_detected == 1 ? "" : "s",		      ns_g_cpus, ns_g_cpus == 1 ? "" : "s");#else	ns_g_cpus = 1;#endif	result = isc_taskmgr_create(ns_g_mctx, ns_g_cpus, 0, &ns_g_taskmgr);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "ns_taskmgr_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_timermgr_create(ns_g_mctx, &ns_g_timermgr);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "ns_timermgr_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_socketmgr_create(ns_g_mctx, &ns_g_socketmgr);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "isc_socketmgr_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_entropy_create(ns_g_mctx, &ns_g_entropy);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "isc_entropy_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_hash_create(ns_g_mctx, ns_g_entropy, DNS_NAME_MAXWIRE);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "isc_hash_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	return (ISC_R_SUCCESS);}static voiddestroy_managers(void) {	ns_lwresd_shutdown();	isc_entropy_detach(&ns_g_entropy);	if (ns_g_fallbackentropy != NULL)		isc_entropy_detach(&ns_g_fallbackentropy);	/*	 * isc_taskmgr_destroy() will block until all tasks have exited,	 */	isc_taskmgr_destroy(&ns_g_taskmgr);	isc_timermgr_destroy(&ns_g_timermgr);	isc_socketmgr_destroy(&ns_g_socketmgr);	/*	 * isc_hash_destroy() cannot be called as long as a resolver may be	 * running.  Calling this after isc_taskmgr_destroy() ensures the	 * call is safe.	 */	isc_hash_destroy();}static voidsetup(void) {	isc_result_t result;	/*	 * Get the user and group information before changing the root	 * directory, so the administrator does not need to keep a copy	 * of the user and group databases in the chroot'ed environment.	 */	ns_os_inituserinfo(ns_g_username);	/*	 * Initialize time conversion information	 */	ns_os_tzset();	ns_os_opendevnull();#ifdef PATH_RANDOMDEV	/*	 * Initialize system's random device as fallback entropy source	 * if running chroot'ed.	 */	if (ns_g_chrootdir != NULL) {		result = isc_entropy_create(ns_g_mctx, &ns_g_fallbackentropy);		if (result != ISC_R_SUCCESS)			ns_main_earlyfatal("isc_entropy_create() failed: %s",					   isc_result_totext(result));		result = isc_entropy_createfilesource(ns_g_fallbackentropy,						      PATH_RANDOMDEV);		if (result != ISC_R_SUCCESS) {			ns_main_earlywarning("could not open pre-chroot "					     "entropy source %s: %s",					     PATH_RANDOMDEV,					     isc_result_totext(result));			isc_entropy_detach(&ns_g_fallbackentropy);		}	}#endif	ns_os_chroot(ns_g_chrootdir);	/*	 * For operating systems which have a capability mechanism, now	 * is the time to switch to minimal privs and change our user id.	 * On traditional UNIX systems, this call will be a no-op, and we	 * will change the user ID after reading the config file the first	 * time.  (We need to read the config file to know which possibly	 * privileged ports to bind() to.)	 */	ns_os_minprivs();	result = ns_log_init(ISC_TF(ns_g_username != NULL));	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("ns_log_init() failed: %s",				   isc_result_totext(result));	/*	 * Now is the time to daemonize (if we're not running in the	 * foreground).  We waited until now because we wanted to get	 * a valid logging context setup.  We cannot daemonize any later,	 * because calling create_managers() will create threads, which	 * would be lost after fork().	 */	if (!ns_g_foreground)		ns_os_daemonize();	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,		      ISC_LOG_NOTICE, "starting BIND %s%s", ns_g_version,		      saved_command_line);	/*	 * Get the initial resource limits.	 */	(void)isc_resource_getlimit(isc_resource_stacksize,				    &ns_g_initstacksize);	(void)isc_resource_getlimit(isc_resource_datasize,				    &ns_g_initdatasize);	(void)isc_resource_getlimit(isc_resource_coresize,				    &ns_g_initcoresize);	(void)isc_resource_getlimit(isc_resource_openfiles,				    &ns_g_initopenfiles);	/*	 * If the named configuration filename is relative, prepend the current	 * directory's name before possibly changing to another directory.	 */	if (! isc_file_isabsolute(ns_g_conffile)) {		result = isc_file_absolutepath(ns_g_conffile,					       absolute_conffile,					       sizeof(absolute_conffile));		if (result != ISC_R_SUCCESS)			ns_main_earlyfatal("could not construct absolute path of "					   "configuration file: %s", 					   isc_result_totext(result));		ns_g_conffile = absolute_conffile;	}	result = create_managers();	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("create_managers() failed: %s",				   isc_result_totext(result));	ns_builtin_init();	/*	 * Add calls to register sdb drivers here.	 */	/* xxdb_init(); */           mysqldb_init();	ns_server_create(ns_g_mctx, &ns_g_server);}static voidcleanup(void) {	destroy_managers();	ns_server_destroy(&ns_g_server);	ns_builtin_deinit();	/*	 * Add calls to unregister sdb drivers here.	 */	/* xxdb_clear(); */           mysqldb_clear();	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,		      ISC_LOG_NOTICE, "exiting");	ns_log_shutdown();}static char *memstats = NULL;voidns_main_setmemstats(const char *filename) {	/*	 * Caller has to ensure locking.	 */	if (memstats != NULL) {		free(memstats);		memstats = NULL;	}	if (filename == NULL)		return;	memstats = malloc(strlen(filename) + 1);	if (memstats)		strcpy(memstats, filename);}#ifdef HAVE_LIBSCF/* * Get FMRI for the current named process */static char *scf_get_ins_name(void) {	scf_handle_t *h = NULL;	int namelen;	char *ins_name;	if ((h = scf_handle_create(SCF_VERSION)) == NULL) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "scf_handle_create() failed: %s",				 scf_strerror(scf_error()));		return (NULL);	}	if (scf_handle_bind(h) == -1) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "scf_handle_bind() failed: %s",				 scf_strerror(scf_error()));		scf_handle_destroy(h);		return (NULL);	}	if ((namelen = scf_myname(h, NULL, 0)) == -1) {		isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,			      NS_LOGMODULE_MAIN, ISC_LOG_INFO,			      "scf_myname() failed: %s",			      scf_strerror(scf_error()));		scf_handle_destroy(h);		return (NULL);	}	if ((ins_name = malloc(namelen + 1)) == NULL) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "scf_get_ins_named() memory "				 "allocation failed: %s",				 isc_result_totext(ISC_R_NOMEMORY));		scf_handle_destroy(h);		return (NULL);	}	if (scf_myname(h, ins_name, namelen + 1) == -1) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "scf_myname() failed: %s",				 scf_strerror(scf_error()));		scf_handle_destroy(h);		free(ins_name);		return (NULL);	}	scf_handle_destroy(h);	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,		      ISC_LOG_INFO, "instance name:%s", ins_name);	return (ins_name);}static voidscf_cleanup(void) {	char *s;	char *ins_name;	if ((ins_name = scf_get_ins_name()) != NULL) {		if ((s = smf_get_state(ins_name)) != NULL) {			if ((strcmp(SCF_STATE_STRING_ONLINE, s) == 0) ||			    (strcmp(SCF_STATE_STRING_DEGRADED, s) == 0)) {				if (smf_disable_instance(ins_name, 0) != 0) {				    UNEXPECTED_ERROR(__FILE__, __LINE__,					"smf_disable_instance() failed: %s",					scf_strerror(scf_error()));				}			}			free(s);		} else {			UNEXPECTED_ERROR(__FILE__, __LINE__,					 "smf_get_state() failed: %s",					 scf_strerror(scf_error()));		}		free(ins_name);	}}#endifintmain(int argc, char *argv[]) {	isc_result_t result;	/*	 * Record version in core image.	 * strings named.core | grep "named version:"	 */	strlcat(version,#ifdef __DATE__		"named version: BIND " VERSION " (" __DATE__ ")",#else		"named version: BIND " VERSION,#endif		sizeof(version));	result = isc_file_progname(*argv, program_name, sizeof(program_name));	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("program name too long");	if (strcmp(program_name, "lwresd") == 0)		ns_g_lwresdonly = ISC_TRUE;	isc_assertion_setcallback(assertion_failed);	isc_error_setfatal(library_fatal_error);	isc_error_setunexpected(library_unexpected_error);	ns_os_init(program_name);	result = isc_app_start();	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("isc_app_start() failed: %s",				   isc_result_totext(result));	dns_result_register();	dst_result_register();	isccc_result_register();	parse_command_line(argc, argv);	/*	 * Warn about common configuration error.	 */	if (ns_g_chrootdir != NULL) {		int len = strlen(ns_g_chrootdir);		if (strncmp(ns_g_chrootdir, ns_g_conffile, len) == 0 &&		    (ns_g_conffile[len] == '/' || ns_g_conffile[len] == '\\'))			ns_main_earlywarning("config filename (-c %s) contains "					     "chroot path (-t %s)",					     ns_g_conffile, ns_g_chrootdir);	}	result = isc_mem_create(0, 0, &ns_g_mctx);	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("isc_mem_create() failed: %s",				   isc_result_totext(result));	setup();	/*	 * Start things running and then wait for a shutdown request	 * or reload.	 */	do {		result = isc_app_run();		if (result == ISC_R_RELOAD) {			ns_server_reloadwanted(ns_g_server);		} else if (result != ISC_R_SUCCESS) {			UNEXPECTED_ERROR(__FILE__, __LINE__,					 "isc_app_run(): %s",					 isc_result_totext(result));			/*			 * Force exit.			 */			result = ISC_R_SUCCESS;		}	} while (result != ISC_R_SUCCESS);#ifdef HAVE_LIBSCF	scf_cleanup();#endif	cleanup();	if (want_stats) {		isc_mem_stats(ns_g_mctx, stdout);		isc_mutex_stats(stdout);	}	if (memstats != NULL) {		FILE *fp = NULL;		result = isc_stdio_open(memstats, "w", &fp);		if (result == ISC_R_SUCCESS) {			isc_mem_stats(ns_g_mctx, fp);			isc_mutex_stats(fp);			isc_stdio_close(fp);		}	}	isc_mem_destroy(&ns_g_mctx);	ns_main_setmemstats(NULL);	isc_app_finish();	ns_os_closedevnull();	ns_os_shutdown();	return (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -