static bool reload_services_file(const char *lfile) { bool ret; if (lp_loaded()) { char *fname = lp_configfile(talloc_tos()); if (file_exist(fname) && !strcsequal(fname,get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); } TALLOC_FREE(fname); } /* if this is a child, restore the logfile to the special name - <domain>, idmap, etc. */ if (lfile && *lfile) { lp_set_logfile(lfile); } reopen_logs(); ret = lp_load_global(get_dyn_CONFIGFILE()); reopen_logs(); load_interfaces(); return(ret); }
static BOOL reload_nmbd_services(BOOL test) { BOOL ret; set_remote_machine_name("nmbd", False); if ( lp_loaded() ) { pstring fname; pstrcpy( fname,lp_configfile()); if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) { pstrcpy(dyn_CONFIGFILE,fname); test = False; } } if ( test && !lp_file_list_changed() ) return(True); ret = lp_load( dyn_CONFIGFILE, True , False, False, True); /* perhaps the config filename is now set */ if ( !test ) { DEBUG( 3, ( "services not loaded\n" ) ); reload_nmbd_services( True ); } return(ret); }
static bool reload_nmbd_services(bool test) { bool ret; set_remote_machine_name("nmbd", False); if ( lp_loaded() ) { const char *fname = lp_configfile(); if (file_exist(fname) && !strcsequal(fname,get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); test = False; } } if ( test && !lp_file_list_changed() ) return(True); ret = lp_load_global(get_dyn_CONFIGFILE()); /* perhaps the config filename is now set */ if ( !test ) { DEBUG( 3, ( "services not loaded\n" ) ); reload_nmbd_services( True ); } return(ret); }
BOOL reload_services(BOOL test) { BOOL ret; if (lp_loaded()) { pstring fname; pstrcpy(fname,lp_configfile()); if (file_exist(fname, NULL) && !strcsequal(fname, dyn_CONFIGFILE)) { pstrcpy(dyn_CONFIGFILE, fname); test = False; } } reopen_logs(); if (test && !lp_file_list_changed()) return(True); lp_killunused(conn_snum_used); ret = lp_load(dyn_CONFIGFILE, False, False, True); load_printers(); /* perhaps the config filename is now set */ if (!test) reload_services(True); reopen_logs(); load_interfaces(); { if (smbd_server_fd() != -1) { set_socket_options(smbd_server_fd(),"SO_KEEPALIVE"); set_socket_options(smbd_server_fd(), user_socket_options); } } mangle_reset_cache(); reset_stat_cache(); /* this forces service parameters to be flushed */ set_current_service(NULL,True); return (ret); }
bool reload_services(struct messaging_context *msg_ctx, int smb_sock, bool test) { bool ret; if (lp_loaded()) { char *fname = lp_configfile(); if (file_exist(fname) && !strcsequal(fname, get_dyn_CONFIGFILE())) { set_dyn_CONFIGFILE(fname); test = False; } TALLOC_FREE(fname); } reopen_logs(); if (test && !lp_file_list_changed()) return(True); lp_killunused(conn_snum_used); ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True); /* perhaps the config filename is now set */ if (!test) reload_services(msg_ctx, smb_sock, True); reopen_logs(); load_interfaces(); if (smb_sock != -1) { set_socket_options(smb_sock,"SO_KEEPALIVE"); set_socket_options(smb_sock, lp_socket_options()); } mangle_reset_cache(); reset_stat_cache(); /* this forces service parameters to be flushed */ set_current_service(NULL,0,True); return(ret); }
static BOOL reload_services_file(void) { BOOL ret; if (lp_loaded()) { pstring fname; pstrcpy(fname,lp_configfile()); if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) { pstrcpy(dyn_CONFIGFILE,fname); } } reopen_logs(); ret = lp_load(dyn_CONFIGFILE,False,False,True); reopen_logs(); load_interfaces(); return(ret); }
/**************************************************************************** ** reload the services file **************************************************************************** */ BOOL reload_services_nmbd(BOOL test) { BOOL ret; extern fstring remote_machine; fstrcpy( remote_machine, "nmb" ); if ( lp_loaded() ) { pstring fname; pstrcpy( fname,lp_configfile()); if (file_exist(fname,NULL) && !strcsequal(fname,servicesf_nmbd)) { pstrcpy(servicesf_nmbd,fname); test = False; } } if ( test && !lp_file_list_changed() ) return(True); ret = lp_load( servicesf_nmbd, True , False, False); /* perhaps the config filename is now set */ if ( !test ) { DEBUG( 3, ( "services not loaded\n" ) ); reload_services_nmbd( True ); } /* Do a sanity check for a misconfigured nmbd */ if( lp_wins_support() && *lp_wins_server() ) { DEBUG(0,("ERROR: both 'wins support = true' and 'wins server = <server>' \ cannot be set in the smb.conf file. nmbd aborting.\n")); exit(10); }
static void popt_samba_callback(poptContext con, enum poptCallbackReason reason, const struct poptOption *opt, const char *arg, const void *data) { const char *pname; if (reason == POPT_CALLBACK_REASON_POST) { if (lp_configfile(cmdline_lp_ctx) == NULL) { lp_load_default(cmdline_lp_ctx); } /* Hook any 'every Samba program must do this, after * the smb.conf is setup' functions here */ return; } /* Find out basename of current program */ pname = strrchr_m(poptGetInvocationName(con),'/'); if (!pname) pname = poptGetInvocationName(con); else pname++; if (reason == POPT_CALLBACK_REASON_PRE) { cmdline_lp_ctx = loadparm_init(talloc_autofree_context()); /* Hook for 'almost the first thing to do in a samba program' here */ /* setup for panics */ fault_setup(poptGetInvocationName(con)); /* and logging */ setup_logging(pname, DEBUG_STDOUT); return; } switch(opt->val) { case OPT_LEAK_REPORT: talloc_enable_leak_report(); break; case OPT_LEAK_REPORT_FULL: talloc_enable_leak_report_full(); break; case OPT_OPTION: if (!lp_set_option(cmdline_lp_ctx, arg)) { fprintf(stderr, "Error setting option '%s'\n", arg); exit(1); } break; case 'd': lp_set_cmdline(cmdline_lp_ctx, "log level", arg); break; case OPT_DEBUG_STDERR: setup_logging(pname, DEBUG_STDERR); break; case 's': if (arg) { lp_load(cmdline_lp_ctx, arg); } break; case 'l': if (arg) { char *new_logfile = talloc_asprintf(NULL, "%s/log.%s", arg, pname); lp_set_cmdline(cmdline_lp_ctx, "log file", new_logfile); talloc_free(new_logfile); } break; } }
NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, struct provision_settings *settings, struct provision_result *result) { char *configfile; PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters; DEBUG(0,("Provision for Become-DC test using python\n")); py_load_samba_modules(); Py_Initialize(); py_update_path("bin"); /* FIXME: Can't assume this is always the case */ provision_mod = PyImport_Import(PyString_FromString("samba.provision")); if (provision_mod == NULL) { PyErr_Print(); DEBUG(0, ("Unable to import provision Python module.\n")); return NT_STATUS_UNSUCCESSFUL; } provision_dict = PyModule_GetDict(provision_mod); if (provision_dict == NULL) { DEBUG(0, ("Unable to get dictionary for provision module\n")); return NT_STATUS_UNSUCCESSFUL; } provision_fn = PyDict_GetItemString(provision_dict, "provision_become_dc"); if (provision_fn == NULL) { PyErr_Print(); DEBUG(0, ("Unable to get provision_become_dc function\n")); return NT_STATUS_UNSUCCESSFUL; } DEBUG(0,("New Server in Site[%s]\n", settings->site_name)); DEBUG(0,("DSA Instance [%s]\n" "\tinvocationId[%s]\n", settings->ntds_dn_str, settings->invocation_id == NULL?"None":GUID_string(mem_ctx, settings->invocation_id))); DEBUG(0,("Pathes under targetdir[%s]\n", settings->targetdir)); parameters = PyDict_New(); configfile = lp_configfile(lp_ctx); if (configfile != NULL) { PyDict_SetItemString(parameters, "smbconf", PyString_FromString(configfile)); } PyDict_SetItemString(parameters, "rootdn", PyString_FromString(settings->root_dn_str)); if (settings->targetdir != NULL) PyDict_SetItemString(parameters, "targetdir", PyString_FromString(settings->targetdir)); PyDict_SetItemString(parameters, "setup_dir", PyString_FromString("setup")); PyDict_SetItemString(parameters, "hostname", PyString_FromString(settings->netbios_name)); PyDict_SetItemString(parameters, "domain", PyString_FromString(settings->domain)); PyDict_SetItemString(parameters, "realm", PyString_FromString(settings->realm)); if (settings->root_dn_str) PyDict_SetItemString(parameters, "rootdn", PyString_FromString(settings->root_dn_str)); if (settings->domain_dn_str) PyDict_SetItemString(parameters, "domaindn", PyString_FromString(settings->domain_dn_str)); if (settings->schema_dn_str) PyDict_SetItemString(parameters, "schemadn", PyString_FromString(settings->schema_dn_str)); if (settings->config_dn_str) PyDict_SetItemString(parameters, "configdn", PyString_FromString(settings->config_dn_str)); if (settings->server_dn_str) PyDict_SetItemString(parameters, "serverdn", PyString_FromString(settings->server_dn_str)); if (settings->site_name) PyDict_SetItemString(parameters, "sitename", PyString_FromString(settings->site_name)); PyDict_SetItemString(parameters, "machinepass", PyString_FromString(settings->machine_password)); py_result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters); Py_DECREF(parameters); if (py_result == NULL) { PyErr_Print(); PyErr_Clear(); return NT_STATUS_UNSUCCESSFUL; } result->domaindn = talloc_strdup(mem_ctx, PyString_AsString(PyObject_GetAttrString(py_result, "domaindn"))); /* FIXME paths */ result->lp_ctx = lp_from_py_object(PyObject_GetAttrString(py_result, "lp")); result->samdb = PyLdb_AsLdbContext(PyObject_GetAttrString(py_result, "samdb")); return NT_STATUS_OK; }
int main(int argc, const char *argv[]) { int ret = 0; poptContext pc; /* static int show_all_parameters = 0; static char *new_local_machine = NULL; */ static const char *section_name = NULL; static char *parameter_name = NULL; static const char *cname; static const char *caddr; static int silent_mode = false; static int show_defaults = false; /* This must be an 'int', * as we take it as we pass * it's address as an int * pointer */ struct loadparm_context *lp_ctx; struct poptOption long_options[] = { POPT_AUTOHELP {"suppress-prompt", 0, POPT_ARG_NONE, &silent_mode, true, "Suppress prompt for enter"}, {"verbose", 'v', POPT_ARG_NONE, &show_defaults, true, "Show default options too"}, /* We need support for smb.conf macros before this will work again {"server", 'L',POPT_ARG_STRING, &new_local_machine, 0, "Set %%L macro to servername\n"}, */ /* These are harder to do with the new code structure {"show-all-parameters", '\0', POPT_ARG_NONE, &show_all_parameters, 1, "Show the parameters, type, possible values" }, */ {"section-name", '\0', POPT_ARG_STRING, §ion_name, 0, "Limit testparm to a named section" }, {"parameter-name", '\0', POPT_ARG_STRING, ¶meter_name, 0, "Limit testparm to a named parameter" }, {"client-name", '\0', POPT_ARG_STRING, &cname, 0, "Client DNS name for 'hosts allow' checking (should match reverse lookup)"}, {"client-ip", '\0', POPT_ARG_STRING, &caddr, 0, "Client IP address for 'hosts allow' checking"}, POPT_COMMON_SAMBA POPT_COMMON_VERSION { NULL } }; setup_logging(NULL, DEBUG_STDERR); pc = poptGetContext(NULL, argc, argv, long_options, POPT_CONTEXT_KEEP_FIRST); poptSetOtherOptionHelp(pc, "[OPTION...] [host-name] [host-ip]"); while(poptGetNextOpt(pc) != -1); /* if (show_all_parameters) { show_parameter_list(); exit(0); } */ if ( cname && ! caddr ) { printf ( "ERROR: For 'hosts allow' check you must specify both a DNS name and an IP address.\n" ); return(1); } /* We need support for smb.conf macros before this will work again if (new_local_machine) { set_local_machine_name(new_local_machine, True); } */ lp_ctx = cmdline_lp_ctx; /* We need this to force the output */ lp_set_cmdline(lp_ctx, "log level", "2"); fprintf(stderr, "Loaded smb config files from %s\n", lp_configfile(lp_ctx)); if (!lp_load(lp_ctx, lp_configfile(lp_ctx))) { fprintf(stderr,"Error loading services.\n"); return(1); } fprintf(stderr,"Loaded services file OK.\n"); ret = do_global_checks(lp_ctx); ret |= do_share_checks(lp_ctx, cname, caddr, silent_mode, show_defaults, section_name, parameter_name); return(ret); }