软件著作权-源代码范本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件着作权-源代码范本
注意事项:常见的源代码包含:C语言,VB,C++,JAVA,.NET等。
提交的代码必须是源代码的开头载入程序,第30页必须断开,第60页是软
件的程序结尾,代码中不得出现与申请表内容不符合的日期,着作权人,软
件名字等,不能出现开源代码,不能出现任何版权纠纷。
格式要求:一、源代码应提交前、后各连续30页,不足60页的,应当全部提交。
二、源代码页眉应标注软件的名称和版本号,应当与申请表中名称完全一致,页
眉右上应标注页码,源代码每页不少于50行。
范例如下:
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybs/>
#include <tybscc/>
#include <dns/>
#include <dns/>
#include <dns/>
#include <dns/>
#include <dst/>
#define NS_MAIN 1
#include <named/>
#endif
#ifdef DLZ
#include <dlz/>
#endif
static tybs_boolean_t want_stats = TYBS_FALSE;
static char program_name[TYBS_DIR_NAMEMAX] = "named"; static char absolute_conffile[TYBS_DIR_PATHMAX];
static char saved_command_line[512];
static char version[512];
static unsigned int maxsocks = 0;
void
ns_main_earlywarning(const char *format, ...) {
va_list args;
va_start(args, format);
if (ns_g_lctx != NULL) {
tybs_log_vwrite(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_WARNING,
format, args);
} else {
fprintf(stderr, "%s: ", program_name);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
}
va_end(args);
}
Void ns_main_earlyfatal(const char *format, ...) { va_list args;
va_start(args, format);
if (ns_g_lctx != NULL) {
tybs_log_vwrite(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
format, args);
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
"exiting (due to early fatal error)");
} else {
fprintf(stderr, "%s: ", program_name);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
}
va_end(args);
exit(1);
}
static void
assertion_failed(const char *file, int line, tybs_assertiontype_t type, const char *cond)
{
if (ns_g_lctx != NULL) {
tybs_assertion_setcallback(NULL);
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
"%s:%d: %s(%s) failed", file, line,
tybs_assertion_typetotext(type), cond);
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
"exiting (due to assertion failure)");
} else {
fprintf(stderr, "%s:%d: %s(%s) failed\n",
file, line, tybs_assertion_typetotext(type), cond);
fflush(stderr);
}
if (ns_g_coreok)
abort();
exit(1);
}
static void
library_fatal_error(const char *file, int line, const char *format, va_list args) TYBS_FORMAT_PRINTF(3, 0);
static void
library_fatal_error(const char *file, int line, const char *format, va_list args)
{
if (ns_g_lctx != NULL) {
tybs_error_setfatal(NULL);
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
"%s:%d: fatal error:", file, line);
tybs_log_vwrite(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
format, args);
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_CRITICAL,
"exiting (due to fatal error in library)");
} else {
fprintf(stderr, "%s:%d: fatal error: ", file, line);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
}
if (ns_g_coreok)
abort();
exit(1);
}
static void
library_unexpected_error(const char *file, int line, const char *format, va_list args) TYBS_FORMAT_PRINTF(3, 0);
static void
library_unexpected_error(const char *file, int line, const char *format, va_list args)
{
if (ns_g_lctx != NULL) {
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_ERROR,
"%s:%d: unexpected error:", file, line);
tybs_log_vwrite(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_MAIN, TYBS_LOG_ERROR,
format, args);
} else {
fprintf(stderr, "%s:%d: fatal error: ", file, line);
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
fflush(stderr);
}
}
static void
lwresd_usage(void) {
fprintf(stderr,
"usage: lwresd [-4|-6] [-c conffile | -C resolvconffile] "
"[-d debuglevel]\n"
" [-f|-g] [-n number_of_cpus] [-p port] "
"[-P listen-port] [-s]\n"
" [-t chrootdir] [-u username] [-i pidfile]\n"
" [-m {usage|trace|record|size|mctx}]\n");
}
static void
usage(void) {
if (ns_g_lwresdonly) {
lwresd_usage();
return;
}
fprintf(stderr,
"usage: named [-4|-6] [-c conffile] [-d debuglevel] "
"[-f|-g] [-n number_of_cpus]\n"
" [-p port] [-s] [-t chrootdir] [-u username]\n"
" [-m {usage|trace|record|size|mctx}]\n");
}
static void
save_command_line(int argc, char *argv[]) {
int i;
char *src;
char *dst;
char *eob;
const char truncated[] = "...";
tybs_boolean_t quoted = TYBS_FALSE;
dst = saved_command_line;
eob = saved_command_line + sizeof(saved_command_line);
for (i = 1; i < argc && dst < eob; i++) {
*dst++ = ' ';
src = argv[i];
while (*src != '\0' && dst < eob) {
if (quoted || isalnum(*src & 0xff) ||
*src == '-' || *src == '_' ||
*src == '.' || *src == '/') {
*dst++ = *src++;
quoted = TYBS_FALSE;
} else {
*dst++ = '\\';
quoted = TYBS_TRUE;
}
}
}
INSIST(sizeof(saved_command_line) >= sizeof(truncated));
if (dst == eob)
strcpy(eob - sizeof(truncated), truncated);
else
*dst = '\0';
}
static int
parse_int(char *arg, const char *desc) {
char *endp;
int tmp;
long int ltmp;
ltmp = strtol(arg, &endp, 10);
tmp = (int) ltmp;
if (*endp != '\0')
ns_main_earlyfatal("%s '%s' must be numeric", desc, arg);
if (tmp < 0 || tmp != ltmp)
ns_main_earlyfatal("%s '%s' out of range", desc, arg);
return (tmp);
}
static struct flag_def {
const char *name;
unsigned int value;
} mem_debug_flags[] = {
{ "trace", TYBS_MEM_DEBUGTRACE },
{ "record", TYBS_MEM_DEBUGRECORD },
{ "usage", TYBS_MEM_DEBUGUSAGE },
{ "size", TYBS_MEM_DEBUGSIZE },
{ "mctx", TYBS_MEM_DEBUGCTX },
{ NULL, 0 }
};
static void
set_flags(const char *arg, struct flag_def *defs, unsigned int *ret) { for (;;) {
const struct flag_def *def;
const char *end = strchr(arg, ',');
int arglen;
if (end == NULL)
end = arg + strlen(arg);
arglen = end - arg;
for (def = defs; def->name != NULL; def++) {
if (arglen == (int)strlen(def->name) &&
memcmp(arg, def->name, arglen) == 0) {
*ret |= def->value;
goto found;
}
}
ns_main_earlyfatal("unrecognized flag '%.*s'", arglen, arg);
found:
if (*end == '\0')
break;
arg = end + 1;
}
}
static void
parse_command_line(int argc, char *argv[]) {
int ch;
int port;
tybs_boolean_t disable6 = TYBS_FALSE;
tybs_boolean_t disable4 = TYBS_FALSE;
save_command_line(argc, argv);
tybs_commandline_errprint = TYBS_FALSE;
while ((ch = tybs_commandline_parse(argc, argv,
"46c:C:d:fgi:lm:n:N:p:P:"
"sS:t:T:u:vVx:")) != -1) {
switch (ch) {
case '4':
if (disable4)
ns_main_earlyfatal("cannot specify -4 and -6");
if (tybs_net_probeipv4() != TYBS_R_SUCCESS)
ns_main_earlyfatal("IPv4 not supported by OS");
tybs_net_disableipv6();
disable6 = TYBS_TRUE;
break;
case '6':
if (disable6)
ns_main_earlyfatal("cannot specify -4 and -6");
if (tybs_net_probeipv6() != TYBS_R_SUCCESS)
ns_main_earlyfatal("IPv6 not supported by OS");
tybs_net_disableipv4();
disable4 = TYBS_TRUE;
break;
case 'c':
ns_g_conffile = tybs_commandline_argument;
lwresd_g_conffile = tybs_commandline_argument;
if (lwresd_g_useresolvconf)
ns_main_earlyfatal("cannot specify -c and -C");
ns_g_conffileset = TYBS_TRUE;
break;
case 'C':
lwresd_g_resolvconffile = tybs_commandline_argument;
if (ns_g_conffileset)
ns_main_earlyfatal("cannot specify -c and -C");
lwresd_g_useresolvconf = TYBS_TRUE;
break;
case 'd':
ns_g_debuglevel = parse_int(tybs_commandline_argument,
"debug level");
break;
case 'f':
ns_g_foreground = TYBS_TRUE;
break;
case 'g':
ns_g_foreground = TYBS_TRUE;
ns_g_logstderr = TYBS_TRUE;
break;
/* XXXBEW -i should be removed */
case 'i':
lwresd_g_defaultpidfile = tybs_commandline_argument;
break;
case 'l':
ns_g_lwresdonly = TYBS_TRUE;
break;
case 'm':
set_flags(tybs_commandline_argument, mem_debug_flags, &tybs_mem_debugging);
break;
case 'N': /* Deprecated. */
case 'n':
ns_g_cpus = parse_int(tybs_commandline_argument,
"number of cpus");
if (ns_g_cpus == 0)
ns_g_cpus = 1;
break;
case 'p':
port = parse_int(tybs_commandline_argument, "port");
if (port < 1 || port > 65535)
ns_main_earlyfatal("port '%s' out of range",
tybs_commandline_argument);
ns_g_port = port;
break;
/* XXXBEW Should -P be removed? */
case 'P':
port = parse_int(tybs_commandline_argument, "port");
if (port < 1 || port > 65535)
ns_main_earlyfatal("port '%s' out of range",
tybs_commandline_argument);
lwresd_g_listenport = port;
break;
case 's':
want_stats = TYBS_TRUE;
break;
case 'S':
maxsocks = parse_int(tybs_commandline_argument,
"max number of sockets");
break;
case 't':
ns_g_chrootdir = tybs_commandline_argument;
break;
case 'T':
if (strcmp(tybs_commandline_argument, "clienttest") == 0)
ns_g_clienttest = TYBS_TRUE;
else
fprintf(stderr, "unknown -T flag '%s\n",
tybs_commandline_argument);
break;
case 'u':
ns_g_username = tybs_commandline_argument;
break;
case 'v':
printf("BIND %s\n", ns_g_version);
exit(0);
case 'V':
printf("BIND %s built with %s\n", ns_g_version,
ns_g_configargs);
exit(0);
case '?':
usage();
if (tybs_commandline_option == '?')
exit(0);
ns_main_earlyfatal("unknown option '-%c'",
tybs_commandline_option);
default:
ns_main_earlyfatal("parsing options returned %d", ch);
}
}
argc -= tybs_commandline_index;
argv += tybs_commandline_index;
if (argc > 0) {
usage();
ns_main_earlyfatal("extra command line arguments");
}
}
static tybs_result_t
create_managers(void) {
tybs_result_t result;
unsigned int socks;
#ifdef TYBS_PLATFORM_USETHREADS
unsigned int cpus_detected;
#endif
#ifdef TYBS_PLATFORM_USETHREADS
cpus_detected = tybs_os_ncpus();
if (ns_g_cpus == 0)
ns_g_cpus = cpus_detected;
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, TYBS_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 = tybs_taskmgr_create(ns_g_mctx, ns_g_cpus, 0, &ns_g_taskmgr);
if (result != TYBS_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"tybs_taskmgr_create() failed: %s",
tybs_result_totext(result));
return (TYBS_R_UNEXPECTED);
}
result = tybs_timermgr_create(ns_g_mctx, &ns_g_timermgr);
if (result != TYBS_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"tybs_timermgr_create() failed: %s",
tybs_result_totext(result));
return (TYBS_R_UNEXPECTED);
}
result = tybs_socketmgr_create2(ns_g_mctx, &ns_g_socketmgr, maxsocks);
if (result != TYBS_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"tybs_socketmgr_create() failed: %s",
tybs_result_totext(result));
return (TYBS_R_UNEXPECTED);
}
result = tybs_socketmgr_getmaxsockets(ns_g_socketmgr, &socks);
if (result == TYBS_R_SUCCESS) {
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER,
TYBS_LOG_INFO, "using up to %u sockets", socks);
}
result = tybs_entropy_create(ns_g_mctx, &ns_g_entropy);
if (result != TYBS_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"tybs_entropy_create() failed: %s",
tybs_result_totext(result));
return (TYBS_R_UNEXPECTED);
}
result = tybs_hash_create(ns_g_mctx, ns_g_entropy, DNS_NAME_MAXWIRE);
if (result != TYBS_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"tybs_hash_create() failed: %s",
tybs_result_totext(result));
return (TYBS_R_UNEXPECTED);
}
return (TYBS_R_SUCCESS);
}
static void
destroy_managers(void) {
ns_lwresd_shutdown();
tybs_entropy_detach(&ns_g_entropy);
if (ns_g_fallbackentropy != NULL)
tybs_entropy_detach(&ns_g_fallbackentropy);
tybs_taskmgr_destroy(&ns_g_taskmgr);
tybs_timermgr_destroy(&ns_g_timermgr);
tybs_socketmgr_destroy(&ns_g_socketmgr);
tybs_hash_destroy();
}
static void
setup(void) {
tybs_result_t result;
#ifdef HAVE_LIBSCF
char *instance = NULL;
#endif
ns_os_inituserinfo(ns_g_username);
ns_os_tzset();
ns_os_opendevnull();
#ifdef HAVE_LIBSCF
result = ns_smf_get_instance(&instance, 0, ns_g_mctx);
if (result == TYBS_R_SUCCESS)
ns_smf_got_instance = 1;
else
ns_smf_got_instance = 0;
if (instance != NULL)
tybs_mem_free(ns_g_mctx, instance);
#endif /* HAVE_LIBSCF */
#ifdef PATH_RANDOMDEV
if (ns_g_chrootdir != NULL) {
result = tybs_entropy_create(ns_g_mctx, &ns_g_fallbackentropy);
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("tybs_entropy_create() failed: %s",
tybs_result_totext(result));
result = tybs_entropy_createfilesource(ns_g_fallbackentropy,
PATH_RANDOMDEV);
if (result != TYBS_R_SUCCESS) {
ns_main_earlywarning("could not open pre-chroot "
"entropy source %s: %s",
PATH_RANDOMDEV,
tybs_result_totext(result));
tybs_entropy_detach(&ns_g_fallbackentropy);
}
}
#endif
ns_os_chroot(ns_g_chrootdir);
ns_os_minprivs();
result = ns_log_init(TYBS_TF(ns_g_username != NULL));
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("ns_log_init() failed: %s",
tybs_result_totext(result));
if (!ns_g_foreground)
ns_os_daemonize();
result = tybs_app_start();
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("tybs_app_start() failed: %s",
tybs_result_totext(result));
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_NOTICE, "starting BIND %s%s", ns_g_version,
saved_command_line);
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_NOTICE, "built with %s", ns_g_configargs);
(void)tybs_resource_getlimit(tybs_resource_stacksize,
&ns_g_initstacksize);
(void)tybs_resource_getlimit(tybs_resource_datasize,
&ns_g_initdatasize);
(void)tybs_resource_getlimit(tybs_resource_coresize,
&ns_g_initcoresize);
(void)tybs_resource_getlimit(tybs_resource_openfiles,
&ns_g_initopenfiles);
if (! tybs_file_isabsolute(ns_g_conffile)) {
result = tybs_file_absolutepath(ns_g_conffile,
absolute_conffile,
sizeof(absolute_conffile));
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("could not construct absolute path of "
"configuration file: %s",
tybs_result_totext(result));
ns_g_conffile = absolute_conffile;
}
result = tybs_time_now(&ns_g_boottime);
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("tybs_time_now() failed: %s",
tybs_result_totext(result));
result = create_managers();
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("create_managers() failed: %s",
tybs_result_totext(result));
ns_builtin_init();
#ifdef DLZ
result = dlz_drivers_init();
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("dlz_drivers_init() failed: %s",
tybs_result_totext(result));
#endif
ns_server_create(ns_g_mctx, &ns_g_server);
}
static void
cleanup(void) {
destroy_managers();
ns_server_destroy(&ns_g_server);
ns_builtin_deinit();
#ifdef DLZ
dlz_drivers_clear();
#endif
dns_name_destroy();
tybs_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, TYBS_LOG_NOTICE, "exiting");
ns_log_shutdown();
}
static char *memstats = NULL;
void
ns_main_setmemstats(const char *filename) {
if (memstats != NULL) {
free(memstats);
}
if (filename == NULL)
return;
memstats = malloc(strlen(filename) + 1);
if (memstats)
strcpy(memstats, filename);
}
#ifdef HAVE_LIBSCF
tybs_result_t
ns_smf_get_instance(char **ins_name, int debug, tybs_mem_t *mctx) { scf_handle_t *h = NULL;
int namelen;
char *instance;
REQUIRE(ins_name != NULL && *ins_name == NULL);
if ((h = scf_handle_create(SCF_VERSION)) == NULL) {
if (debug)
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_handle_create() failed: %s",
scf_strerror(scf_error()));
return (TYBS_R_FAILURE);
}
if (scf_handle_bind(h) == -1) {
if (debug)
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_handle_bind() failed: %s",
scf_strerror(scf_error()));
scf_handle_destroy(h);
return (TYBS_R_FAILURE);
}
if ((namelen = scf_myname(h, NULL, 0)) == -1) {
if (debug)
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_myname() failed: %s",
scf_strerror(scf_error()));
scf_handle_destroy(h);
return (TYBS_R_FAILURE);
}
if ((instance = tybs_mem_allocate(mctx, namelen + 1)) == NULL) { UNEXPECTED_ERROR(__FILE__, __LINE__,
"ns_smf_get_instance memory "
"allocation failed: %s",
tybs_result_totext(TYBS_R_NOMEMORY));
scf_handle_destroy(h);
return (TYBS_R_FAILURE);
}
if (scf_myname(h, instance, namelen + 1) == -1) {
if (debug)
UNEXPECTED_ERROR(__FILE__, __LINE__,
"scf_myname() failed: %s",
scf_strerror(scf_error()));
scf_handle_destroy(h);
tybs_mem_free(mctx, instance);
return (TYBS_R_FAILURE);
scf_handle_destroy(h);
*ins_name = instance;
return (TYBS_R_SUCCESS);
}
#endif
int
main(int argc, char *argv[]) {
tybs_result_t result;
#ifdef HAVE_LIBSCF
char *instance = NULL;
#endif
strlcat(version,
#ifdef __DATE__
"named version: BIND " VERSION " (" __DATE__ ")",
#else
"named version: BIND " VERSION,
#endif
sizeof(version));
result = tybs_file_progname(*argv, program_name, sizeof(program_name));
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("program name too long");
if (strcmp(program_name, "lwresd") == 0)
ns_g_lwresdonly = TYBS_TRUE;
tybs_assertion_setcallback(assertion_failed);
tybs_error_setfatal(library_fatal_error);
tybs_error_setunexpected(library_unexpected_error);
ns_os_init(program_name);
dns_result_register();
dst_result_register();
tybscc_result_register();
parse_command_line(argc, argv);
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 = tybs_mem_create(0, 0, &ns_g_mctx);
if (result != TYBS_R_SUCCESS)
ns_main_earlyfatal("tybs_mem_create() failed: %s",
tybs_result_totext(result));
tybs_mem_setname(ns_g_mctx, "main", NULL);
setup();
do {
result = tybs_app_run();
if (result == TYBS_R_RELOAD) {
ns_server_reloadwanted(ns_g_server);
} else if (result != TYBS_R_SUCCESS) {
UNEXPECTED_ERROR(__FILE__, __LINE__,
"tybs_app_run(): %s",
tybs_result_totext(result));
}
} while (result != TYBS_R_SUCCESS);
#ifdef HAVE_LIBSCF
if (ns_smf_want_disable == 1) {
result = ns_smf_get_instance(&instance, 1, ns_g_mctx);
if (result == TYBS_R_SUCCESS && instance != NULL) { if (smf_disable_instance(instance, 0) != 0)
UNEXPECTED_ERROR(__FILE__, __LINE__,
"smf_disable_instance() "
"failed for %s : %s",
instance,
scf_strerror(scf_error()));
}
if (instance != NULL)
tybs_mem_free(ns_g_mctx, instance);
}
#endif /* HAVE_LIBSCF */
cleanup();
if (want_stats) {
tybs_mem_stats(ns_g_mctx, stdout);
tybs_mutex_stats(stdout);
}
if (ns_g_memstatistics && memstats != NULL) {
FILE *fp = NULL;
result = tybs_stdio_open(memstats, "w", &fp);
if (result == TYBS_R_SUCCESS) {
tybs_mem_stats(ns_g_mctx, fp);
tybs_mutex_stats(fp);
tybs_stdio_close(fp);
}
}
tybs_mem_destroy(&ns_g_mctx);
tybs_mem_checkdestroyed(stderr);
ns_main_setmemstats(NULL);
tybs_app_finish();
ns_os_closedevnull();
ns_os_shutdown();
return (0);
}
#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
#include ""
#include <>
#include <>
#ifdef PHP_WIN32
#include "win32/"
#include "win32/"
#include "win32/"
#include <>
#elif defined(NETWARE)
#include <sys/>
#ifdef USE_WINSOCK
#include <>
#endif
#if HAVE_SYS_TIME_H
#include <sys/>
#endif
#if HAVE_UNISTD_H
#include <>
#endif
#if HAVE_SIGNAL_H
#include <>
#endif
#if HAVE_SETLOCALE
#include <>
#endif
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include "ext/standard/"
#include ""
#include "ext/standard/"
#ifdef PHP_WIN32
#include <>
#include "win32/"
#include "ext/standard/"
#endif
#include ""
#include "Zend/"
#if PHP_SIGCHILD
#include <sys/>
#include <sys/>
#endif
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
/* }}} */
#ifndef ZTS
php_core_globals core_globals;
#else
PHPAPI int core_globals_id;
#endif
#define SAFE_FILENAME(f) ((f)?(f):"-") /* {{{ PHP_INI_MH
static PHP_INI_MH(OnSetPrecision)
{
int i = atoi(new_value);
if (i >= 0) {
EG(precision) = i;
return SUCCESS;
} else {
return FAILURE;
}
}
static PHP_INI_MH(OnChangeMemoryLimit)
{
if (new_value) {
PG(memory_limit) = zend_atoi(new_value, new_value_length);
} else {
PG(memory_limit) = 1<<30; /* effectively, no limit */ }
return zend_set_memory_limit(PG(memory_limit));
}
static void php_disable_functions(TSRMLS_D)
{
char *s = NULL, *e;
if (!*(INI_STR("disable_functions"))) {
return;
}
e = PG(disable_functions) = strdup(INI_STR("disable_functions"));
while (*e) {
switch (*e) {
case ' ':
case ',':
if (s) {
*e = '\0';
zend_disable_function(s, e-s TSRMLS_CC);
s = NULL;
}
break;
default:
if (!s) {
s = e;
}
break;
}
e++;
}
if (s) {
zend_disable_function(s, e-s TSRMLS_CC);
}
}
static void php_disable_classes(TSRMLS_D)
{
char *s = NULL, *e;
if (!*(INI_STR("disable_classes"))) {
return;
e = PG(disable_classes) = strdup(INI_STR("disable_classes"));
while (*e) {
switch (*e) {
case ' ':
case ',':
if (s) {
*e = '\0';
zend_disable_class(s, e-s TSRMLS_CC);
s = NULL;
}
break;
default:
if (!s) {
s = e;
}
break;
}
e++;
}
if (s) {
zend_disable_class(s, e-s TSRMLS_CC);
}
}
static PHP_INI_MH(OnUpdateTimeout)
{
EG(timeout_seconds) = atoi(new_value);
if (stage==PHP_INI_STAGE_STARTUP) {
/* Don't set a timeout on startup, only per-request */
return SUCCESS;
}
zend_unset_timeout(TSRMLS_C);
zend_set_timeout(EG(timeout_seconds));
return SUCCESS;
}
static int php_get_display_errors_mode(char *value, int value_length)
{
int mode;
if (!value) {
return PHP_DISPLAY_ERRORS_STDOUT;
}
if (value_length == 2 && !strcasecmp("on", value)) {
mode = PHP_DISPLAY_ERRORS_STDOUT;
} else if (value_length == 3 && !strcasecmp("yes", value)) {
mode = PHP_DISPLAY_ERRORS_STDOUT;
} else if (value_length == 4 && !strcasecmp("true", value)) {
mode = PHP_DISPLAY_ERRORS_STDOUT;
} else if (value_length == 6 && !strcasecmp(value, "stderr")) {
mode = PHP_DISPLAY_ERRORS_STDERR;
} else if (value_length == 6 && !strcasecmp(value, "stdout")) {
mode = PHP_DISPLAY_ERRORS_STDOUT;
} else {
mode = atoi(value);
if (mode && mode != PHP_DISPLAY_ERRORS_STDOUT && mode != PHP_DISPLAY_ERRORS_STDERR) {
}
return mode;
}
static PHP_INI_MH(OnUpdateDisplayErrors)
{
PG(display_errors) = (zend_bool) php_get_display_errors_mode(new_value, new_value_length);
return SUCCESS;
}
static PHP_INI_DISP(display_errors_mode)
{
int mode, tmp_value_length, cgi_or_cli;
char *tmp_value;
TSRMLS_FETCH();
if (type == ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
tmp_value = (ini_entry->orig_value ? ini_entry->orig_value : NULL );
tmp_value_length = ini_entry->orig_value_length;
} else if (ini_entry->value) {
tmp_value = ini_entry->value;
tmp_value_length = ini_entry->value_length;
} else {
tmp_value = NULL;
tmp_value_length = 0;
}
mode = php_get_display_errors_mode(tmp_value, tmp_value_length);
cgi_or_cli = (!strcmp, "cli") || !strcmp, "cgi"));
switch (mode) {
case PHP_DISPLAY_ERRORS_STDERR:
if (cgi_or_cli ) {
PUTS("STDERR");
} else {
PUTS("On");
}
break;
case PHP_DISPLAY_ERRORS_STDOUT:
if (cgi_or_cli ) {
PUTS("STDOUT");
} else {
PUTS("On");
}
break;
default:
PUTS("Off");
break;
}
}
static PHP_INI_MH(OnUpdateErrorLog)
{
/* Only do the safemode/open_basedir check at runtime */
if ((stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) && strcmp(new_value, "syslog")) {
if (PG(safe_mode) && (!php_checkuid(new_value, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
if (PG(open_basedir) && php_check_open_basedir(new_value TSRMLS_CC)) {
return FAILURE;
}
}
OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
return SUCCESS;
}
static PHP_INI_MH(OnChangeMailForceExtra)
{
/* Don't allow changing it in htaccess */
if (stage == PHP_INI_STAGE_HTACCESS) {
return FAILURE;
}
return SUCCESS;
}
#ifndef PHP_SAFE_MODE_EXEC_DIR
# define PHP_SAFE_MODE_EXEC_DIR ""
#endif
#if defined(PHP_PROG_SENDMAIL) && !defined(NETWARE)
# define DEFAULT_SENDMAIL_PATH PHP_PROG_SENDMAIL " -t -i "
#elif defined(PHP_WIN32)
# define DEFAULT_SENDMAIL_PATH NULL
#else
# define DEFAULT_SENDMAIL_PATH "/usr/sbin/sendmail -t -i"
#endif
PHPAPI void php_log_err(char *log_message TSRMLS_DC)
{
int fd = -1;
char error_time_str[128];
struct tm tmbuf;
time_t error_time;
/* Try to use the specified logging location. */
if (PG(error_log) != NULL) {
#ifdef HAVE_SYSLOG_H
if (!strcmp(PG(error_log), "syslog")) {
php_syslog(LOG_NOTICE, "%.500s", log_message);
return;
}
#endif
fd = VCWD_OPEN_MODE(PG(error_log), O_CREAT | O_APPEND | O_WRONLY, 0644);
if (fd != -1) {
char *tmp;
int len;
time(&error_time);
strftime(error_time_str, sizeof(error_time_str), "%d-%b-%Y %H:%M:%S", php_localtime_r(&error_time, &tmbuf));
len = spprintf(&tmp, 0, "[%s] %s%s", error_time_str, log_message, PHP_EOL);
#ifdef PHP_WIN32
php_flock(fd, 2);
#endif
write(fd, tmp, len);。