Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

Location:
vendor/current/source4/param
Files:
1 added
2 deleted
19 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/source4/param/generic.c

    r414 r740  
    1919#include "includes.h"
    2020#include "../lib/util/dlinklist.h"
     21#include "../lib/util/parmlist.h"
    2122#include "param/param.h"
    2223#include "param/loadparm.h"
     
    233234                for (param = section->parameters->entries; param; param = param->next) {
    234235                        if (isglobal)
    235                                 lp_do_global_parameter(lp_ctx, param->key,
     236                                lpcfg_do_global_parameter(lp_ctx, param->key,
    236237                                                       param->value);
    237238                        else {
    238239                                struct loadparm_service *service =
    239                                                         lp_service(lp_ctx, section->name);
     240                                                        lpcfg_service(lp_ctx, section->name);
    240241                                if (service == NULL)
    241                                         service = lp_add_service(lp_ctx, lp_default_service(lp_ctx), section->name);
    242                                 lp_do_service_parameter(lp_ctx, service, param->key, param->value);
     242                                        service = lpcfg_add_service(lp_ctx, lpcfg_default_service(lp_ctx), section->name);
     243                                lpcfg_do_service_parameter(lp_ctx, service, param->key, param->value);
    243244                        }
    244245                }
  • vendor/current/source4/param/loadparm.c

    r414 r740  
    6262#include "libcli/raw/signing.h"
    6363#include "../lib/util/dlinklist.h"
     64#include "../lib/util/parmlist.h"
    6465#include "param/param.h"
    6566#include "param/loadparm.h"
     
    8081{
    8182        enum server_role server_role;
     83        enum sid_generator sid_generator;
    8284
    8385        const char **smb_ports;
     
    8991        char *szModulesDir;
    9092        char *szPidDir;
    91         char *szSetupDir;
    9293        char *szServerString;
    9394        char *szAutoServices;
     
    104105        char *szSocketOptions;
    105106        char *szRealm;
     107        char *szRealm_upper;
     108        char *szRealm_lower;
    106109        const char **szWINSservers;
    107110        const char **szInterfaces;
     
    124127        int bWinbindSealedPipes;
    125128        int bIdmapTrustedOnly;
    126         char *swat_directory;
    127129        int tls_enabled;
    128130        char *tls_keyfile;
     
    132134        char *tls_dhpfile;
    133135        char *logfile;
     136        char *loglevel;
    134137        char *panic_action;
    135138        int max_mux;
     
    183186        int bRpcBigEndian;
    184187        char *szNTPSignDSocketDirectory;
     188        const char **szRNDCCommand;
     189        const char **szDNSUpdateCommand;
     190        const char **szSPNUpdateCommand;
     191        const char **szNSUpdateCommand;
    185192        struct parmlist_entry *param_opt;
    186193};
     
    235242static bool handle_include(struct loadparm_context *lp_ctx,
    236243                           const char *pszParmValue, char **ptr);
     244static bool handle_realm(struct loadparm_context *lp_ctx,
     245                         const char *pszParmValue, char **ptr);
    237246static bool handle_copy(struct loadparm_context *lp_ctx,
    238247                        const char *pszParmValue, char **ptr);
     
    325334};
    326335
     336static const struct enum_list enum_sid_generator[] = {
     337        {SID_GENERATOR_INTERNAL, "internal"},
     338        {SID_GENERATOR_BACKEND, "backend"},
     339        {-1, NULL}
     340};
    327341
    328342#define GLOBAL_VAR(name) offsetof(struct loadparm_global, name)
     
    331345static struct parm_struct parm_table[] = {
    332346        {"server role", P_ENUM, P_GLOBAL, GLOBAL_VAR(server_role), NULL, enum_server_role},
     347        {"sid generator", P_ENUM, P_GLOBAL, GLOBAL_VAR(sid_generator), NULL, enum_sid_generator},
    333348
    334349        {"dos charset", P_STRING, P_GLOBAL, GLOBAL_VAR(dos_charset), NULL, NULL},
     
    340355        {"directory", P_STRING, P_LOCAL, LOCAL_VAR(szPath), NULL, NULL},
    341356        {"workgroup", P_USTRING, P_GLOBAL, GLOBAL_VAR(szWorkgroup), NULL, NULL},
    342         {"realm", P_STRING, P_GLOBAL, GLOBAL_VAR(szRealm), NULL, NULL},
     357        {"realm", P_STRING, P_GLOBAL, GLOBAL_VAR(szRealm), handle_realm, NULL},
    343358        {"netbios name", P_USTRING, P_GLOBAL, GLOBAL_VAR(szNetbiosName), NULL, NULL},
    344359        {"netbios aliases", P_LIST, P_GLOBAL, GLOBAL_VAR(szNetbiosAliases), NULL, NULL},
     
    383398        {"hosts deny", P_LIST, P_LOCAL, LOCAL_VAR(szHostsdeny), NULL, NULL},
    384399
    385         {"log level", P_INTEGER, P_GLOBAL, GLOBAL_VAR(debuglevel), handle_debuglevel, NULL},
    386         {"debuglevel", P_INTEGER, P_GLOBAL, GLOBAL_VAR(debuglevel), handle_debuglevel, NULL},
     400        {"log level", P_STRING, P_GLOBAL, GLOBAL_VAR(loglevel), handle_debuglevel, NULL},
     401        {"debuglevel", P_STRING, P_GLOBAL, GLOBAL_VAR(loglevel), handle_debuglevel, NULL},
    387402        {"log file", P_STRING, P_GLOBAL, GLOBAL_VAR(logfile), handle_logfile, NULL},
    388403
     
    400415        {"tls crlfile", P_STRING, P_GLOBAL, GLOBAL_VAR(tls_crlfile), NULL, NULL},
    401416        {"tls dh params file", P_STRING, P_GLOBAL, GLOBAL_VAR(tls_dhpfile), NULL, NULL},
    402         {"swat directory", P_STRING, P_GLOBAL, GLOBAL_VAR(swat_directory), NULL, NULL},
    403417        {"large readwrite", P_BOOL, P_GLOBAL, GLOBAL_VAR(bLargeReadwrite), NULL, NULL},
    404418        {"server max protocol", P_ENUM, P_GLOBAL, GLOBAL_VAR(srv_maxprotocol), NULL, enum_protocol},
     
    469483        {"modules dir", P_STRING, P_GLOBAL, GLOBAL_VAR(szModulesDir), NULL, NULL},
    470484        {"pid directory", P_STRING, P_GLOBAL, GLOBAL_VAR(szPidDir), NULL, NULL},
    471         {"setup directory", P_STRING, P_GLOBAL, GLOBAL_VAR(szSetupDir), NULL, NULL},
    472485
    473486        {"socket address", P_STRING, P_GLOBAL, GLOBAL_VAR(szSocketAddress), NULL, NULL},
     
    492505
    493506        {"ntp signd socket directory", P_STRING, P_GLOBAL, GLOBAL_VAR(szNTPSignDSocketDirectory), NULL, NULL },
     507        {"rndc command", P_CMDLIST, P_GLOBAL, GLOBAL_VAR(szRNDCCommand), NULL, NULL },
     508        {"dns update command", P_CMDLIST, P_GLOBAL, GLOBAL_VAR(szDNSUpdateCommand), NULL, NULL },
     509        {"spn update command", P_CMDLIST, P_GLOBAL, GLOBAL_VAR(szSPNUpdateCommand), NULL, NULL },
     510        {"nsupdate command", P_CMDLIST, P_GLOBAL, GLOBAL_VAR(szNSUpdateCommand), NULL, NULL },
    494511
    495512        {NULL, P_BOOL, P_NONE, 0, NULL, NULL}
     
    503520        struct loadparm_service **services;
    504521        struct loadparm_service *sDefault;
     522        struct smb_iconv_convenience *iconv_convenience;
    505523        int iNumServices;
    506524        struct loadparm_service *currentService;
     
    513531        } *file_lists;
    514532        unsigned int flags[NUMPARAMETERS];
    515         struct smb_iconv_convenience *iconv_convenience;
     533        bool loaded;
     534        bool refuse_free;
    516535};
    517536
    518537
    519 struct loadparm_service *lp_default_service(struct loadparm_context *lp_ctx)
     538struct loadparm_service *lpcfg_default_service(struct loadparm_context *lp_ctx)
    520539{
    521540        return lp_ctx->sDefault;
     
    525544  return the parameter table
    526545*/
    527 struct parm_struct *lp_parm_table(void)
     546struct parm_struct *lpcfg_parm_table(void)
    528547{
    529548        return parm_table;
     
    584603*/
    585604
     605/*
     606 * the creation of separate lpcfg_*() and lp_*() functions is to allow
     607 * for code compatibility between existing Samba4 and Samba3 code.
     608 */
     609
     610/* this global context supports the lp_*() function varients */
     611static struct loadparm_context *global_loadparm_context;
     612
     613#define lpcfg_default_service global_loadparm_context->sDefault
     614#define lpcfg_global_service(i) global_loadparm_context->services[i]
     615
    586616#define FN_GLOBAL_STRING(fn_name,var_name) \
    587  const char *fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return NULL; return lp_ctx->globals->var_name ? lp_string(lp_ctx->globals->var_name) : "";}
     617 _PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return NULL; return lp_ctx->globals->var_name ? lp_string(lp_ctx->globals->var_name) : "";}
     618
    588619#define FN_GLOBAL_CONST_STRING(fn_name,var_name) \
    589  const char *fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return NULL; return lp_ctx->globals->var_name ? lp_ctx->globals->var_name : "";}
     620 _PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return NULL; return lp_ctx->globals->var_name ? lp_ctx->globals->var_name : "";}
     621
    590622#define FN_GLOBAL_LIST(fn_name,var_name) \
    591  const char **fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return NULL; return lp_ctx->globals->var_name;}
     623 _PUBLIC_ const char **lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return NULL; return lp_ctx->globals->var_name;}
     624
    592625#define FN_GLOBAL_BOOL(fn_name,var_name) \
    593  bool fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return false; return lp_ctx->globals->var_name;}
    594 #if 0 /* unused */
    595 #define FN_GLOBAL_CHAR(fn_name,ptr) \
    596  char fn_name(void) {return(*(char *)(ptr));}
    597 #endif
     626 _PUBLIC_ bool lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {if (lp_ctx == NULL) return false; return lp_ctx->globals->var_name;}
     627
    598628#define FN_GLOBAL_INTEGER(fn_name,var_name) \
    599  int fn_name(struct loadparm_context *lp_ctx) {return lp_ctx->globals->var_name;}
     629 _PUBLIC_ int lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {return lp_ctx->globals->var_name;}
    600630
    601631#define FN_LOCAL_STRING(fn_name,val) \
    602  const char *fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return(lp_string((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault->val)));}
     632 _PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return(lp_string((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault->val)));}
     633
    603634#define FN_LOCAL_LIST(fn_name,val) \
    604  const char **fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return(const char **)(service != NULL && service->val != NULL? service->val : sDefault->val);}
     635 _PUBLIC_ const char **lpcfg_ ## fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return(const char **)(service != NULL && service->val != NULL? service->val : sDefault->val);}
     636
    605637#define FN_LOCAL_BOOL(fn_name,val) \
    606  bool fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return((service != NULL)? service->val : sDefault->val);}
     638 _PUBLIC_ bool lpcfg_ ## fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return((service != NULL)? service->val : sDefault->val);}
     639
    607640#define FN_LOCAL_INTEGER(fn_name,val) \
    608  int fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return((service != NULL)? service->val : sDefault->val);}
    609 
    610 _PUBLIC_ FN_GLOBAL_INTEGER(lp_server_role, server_role)
    611 _PUBLIC_ FN_GLOBAL_LIST(lp_smb_ports, smb_ports)
    612 _PUBLIC_ FN_GLOBAL_INTEGER(lp_nbt_port, nbt_port)
    613 _PUBLIC_ FN_GLOBAL_INTEGER(lp_dgram_port, dgram_port)
    614 _PUBLIC_ FN_GLOBAL_INTEGER(lp_cldap_port, cldap_port)
    615 _PUBLIC_ FN_GLOBAL_INTEGER(lp_krb5_port, krb5_port)
    616 _PUBLIC_ FN_GLOBAL_INTEGER(lp_kpasswd_port, kpasswd_port)
    617 _PUBLIC_ FN_GLOBAL_INTEGER(lp_web_port, web_port)
    618 _PUBLIC_ FN_GLOBAL_STRING(lp_swat_directory, swat_directory)
    619 _PUBLIC_ FN_GLOBAL_BOOL(lp_tls_enabled, tls_enabled)
    620 _PUBLIC_ FN_GLOBAL_STRING(lp_share_backend, szShareBackend)
    621 _PUBLIC_ FN_GLOBAL_STRING(lp_sam_url, szSAM_URL)
    622 _PUBLIC_ FN_GLOBAL_STRING(lp_idmap_url, szIDMAP_URL)
    623 _PUBLIC_ FN_GLOBAL_STRING(lp_secrets_url, szSECRETS_URL)
    624 _PUBLIC_ FN_GLOBAL_STRING(lp_spoolss_url, szSPOOLSS_URL)
    625 _PUBLIC_ FN_GLOBAL_STRING(lp_wins_config_url, szWINS_CONFIG_URL)
    626 _PUBLIC_ FN_GLOBAL_STRING(lp_wins_url, szWINS_URL)
    627 _PUBLIC_ FN_GLOBAL_CONST_STRING(lp_winbind_separator, szWinbindSeparator)
    628 _PUBLIC_ FN_GLOBAL_CONST_STRING(lp_winbindd_socket_directory, szWinbinddSocketDirectory)
    629 _PUBLIC_ FN_GLOBAL_CONST_STRING(lp_winbindd_privileged_socket_directory, szWinbinddPrivilegedSocketDirectory)
    630 _PUBLIC_ FN_GLOBAL_CONST_STRING(lp_template_shell, szTemplateShell)
    631 _PUBLIC_ FN_GLOBAL_CONST_STRING(lp_template_homedir, szTemplateHomedir)
    632 _PUBLIC_ FN_GLOBAL_BOOL(lp_winbind_sealed_pipes, bWinbindSealedPipes)
    633 _PUBLIC_ FN_GLOBAL_BOOL(lp_idmap_trusted_only, bIdmapTrustedOnly)
    634 _PUBLIC_ FN_GLOBAL_STRING(lp_private_dir, szPrivateDir)
    635 _PUBLIC_ FN_GLOBAL_STRING(lp_serverstring, szServerString)
    636 _PUBLIC_ FN_GLOBAL_STRING(lp_lockdir, szLockDir)
    637 _PUBLIC_ FN_GLOBAL_STRING(lp_modulesdir, szModulesDir)
    638 _PUBLIC_ FN_GLOBAL_STRING(lp_setupdir, szSetupDir)
    639 _PUBLIC_ FN_GLOBAL_STRING(lp_ncalrpc_dir, ncalrpc_dir)
    640 _PUBLIC_ FN_GLOBAL_STRING(lp_dos_charset, dos_charset)
    641 _PUBLIC_ FN_GLOBAL_STRING(lp_unix_charset, unix_charset)
    642 _PUBLIC_ FN_GLOBAL_STRING(lp_display_charset, display_charset)
    643 _PUBLIC_ FN_GLOBAL_STRING(lp_piddir, szPidDir)
    644 _PUBLIC_ FN_GLOBAL_LIST(lp_dcerpc_endpoint_servers, dcerpc_ep_servers)
    645 _PUBLIC_ FN_GLOBAL_LIST(lp_server_services, server_services)
    646 _PUBLIC_ FN_GLOBAL_STRING(lp_ntptr_providor, ntptr_providor)
    647 _PUBLIC_ FN_GLOBAL_STRING(lp_auto_services, szAutoServices)
    648 _PUBLIC_ FN_GLOBAL_STRING(lp_passwd_chat, szPasswdChat)
    649 _PUBLIC_ FN_GLOBAL_LIST(lp_passwordserver, szPasswordServers)
    650 _PUBLIC_ FN_GLOBAL_LIST(lp_name_resolve_order, szNameResolveOrder)
    651 _PUBLIC_ FN_GLOBAL_STRING(lp_realm, szRealm)
    652 _PUBLIC_ FN_GLOBAL_STRING(lp_socket_options, socket_options)
    653 _PUBLIC_ FN_GLOBAL_STRING(lp_workgroup, szWorkgroup)
    654 _PUBLIC_ FN_GLOBAL_STRING(lp_netbios_name, szNetbiosName)
    655 _PUBLIC_ FN_GLOBAL_STRING(lp_netbios_scope, szNetbiosScope)
    656 _PUBLIC_ FN_GLOBAL_LIST(lp_wins_server_list, szWINSservers)
    657 _PUBLIC_ FN_GLOBAL_LIST(lp_interfaces, szInterfaces)
    658 _PUBLIC_ FN_GLOBAL_STRING(lp_socket_address, szSocketAddress)
    659 _PUBLIC_ FN_GLOBAL_LIST(lp_netbios_aliases, szNetbiosAliases)
    660 
    661 _PUBLIC_ FN_GLOBAL_BOOL(lp_disable_netbios, bDisableNetbios)
    662 _PUBLIC_ FN_GLOBAL_BOOL(lp_wins_support, bWINSsupport)
    663 _PUBLIC_ FN_GLOBAL_BOOL(lp_wins_dns_proxy, bWINSdnsProxy)
    664 _PUBLIC_ FN_GLOBAL_STRING(lp_wins_hook, szWINSHook)
    665 _PUBLIC_ FN_GLOBAL_BOOL(lp_local_master, bLocalMaster)
    666 _PUBLIC_ FN_GLOBAL_BOOL(lp_readraw, bReadRaw)
    667 _PUBLIC_ FN_GLOBAL_BOOL(lp_large_readwrite, bLargeReadwrite)
    668 _PUBLIC_ FN_GLOBAL_BOOL(lp_writeraw, bWriteRaw)
    669 _PUBLIC_ FN_GLOBAL_BOOL(lp_null_passwords, bNullPasswords)
    670 _PUBLIC_ FN_GLOBAL_BOOL(lp_obey_pam_restrictions, bObeyPamRestrictions)
    671 _PUBLIC_ FN_GLOBAL_BOOL(lp_encrypted_passwords, bEncryptPasswords)
    672 _PUBLIC_ FN_GLOBAL_BOOL(lp_time_server, bTimeServer)
    673 _PUBLIC_ FN_GLOBAL_BOOL(lp_bind_interfaces_only, bBindInterfacesOnly)
    674 _PUBLIC_ FN_GLOBAL_BOOL(lp_unicode, bUnicode)
    675 _PUBLIC_ FN_GLOBAL_BOOL(lp_nt_status_support, bNTStatusSupport)
    676 _PUBLIC_ FN_GLOBAL_BOOL(lp_lanman_auth, bLanmanAuth)
    677 _PUBLIC_ FN_GLOBAL_BOOL(lp_ntlm_auth, bNTLMAuth)
    678 _PUBLIC_ FN_GLOBAL_BOOL(lp_client_plaintext_auth, bClientPlaintextAuth)
    679 _PUBLIC_ FN_GLOBAL_BOOL(lp_client_lanman_auth, bClientLanManAuth)
    680 _PUBLIC_ FN_GLOBAL_BOOL(lp_client_ntlmv2_auth, bClientNTLMv2Auth)
    681 _PUBLIC_ FN_GLOBAL_BOOL(lp_client_use_spnego_principal, client_use_spnego_principal)
    682 _PUBLIC_ FN_GLOBAL_BOOL(lp_host_msdfs, bHostMSDfs)
    683 _PUBLIC_ FN_GLOBAL_BOOL(lp_unix_extensions, bUnixExtensions)
    684 _PUBLIC_ FN_GLOBAL_BOOL(lp_use_spnego, bUseSpnego)
    685 _PUBLIC_ FN_GLOBAL_BOOL(lp_rpc_big_endian, bRpcBigEndian)
    686 _PUBLIC_ FN_GLOBAL_INTEGER(lp_max_wins_ttl, max_wins_ttl)
    687 _PUBLIC_ FN_GLOBAL_INTEGER(lp_min_wins_ttl, min_wins_ttl)
    688 _PUBLIC_ FN_GLOBAL_INTEGER(lp_maxmux, max_mux)
    689 _PUBLIC_ FN_GLOBAL_INTEGER(lp_max_xmit, max_xmit)
    690 _PUBLIC_ FN_GLOBAL_INTEGER(lp_passwordlevel, pwordlevel)
    691 _PUBLIC_ FN_GLOBAL_INTEGER(lp_srv_maxprotocol, srv_maxprotocol)
    692 _PUBLIC_ FN_GLOBAL_INTEGER(lp_srv_minprotocol, srv_minprotocol)
    693 _PUBLIC_ FN_GLOBAL_INTEGER(lp_cli_maxprotocol, cli_maxprotocol)
    694 _PUBLIC_ FN_GLOBAL_INTEGER(lp_cli_minprotocol, cli_minprotocol)
    695 _PUBLIC_ FN_GLOBAL_INTEGER(lp_security, security)
    696 _PUBLIC_ FN_GLOBAL_BOOL(lp_paranoid_server_security, paranoid_server_security)
    697 _PUBLIC_ FN_GLOBAL_INTEGER(lp_announce_as, announce_as)
    698 const char *lp_servicename(const struct loadparm_service *service)
    699 {
    700         return lp_string((const char *)service->szService);
    701 }
    702 
    703 _PUBLIC_ FN_LOCAL_STRING(lp_pathname, szPath)
    704 static FN_LOCAL_STRING(_lp_printername, szPrintername)
    705 _PUBLIC_ FN_LOCAL_LIST(lp_hostsallow, szHostsallow)
    706 _PUBLIC_ FN_LOCAL_LIST(lp_hostsdeny, szHostsdeny)
    707 _PUBLIC_ FN_LOCAL_STRING(lp_comment, comment)
    708 _PUBLIC_ FN_LOCAL_STRING(lp_fstype, fstype)
    709 static FN_LOCAL_STRING(lp_volume, volume)
    710 _PUBLIC_ FN_LOCAL_LIST(lp_ntvfs_handler, ntvfs_handler)
    711 _PUBLIC_ FN_LOCAL_BOOL(lp_msdfs_root, bMSDfsRoot)
    712 _PUBLIC_ FN_LOCAL_BOOL(lp_browseable, bBrowseable)
    713 _PUBLIC_ FN_LOCAL_BOOL(lp_readonly, bRead_only)
    714 _PUBLIC_ FN_LOCAL_BOOL(lp_print_ok, bPrint_ok)
    715 _PUBLIC_ FN_LOCAL_BOOL(lp_map_hidden, bMap_hidden)
    716 _PUBLIC_ FN_LOCAL_BOOL(lp_map_archive, bMap_archive)
    717 _PUBLIC_ FN_LOCAL_BOOL(lp_strict_locking, bStrictLocking)
    718 _PUBLIC_ FN_LOCAL_BOOL(lp_oplocks, bOplocks)
    719 _PUBLIC_ FN_LOCAL_BOOL(lp_strict_sync, bStrictSync)
    720 _PUBLIC_ FN_LOCAL_BOOL(lp_ci_filesystem, bCIFileSystem)
    721 _PUBLIC_ FN_LOCAL_BOOL(lp_map_system, bMap_system)
    722 _PUBLIC_ FN_LOCAL_INTEGER(lp_max_connections, iMaxConnections)
    723 _PUBLIC_ FN_LOCAL_INTEGER(lp_csc_policy, iCSCPolicy)
    724 _PUBLIC_ FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask)
    725 _PUBLIC_ FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode)
    726 _PUBLIC_ FN_LOCAL_INTEGER(lp_dir_mask, iDir_mask)
    727 _PUBLIC_ FN_LOCAL_INTEGER(lp_force_dir_mode, iDir_force_mode)
    728 _PUBLIC_ FN_GLOBAL_INTEGER(lp_server_signing, server_signing)
    729 _PUBLIC_ FN_GLOBAL_INTEGER(lp_client_signing, client_signing)
    730 
    731 _PUBLIC_ FN_GLOBAL_CONST_STRING(lp_ntp_signd_socket_directory, szNTPSignDSocketDirectory)
     641 _PUBLIC_ int lpcfg_ ## fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return((service != NULL)? service->val : sDefault->val);}
     642
     643FN_GLOBAL_INTEGER(server_role, server_role)
     644FN_GLOBAL_INTEGER(sid_generator, sid_generator)
     645FN_GLOBAL_LIST(smb_ports, smb_ports)
     646FN_GLOBAL_INTEGER(nbt_port, nbt_port)
     647FN_GLOBAL_INTEGER(dgram_port, dgram_port)
     648FN_GLOBAL_INTEGER(cldap_port, cldap_port)
     649FN_GLOBAL_INTEGER(krb5_port, krb5_port)
     650FN_GLOBAL_INTEGER(kpasswd_port, kpasswd_port)
     651FN_GLOBAL_INTEGER(web_port, web_port)
     652FN_GLOBAL_BOOL(tls_enabled, tls_enabled)
     653FN_GLOBAL_STRING(share_backend, szShareBackend)
     654FN_GLOBAL_STRING(sam_url, szSAM_URL)
     655FN_GLOBAL_STRING(idmap_url, szIDMAP_URL)
     656FN_GLOBAL_STRING(secrets_url, szSECRETS_URL)
     657FN_GLOBAL_STRING(spoolss_url, szSPOOLSS_URL)
     658FN_GLOBAL_STRING(wins_config_url, szWINS_CONFIG_URL)
     659FN_GLOBAL_STRING(wins_url, szWINS_URL)
     660FN_GLOBAL_CONST_STRING(winbind_separator, szWinbindSeparator)
     661FN_GLOBAL_CONST_STRING(winbindd_socket_directory, szWinbinddSocketDirectory)
     662FN_GLOBAL_CONST_STRING(winbindd_privileged_socket_directory, szWinbinddPrivilegedSocketDirectory)
     663FN_GLOBAL_CONST_STRING(template_shell, szTemplateShell)
     664FN_GLOBAL_CONST_STRING(template_homedir, szTemplateHomedir)
     665FN_GLOBAL_BOOL(winbind_sealed_pipes, bWinbindSealedPipes)
     666FN_GLOBAL_BOOL(idmap_trusted_only, bIdmapTrustedOnly)
     667FN_GLOBAL_STRING(private_dir, szPrivateDir)
     668FN_GLOBAL_STRING(serverstring, szServerString)
     669FN_GLOBAL_STRING(lockdir, szLockDir)
     670FN_GLOBAL_STRING(modulesdir, szModulesDir)
     671FN_GLOBAL_STRING(ncalrpc_dir, ncalrpc_dir)
     672FN_GLOBAL_STRING(dos_charset, dos_charset)
     673FN_GLOBAL_STRING(unix_charset, unix_charset)
     674FN_GLOBAL_STRING(display_charset, display_charset)
     675FN_GLOBAL_STRING(piddir, szPidDir)
     676FN_GLOBAL_LIST(rndc_command, szRNDCCommand)
     677FN_GLOBAL_LIST(dns_update_command, szDNSUpdateCommand)
     678FN_GLOBAL_LIST(spn_update_command, szSPNUpdateCommand)
     679FN_GLOBAL_LIST(nsupdate_command, szNSUpdateCommand)
     680FN_GLOBAL_LIST(dcerpc_endpoint_servers, dcerpc_ep_servers)
     681FN_GLOBAL_LIST(server_services, server_services)
     682FN_GLOBAL_STRING(ntptr_providor, ntptr_providor)
     683FN_GLOBAL_STRING(auto_services, szAutoServices)
     684FN_GLOBAL_STRING(passwd_chat, szPasswdChat)
     685FN_GLOBAL_LIST(passwordserver, szPasswordServers)
     686FN_GLOBAL_LIST(name_resolve_order, szNameResolveOrder)
     687FN_GLOBAL_STRING(realm, szRealm_upper)
     688FN_GLOBAL_STRING(dnsdomain, szRealm_lower)
     689FN_GLOBAL_STRING(socket_options, socket_options)
     690FN_GLOBAL_STRING(workgroup, szWorkgroup)
     691FN_GLOBAL_STRING(netbios_name, szNetbiosName)
     692FN_GLOBAL_STRING(netbios_scope, szNetbiosScope)
     693FN_GLOBAL_LIST(wins_server_list, szWINSservers)
     694FN_GLOBAL_LIST(interfaces, szInterfaces)
     695FN_GLOBAL_STRING(socket_address, szSocketAddress)
     696FN_GLOBAL_LIST(netbios_aliases, szNetbiosAliases)
     697FN_GLOBAL_BOOL(disable_netbios, bDisableNetbios)
     698FN_GLOBAL_BOOL(wins_support, bWINSsupport)
     699FN_GLOBAL_BOOL(wins_dns_proxy, bWINSdnsProxy)
     700FN_GLOBAL_STRING(wins_hook, szWINSHook)
     701FN_GLOBAL_BOOL(local_master, bLocalMaster)
     702FN_GLOBAL_BOOL(readraw, bReadRaw)
     703FN_GLOBAL_BOOL(large_readwrite, bLargeReadwrite)
     704FN_GLOBAL_BOOL(writeraw, bWriteRaw)
     705FN_GLOBAL_BOOL(null_passwords, bNullPasswords)
     706FN_GLOBAL_BOOL(obey_pam_restrictions, bObeyPamRestrictions)
     707FN_GLOBAL_BOOL(encrypted_passwords, bEncryptPasswords)
     708FN_GLOBAL_BOOL(time_server, bTimeServer)
     709FN_GLOBAL_BOOL(bind_interfaces_only, bBindInterfacesOnly)
     710FN_GLOBAL_BOOL(unicode, bUnicode)
     711FN_GLOBAL_BOOL(nt_status_support, bNTStatusSupport)
     712FN_GLOBAL_BOOL(lanman_auth, bLanmanAuth)
     713FN_GLOBAL_BOOL(ntlm_auth, bNTLMAuth)
     714FN_GLOBAL_BOOL(client_plaintext_auth, bClientPlaintextAuth)
     715FN_GLOBAL_BOOL(client_lanman_auth, bClientLanManAuth)
     716FN_GLOBAL_BOOL(client_ntlmv2_auth, bClientNTLMv2Auth)
     717FN_GLOBAL_BOOL(client_use_spnego_principal, client_use_spnego_principal)
     718FN_GLOBAL_BOOL(host_msdfs, bHostMSDfs)
     719FN_GLOBAL_BOOL(unix_extensions, bUnixExtensions)
     720FN_GLOBAL_BOOL(use_spnego, bUseSpnego)
     721FN_GLOBAL_BOOL(rpc_big_endian, bRpcBigEndian)
     722FN_GLOBAL_INTEGER(max_wins_ttl, max_wins_ttl)
     723FN_GLOBAL_INTEGER(min_wins_ttl, min_wins_ttl)
     724FN_GLOBAL_INTEGER(maxmux, max_mux)
     725FN_GLOBAL_INTEGER(max_xmit, max_xmit)
     726FN_GLOBAL_INTEGER(passwordlevel, pwordlevel)
     727FN_GLOBAL_INTEGER(srv_maxprotocol, srv_maxprotocol)
     728FN_GLOBAL_INTEGER(srv_minprotocol, srv_minprotocol)
     729FN_GLOBAL_INTEGER(cli_maxprotocol, cli_maxprotocol)
     730FN_GLOBAL_INTEGER(cli_minprotocol, cli_minprotocol)
     731FN_GLOBAL_INTEGER(security, security)
     732FN_GLOBAL_BOOL(paranoid_server_security, paranoid_server_security)
     733FN_GLOBAL_INTEGER(announce_as, announce_as)
     734
     735FN_LOCAL_STRING(pathname, szPath)
     736FN_LOCAL_LIST(hostsallow, szHostsallow)
     737FN_LOCAL_LIST(hostsdeny, szHostsdeny)
     738FN_LOCAL_STRING(comment, comment)
     739FN_LOCAL_STRING(fstype, fstype)
     740FN_LOCAL_LIST(ntvfs_handler, ntvfs_handler)
     741FN_LOCAL_BOOL(msdfs_root, bMSDfsRoot)
     742FN_LOCAL_BOOL(browseable, bBrowseable)
     743FN_LOCAL_BOOL(readonly, bRead_only)
     744FN_LOCAL_BOOL(print_ok, bPrint_ok)
     745FN_LOCAL_BOOL(map_hidden, bMap_hidden)
     746FN_LOCAL_BOOL(map_archive, bMap_archive)
     747FN_LOCAL_BOOL(strict_locking, bStrictLocking)
     748FN_LOCAL_BOOL(oplocks, bOplocks)
     749FN_LOCAL_BOOL(strict_sync, bStrictSync)
     750FN_LOCAL_BOOL(ci_filesystem, bCIFileSystem)
     751FN_LOCAL_BOOL(map_system, bMap_system)
     752FN_LOCAL_INTEGER(max_connections, iMaxConnections)
     753FN_LOCAL_INTEGER(csc_policy, iCSCPolicy)
     754FN_LOCAL_INTEGER(create_mask, iCreate_mask)
     755FN_LOCAL_INTEGER(force_create_mode, iCreate_force_mode)
     756FN_LOCAL_INTEGER(dir_mask, iDir_mask)
     757FN_LOCAL_INTEGER(force_dir_mode, iDir_force_mode)
     758FN_GLOBAL_INTEGER(server_signing, server_signing)
     759FN_GLOBAL_INTEGER(client_signing, client_signing)
     760
     761FN_GLOBAL_CONST_STRING(ntp_signd_socket_directory, szNTPSignDSocketDirectory)
    732762
    733763/* local prototypes */
    734764static int map_parameter(const char *pszParmName);
    735 static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx, 
     765static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx,
    736766                                        const char *pszServiceName);
    737767static void copy_service(struct loadparm_service *pserviceDest,
     
    745775/* It returns a pointer to parametrical option value if it exists or NULL otherwise */
    746776/* Actual parametrical functions are quite simple */
    747 const char *lp_get_parametric(struct loadparm_context *lp_ctx,
     777const char *lpcfg_get_parametric(struct loadparm_context *lp_ctx,
    748778                              struct loadparm_service *service,
    749779                              const char *type, const char *option)
    750780{
    751         char *vfskey;
    752         struct parmlist_entry *data;
     781        char *vfskey = NULL;
     782        struct parmlist_entry *data;
    753783
    754784        if (lp_ctx == NULL)
     
    758788
    759789        asprintf(&vfskey, "%s:%s", type, option);
     790        if (vfskey == NULL) return NULL;
    760791        strlower(vfskey);
    761792
     
    855886 */
    856887
    857 const char *lp_parm_string(struct loadparm_context *lp_ctx,
    858                            struct loadparm_service *service, const char *type,
    859                            const char *option)
    860 {
    861         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     888const char *lpcfg_parm_string(struct loadparm_context *lp_ctx,
     889                              struct loadparm_service *service, const char *type,
     890                              const char *option)
     891{
     892        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    862893
    863894        if (value)
     
    873904 */
    874905
    875 const char **lp_parm_string_list(TALLOC_CTX *mem_ctx,
    876                                  struct loadparm_context *lp_ctx,
    877                                  struct loadparm_service *service,
    878                                  const char *type,
    879                                  const char *option, const char *separator)
    880 {
    881         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     906const char **lpcfg_parm_string_list(TALLOC_CTX *mem_ctx,
     907                                    struct loadparm_context *lp_ctx,
     908                                    struct loadparm_service *service,
     909                                    const char *type,
     910                                    const char *option, const char *separator)
     911{
     912        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    882913
    883914        if (value != NULL)
     
    892923 */
    893924
    894 int lp_parm_int(struct loadparm_context *lp_ctx,
    895                 struct loadparm_service *service, const char *type,
    896                 const char *option, int default_v)
    897 {
    898         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     925int lpcfg_parm_int(struct loadparm_context *lp_ctx,
     926                   struct loadparm_service *service, const char *type,
     927                   const char *option, int default_v)
     928{
     929        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    899930
    900931        if (value)
     
    910941 */
    911942
    912 int lp_parm_bytes(struct loadparm_context *lp_ctx,
     943int lpcfg_parm_bytes(struct loadparm_context *lp_ctx,
    913944                  struct loadparm_service *service, const char *type,
    914945                  const char *option, int default_v)
     
    916947        uint64_t bval;
    917948
    918         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     949        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    919950
    920951        if (value && conv_str_size(value, &bval)) {
     
    932963 * Parametric option has following syntax: 'Type: option = value'
    933964 */
    934 unsigned long lp_parm_ulong(struct loadparm_context *lp_ctx,
     965unsigned long lpcfg_parm_ulong(struct loadparm_context *lp_ctx,
    935966                            struct loadparm_service *service, const char *type,
    936967                            const char *option, unsigned long default_v)
    937968{
    938         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     969        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    939970
    940971        if (value)
     
    945976
    946977
    947 double lp_parm_double(struct loadparm_context *lp_ctx,
     978double lpcfg_parm_double(struct loadparm_context *lp_ctx,
    948979                      struct loadparm_service *service, const char *type,
    949980                      const char *option, double default_v)
    950981{
    951         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     982        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    952983
    953984        if (value != NULL)
     
    962993 */
    963994
    964 bool lp_parm_bool(struct loadparm_context *lp_ctx,
    965                   struct loadparm_service *service, const char *type,
    966                   const char *option, bool default_v)
    967 {
    968         const char *value = lp_get_parametric(lp_ctx, service, type, option);
     995bool lpcfg_parm_bool(struct loadparm_context *lp_ctx,
     996                     struct loadparm_service *service, const char *type,
     997                     const char *option, bool default_v)
     998{
     999        const char *value = lpcfg_get_parametric(lp_ctx, service, type, option);
    9691000
    9701001        if (value != NULL)
     
    10141045 */
    10151046
    1016 struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
    1017                                      const struct loadparm_service *pservice,
    1018                                      const char *name)
     1047struct loadparm_service *lpcfg_add_service(struct loadparm_context *lp_ctx,
     1048                                           const struct loadparm_service *pservice,
     1049                                           const char *name)
    10191050{
    10201051        int i;
     
    10221053        int num_to_alloc = lp_ctx->iNumServices + 1;
    10231054        struct parmlist_entry *data, *pdata;
     1055
     1056        if (pservice == NULL) {
     1057                pservice = lp_ctx->sDefault;
     1058        }
    10241059
    10251060        tservice = *pservice;
     
    10551090
    10561091                if (!tsp) {
    1057                         DEBUG(0,("lp_add_service: failed to enlarge services!\n"));
     1092                        DEBUG(0,("lpcfg_add_service: failed to enlarge services!\n"));
    10581093                        return NULL;
    10591094                } else {
     
    10671102        lp_ctx->services[i] = init_service(lp_ctx->services, lp_ctx->sDefault);
    10681103        if (lp_ctx->services[i] == NULL) {
    1069                 DEBUG(0,("lp_add_service: out of memory!\n"));
     1104                DEBUG(0,("lpcfg_add_service: out of memory!\n"));
    10701105                return NULL;
    10711106        }
     
    10811116 */
    10821117
    1083 bool lp_add_home(struct loadparm_context *lp_ctx,
     1118bool lpcfg_add_home(struct loadparm_context *lp_ctx,
    10841119                 const char *pszHomename,
    10851120                 struct loadparm_service *default_service,
     
    10881123        struct loadparm_service *service;
    10891124
    1090         service = lp_add_service(lp_ctx, default_service, pszHomename);
     1125        service = lpcfg_add_service(lp_ctx, default_service, pszHomename);
    10911126
    10921127        if (service == NULL)
     
    10971132                service->szPath = talloc_strdup(service, pszHomedir);
    10981133        } else {
    1099                 service->szPath = string_sub_talloc(service, lp_pathname(default_service, lp_ctx->sDefault), "%H", pszHomedir);
     1134                service->szPath = string_sub_talloc(service, lpcfg_pathname(default_service, lp_ctx->sDefault), "%H", pszHomedir);
    11001135        }
    11011136
     
    11081143        DEBUG(3, ("adding home's share [%s] for user '%s' at '%s'\n",
    11091144                  pszHomename, user, service->szPath));
    1110 
    1111         return true;
    1112 }
    1113 
    1114 /**
    1115  * Add the IPC service.
    1116  */
    1117 
    1118 static bool lp_add_hidden(struct loadparm_context *lp_ctx, const char *name,
    1119                           const char *fstype)
    1120 {
    1121         struct loadparm_service *service = lp_add_service(lp_ctx, lp_ctx->sDefault, name);
    1122 
    1123         if (service == NULL)
    1124                 return false;
    1125 
    1126         string_set(service, &service->szPath, tmpdir());
    1127 
    1128         service->comment = talloc_asprintf(service, "%s Service (%s)",
    1129                                 fstype, lp_ctx->globals->szServerString);
    1130         string_set(service, &service->fstype, fstype);
    1131         service->iMaxConnections = -1;
    1132         service->bAvailable = true;
    1133         service->bRead_only = true;
    1134         service->bPrint_ok = false;
    1135         service->bBrowseable = false;
    1136 
    1137         if (strcasecmp(fstype, "IPC") == 0) {
    1138                 lp_do_service_parameter(lp_ctx, service, "ntvfs handler",
    1139                                         "default");
    1140         }
    1141 
    1142         DEBUG(3, ("adding hidden service %s\n", name));
    11431145
    11441146        return true;
     
    11551157        const char *comment = "From Printcap";
    11561158        struct loadparm_service *service;
    1157         service = lp_add_service(lp_ctx, default_service, pszPrintername);
     1159        service = lpcfg_add_service(lp_ctx, default_service, pszPrintername);
    11581160
    11591161        if (service == NULL)
     
    12081210  return the parameter structure for a parameter
    12091211*/
    1210 struct parm_struct *lp_parm_struct(const char *name)
     1212struct parm_struct *lpcfg_parm_struct(const char *name)
    12111213{
    12121214        int parmnum = map_parameter(name);
     
    12181220  return the parameter pointer for a parameter
    12191221*/
    1220 void *lp_parm_ptr(struct loadparm_context *lp_ctx,
     1222void *lpcfg_parm_ptr(struct loadparm_context *lp_ctx,
    12211223                  struct loadparm_service *service, struct parm_struct *parm)
    12221224{
     
    12361238 */
    12371239
    1238 static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx, 
     1240static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx,
    12391241                                        const char *pszServiceName)
    12401242{
     
    13291331                }
    13301332                if (not_added) {
    1331                         paramo = talloc(pserviceDest, struct parmlist_entry);
     1333                        paramo = talloc_zero(pserviceDest, struct parmlist_entry);
    13321334                        if (paramo == NULL)
    13331335                                smb_panic("OOM");
     
    14491451
    14501452/***************************************************************************
     1453 Handle the "realm" parameter
     1454***************************************************************************/
     1455
     1456static bool handle_realm(struct loadparm_context *lp_ctx,
     1457                         const char *pszParmValue, char **ptr)
     1458{
     1459        string_set(lp_ctx, ptr, pszParmValue);
     1460
     1461        talloc_free(lp_ctx->globals->szRealm_upper);
     1462        talloc_free(lp_ctx->globals->szRealm_lower);
     1463
     1464        lp_ctx->globals->szRealm_upper = strupper_talloc(lp_ctx, pszParmValue);
     1465        lp_ctx->globals->szRealm_lower = strlower_talloc(lp_ctx, pszParmValue);
     1466
     1467        return true;
     1468}
     1469
     1470/***************************************************************************
    14511471 Handle the include operation.
    14521472***************************************************************************/
     
    15061526                        const char *pszParmValue, char **ptr)
    15071527{
    1508         DEBUGLEVEL = atoi(pszParmValue);
    1509 
    1510         return true;
     1528
     1529        string_set(lp_ctx, ptr, pszParmValue);
     1530        return debug_parse_levels(pszParmValue);
    15111531}
    15121532
     
    15141534                        const char *pszParmValue, char **ptr)
    15151535{
    1516         logfile = pszParmValue;
     1536        debug_set_logfile(pszParmValue);
     1537        string_set(lp_ctx, ptr, pszParmValue);
    15171538        return true;
    15181539}
     
    15841605        }
    15851606
    1586         paramo = talloc(mem_ctx, struct parmlist_entry);
     1607        paramo = talloc_zero(mem_ctx, struct parmlist_entry);
    15871608        if (!paramo)
    15881609                smb_panic("OOM");
     
    16031624static bool set_variable(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
    16041625                         const char *pszParmName, const char *pszParmValue,
    1605                          struct loadparm_context *lp_ctx)
     1626                         struct loadparm_context *lp_ctx, bool on_globals)
    16061627{
    16071628        int i;
    16081629        /* if it is a special case then go ahead */
    16091630        if (parm_table[parmnum].special) {
    1610                 parm_table[parmnum].special(lp_ctx, pszParmValue,
    1611                                             (char **)parm_ptr);
    1612                 return true;
     1631                bool ret;
     1632                ret = parm_table[parmnum].special(lp_ctx, pszParmValue,
     1633                                                  (char **)parm_ptr);
     1634                if (!ret) {
     1635                        return false;
     1636                }
     1637                goto mark_non_default;
    16131638        }
    16141639
     
    16491674                }
    16501675
    1651                 case P_LIST:
     1676                case P_CMDLIST:
    16521677                        *(const char ***)parm_ptr = (const char **)str_list_make(mem_ctx,
    16531678                                                                  pszParmValue, NULL);
    16541679                        break;
    1655 
     1680                case P_LIST:
     1681                {
     1682                        char **new_list = str_list_make(mem_ctx,
     1683                                                        pszParmValue, NULL);
     1684                        for (i=0; new_list[i]; i++) {
     1685                                if (new_list[i][0] == '+' && new_list[i][1]) {
     1686                                        *(const char ***)parm_ptr = str_list_add(*(const char ***)parm_ptr,
     1687                                                                                 &new_list[i][1]);
     1688                                } else if (new_list[i][0] == '-' && new_list[i][1]) {
     1689                                        if (!str_list_check(*(const char ***)parm_ptr,
     1690                                                            &new_list[i][1])) {
     1691                                                DEBUG(0, ("Unsupported value for: %s = %s, %s is not in the original list\n",
     1692                                                          pszParmName, pszParmValue, new_list[i]));
     1693                                                return false;
     1694
     1695                                        }
     1696                                        str_list_remove(*(const char ***)parm_ptr,
     1697                                                        &new_list[i][1]);
     1698                                } else {
     1699                                        if (i != 0) {
     1700                                                DEBUG(0, ("Unsupported list syntax for: %s = %s\n",
     1701                                                          pszParmName, pszParmValue));
     1702                                                return false;
     1703                                        }
     1704                                        *(const char ***)parm_ptr = (const char **) new_list;
     1705                                        break;
     1706                                }
     1707                        }
     1708                        break;
     1709                }
    16561710                case P_STRING:
    16571711                        string_set(mem_ctx, (char **)parm_ptr, pszParmValue);
     
    16821736        }
    16831737
    1684         if (lp_ctx->flags[parmnum] & FLAG_DEFAULT) {
     1738mark_non_default:
     1739        if (on_globals && (lp_ctx->flags[parmnum] & FLAG_DEFAULT)) {
    16851740                lp_ctx->flags[parmnum] &= ~FLAG_DEFAULT;
    16861741                /* we have to also unset FLAG_DEFAULT on aliases */
     
    16961751
    16971752
    1698 bool lp_do_global_parameter(struct loadparm_context *lp_ctx,
    1699                             const char *pszParmName, const char *pszParmValue)
     1753bool lpcfg_do_global_parameter(struct loadparm_context *lp_ctx,
     1754                               const char *pszParmName, const char *pszParmValue)
    17001755{
    17011756        int parmnum = map_parameter(pszParmName);
     
    17161771        }
    17171772
    1718         parm_ptr = lp_parm_ptr(lp_ctx, NULL, &parm_table[parmnum]);
    1719 
    1720         return set_variable(lp_ctx, parmnum, parm_ptr,
    1721                             pszParmName, pszParmValue, lp_ctx);
    1722 }
    1723 
    1724 bool lp_do_service_parameter(struct loadparm_context *lp_ctx,
    1725                              struct loadparm_service *service,
    1726                              const char *pszParmName, const char *pszParmValue)
     1773        parm_ptr = lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[parmnum]);
     1774
     1775        return set_variable(lp_ctx->globals, parmnum, parm_ptr,
     1776                            pszParmName, pszParmValue, lp_ctx, true);
     1777}
     1778
     1779bool lpcfg_do_service_parameter(struct loadparm_context *lp_ctx,
     1780                                struct loadparm_service *service,
     1781                                const char *pszParmName, const char *pszParmValue)
    17271782{
    17281783        void *parm_ptr;
     
    17631818
    17641819        return set_variable(service, parmnum, parm_ptr, pszParmName,
    1765                             pszParmValue, lp_ctx);
     1820                            pszParmValue, lp_ctx, false);
    17661821}
    17671822
     
    17761831
    17771832        if (lp_ctx->bInGlobalSection)
    1778                 return lp_do_global_parameter(lp_ctx, pszParmName,
     1833                return lpcfg_do_global_parameter(lp_ctx, pszParmName,
    17791834                                              pszParmValue);
    17801835        else
    1781                 return lp_do_service_parameter(lp_ctx, lp_ctx->currentService,
    1782                                                pszParmName, pszParmValue);
     1836                return lpcfg_do_service_parameter(lp_ctx, lp_ctx->currentService,
     1837                                                  pszParmName, pszParmValue);
    17831838}
    17841839
     
    17861841  variable argument do parameter
    17871842*/
    1788 bool lp_do_global_parameter_var(struct loadparm_context *lp_ctx, const char *pszParmName, const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
    1789 bool lp_do_global_parameter_var(struct loadparm_context *lp_ctx,
     1843bool lpcfg_do_global_parameter_var(struct loadparm_context *lp_ctx, const char *pszParmName, const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
     1844bool lpcfg_do_global_parameter_var(struct loadparm_context *lp_ctx,
    17901845                                const char *pszParmName, const char *fmt, ...)
    17911846{
     
    17971852        s = talloc_vasprintf(NULL, fmt, ap);
    17981853        va_end(ap);
    1799         ret = lp_do_global_parameter(lp_ctx, pszParmName, s);
     1854        ret = lpcfg_do_global_parameter(lp_ctx, pszParmName, s);
    18001855        talloc_free(s);
    18011856        return ret;
     
    18081863  by smb.conf processing
    18091864*/
    1810 bool lp_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
    1811                     const char *pszParmValue)
     1865bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
     1866                       const char *pszParmValue)
    18121867{
    18131868        int parmnum = map_parameter(pszParmName);
     
    18311886        lp_ctx->flags[parmnum] &= ~FLAG_CMDLINE;
    18321887
    1833         if (!lp_do_global_parameter(lp_ctx, pszParmName, pszParmValue)) {
     1888        if (!lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue)) {
    18341889                return false;
    18351890        }
     
    18511906  set a option from the commandline in 'a=b' format. Use to support --option
    18521907*/
    1853 bool lp_set_option(struct loadparm_context *lp_ctx, const char *option)
     1908bool lpcfg_set_option(struct loadparm_context *lp_ctx, const char *option)
    18541909{
    18551910        char *p, *s;
     
    18691924        *p = 0;
    18701925
    1871         ret = lp_set_cmdline(lp_ctx, s, p+1);
     1926        ret = lpcfg_set_cmdline(lp_ctx, s, p+1);
    18721927        free(s);
    18731928        return ret;
     
    18841939{
    18851940        int i;
     1941        const char *list_sep = ", "; /* For the seperation of lists values that we print below */
    18861942        switch (p->type)
    18871943        {
     
    19091965                        break;
    19101966
     1967                case P_CMDLIST:
     1968                        list_sep = " ";
     1969                        /* fall through */
    19111970                case P_LIST:
    19121971                        if ((char ***)ptr && *(char ***)ptr) {
    19131972                                char **list = *(char ***)ptr;
    19141973
    1915                                 for (; *list; list++)
    1916                                         fprintf(f, "%s%s", *list,
    1917                                                 ((*(list+1))?", ":""));
     1974                                for (; *list; list++) {
     1975                                        if (*(list+1) == NULL) {
     1976                                                /* last item, print no extra seperator after */
     1977                                                list_sep = "";
     1978                                        }
     1979                                        fprintf(f, "%s%s", *list, list_sep);
     1980                                }
    19181981                        }
    19191982                        break;
     
    19442007                        return (*((int *)ptr1) == *((int *)ptr2));
    19452008
     2009                case P_CMDLIST:
    19462010                case P_LIST:
    19472011                        return str_list_equal((const char **)(*(char ***)ptr1),
     
    19992063                DEBUG(2, ("Processing section \"[%s]\"\n", pszSectionName));
    20002064
    2001                 if ((lp_ctx->currentService = lp_add_service(lp_ctx, lp_ctx->sDefault,
    2002                                                              pszSectionName))
     2065                if ((lp_ctx->currentService = lpcfg_add_service(lp_ctx, lp_ctx->sDefault,
     2066                                                                   pszSectionName))
    20032067                    == NULL) {
    20042068                        DEBUG(0, ("Failed to add a new service\n"));
     
    20212085                return false;
    20222086        switch (parm_table[i].type) {
     2087                case P_CMDLIST:
    20232088                case P_LIST:
    20242089                        return str_list_equal((const char **)parm_table[i].def.lvalue,
     
    20572122                    parm_table[i].offset != -1 &&
    20582123                    (i == 0 || (parm_table[i].offset != parm_table[i - 1].offset))) {
    2059                         if (!show_defaults && (lp_ctx->flags[i] & FLAG_DEFAULT)) 
     2124                        if (!show_defaults && (lp_ctx->flags[i] & FLAG_DEFAULT))
    20602125                                continue;
    20612126                        fprintf(f, "\t%s = ", parm_table[i].label);
    2062                         print_parameter(&parm_table[i], lp_parm_ptr(lp_ctx, NULL, &parm_table[i]), f);
     2127                        print_parameter(&parm_table[i], lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[i]), f);
    20632128                        fprintf(f, "\n");
    20642129        }
     
    20662131                for (data = lp_ctx->globals->param_opt; data;
    20672132                     data = data->next) {
     2133                        if (!show_defaults && (data->priority & FLAG_DEFAULT)) {
     2134                                continue;
     2135                        }
    20682136                        fprintf(f, "\t%s = %s\n", data->key, data->value);
    20692137                }
     
    20762144 */
    20772145
    2078 static void dump_a_service(struct loadparm_service * pService, struct loadparm_service *sDefault, FILE * f)
     2146static void dump_a_service(struct loadparm_service * pService, struct loadparm_service *sDefault, FILE * f,
     2147                           unsigned int *flags)
    20792148{
    20802149        int i;
     
    20912160                {
    20922161                        if (pService == sDefault) {
    2093                                 if (defaults_saved && is_default(sDefault, i))
     2162                                if (flags && (flags[i] & FLAG_DEFAULT)) {
    20942163                                        continue;
     2164                                }
     2165                                if (defaults_saved) {
     2166                                        if (is_default(sDefault, i)) {
     2167                                                continue;
     2168                                        }
     2169                                }
    20952170                        } else {
    20962171                                if (equal_parameter(parm_table[i].type,
     
    21152190}
    21162191
    2117 bool lp_dump_a_parameter(struct loadparm_context *lp_ctx,
    2118                          struct loadparm_service *service,
    2119                          const char *parm_name, FILE * f)
     2192bool lpcfg_dump_a_parameter(struct loadparm_context *lp_ctx,
     2193                            struct loadparm_service *service,
     2194                            const char *parm_name, FILE * f)
    21202195{
    21212196        struct parm_struct *parm;
    21222197        void *ptr;
    21232198
    2124         parm = lp_parm_struct(parm_name);
     2199        parm = lpcfg_parm_struct(parm_name);
    21252200        if (!parm) {
    21262201                return false;
    21272202        }
    21282203
    2129         ptr = lp_parm_ptr(lp_ctx, service,parm);
     2204        ptr = lpcfg_parm_ptr(lp_ctx, service,parm);
    21302205
    21312206        print_parameter(parm, ptr, f);
     
    21402215 */
    21412216
    2142 struct parm_struct *lp_next_parameter(struct loadparm_context *lp_ctx, int snum, int *i,
    2143                                       int allparameters)
     2217
     2218struct parm_struct *lpcfg_next_parameter(struct loadparm_context *lp_ctx, int snum, int *i,
     2219                                         int allparameters)
    21442220{
    21452221        if (snum == -1) {
     
    21882264 * Auto-load some home services.
    21892265 */
    2190 static void lp_add_auto_services(struct loadparm_context *lp_ctx,
    2191                                  const char *str)
     2266static void lpcfg_add_auto_services(struct loadparm_context *lp_ctx,
     2267                                    const char *str)
    21922268{
    21932269        return;
     
    22192295{
    22202296        struct parmlist_entry *data;
     2297
     2298        if (lp_ctx->refuse_free) {
     2299                /* someone is trying to free the
     2300                   global_loadparm_context.
     2301                   We can't allow that. */
     2302                return -1;
     2303        }
    22212304
    22222305        if (lp_ctx->globals->param_opt != NULL) {
     
    22352318/**
    22362319 * Initialise the global parameter structure.
     2320 *
     2321 * Note that most callers should use loadparm_init_global() instead
    22372322 */
    22382323struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
     
    22412326        char *myname;
    22422327        struct loadparm_context *lp_ctx;
     2328        struct parmlist_entry *parm;
    22432329
    22442330        lp_ctx = talloc_zero(mem_ctx, struct loadparm_context);
     
    22802366        }
    22812367
    2282         lp_do_global_parameter(lp_ctx, "share backend", "classic");
    2283 
    2284         lp_do_global_parameter(lp_ctx, "server role", "standalone");
     2368
     2369        lpcfg_do_global_parameter(lp_ctx, "log level", "0");
     2370
     2371        lpcfg_do_global_parameter(lp_ctx, "share backend", "classic");
     2372
     2373        lpcfg_do_global_parameter(lp_ctx, "share backend", "classic");
     2374
     2375        lpcfg_do_global_parameter(lp_ctx, "server role", "standalone");
    22852376
    22862377        /* options that can be set on the command line must be initialised via
    2287            the slower lp_do_global_parameter() to ensure that FLAG_CMDLINE is obeyed */
     2378           the slower lpcfg_do_global_parameter() to ensure that FLAG_CMDLINE is obeyed */
    22882379#ifdef TCP_NODELAY
    2289         lp_do_global_parameter(lp_ctx, "socket options", "TCP_NODELAY");
     2380        lpcfg_do_global_parameter(lp_ctx, "socket options", "TCP_NODELAY");
    22902381#endif
    2291         lp_do_global_parameter(lp_ctx, "workgroup", DEFAULT_WORKGROUP);
     2382        lpcfg_do_global_parameter(lp_ctx, "workgroup", DEFAULT_WORKGROUP);
    22922383        myname = get_myname(lp_ctx);
    2293         lp_do_global_parameter(lp_ctx, "netbios name", myname);
     2384        lpcfg_do_global_parameter(lp_ctx, "netbios name", myname);
    22942385        talloc_free(myname);
    2295         lp_do_global_parameter(lp_ctx, "name resolve order", "wins host bcast");
    2296 
    2297         lp_do_global_parameter(lp_ctx, "fstype", "NTFS");
    2298 
    2299         lp_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default");
    2300         lp_do_global_parameter(lp_ctx, "max connections", "-1");
    2301 
    2302         lp_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser");
    2303         lp_do_global_parameter(lp_ctx, "server services", "smb rpc nbt wrepl ldap cldap kdc drepl winbind ntp_signd kcc");
    2304         lp_do_global_parameter(lp_ctx, "ntptr providor", "simple_ldb");
    2305         lp_do_global_parameter(lp_ctx, "auth methods:domain controller", "anonymous sam_ignoredomain");
    2306         lp_do_global_parameter(lp_ctx, "auth methods:member server", "anonymous sam winbind");
    2307         lp_do_global_parameter(lp_ctx, "auth methods:standalone", "anonymous sam_ignoredomain");
    2308         lp_do_global_parameter(lp_ctx, "private dir", dyn_PRIVATE_DIR);
    2309         lp_do_global_parameter(lp_ctx, "sam database", "sam.ldb");
    2310         lp_do_global_parameter(lp_ctx, "idmap database", "idmap.ldb");
    2311         lp_do_global_parameter(lp_ctx, "secrets database", "secrets.ldb");
    2312         lp_do_global_parameter(lp_ctx, "spoolss database", "spoolss.ldb");
    2313         lp_do_global_parameter(lp_ctx, "wins config database", "wins_config.ldb");
    2314         lp_do_global_parameter(lp_ctx, "wins database", "wins.ldb");
    2315         lp_do_global_parameter(lp_ctx, "registry:HKEY_LOCAL_MACHINE", "hklm.ldb");
     2386        lpcfg_do_global_parameter(lp_ctx, "name resolve order", "wins host bcast");
     2387
     2388        lpcfg_do_global_parameter(lp_ctx, "fstype", "NTFS");
     2389
     2390        lpcfg_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default");
     2391        lpcfg_do_global_parameter(lp_ctx, "max connections", "-1");
     2392
     2393        lpcfg_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser eventlog6 backupkey");
     2394        lpcfg_do_global_parameter(lp_ctx, "server services", "smb rpc nbt wrepl ldap cldap kdc drepl winbind ntp_signd kcc dnsupdate web");
     2395        lpcfg_do_global_parameter(lp_ctx, "ntptr providor", "simple_ldb");
     2396        /* the winbind method for domain controllers is for both RODC
     2397           auth forwarding and for trusted domains */
     2398        lpcfg_do_global_parameter(lp_ctx, "auth methods:domain controller", "anonymous sam_ignoredomain winbind");
     2399        lpcfg_do_global_parameter(lp_ctx, "auth methods:member server", "anonymous sam winbind");
     2400        lpcfg_do_global_parameter(lp_ctx, "auth methods:standalone", "anonymous sam_ignoredomain");
     2401        lpcfg_do_global_parameter(lp_ctx, "private dir", dyn_PRIVATE_DIR);
     2402        lpcfg_do_global_parameter(lp_ctx, "sam database", "sam.ldb");
     2403        lpcfg_do_global_parameter(lp_ctx, "idmap database", "idmap.ldb");
     2404        lpcfg_do_global_parameter(lp_ctx, "secrets database", "secrets.ldb");
     2405        lpcfg_do_global_parameter(lp_ctx, "spoolss database", "spoolss.ldb");
     2406        lpcfg_do_global_parameter(lp_ctx, "wins config database", "wins_config.ldb");
     2407        lpcfg_do_global_parameter(lp_ctx, "wins database", "wins.ldb");
     2408        lpcfg_do_global_parameter(lp_ctx, "registry:HKEY_LOCAL_MACHINE", "hklm.ldb");
    23162409
    23172410        /* This hive should be dynamically generated by Samba using
    23182411           data from the sam, but for the moment leave it in a tdb to
    23192412           keep regedt32 from popping up an annoying dialog. */
    2320         lp_do_global_parameter(lp_ctx, "registry:HKEY_USERS", "hku.ldb");
     2413        lpcfg_do_global_parameter(lp_ctx, "registry:HKEY_USERS", "hku.ldb");
    23212414
    23222415        /* using UTF8 by default allows us to support all chars */
    2323         lp_do_global_parameter(lp_ctx, "unix charset", "UTF8");
     2416        lpcfg_do_global_parameter(lp_ctx, "unix charset", "UTF8");
    23242417
    23252418        /* Use codepage 850 as a default for the dos character set */
    2326         lp_do_global_parameter(lp_ctx, "dos charset", "CP850");
     2419        lpcfg_do_global_parameter(lp_ctx, "dos charset", "CP850");
    23272420
    23282421        /*
    23292422         * Allow the default PASSWD_CHAT to be overridden in local.h.
    23302423         */
    2331         lp_do_global_parameter(lp_ctx, "passwd chat", DEFAULT_PASSWD_CHAT);
    2332 
    2333         lp_do_global_parameter(lp_ctx, "pid directory", dyn_PIDDIR);
    2334         lp_do_global_parameter(lp_ctx, "lock dir", dyn_LOCKDIR);
    2335         lp_do_global_parameter(lp_ctx, "modules dir", dyn_MODULESDIR);
    2336         lp_do_global_parameter(lp_ctx, "ncalrpc dir", dyn_NCALRPCDIR);
    2337 
    2338         lp_do_global_parameter(lp_ctx, "socket address", "0.0.0.0");
    2339         lp_do_global_parameter_var(lp_ctx, "server string",
     2424        lpcfg_do_global_parameter(lp_ctx, "passwd chat", DEFAULT_PASSWD_CHAT);
     2425
     2426        lpcfg_do_global_parameter(lp_ctx, "pid directory", dyn_PIDDIR);
     2427        lpcfg_do_global_parameter(lp_ctx, "lock dir", dyn_LOCKDIR);
     2428        lpcfg_do_global_parameter(lp_ctx, "modules dir", dyn_MODULESDIR);
     2429        lpcfg_do_global_parameter(lp_ctx, "ncalrpc dir", dyn_NCALRPCDIR);
     2430
     2431        lpcfg_do_global_parameter(lp_ctx, "socket address", "0.0.0.0");
     2432        lpcfg_do_global_parameter_var(lp_ctx, "server string",
    23402433                                   "Samba %s", SAMBA_VERSION_STRING);
    23412434
    2342         lp_do_global_parameter_var(lp_ctx, "announce version", "%d.%d",
     2435        lpcfg_do_global_parameter_var(lp_ctx, "announce version", "%d.%d",
    23432436                         DEFAULT_MAJOR_VERSION,
    23442437                         DEFAULT_MINOR_VERSION);
    23452438
    2346         lp_do_global_parameter(lp_ctx, "password server", "*");
    2347 
    2348         lp_do_global_parameter(lp_ctx, "max mux", "50");
    2349         lp_do_global_parameter(lp_ctx, "max xmit", "12288");
    2350         lp_do_global_parameter(lp_ctx, "password level", "0");
    2351         lp_do_global_parameter(lp_ctx, "LargeReadwrite", "True");
    2352         lp_do_global_parameter(lp_ctx, "server min protocol", "CORE");
    2353         lp_do_global_parameter(lp_ctx, "server max protocol", "NT1");
    2354         lp_do_global_parameter(lp_ctx, "client min protocol", "CORE");
    2355         lp_do_global_parameter(lp_ctx, "client max protocol", "NT1");
    2356         lp_do_global_parameter(lp_ctx, "security", "USER");
    2357         lp_do_global_parameter(lp_ctx, "paranoid server security", "True");
    2358         lp_do_global_parameter(lp_ctx, "EncryptPasswords", "True");
    2359         lp_do_global_parameter(lp_ctx, "ReadRaw", "True");
    2360         lp_do_global_parameter(lp_ctx, "WriteRaw", "True");
    2361         lp_do_global_parameter(lp_ctx, "NullPasswords", "False");
    2362         lp_do_global_parameter(lp_ctx, "ObeyPamRestrictions", "False");
    2363         lp_do_global_parameter(lp_ctx, "announce as", "NT SERVER");
    2364 
    2365         lp_do_global_parameter(lp_ctx, "TimeServer", "False");
    2366         lp_do_global_parameter(lp_ctx, "BindInterfacesOnly", "False");
    2367         lp_do_global_parameter(lp_ctx, "Unicode", "True");
    2368         lp_do_global_parameter(lp_ctx, "ClientLanManAuth", "False");
    2369         lp_do_global_parameter(lp_ctx, "LanmanAuth", "False");
    2370         lp_do_global_parameter(lp_ctx, "NTLMAuth", "True");
    2371         lp_do_global_parameter(lp_ctx, "client use spnego principal", "False");
    2372 
    2373         lp_do_global_parameter(lp_ctx, "UnixExtensions", "False");
    2374 
    2375         lp_do_global_parameter(lp_ctx, "PreferredMaster", "Auto");
    2376         lp_do_global_parameter(lp_ctx, "LocalMaster", "True");
    2377 
    2378         lp_do_global_parameter(lp_ctx, "wins support", "False");
    2379         lp_do_global_parameter(lp_ctx, "dns proxy", "True");
    2380 
    2381         lp_do_global_parameter(lp_ctx, "winbind separator", "\\");
    2382         lp_do_global_parameter(lp_ctx, "winbind sealed pipes", "True");
    2383         lp_do_global_parameter(lp_ctx, "winbindd socket directory", dyn_WINBINDD_SOCKET_DIR);
    2384         lp_do_global_parameter(lp_ctx, "winbindd privileged socket directory", dyn_WINBINDD_PRIVILEGED_SOCKET_DIR);
    2385         lp_do_global_parameter(lp_ctx, "template shell", "/bin/false");
    2386         lp_do_global_parameter(lp_ctx, "template homedir", "/home/%WORKGROUP%/%ACCOUNTNAME%");
    2387         lp_do_global_parameter(lp_ctx, "idmap trusted only", "False");
    2388 
    2389         lp_do_global_parameter(lp_ctx, "client signing", "Yes");
    2390         lp_do_global_parameter(lp_ctx, "server signing", "auto");
    2391 
    2392         lp_do_global_parameter(lp_ctx, "use spnego", "True");
    2393 
    2394         lp_do_global_parameter(lp_ctx, "smb ports", "445 139");
    2395         lp_do_global_parameter(lp_ctx, "nbt port", "137");
    2396         lp_do_global_parameter(lp_ctx, "dgram port", "138");
    2397         lp_do_global_parameter(lp_ctx, "cldap port", "389");
    2398         lp_do_global_parameter(lp_ctx, "krb5 port", "88");
    2399         lp_do_global_parameter(lp_ctx, "kpasswd port", "464");
    2400         lp_do_global_parameter(lp_ctx, "web port", "901");
    2401         lp_do_global_parameter(lp_ctx, "swat directory", dyn_SWATDIR);
    2402 
    2403         lp_do_global_parameter(lp_ctx, "nt status support", "True");
    2404 
    2405         lp_do_global_parameter(lp_ctx, "max wins ttl", "518400"); /* 6 days */
    2406         lp_do_global_parameter(lp_ctx, "min wins ttl", "10");
    2407 
    2408         lp_do_global_parameter(lp_ctx, "tls enabled", "True");
    2409         lp_do_global_parameter(lp_ctx, "tls keyfile", "tls/key.pem");
    2410         lp_do_global_parameter(lp_ctx, "tls certfile", "tls/cert.pem");
    2411         lp_do_global_parameter(lp_ctx, "tls cafile", "tls/ca.pem");
    2412         lp_do_global_parameter_var(lp_ctx, "setup directory", "%s",
    2413                                    dyn_SETUPDIR);
    2414 
    2415         lp_do_global_parameter(lp_ctx, "prefork children:smb", "4");
    2416 
    2417         lp_do_global_parameter(lp_ctx, "ntp signd socket directory", dyn_NTP_SIGND_SOCKET_DIR);
     2439        lpcfg_do_global_parameter(lp_ctx, "password server", "*");
     2440
     2441        lpcfg_do_global_parameter(lp_ctx, "max mux", "50");
     2442        lpcfg_do_global_parameter(lp_ctx, "max xmit", "12288");
     2443        lpcfg_do_global_parameter(lp_ctx, "password level", "0");
     2444        lpcfg_do_global_parameter(lp_ctx, "LargeReadwrite", "True");
     2445        lpcfg_do_global_parameter(lp_ctx, "server min protocol", "CORE");
     2446        lpcfg_do_global_parameter(lp_ctx, "server max protocol", "NT1");
     2447        lpcfg_do_global_parameter(lp_ctx, "client min protocol", "CORE");
     2448        lpcfg_do_global_parameter(lp_ctx, "client max protocol", "NT1");
     2449        lpcfg_do_global_parameter(lp_ctx, "security", "USER");
     2450        lpcfg_do_global_parameter(lp_ctx, "paranoid server security", "True");
     2451        lpcfg_do_global_parameter(lp_ctx, "EncryptPasswords", "True");
     2452        lpcfg_do_global_parameter(lp_ctx, "ReadRaw", "True");
     2453        lpcfg_do_global_parameter(lp_ctx, "WriteRaw", "True");
     2454        lpcfg_do_global_parameter(lp_ctx, "NullPasswords", "False");
     2455        lpcfg_do_global_parameter(lp_ctx, "ObeyPamRestrictions", "False");
     2456        lpcfg_do_global_parameter(lp_ctx, "announce as", "NT SERVER");
     2457
     2458        lpcfg_do_global_parameter(lp_ctx, "TimeServer", "False");
     2459        lpcfg_do_global_parameter(lp_ctx, "BindInterfacesOnly", "False");
     2460        lpcfg_do_global_parameter(lp_ctx, "Unicode", "True");
     2461        lpcfg_do_global_parameter(lp_ctx, "ClientLanManAuth", "False");
     2462        lpcfg_do_global_parameter(lp_ctx, "ClientNTLMv2Auth", "True");
     2463        lpcfg_do_global_parameter(lp_ctx, "LanmanAuth", "False");
     2464        lpcfg_do_global_parameter(lp_ctx, "NTLMAuth", "True");
     2465        lpcfg_do_global_parameter(lp_ctx, "client use spnego principal", "False");
     2466
     2467        lpcfg_do_global_parameter(lp_ctx, "UnixExtensions", "False");
     2468
     2469        lpcfg_do_global_parameter(lp_ctx, "PreferredMaster", "Auto");
     2470        lpcfg_do_global_parameter(lp_ctx, "LocalMaster", "True");
     2471
     2472        lpcfg_do_global_parameter(lp_ctx, "wins support", "False");
     2473        lpcfg_do_global_parameter(lp_ctx, "dns proxy", "True");
     2474
     2475        lpcfg_do_global_parameter(lp_ctx, "winbind separator", "\\");
     2476        lpcfg_do_global_parameter(lp_ctx, "winbind sealed pipes", "True");
     2477        lpcfg_do_global_parameter(lp_ctx, "winbindd socket directory", dyn_WINBINDD_SOCKET_DIR);
     2478        lpcfg_do_global_parameter(lp_ctx, "winbindd privileged socket directory", dyn_WINBINDD_PRIVILEGED_SOCKET_DIR);
     2479        lpcfg_do_global_parameter(lp_ctx, "template shell", "/bin/false");
     2480        lpcfg_do_global_parameter(lp_ctx, "template homedir", "/home/%WORKGROUP%/%ACCOUNTNAME%");
     2481        lpcfg_do_global_parameter(lp_ctx, "idmap trusted only", "False");
     2482
     2483        lpcfg_do_global_parameter(lp_ctx, "client signing", "Yes");
     2484        lpcfg_do_global_parameter(lp_ctx, "server signing", "auto");
     2485
     2486        lpcfg_do_global_parameter(lp_ctx, "use spnego", "True");
     2487
     2488        lpcfg_do_global_parameter(lp_ctx, "smb ports", "445 139");
     2489        lpcfg_do_global_parameter(lp_ctx, "nbt port", "137");
     2490        lpcfg_do_global_parameter(lp_ctx, "dgram port", "138");
     2491        lpcfg_do_global_parameter(lp_ctx, "cldap port", "389");
     2492        lpcfg_do_global_parameter(lp_ctx, "krb5 port", "88");
     2493        lpcfg_do_global_parameter(lp_ctx, "kpasswd port", "464");
     2494        lpcfg_do_global_parameter(lp_ctx, "web port", "901");
     2495
     2496        lpcfg_do_global_parameter(lp_ctx, "nt status support", "True");
     2497
     2498        lpcfg_do_global_parameter(lp_ctx, "max wins ttl", "518400"); /* 6 days */
     2499        lpcfg_do_global_parameter(lp_ctx, "min wins ttl", "10");
     2500
     2501        lpcfg_do_global_parameter(lp_ctx, "tls enabled", "True");
     2502        lpcfg_do_global_parameter(lp_ctx, "tls keyfile", "tls/key.pem");
     2503        lpcfg_do_global_parameter(lp_ctx, "tls certfile", "tls/cert.pem");
     2504        lpcfg_do_global_parameter(lp_ctx, "tls cafile", "tls/ca.pem");
     2505        lpcfg_do_global_parameter(lp_ctx, "prefork children:smb", "4");
     2506
     2507        lpcfg_do_global_parameter(lp_ctx, "ntp signd socket directory", dyn_NTP_SIGND_SOCKET_DIR);
     2508        lpcfg_do_global_parameter(lp_ctx, "rndc command", "/usr/sbin/rndc");
     2509        lpcfg_do_global_parameter_var(lp_ctx, "dns update command", "%s/samba_dnsupdate", dyn_SCRIPTSBINDIR);
     2510        lpcfg_do_global_parameter_var(lp_ctx, "spn update command", "%s/samba_spnupdate", dyn_SCRIPTSBINDIR);
     2511        lpcfg_do_global_parameter(lp_ctx, "nsupdate command", "/usr/bin/nsupdate -g");
    24182512
    24192513        for (i = 0; parm_table[i].label; i++) {
     
    24232517        }
    24242518
     2519        for (parm=lp_ctx->globals->param_opt; parm; parm=parm->next) {
     2520                if (!(parm->priority & FLAG_CMDLINE)) {
     2521                        parm->priority |= FLAG_DEFAULT;
     2522                }
     2523        }
     2524
    24252525        return lp_ctx;
    24262526}
    24272527
    2428 const char *lp_configfile(struct loadparm_context *lp_ctx)
     2528/**
     2529 * Initialise the global parameter structure.
     2530 */
     2531struct loadparm_context *loadparm_init_global(bool load_default)
     2532{
     2533        if (global_loadparm_context == NULL) {
     2534                global_loadparm_context = loadparm_init(NULL);
     2535        }
     2536        if (load_default && !global_loadparm_context->loaded) {
     2537                lpcfg_load_default(global_loadparm_context);
     2538        }
     2539        global_loadparm_context->refuse_free = true;
     2540        return global_loadparm_context;
     2541}
     2542
     2543const char *lpcfg_configfile(struct loadparm_context *lp_ctx)
    24292544{
    24302545        return lp_ctx->szConfigFile;
     
    24432558 * have changed.
    24442559 */
    2445 static bool lp_update(struct loadparm_context *lp_ctx)
    2446 {
    2447         lp_add_auto_services(lp_ctx, lp_auto_services(lp_ctx));
    2448 
    2449         lp_add_hidden(lp_ctx, "IPC$", "IPC");
    2450         lp_add_hidden(lp_ctx, "ADMIN$", "DISK");
     2560static bool lpcfg_update(struct loadparm_context *lp_ctx)
     2561{
     2562        struct debug_settings settings;
     2563        lpcfg_add_auto_services(lp_ctx, lpcfg_auto_services(lp_ctx));
    24512564
    24522565        if (!lp_ctx->globals->szWINSservers && lp_ctx->globals->bWINSsupport) {
    2453                 lp_do_global_parameter(lp_ctx, "wins server", "127.0.0.1");
     2566                lpcfg_do_global_parameter(lp_ctx, "wins server", "127.0.0.1");
    24542567        }
    24552568
     
    24582571        reload_charcnv(lp_ctx);
    24592572
    2460         /* FIXME: ntstatus_check_dos_mapping = lp_nt_status_support(lp_ctx); */
     2573        ZERO_STRUCT(settings);
     2574        /* Add any more debug-related smb.conf parameters created in
     2575         * future here */
     2576        settings.timestamp_logs = true;
     2577        debug_set_settings(&settings);
     2578
     2579        /* FIXME: ntstatus_check_dos_mapping = lpcfg_nt_status_support(lp_ctx); */
    24612580
    24622581        /* FIXME: This is a bit of a hack, but we can't use a global, since
    24632582         * not everything that uses lp also uses the socket library */
    2464         if (lp_parm_bool(lp_ctx, NULL, "socket", "testnonblock", false)) {
     2583        if (lpcfg_parm_bool(lp_ctx, NULL, "socket", "testnonblock", false)) {
    24652584                setenv("SOCKET_TESTNONBLOCK", "1", 1);
    24662585        } else {
     
    24692588
    24702589        /* FIXME: Check locale in environment for this: */
    2471         if (strcmp(lp_display_charset(lp_ctx), lp_unix_charset(lp_ctx)) != 0)
    2472                 d_set_iconv(smb_iconv_open(lp_display_charset(lp_ctx), lp_unix_charset(lp_ctx)));
     2590        if (strcmp(lpcfg_display_charset(lp_ctx), lpcfg_unix_charset(lp_ctx)) != 0)
     2591                d_set_iconv(smb_iconv_open(lpcfg_display_charset(lp_ctx), lpcfg_unix_charset(lp_ctx)));
    24732592        else
    24742593                d_set_iconv((smb_iconv_t)-1);
     
    24772596}
    24782597
    2479 bool lp_load_default(struct loadparm_context *lp_ctx)
     2598bool lpcfg_load_default(struct loadparm_context *lp_ctx)
    24802599{
    24812600    const char *path;
     
    24862605            /* We allow the default smb.conf file to not exist,
    24872606             * basically the equivalent of an empty file. */
    2488             return lp_update(lp_ctx);
     2607            return lpcfg_update(lp_ctx);
    24892608    }
    24902609
    2491     return lp_load(lp_ctx, path);
     2610    return lpcfg_load(lp_ctx, path);
    24922611}
    24932612
     
    24972616 * Return True on success, False on failure.
    24982617 */
    2499 bool lp_load(struct loadparm_context *lp_ctx, const char *filename)
     2618bool lpcfg_load(struct loadparm_context *lp_ctx, const char *filename)
    25002619{
    25012620        char *n2;
     
    25082627        lp_ctx->bInGlobalSection = true;
    25092628        n2 = standard_sub_basic(lp_ctx, lp_ctx->szConfigFile);
    2510         DEBUG(2, ("lp_load: refreshing parameters from %s\n", n2));
     2629        DEBUG(2, ("lpcfg_load: refreshing parameters from %s\n", n2));
    25112630
    25122631        add_to_file_list(lp_ctx, lp_ctx->szConfigFile, n2);
     
    25222641                        bRetval = service_ok(lp_ctx->currentService);
    25232642
    2524         bRetval = bRetval && lp_update(lp_ctx);
     2643        bRetval = bRetval && lpcfg_update(lp_ctx);
     2644
     2645        /* we do this unconditionally, so that it happens even
     2646           for a missing smb.conf */
     2647        reload_charcnv(lp_ctx);
     2648
     2649        if (bRetval == true) {
     2650                /* set this up so that any child python tasks will
     2651                   find the right smb.conf */
     2652                setenv("SMB_CONF_PATH", filename, 1);
     2653
     2654                /* set the context used by the lp_*() function
     2655                   varients */
     2656                global_loadparm_context = lp_ctx;
     2657                lp_ctx->loaded = true;
     2658        }
    25252659
    25262660        return bRetval;
     
    25312665 */
    25322666
    2533 int lp_numservices(struct loadparm_context *lp_ctx)
     2667int lpcfg_numservices(struct loadparm_context *lp_ctx)
    25342668{
    25352669        return lp_ctx->iNumServices;
     
    25402674 */
    25412675
    2542 void lp_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
     2676void lpcfg_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
    25432677             int maxtoprint)
    25442678{
    25452679        int iService;
    25462680
    2547         if (show_defaults)
    2548                 defaults_saved = false;
     2681        defaults_saved = !show_defaults;
    25492682
    25502683        dump_globals(lp_ctx, f, show_defaults);
    25512684
    2552         dump_a_service(lp_ctx->sDefault, lp_ctx->sDefault, f);
     2685        dump_a_service(lp_ctx->sDefault, lp_ctx->sDefault, f, lp_ctx->flags);
    25532686
    25542687        for (iService = 0; iService < maxtoprint; iService++)
    2555                 lp_dump_one(f, show_defaults, lp_ctx->services[iService], lp_ctx->sDefault);
     2688                lpcfg_dump_one(f, show_defaults, lp_ctx->services[iService], lp_ctx->sDefault);
    25562689}
    25572690
     
    25592692 * Display the contents of one service in human-readable form.
    25602693 */
    2561 void lp_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service, struct loadparm_service *sDefault)
     2694void lpcfg_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service, struct loadparm_service *sDefault)
    25622695{
    25632696        if (service != NULL) {
    25642697                if (service->szService[0] == '\0')
    25652698                        return;
    2566                 dump_a_service(service, sDefault, f);
    2567         }
    2568 }
    2569 
    2570 struct loadparm_service *lp_servicebynum(struct loadparm_context *lp_ctx,
     2699                dump_a_service(service, sDefault, f, NULL);
     2700        }
     2701}
     2702
     2703struct loadparm_service *lpcfg_servicebynum(struct loadparm_context *lp_ctx,
    25712704                                         int snum)
    25722705{
     
    25742707}
    25752708
    2576 struct loadparm_service *lp_service(struct loadparm_context *lp_ctx,
     2709struct loadparm_service *lpcfg_service(struct loadparm_context *lp_ctx,
    25772710                                    const char *service_name)
    25782711{
     
    25902723                                        lp_ctx->services[iService],
    25912724                                        lp_ctx->services[iService]->szService);
    2592                         if (strequal(serviceName, service_name))
     2725                        if (strequal(serviceName, service_name)) {
     2726                                talloc_free(serviceName);
    25932727                                return lp_ctx->services[iService];
    2594                 }
    2595         }
    2596 
    2597         DEBUG(7,("lp_servicenumber: couldn't find %s\n", service_name));
     2728                        }
     2729                        talloc_free(serviceName);
     2730                }
     2731        }
     2732
     2733        DEBUG(7,("lpcfg_servicenumber: couldn't find %s\n", service_name));
    25982734        return NULL;
    25992735}
    26002736
     2737const char *lpcfg_servicename(const struct loadparm_service *service)
     2738{
     2739        return lp_string((const char *)service->szService);
     2740}
    26012741
    26022742/**
     
    26052745const char *volume_label(struct loadparm_service *service, struct loadparm_service *sDefault)
    26062746{
    2607         const char *ret = lp_volume(service, sDefault);
     2747        const char *ret;
     2748        ret = lp_string((const char *)((service != NULL && service->volume != NULL) ?
     2749                                       service->volume : sDefault->volume));
    26082750        if (!*ret)
    2609                 return lp_servicename(service);
     2751                return lpcfg_servicename(service);
    26102752        return ret;
    26112753}
    26122754
    2613 
    26142755/**
    26152756 * If we are PDC then prefer us as DMB
    26162757 */
    2617 const char *lp_printername(struct loadparm_service *service, struct loadparm_service *sDefault)
    2618 {
    2619         const char *ret = _lp_printername(service, sDefault);
     2758const char *lpcfg_printername(struct loadparm_service *service, struct loadparm_service *sDefault)
     2759{
     2760        const char *ret;
     2761        ret = lp_string((const char *)((service != NULL && service->szPrintername != NULL) ?
     2762                                       service->szPrintername : sDefault->szPrintername));
    26202763        if (ret == NULL || (ret != NULL && *ret == '\0'))
    2621                 ret = lp_servicename(service);
     2764                ret = lpcfg_servicename(service);
    26222765
    26232766        return ret;
     
    26282771 * Return the max print jobs per queue.
    26292772 */
    2630 int lp_maxprintjobs(struct loadparm_service *service, struct loadparm_service *sDefault)
     2773int lpcfg_maxprintjobs(struct loadparm_service *service, struct loadparm_service *sDefault)
    26312774{
    26322775        int maxjobs = (service != NULL) ? service->iMaxPrintJobs : sDefault->iMaxPrintJobs;
     
    26372780}
    26382781
    2639 struct smb_iconv_convenience *lp_iconv_convenience(struct loadparm_context *lp_ctx)
     2782struct smb_iconv_convenience *lpcfg_iconv_convenience(struct loadparm_context *lp_ctx)
    26402783{
    26412784        if (lp_ctx == NULL) {
    2642                 static struct smb_iconv_convenience *fallback_ic = NULL;
    2643                 if (fallback_ic == NULL)
    2644                         fallback_ic = smb_iconv_convenience_init(talloc_autofree_context(),
    2645                                                   "CP850", "UTF8", true);
    2646                 return fallback_ic;
     2785                return get_iconv_convenience();
    26472786        }
    26482787        return lp_ctx->iconv_convenience;
     
    26512790_PUBLIC_ void reload_charcnv(struct loadparm_context *lp_ctx)
    26522791{
    2653         talloc_unlink(lp_ctx, lp_ctx->iconv_convenience);
    2654         global_iconv_convenience = lp_ctx->iconv_convenience = smb_iconv_convenience_init_lp(lp_ctx, lp_ctx);
    2655 }
    2656 
    2657 void lp_smbcli_options(struct loadparm_context *lp_ctx,
     2792        struct smb_iconv_convenience *old_ic = lp_ctx->iconv_convenience;
     2793        if (old_ic == NULL) {
     2794                old_ic = global_iconv_convenience;
     2795        }
     2796        lp_ctx->iconv_convenience = smb_iconv_convenience_reinit_lp(lp_ctx, lp_ctx, old_ic);
     2797        global_iconv_convenience = lp_ctx->iconv_convenience;
     2798}
     2799
     2800void lpcfg_smbcli_options(struct loadparm_context *lp_ctx,
    26582801                         struct smbcli_options *options)
    26592802{
    2660         options->max_xmit = lp_max_xmit(lp_ctx);
    2661         options->max_mux = lp_maxmux(lp_ctx);
    2662         options->use_spnego = lp_nt_status_support(lp_ctx) && lp_use_spnego(lp_ctx);
    2663         options->signing = lp_client_signing(lp_ctx);
     2803        options->max_xmit = lpcfg_max_xmit(lp_ctx);
     2804        options->max_mux = lpcfg_maxmux(lp_ctx);
     2805        options->use_spnego = lpcfg_nt_status_support(lp_ctx) && lpcfg_use_spnego(lp_ctx);
     2806        options->signing = lpcfg_client_signing(lp_ctx);
    26642807        options->request_timeout = SMB_REQUEST_TIMEOUT;
    2665         options->ntstatus_support = lp_nt_status_support(lp_ctx);
    2666         options->max_protocol = lp_cli_maxprotocol(lp_ctx);
    2667         options->unicode = lp_unicode(lp_ctx);
     2808        options->ntstatus_support = lpcfg_nt_status_support(lp_ctx);
     2809        options->max_protocol = lpcfg_cli_maxprotocol(lp_ctx);
     2810        options->unicode = lpcfg_unicode(lp_ctx);
    26682811        options->use_oplocks = true;
    26692812        options->use_level2_oplocks = true;
    26702813}
    26712814
    2672 void lp_smbcli_session_options(struct loadparm_context *lp_ctx,
     2815void lpcfg_smbcli_session_options(struct loadparm_context *lp_ctx,
    26732816                                 struct smbcli_session_options *options)
    26742817{
    2675         options->lanman_auth = lp_client_lanman_auth(lp_ctx);
    2676         options->ntlmv2_auth = lp_client_ntlmv2_auth(lp_ctx);
    2677         options->plaintext_auth = lp_client_plaintext_auth(lp_ctx);
    2678 }
    2679 
    2680 _PUBLIC_ char *lp_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2818        options->lanman_auth = lpcfg_client_lanman_auth(lp_ctx);
     2819        options->ntlmv2_auth = lpcfg_client_ntlmv2_auth(lp_ctx);
     2820        options->plaintext_auth = lpcfg_client_plaintext_auth(lp_ctx);
     2821}
     2822
     2823_PUBLIC_ char *lpcfg_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    26812824{
    26822825        return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_keyfile);
    26832826}
    26842827
    2685 _PUBLIC_ char *lp_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2828_PUBLIC_ char *lpcfg_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    26862829{
    26872830        return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_certfile);
    26882831}
    26892832
    2690 _PUBLIC_ char *lp_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2833_PUBLIC_ char *lpcfg_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    26912834{
    26922835        return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_cafile);
    26932836}
    26942837
    2695 _PUBLIC_ char *lp_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2838_PUBLIC_ char *lpcfg_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    26962839{
    26972840        return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_crlfile);
    26982841}
    26992842
    2700 _PUBLIC_ char *lp_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2843_PUBLIC_ char *lpcfg_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    27012844{
    27022845        return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_dhpfile);
    27032846}
    27042847
    2705 _PUBLIC_ struct dcerpc_server_info *lp_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2848_PUBLIC_ struct dcerpc_server_info *lpcfg_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    27062849{
    27072850        struct dcerpc_server_info *ret = talloc_zero(mem_ctx, struct dcerpc_server_info);
    27082851
    2709         ret->domain_name = talloc_reference(mem_ctx, lp_workgroup(lp_ctx));
    2710         ret->version_major = lp_parm_int(lp_ctx, NULL, "server_info", "version_major", 5);
    2711         ret->version_minor = lp_parm_int(lp_ctx, NULL, "server_info", "version_minor", 2);
    2712         ret->version_build = lp_parm_int(lp_ctx, NULL, "server_info", "version_build", 3790);
     2852        ret->domain_name = talloc_reference(mem_ctx, lpcfg_workgroup(lp_ctx));
     2853        ret->version_major = lpcfg_parm_int(lp_ctx, NULL, "server_info", "version_major", 5);
     2854        ret->version_minor = lpcfg_parm_int(lp_ctx, NULL, "server_info", "version_minor", 2);
     2855        ret->version_build = lpcfg_parm_int(lp_ctx, NULL, "server_info", "version_build", 3790);
    27132856
    27142857        return ret;
    27152858}
    27162859
    2717 struct gensec_settings *lp_gensec_settings(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
     2860struct gensec_settings *lpcfg_gensec_settings(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)
    27182861{
    27192862        struct gensec_settings *settings = talloc(mem_ctx, struct gensec_settings);
     
    27222865        SMB_ASSERT(lp_ctx != NULL);
    27232866        settings->lp_ctx = talloc_reference(settings, lp_ctx);
    2724         settings->iconv_convenience = lp_iconv_convenience(lp_ctx);
    2725         settings->target_hostname = lp_parm_string(lp_ctx, NULL, "gensec", "target_hostname");
     2867        settings->target_hostname = lpcfg_parm_string(lp_ctx, NULL, "gensec", "target_hostname");
    27262868        return settings;
    27272869}
  • vendor/current/source4/param/loadparm.h

    r414 r740  
    3030/* the following are used by loadparm for option lists */
    3131typedef enum {
    32         P_BOOL,P_INTEGER,P_OCTAL,P_BYTES,P_LIST,P_STRING,P_USTRING,P_ENUM
     32        P_BOOL,P_INTEGER,P_OCTAL,P_BYTES,P_LIST,P_CMDLIST,P_STRING,P_USTRING,P_ENUM
    3333} parm_type;
    3434
  • vendor/current/source4/param/param.h

    r414 r740  
    2121#define _PARAM_H
    2222
    23 #include "../lib/util/parmlist.h"
     23struct parmlist_entry;
    2424
    2525struct param_context {
     
    5252};
    5353
     54enum sid_generator {
     55        SID_GENERATOR_INTERNAL=0,
     56        SID_GENERATOR_BACKEND=1,
     57};
     58
    5459enum announce_as {/* Types of machine we can announce as. */
    5560        ANNOUNCE_AS_NT_SERVER=1,
     
    6570struct gensec_settings;
    6671
     72#ifdef CONFIG_H_IS_FROM_SAMBA
     73#include "param/param_proto.h"
     74#endif
     75
     76const char **lpcfg_interfaces(struct loadparm_context *);
     77const char *lpcfg_realm(struct loadparm_context *);
     78const char *lpcfg_netbios_name(struct loadparm_context *);
     79const char *lpcfg_private_dir(struct loadparm_context *);
     80int lpcfg_server_role(struct loadparm_context *);
     81
    6782void reload_charcnv(struct loadparm_context *lp_ctx);
    6883
    69 struct loadparm_service *lp_default_service(struct loadparm_context *lp_ctx);
    70 struct parm_struct *lp_parm_table(void);
    71 int lp_server_role(struct loadparm_context *);
    72 const char **lp_smb_ports(struct loadparm_context *);
    73 int lp_nbt_port(struct loadparm_context *);
    74 int lp_dgram_port(struct loadparm_context *);
    75 int lp_cldap_port(struct loadparm_context *);
    76 int lp_krb5_port(struct loadparm_context *);
    77 int lp_kpasswd_port(struct loadparm_context *);
    78 int lp_web_port(struct loadparm_context *);
    79 const char *lp_swat_directory(struct loadparm_context *);
    80 bool lp_tls_enabled(struct loadparm_context *);
    81 char *lp_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
    82 char *lp_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
    83 char *lp_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
    84 char *lp_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
    85 char *lp_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
    86 const char *lp_share_backend(struct loadparm_context *);
    87 const char *lp_sam_url(struct loadparm_context *);
    88 const char *lp_idmap_url(struct loadparm_context *);
    89 const char *lp_secrets_url(struct loadparm_context *);
    90 const char *lp_spoolss_url(struct loadparm_context *);
    91 const char *lp_wins_config_url(struct loadparm_context *);
    92 const char *lp_wins_url(struct loadparm_context *);
    93 const char *lp_winbind_separator(struct loadparm_context *);
    94 const char *lp_winbindd_socket_directory(struct loadparm_context *);
    95 const char *lp_winbindd_privileged_socket_directory(struct loadparm_context *);
    96 const char *lp_template_shell(struct loadparm_context *);
    97 const char *lp_template_homedir(struct loadparm_context *);
    98 bool lp_winbind_sealed_pipes(struct loadparm_context *);
    99 bool lp_idmap_trusted_only(struct loadparm_context *);
    100 const char *lp_private_dir(struct loadparm_context *);
    101 const char *lp_serverstring(struct loadparm_context *);
    102 const char *lp_lockdir(struct loadparm_context *);
    103 const char *lp_modulesdir(struct loadparm_context *);
    104 const char *lp_setupdir(struct loadparm_context *);
    105 const char *lp_ncalrpc_dir(struct loadparm_context *);
    106 const char *lp_dos_charset(struct loadparm_context *);
    107 const char *lp_unix_charset(struct loadparm_context *);
    108 const char *lp_display_charset(struct loadparm_context *);
    109 const char *lp_piddir(struct loadparm_context *);
    110 const char **lp_dcerpc_endpoint_servers(struct loadparm_context *);
    111 const char **lp_server_services(struct loadparm_context *);
    112 const char *lp_ntptr_providor(struct loadparm_context *);
    113 const char *lp_auto_services(struct loadparm_context *);
    114 const char *lp_passwd_chat(struct loadparm_context *);
    115 const char **lp_passwordserver(struct loadparm_context *);
    116 const char **lp_name_resolve_order(struct loadparm_context *);
    117 const char *lp_realm(struct loadparm_context *);
    118 const char *lp_socket_options(struct loadparm_context *);
    119 const char *lp_workgroup(struct loadparm_context *);
    120 const char *lp_netbios_name(struct loadparm_context *);
    121 const char *lp_netbios_scope(struct loadparm_context *);
    122 const char **lp_wins_server_list(struct loadparm_context *);
    123 const char **lp_interfaces(struct loadparm_context *);
    124 const char *lp_socket_address(struct loadparm_context *);
    125 const char **lp_netbios_aliases(struct loadparm_context *);
    126 bool lp_disable_netbios(struct loadparm_context *);
    127 bool lp_wins_support(struct loadparm_context *);
    128 bool lp_wins_dns_proxy(struct loadparm_context *);
    129 const char *lp_wins_hook(struct loadparm_context *);
    130 bool lp_local_master(struct loadparm_context *);
    131 bool lp_readraw(struct loadparm_context *);
    132 bool lp_large_readwrite(struct loadparm_context *);
    133 bool lp_writeraw(struct loadparm_context *);
    134 bool lp_null_passwords(struct loadparm_context *);
    135 bool lp_obey_pam_restrictions(struct loadparm_context *);
    136 bool lp_encrypted_passwords(struct loadparm_context *);
    137 bool lp_time_server(struct loadparm_context *);
    138 bool lp_bind_interfaces_only(struct loadparm_context *);
    139 bool lp_unicode(struct loadparm_context *);
    140 bool lp_nt_status_support(struct loadparm_context *);
    141 bool lp_lanman_auth(struct loadparm_context *);
    142 bool lp_ntlm_auth(struct loadparm_context *);
    143 bool lp_client_plaintext_auth(struct loadparm_context *);
    144 bool lp_client_lanman_auth(struct loadparm_context *);
    145 bool lp_client_ntlmv2_auth(struct loadparm_context *);
    146 bool lp_client_use_spnego_principal(struct loadparm_context *);
    147 bool lp_host_msdfs(struct loadparm_context *);
    148 bool lp_unix_extensions(struct loadparm_context *);
    149 bool lp_use_spnego(struct loadparm_context *);
    150 bool lp_rpc_big_endian(struct loadparm_context *);
    151 int lp_max_wins_ttl(struct loadparm_context *);
    152 int lp_min_wins_ttl(struct loadparm_context *);
    153 int lp_maxmux(struct loadparm_context *);
    154 int lp_max_xmit(struct loadparm_context *);
    155 int lp_passwordlevel(struct loadparm_context *);
    156 int lp_srv_maxprotocol(struct loadparm_context *);
    157 int lp_srv_minprotocol(struct loadparm_context *);
    158 int lp_cli_maxprotocol(struct loadparm_context *);
    159 int lp_cli_minprotocol(struct loadparm_context *);
    160 int lp_security(struct loadparm_context *);
    161 bool lp_paranoid_server_security(struct loadparm_context *);
    162 int lp_announce_as(struct loadparm_context *);
    163 
    164 const char *lp_servicename(const struct loadparm_service *service);
    165 const char *lp_pathname(struct loadparm_service *, struct loadparm_service *);
    166 const char **lp_hostsallow(struct loadparm_service *, struct loadparm_service *);
    167 const char **lp_hostsdeny(struct loadparm_service *, struct loadparm_service *);
    168 const char *lp_comment(struct loadparm_service *, struct loadparm_service *);
    169 const char *lp_fstype(struct loadparm_service *, struct loadparm_service *);
    170 const char **lp_ntvfs_handler(struct loadparm_service *, struct loadparm_service *);
    171 bool lp_msdfs_root(struct loadparm_service *, struct loadparm_service *);
    172 bool lp_browseable(struct loadparm_service *, struct loadparm_service *);
    173 bool lp_readonly(struct loadparm_service *, struct loadparm_service *);
    174 bool lp_print_ok(struct loadparm_service *, struct loadparm_service *);
    175 bool lp_map_hidden(struct loadparm_service *, struct loadparm_service *);
    176 bool lp_map_archive(struct loadparm_service *, struct loadparm_service *);
    177 bool lp_strict_locking(struct loadparm_service *, struct loadparm_service *);
    178 bool lp_oplocks(struct loadparm_service *, struct loadparm_service *);
    179 bool lp_strict_sync(struct loadparm_service *, struct loadparm_service *);
    180 bool lp_ci_filesystem(struct loadparm_service *, struct loadparm_service *);
    181 bool lp_map_system(struct loadparm_service *, struct loadparm_service *);
    182 int lp_max_connections(struct loadparm_service *, struct loadparm_service *);
    183 int lp_csc_policy(struct loadparm_service *, struct loadparm_service *);
    184 int lp_create_mask(struct loadparm_service *, struct loadparm_service *);
    185 int lp_force_create_mode(struct loadparm_service *, struct loadparm_service *);
    186 int lp_dir_mask(struct loadparm_service *, struct loadparm_service *);
    187 int lp_force_dir_mode(struct loadparm_service *, struct loadparm_service *);
    188 int lp_server_signing(struct loadparm_context *);
    189 int lp_client_signing(struct loadparm_context *);
    190 const char *lp_ntp_signd_socket_directory(struct loadparm_context *);
    191 
    192 
    193 const char *lp_get_parametric(struct loadparm_context *lp_ctx,
     84struct loadparm_service *lpcfg_default_service(struct loadparm_context *lp_ctx);
     85struct parm_struct *lpcfg_parm_table(void);
     86
     87
     88char *lpcfg_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
     89char *lpcfg_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
     90char *lpcfg_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
     91char *lpcfg_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
     92char *lpcfg_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
     93
     94const char *lpcfg_servicename(const struct loadparm_service *service);
     95
     96
     97const char *lpcfg_get_parametric(struct loadparm_context *lp_ctx,
    19498                              struct loadparm_service *service,
    19599                              const char *type, const char *option);
    196100
    197 const char *lp_parm_string(struct loadparm_context *lp_ctx,
     101const char *lpcfg_parm_string(struct loadparm_context *lp_ctx,
    198102                           struct loadparm_service *service, const char *type,
    199103                           const char *option);
    200 const char **lp_parm_string_list(TALLOC_CTX *mem_ctx,
     104const char **lpcfg_parm_string_list(TALLOC_CTX *mem_ctx,
    201105                                 struct loadparm_context *lp_ctx,
    202106                                 struct loadparm_service *service,
    203107                                 const char *type,
    204108                                 const char *option, const char *separator);
    205 int lp_parm_int(struct loadparm_context *lp_ctx,
     109int lpcfg_parm_int(struct loadparm_context *lp_ctx,
    206110                struct loadparm_service *service, const char *type,
    207111                const char *option, int default_v);
    208 int lp_parm_bytes(struct loadparm_context *lp_ctx,
     112int lpcfg_parm_bytes(struct loadparm_context *lp_ctx,
    209113                  struct loadparm_service *service, const char *type,
    210114                  const char *option, int default_v);
    211 unsigned long lp_parm_ulong(struct loadparm_context *lp_ctx,
     115unsigned long lpcfg_parm_ulong(struct loadparm_context *lp_ctx,
    212116                            struct loadparm_service *service, const char *type,
    213117                            const char *option, unsigned long default_v);
    214 double lp_parm_double(struct loadparm_context *lp_ctx,
     118double lpcfg_parm_double(struct loadparm_context *lp_ctx,
    215119                      struct loadparm_service *service, const char *type,
    216120                      const char *option, double default_v);
    217 bool lp_parm_bool(struct loadparm_context *lp_ctx,
    218                   struct loadparm_service *service, const char *type,
    219                   const char *option, bool default_v);
    220 struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
     121bool lpcfg_parm_bool(struct loadparm_context *lp_ctx,
     122                     struct loadparm_service *service, const char *type,
     123                     const char *option, bool default_v);
     124struct loadparm_service *lpcfg_add_service(struct loadparm_context *lp_ctx,
    221125                                     const struct loadparm_service *pservice,
    222126                                     const char *name);
    223 bool lp_add_home(struct loadparm_context *lp_ctx,
     127bool lpcfg_add_home(struct loadparm_context *lp_ctx,
    224128                 const char *pszHomename,
    225129                 struct loadparm_service *default_service,
    226130                 const char *user, const char *pszHomedir);
    227 bool lp_add_printer(struct loadparm_context *lp_ctx,
     131bool lpcfg_add_printer(struct loadparm_context *lp_ctx,
    228132                    const char *pszPrintername,
    229133                    struct loadparm_service *default_service);
    230 struct parm_struct *lp_parm_struct(const char *name);
    231 void *lp_parm_ptr(struct loadparm_context *lp_ctx,
     134struct parm_struct *lpcfg_parm_struct(const char *name);
     135void *lpcfg_parm_ptr(struct loadparm_context *lp_ctx,
    232136                  struct loadparm_service *service, struct parm_struct *parm);
    233 bool lp_file_list_changed(struct loadparm_context *lp_ctx);
    234 
    235 bool lp_do_global_parameter(struct loadparm_context *lp_ctx,
     137bool lpcfg_file_list_changed(struct loadparm_context *lp_ctx);
     138
     139bool lpcfg_do_global_parameter(struct loadparm_context *lp_ctx,
    236140                            const char *pszParmName, const char *pszParmValue);
    237 bool lp_do_service_parameter(struct loadparm_context *lp_ctx,
     141bool lpcfg_do_service_parameter(struct loadparm_context *lp_ctx,
    238142                             struct loadparm_service *service,
    239143                             const char *pszParmName, const char *pszParmValue);
     
    242146 * Process a parameter.
    243147 */
    244 bool lp_do_global_parameter_var(struct loadparm_context *lp_ctx,
     148bool lpcfg_do_global_parameter_var(struct loadparm_context *lp_ctx,
    245149                                const char *pszParmName, const char *fmt, ...);
    246 bool lp_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
     150bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
    247151                    const char *pszParmValue);
    248 bool lp_set_option(struct loadparm_context *lp_ctx, const char *option);
     152bool lpcfg_set_option(struct loadparm_context *lp_ctx, const char *option);
    249153
    250154/**
    251155 * Display the contents of a single services record.
    252156 */
    253 bool lp_dump_a_parameter(struct loadparm_context *lp_ctx,
     157bool lpcfg_dump_a_parameter(struct loadparm_context *lp_ctx,
    254158                         struct loadparm_service *service,
    255159                         const char *parm_name, FILE * f);
     
    259163 * Return NULL when out of parameters.
    260164 */
    261 struct parm_struct *lp_next_parameter(struct loadparm_context *lp_ctx, int snum, int *i,
     165struct parm_struct *lpcfg_next_parameter(struct loadparm_context *lp_ctx, int snum, int *i,
    262166                                      int allparameters);
    263167
     
    265169 * Unload unused services.
    266170 */
    267 void lp_killunused(struct loadparm_context *lp_ctx,
     171void lpcfg_killunused(struct loadparm_context *lp_ctx,
    268172                   struct smbsrv_connection *smb,
    269173                   bool (*snumused) (struct smbsrv_connection *, int));
     
    273177 */
    274178struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx);
    275 const char *lp_configfile(struct loadparm_context *lp_ctx);
    276 bool lp_load_default(struct loadparm_context *lp_ctx);
     179struct loadparm_context *loadparm_init_global(bool load_default);
     180const char *lpcfg_configfile(struct loadparm_context *lp_ctx);
     181bool lpcfg_load_default(struct loadparm_context *lp_ctx);
    277182const char *lp_default_path(void);
    278183
     
    282187 * Return True on success, False on failure.
    283188 */
    284 bool lp_load(struct loadparm_context *lp_ctx, const char *filename);
     189bool lpcfg_load(struct loadparm_context *lp_ctx, const char *filename);
    285190
    286191/**
    287192 * Return the max number of services.
    288193 */
    289 int lp_numservices(struct loadparm_context *lp_ctx);
     194int lpcfg_numservices(struct loadparm_context *lp_ctx);
    290195
    291196/**
    292197 * Display the contents of the services array in human-readable form.
    293198 */
    294 void lp_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
     199void lpcfg_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
    295200             int maxtoprint);
    296201
     
    298203 * Display the contents of one service in human-readable form.
    299204 */
    300 void lp_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service, struct loadparm_service *sDefault);
    301 struct loadparm_service *lp_servicebynum(struct loadparm_context *lp_ctx,
     205void lpcfg_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service, struct loadparm_service *sDefault);
     206struct loadparm_service *lpcfg_servicebynum(struct loadparm_context *lp_ctx,
    302207                                         int snum);
    303 struct loadparm_service *lp_service(struct loadparm_context *lp_ctx,
     208struct loadparm_service *lpcfg_service(struct loadparm_context *lp_ctx,
    304209                                    const char *service_name);
    305210
     
    312217 * If we are PDC then prefer us as DMB
    313218 */
    314 const char *lp_printername(struct loadparm_service *service, struct loadparm_service *sDefault);
     219const char *lpcfg_printername(struct loadparm_service *service, struct loadparm_service *sDefault);
    315220
    316221/**
    317222 * Return the max print jobs per queue.
    318223 */
    319 int lp_maxprintjobs(struct loadparm_service *service, struct loadparm_service *sDefault);
    320 struct smb_iconv_convenience *lp_iconv_convenience(struct loadparm_context *lp_ctx);
    321 void lp_smbcli_options(struct loadparm_context *lp_ctx,
     224int lpcfg_maxprintjobs(struct loadparm_service *service, struct loadparm_service *sDefault);
     225struct smb_iconv_convenience *lpcfg_iconv_convenience(struct loadparm_context *lp_ctx);
     226void lpcfg_smbcli_options(struct loadparm_context *lp_ctx,
    322227                         struct smbcli_options *options);
    323 void lp_smbcli_session_options(struct loadparm_context *lp_ctx,
     228void lpcfg_smbcli_session_options(struct loadparm_context *lp_ctx,
    324229                                 struct smbcli_session_options *options);
    325 struct dcerpc_server_info *lp_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
    326 struct gensec_settings *lp_gensec_settings(TALLOC_CTX *, struct loadparm_context *);
     230struct dcerpc_server_info *lpcfg_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
     231struct gensec_settings *lpcfg_gensec_settings(TALLOC_CTX *, struct loadparm_context *);
    327232
    328233
     
    355260 * @brief Misc utility functions
    356261 */
    357 bool lp_is_mydomain(struct loadparm_context *lp_ctx,
     262bool lpcfg_is_mydomain(struct loadparm_context *lp_ctx,
    358263                             const char *domain);
    359264
    360 bool lp_is_my_domain_or_realm(struct loadparm_context *lp_ctx,
     265bool lpcfg_is_my_domain_or_realm(struct loadparm_context *lp_ctx,
    361266                              const char *domain);
    362267
     
    365270  netbios aliases. do a case insensitive match
    366271*/
    367 bool lp_is_myname(struct loadparm_context *lp_ctx, const char *name);
     272bool lpcfg_is_myname(struct loadparm_context *lp_ctx, const char *name);
    368273
    369274/**
     
    401306*/
    402307char *smbd_tmp_path(TALLOC_CTX *mem_ctx,
    403                              struct loadparm_context *lp_ctx, 
     308                             struct loadparm_context *lp_ctx,
    404309                             const char *name);
    405310
     
    428333 */
    429334init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *subsystem);
    430 const char *lp_messaging_path(TALLOC_CTX *mem_ctx,
     335const char *lpcfg_messaging_path(TALLOC_CTX *mem_ctx,
    431336                                       struct loadparm_context *lp_ctx);
    432 struct smb_iconv_convenience *smb_iconv_convenience_init_lp(TALLOC_CTX *mem_ctx,
    433                                                          struct loadparm_context *lp_ctx);
    434 
    435 const char *lp_sam_name(struct loadparm_context *lp_ctx);
     337struct smb_iconv_convenience *smb_iconv_convenience_reinit_lp(TALLOC_CTX *mem_ctx,
     338                                                              struct loadparm_context *lp_ctx,
     339                                                              struct smb_iconv_convenience *old_ic);
     340
     341const char *lpcfg_sam_name(struct loadparm_context *lp_ctx);
    436342
    437343/* The following definitions come from lib/version.c  */
  • vendor/current/source4/param/provision.c

    r414 r740  
    1919*/
    2020
     21#include <Python.h>
     22#include <ldb.h>
     23#include <pyldb.h>
    2124#include "includes.h"
    22 #include "auth/auth.h"
    23 #include "lib/ldb_wrap.h"
    24 #include "ldb/include/ldb.h"
    25 #include "ldb_errors.h"
    26 #include "libcli/raw/libcliraw.h"
    2725#include "librpc/ndr/libndr.h"
    28 
    29 #include "param/param.h"
    3026#include "param/provision.h"
    3127#include "param/secrets.h"
    32 #include <Python.h>
    3328#include "lib/talloc/pytalloc.h"
    34 #include "librpc/rpc/pyrpc.h"
    3529#include "scripting/python/modules.h"
    36 #include "lib/ldb/pyldb.h"
    3730#include "param/pyparam.h"
     31#include "dynconfig/dynconfig.h"
    3832
    3933static PyObject *provision_module(void)
     
    4337                return NULL;
    4438        return PyImport_Import(name);
     39}
     40
     41static PyObject *schema_module(void)
     42{
     43        PyObject *name = PyString_FromString("samba.schema");
     44        if (name == NULL)
     45                return NULL;
     46        return PyImport_Import(name);
     47}
     48
     49static PyObject *ldb_module(void)
     50{
     51        PyObject *name = PyString_FromString("ldb");
     52        if (name == NULL)
     53                return NULL;
     54        return PyImport_Import(name);
     55}
     56
     57static PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx)
     58{
     59        PyLdbObject *ret;
     60        PyObject *ldb_mod = ldb_module();
     61        PyTypeObject *ldb_ctx_type;
     62        if (ldb_mod == NULL)
     63                return NULL;
     64
     65        ldb_ctx_type = (PyTypeObject *)PyObject_GetAttrString(ldb_mod, "Ldb");
     66
     67        ret = (PyLdbObject *)ldb_ctx_type->tp_alloc(ldb_ctx_type, 0);
     68        if (ret == NULL) {
     69                PyErr_NoMemory();
     70                return NULL;
     71        }
     72        ret->mem_ctx = talloc_new(NULL);
     73        ret->ldb_ctx = talloc_reference(ret->mem_ctx, ldb_ctx);
     74        return (PyObject *)ret;
    4575}
    4676
     
    5080{
    5181        const char *configfile;
    52         PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters;
     82        PyObject *provision_mod, *provision_dict, *provision_fn, *py_result, *parameters, *py_lp_ctx;
    5383       
    5484        DEBUG(0,("Provision for Become-DC test using python\n"));
    5585
    56         py_load_samba_modules();
    5786        Py_Initialize();
    58         py_update_path("bin"); /* FIXME: Can't assume this is always the case */
     87        py_update_path(); /* Put the samba path at the start of sys.path */
    5988
    6089        provision_mod = provision_module();
     
    88117                settings->invocation_id == NULL?"None":GUID_string(mem_ctx, settings->invocation_id)));
    89118
    90         DEBUG(0,("Pathes under targetdir[%s]\n",
     119        DEBUG(0,("Paths under targetdir[%s]\n",
    91120                 settings->targetdir));
    92121        parameters = PyDict_New();
    93122
    94         configfile = lp_configfile(lp_ctx);
     123        configfile = lpcfg_configfile(lp_ctx);
    95124        if (configfile != NULL) {
    96125                PyDict_SetItemString(parameters, "smbconf",
     
    103132                PyDict_SetItemString(parameters, "targetdir",
    104133                                                         PyString_FromString(settings->targetdir));
    105         PyDict_SetItemString(parameters, "setup_dir",
    106                              PyString_FromString("setup"));
    107134        PyDict_SetItemString(parameters, "hostname",
    108135                                                 PyString_FromString(settings->netbios_name));
     
    154181
    155182        /* FIXME paths */
    156         result->lp_ctx = lp_from_py_object(PyObject_GetAttrString(py_result, "lp"));
     183        py_lp_ctx = PyObject_GetAttrString(py_result, "lp");
     184        if (py_lp_ctx == NULL) {
     185                DEBUG(0, ("Missing 'lp' attribute"));
     186                return NT_STATUS_UNSUCCESSFUL;
     187        }
     188        result->lp_ctx = lpcfg_from_py_object(mem_ctx, py_lp_ctx);
    157189        result->samdb = PyLdb_AsLdbContext(PyObject_GetAttrString(py_result, "samdb"));
    158190
    159191        return NT_STATUS_OK;
    160192}
    161 
    162 extern void initldb(void);
    163193
    164194static PyObject *py_dom_sid_FromSid(struct dom_sid *sid)
     
    191221
    192222        /* Open the secrets database */
    193         ldb = secrets_db_connect(tmp_mem, event_ctx, lp_ctx);
     223        ldb = secrets_db_connect(tmp_mem, lp_ctx);
    194224        if (!ldb) {
    195225                *error_string
     
    210240        }
    211241
    212         py_load_samba_modules();
    213242        Py_Initialize();
    214         py_update_path("bin"); /* FIXME: Can't assume this is always the case */
    215         initldb();
     243        py_update_path(); /* Put the samba path at the start of sys.path */
    216244        provision_mod = provision_module();
    217245
     
    248276        PyDict_SetItemString(parameters, "domain",
    249277                             PyString_FromString(settings->domain_name));
    250         PyDict_SetItemString(parameters, "domain",
    251                              PyString_FromString(settings->domain_name));
    252         PyDict_SetItemString(parameters, "realm",
    253                              PyString_FromString(settings->realm));
     278        if (settings->realm != NULL) {
     279                PyDict_SetItemString(parameters, "realm",
     280                                     PyString_FromString(settings->realm));
     281        }
    254282        PyDict_SetItemString(parameters, "machinepass",
    255283                             PyString_FromString(settings->machine_password));
     
    301329        return NT_STATUS_UNSUCCESSFUL;
    302330}
     331
     332
     333struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
     334                                         DATA_BLOB *override_prefixmap)
     335{
     336        PyObject *schema_mod, *schema_dict, *schema_fn, *py_result, *parameters;
     337       
     338        Py_Initialize();
     339        py_update_path(); /* Put the samba path at the start of sys.path */
     340
     341        schema_mod = schema_module();
     342
     343        if (schema_mod == NULL) {
     344                PyErr_Print();
     345                DEBUG(0, ("Unable to import schema Python module.\n"));
     346                return NULL;
     347        }
     348
     349        schema_dict = PyModule_GetDict(schema_mod);
     350
     351        if (schema_dict == NULL) {
     352                DEBUG(0, ("Unable to get dictionary for schema module\n"));
     353                return NULL;
     354        }
     355
     356        schema_fn = PyDict_GetItemString(schema_dict, "ldb_with_schema");
     357        if (schema_fn == NULL) {
     358                PyErr_Print();
     359                DEBUG(0, ("Unable to get schema_get_ldb function\n"));
     360                return NULL;
     361        }
     362       
     363        parameters = PyDict_New();
     364
     365        if (override_prefixmap) {
     366                PyDict_SetItemString(parameters, "override_prefixmap",
     367                                     PyString_FromStringAndSize((const char *)override_prefixmap->data,
     368                                                                override_prefixmap->length));
     369        }
     370
     371        py_result = PyEval_CallObjectWithKeywords(schema_fn, NULL, parameters);
     372
     373        Py_DECREF(parameters);
     374
     375        if (py_result == NULL) {
     376                PyErr_Print();
     377                PyErr_Clear();
     378                return NULL;
     379        }
     380
     381        return PyLdb_AsLdbContext(PyObject_GetAttrString(py_result, "ldb"));
     382}
  • vendor/current/source4/param/provision.h

    r414 r740  
    4949        const char *realm;
    5050        const char *netbios_name;
    51         const char *account_name;
    5251        enum netr_SchannelType secure_channel_type;
    5352        const char *machine_password;
     
    6564                                   const char **error_string);
    6665
     66struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
     67                                         DATA_BLOB *override_prefixmap);
     68
    6769#endif /* _PROVISION_H_ */
  • vendor/current/source4/param/pyparam.c

    r414 r740  
    1818*/
    1919
    20 #include <stdint.h>
    21 #include <stdbool.h>
    22 
     20#include <Python.h>
    2321#include "includes.h"
    2422#include "param/param.h"
    2523#include "param/loadparm.h"
    26 #include <Python.h>
    27 #include "pytalloc.h"
     24#include "lib/talloc/pytalloc.h"
     25#include "dynconfig/dynconfig.h"
    2826
    2927/* There's no Py_ssize_t in 2.4, apparently */
     
    3331#endif
    3432
    35 #ifndef Py_RETURN_NONE
    36 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
    37 #endif
    38 
    3933#define PyLoadparmContext_AsLoadparmContext(obj) py_talloc_get_type(obj, struct loadparm_context)
    40 
    41 PyAPI_DATA(PyTypeObject) PyLoadparmContext;
    42 PyAPI_DATA(PyTypeObject) PyLoadparmService;
     34#define PyLoadparmService_AsLoadparmService(obj) py_talloc_get_type(obj, struct loadparm_service)
     35
     36extern PyTypeObject PyLoadparmContext;
     37extern PyTypeObject PyLoadparmService;
    4338
    4439PyObject *PyLoadparmService_FromService(struct loadparm_service *service)
     
    4944static PyObject *py_lp_ctx_get_helper(struct loadparm_context *lp_ctx, const char *service_name, const char *param_name)
    5045{
    51     struct parm_struct *parm = NULL;
    52     void *parm_ptr = NULL;
    53     int i;
    54 
    55     if (service_name != NULL) {
    56         struct loadparm_service *service;
    57         /* its a share parameter */
    58         service = lp_service(lp_ctx, service_name);
    59         if (service == NULL) {
    60             return NULL;
    61         }
    62         if (strchr(param_name, ':')) {
    63             /* its a parametric option on a share */
    64             const char *type = talloc_strndup(lp_ctx,
    65                               param_name,
    66                               strcspn(param_name, ":"));
    67             const char *option = strchr(param_name, ':') + 1;
    68             const char *value;
    69             if (type == NULL || option == NULL) {
    70                 return NULL;
    71             }
    72             value = lp_get_parametric(lp_ctx, service, type, option);
    73             if (value == NULL) {
    74                 return NULL;
    75             }
    76             return PyString_FromString(value);
    77         }
    78 
    79         parm = lp_parm_struct(param_name);
    80         if (parm == NULL || parm->pclass == P_GLOBAL) {
    81             return NULL;
    82         }
    83         parm_ptr = lp_parm_ptr(lp_ctx, service, parm);
     46        struct parm_struct *parm = NULL;
     47        void *parm_ptr = NULL;
     48        int i;
     49
     50        if (service_name != NULL && strwicmp(service_name, GLOBAL_NAME) &&
     51                strwicmp(service_name, GLOBAL_NAME2)) {
     52                struct loadparm_service *service;
     53                /* its a share parameter */
     54                service = lpcfg_service(lp_ctx, service_name);
     55                if (service == NULL) {
     56                        return NULL;
     57                }
     58                if (strchr(param_name, ':')) {
     59                        /* its a parametric option on a share */
     60                        const char *type = talloc_strndup(lp_ctx, param_name,
     61                                                                                          strcspn(param_name, ":"));
     62                        const char *option = strchr(param_name, ':') + 1;
     63                        const char *value;
     64                        if (type == NULL || option == NULL) {
     65                        return NULL;
     66                        }
     67                        value = lpcfg_get_parametric(lp_ctx, service, type, option);
     68                        if (value == NULL) {
     69                        return NULL;
     70                        }
     71                        return PyString_FromString(value);
     72                }
     73
     74                parm = lpcfg_parm_struct(param_name);
     75                if (parm == NULL || parm->pclass == P_GLOBAL) {
     76                        return NULL;
     77                }
     78                parm_ptr = lpcfg_parm_ptr(lp_ctx, service, parm);
    8479    } else if (strchr(param_name, ':')) {
    85         /* its a global parametric option */
    86         const char *type = talloc_strndup(lp_ctx,
    87                           param_name, strcspn(param_name, ":"));
    88         const char *option = strchr(param_name, ':') + 1;
    89         const char *value;
    90         if (type == NULL || option == NULL) {
    91             return NULL;
    92         }
    93         value = lp_get_parametric(lp_ctx, NULL, type, option);
    94         if (value == NULL)
    95             return NULL;
    96         return PyString_FromString(value);
    97     } else {
    98         /* its a global parameter */
    99         parm = lp_parm_struct(param_name);
    100         if (parm == NULL) {
    101             return NULL;
    102         }
    103         parm_ptr = lp_parm_ptr(lp_ctx, NULL, parm);
    104     }
    105 
    106     if (parm == NULL || parm_ptr == NULL) {
    107         return NULL;
     80                /* its a global parametric option */
     81                const char *type = talloc_strndup(lp_ctx,
     82                                  param_name, strcspn(param_name, ":"));
     83                const char *option = strchr(param_name, ':') + 1;
     84                const char *value;
     85                if (type == NULL || option == NULL) {
     86                        return NULL;
     87                }
     88                value = lpcfg_get_parametric(lp_ctx, NULL, type, option);
     89                if (value == NULL)
     90                        return NULL;
     91                return PyString_FromString(value);
     92        } else {
     93                /* its a global parameter */
     94                parm = lpcfg_parm_struct(param_name);
     95                if (parm == NULL) {
     96                        return NULL;
     97                }
     98                parm_ptr = lpcfg_parm_ptr(lp_ctx, NULL, parm);
     99        }
     100
     101        if (parm == NULL || parm_ptr == NULL) {
     102                return NULL;
    108103    }
    109104
     
    126121        }
    127122        return NULL;
     123    case P_CMDLIST:
    128124    case P_LIST:
    129125        {
     
    156152                return NULL;
    157153
    158         ret = lp_load(PyLoadparmContext_AsLoadparmContext(self), filename);
     154        ret = lpcfg_load(PyLoadparmContext_AsLoadparmContext(self), filename);
    159155
    160156        if (!ret) {
     
    168164{
    169165        bool ret;
    170         ret = lp_load_default(PyLoadparmContext_AsLoadparmContext(self));
     166        ret = lpcfg_load_default(PyLoadparmContext_AsLoadparmContext(self));
    171167
    172168        if (!ret) {
     
    182178        char *section_name = NULL;
    183179        PyObject *ret;
    184         if (!PyArg_ParseTuple(args, "s|s", &param_name, &section_name))
     180        if (!PyArg_ParseTuple(args, "s|z", &param_name, &section_name))
    185181                return NULL;
    186182
     
    197193                return NULL;
    198194
    199         return PyBool_FromLong(lp_is_myname(PyLoadparmContext_AsLoadparmContext(self), name));
     195        return PyBool_FromLong(lpcfg_is_myname(PyLoadparmContext_AsLoadparmContext(self), name));
    200196}
    201197
     
    206202                return NULL;
    207203
    208         return PyBool_FromLong(lp_is_mydomain(PyLoadparmContext_AsLoadparmContext(self), name));
     204        return PyBool_FromLong(lpcfg_is_mydomain(PyLoadparmContext_AsLoadparmContext(self), name));
    209205}
    210206
     
    216212                return NULL;
    217213
    218         ret = lp_set_cmdline(PyLoadparmContext_AsLoadparmContext(self), name, value);
     214        ret = lpcfg_set_cmdline(PyLoadparmContext_AsLoadparmContext(self), name, value);
    219215        if (!ret) {
    220216                PyErr_SetString(PyExc_RuntimeError, "Unable to set parameter");
     
    244240        PyObject *ret;
    245241        int i;
    246         ret = PyList_New(lp_numservices(lp_ctx));
    247         for (i = 0; i < lp_numservices(lp_ctx); i++) {
    248                 struct loadparm_service *service = lp_servicebynum(lp_ctx, i);
     242        ret = PyList_New(lpcfg_numservices(lp_ctx));
     243        for (i = 0; i < lpcfg_numservices(lp_ctx); i++) {
     244                struct loadparm_service *service = lpcfg_servicebynum(lp_ctx, i);
    249245                if (service != NULL) {
    250                         PyList_SetItem(ret, i, PyString_FromString(lp_servicename(service)));
     246                        PyList_SetItem(ret, i, PyString_FromString(lpcfg_servicename(service)));
    251247                }
    252248        }
    253249        return ret;
    254250}
     251
     252static PyObject *py_lp_dump(PyObject *self, PyObject *args)
     253{
     254        PyObject *py_stream;
     255        bool show_defaults = false;
     256        FILE *f;
     257        struct loadparm_context *lp_ctx = PyLoadparmContext_AsLoadparmContext(self);
     258
     259        if (!PyArg_ParseTuple(args, "O|b", &py_stream, &show_defaults))
     260                return NULL;
     261
     262        f = PyFile_AsFile(py_stream);
     263        if (f == NULL) {
     264                PyErr_SetString(PyExc_TypeError, "Not a file stream");
     265                return NULL;
     266        }
     267
     268        lpcfg_dump(lp_ctx, f, show_defaults, lpcfg_numservices(lp_ctx));
     269
     270        Py_RETURN_NONE;
     271}
     272
    255273
    256274static PyMethodDef py_lp_ctx_methods[] = {
     
    277295        { "services", (PyCFunction)py_lp_ctx_services, METH_NOARGS,
    278296                "S.services() -> list" },
     297        { "dump", (PyCFunction)py_lp_dump, METH_VARARGS,
     298                "S.dump(stream, show_defaults=False)" },
    279299        { NULL }
    280300};
     
    282302static PyObject *py_lp_ctx_default_service(py_talloc_Object *self, void *closure)
    283303{
    284         return PyLoadparmService_FromService(lp_default_service(PyLoadparmContext_AsLoadparmContext(self)));
     304        return PyLoadparmService_FromService(lpcfg_default_service(PyLoadparmContext_AsLoadparmContext(self)));
    285305}
    286306
    287307static PyObject *py_lp_ctx_config_file(py_talloc_Object *self, void *closure)
    288308{
    289         const char *configfile = lp_configfile(PyLoadparmContext_AsLoadparmContext(self));
     309        const char *configfile = lpcfg_configfile(PyLoadparmContext_AsLoadparmContext(self));
    290310        if (configfile == NULL)
    291311                Py_RETURN_NONE;
     
    313333                return NULL;
    314334        }
    315         ret->ptr = loadparm_init(ret->talloc_ctx);
     335        ret->ptr = loadparm_init_global(false);
    316336        return (PyObject *)ret;
    317337}
     
    319339static Py_ssize_t py_lp_ctx_len(py_talloc_Object *self)
    320340{
    321         return lp_numservices(PyLoadparmContext_AsLoadparmContext(self));
     341        return lpcfg_numservices(PyLoadparmContext_AsLoadparmContext(self));
    322342}
    323343
     
    329349                return NULL;
    330350        }
    331         service = lp_service(PyLoadparmContext_AsLoadparmContext(self), PyString_AsString(name));
     351        service = lpcfg_service(PyLoadparmContext_AsLoadparmContext(self), PyString_AsString(name));
    332352        if (service == NULL) {
    333353                PyErr_SetString(PyExc_KeyError, "No such section");
     
    345365        .tp_name = "LoadParm",
    346366        .tp_basicsize = sizeof(py_talloc_Object),
    347         .tp_dealloc = py_talloc_dealloc,
    348367        .tp_getset = py_lp_ctx_getset,
    349368        .tp_methods = py_lp_ctx_methods,
     
    353372};
    354373
     374static PyObject *py_lp_service_dump(PyObject *self, PyObject *args)
     375{
     376        PyObject *py_stream;
     377        bool show_defaults = false;
     378        FILE *f;
     379        struct loadparm_service *service = PyLoadparmService_AsLoadparmService(self);
     380        struct loadparm_service *default_service;
     381        PyObject *py_default_service;
     382
     383        if (!PyArg_ParseTuple(args, "OO|b", &py_stream, &py_default_service,
     384                                                  &show_defaults))
     385                return NULL;
     386
     387        f = PyFile_AsFile(py_stream);
     388        if (f == NULL) {
     389                PyErr_SetString(PyExc_TypeError, "Not a file stream");
     390                return NULL;
     391        }
     392
     393        if (!PyObject_TypeCheck(py_default_service, &PyLoadparmService)) {
     394                PyErr_SetNone(PyExc_TypeError);
     395                return NULL;
     396        }
     397
     398        default_service = PyLoadparmService_AsLoadparmService(py_default_service);
     399
     400        lpcfg_dump_one(f, show_defaults, service, default_service);
     401
     402        Py_RETURN_NONE;
     403}
     404
     405static PyMethodDef py_lp_service_methods[] = {
     406        { "dump", (PyCFunction)py_lp_service_dump, METH_VARARGS,
     407                "S.dump(f, default_service, show_defaults=False)" },
     408        { NULL }
     409};
     410
    355411PyTypeObject PyLoadparmService = {
    356412        .tp_name = "LoadparmService",
    357         .tp_dealloc = py_talloc_dealloc,
    358413        .tp_basicsize = sizeof(py_talloc_Object),
     414        .tp_methods = py_lp_service_methods,
    359415        .tp_flags = Py_TPFLAGS_DEFAULT,
    360416};
     
    363419{
    364420    return PyString_FromString(lp_default_path());
     421}
     422
     423static PyObject *py_setup_dir(PyObject *self)
     424{
     425    return PyString_FromString(dyn_SETUPDIR);
    365426}
    366427
     
    368429    { "default_path", (PyCFunction)py_default_path, METH_NOARGS,
    369430        "Returns the default smb.conf path." },
     431    { "setup_dir", (PyCFunction)py_setup_dir, METH_NOARGS,
     432        "Returns the compiled in location of provision tempates." },
    370433    { NULL }
    371434};
     
    374437{
    375438        PyObject *m;
     439        PyTypeObject *talloc_type = PyTalloc_GetObjectType();
     440        if (talloc_type == NULL)
     441                return;
     442
     443        PyLoadparmContext.tp_base = talloc_type;
     444        PyLoadparmService.tp_base = talloc_type;
    376445
    377446        if (PyType_Ready(&PyLoadparmContext) < 0)
     447                return;
     448
     449        if (PyType_Ready(&PyLoadparmService) < 0)
    378450                return;
    379451
  • vendor/current/source4/param/pyparam.h

    r414 r740  
    2121#define _PYPARAM_H_
    2222
    23 _PUBLIC_ struct loadparm_context *lp_from_py_object(PyObject *py_obj);
     23#include "param/param.h"
     24
     25_PUBLIC_ struct loadparm_context *lpcfg_from_py_object(TALLOC_CTX *mem_ctx, PyObject *py_obj);
    2426_PUBLIC_ struct loadparm_context *py_default_loadparm_context(TALLOC_CTX *mem_ctx);
    2527
  • vendor/current/source4/param/pyparam_util.c

    r414 r740  
    1818*/
    1919
    20 #include <stdint.h>
    21 #include <stdbool.h>
    22 
     20#include <Python.h>
    2321#include "includes.h"
    2422#include "param/param.h"
    2523#include "param/loadparm.h"
    26 #include <Python.h>
    27 #include "pytalloc.h"
     24#include "lib/talloc/pytalloc.h"
    2825
    2926#define PyLoadparmContext_AsLoadparmContext(obj) py_talloc_get_type(obj, struct loadparm_context)
    3027
    31 _PUBLIC_ struct loadparm_context *lp_from_py_object(PyObject *py_obj)
     28_PUBLIC_ struct loadparm_context *lpcfg_from_py_object(TALLOC_CTX *mem_ctx, PyObject *py_obj)
    3229{
    33     struct loadparm_context *lp_ctx;
     30        struct loadparm_context *lp_ctx;
     31        PyObject *param_mod;
     32        PyTypeObject *lp_type;
     33        bool is_lpobj;
    3434
    35     if (PyString_Check(py_obj)) {
    36         lp_ctx = loadparm_init(NULL);
    37         if (!lp_load(lp_ctx, PyString_AsString(py_obj))) {
    38             talloc_free(lp_ctx);
     35        if (PyString_Check(py_obj)) {
     36                lp_ctx = loadparm_init_global(false);
     37                if (!lpcfg_load(lp_ctx, PyString_AsString(py_obj))) {
    3938                        PyErr_Format(PyExc_RuntimeError, "Unable to load %s",
    40                                                 PyString_AsString(py_obj));
    41             return NULL;
    42         }
    43         return lp_ctx;
    44     }
     39                                    PyString_AsString(py_obj));
     40                        return NULL;
     41                }
     42                return lp_ctx;
     43        }
    4544
    46     if (py_obj == Py_None) {
    47         lp_ctx = loadparm_init(NULL);
    48                 /* We're not checking that loading the file succeeded *on purpose */
    49         lp_load_default(lp_ctx);
    50         return lp_ctx;
    51     }
     45        if (py_obj == Py_None) {
     46                return loadparm_init_global(true);
     47        }
    5248
    53     return PyLoadparmContext_AsLoadparmContext(py_obj);
     49        param_mod = PyImport_ImportModule("samba.param");
     50        if (param_mod == NULL) {
     51                return NULL;
     52        }
     53
     54        lp_type = (PyTypeObject *)PyObject_GetAttrString(param_mod, "LoadParm");
     55        Py_DECREF(param_mod);
     56        if (lp_type == NULL) {
     57                PyErr_SetString(PyExc_RuntimeError, "Unable to import LoadParm");
     58                return NULL;
     59        }
     60
     61        is_lpobj = PyObject_TypeCheck(py_obj, lp_type);
     62        Py_DECREF(lp_type);
     63        if (is_lpobj) {
     64                return talloc_reference(mem_ctx, PyLoadparmContext_AsLoadparmContext(py_obj));
     65        }
     66
     67        PyErr_SetNone(PyExc_TypeError);
     68        return NULL;
    5469}
    5570
    5671struct loadparm_context *py_default_loadparm_context(TALLOC_CTX *mem_ctx)
    5772{
    58     struct loadparm_context *ret;
    59     ret = loadparm_init(mem_ctx);
    60     if (!lp_load_default(ret))
    61         return NULL;
    62     return ret;
     73        return loadparm_init_global(true);
    6374}
    6475
  • vendor/current/source4/param/samba-hostconfig.pc.in

    r414 r740  
    66Name: samba-hostconfig
    77Description: Host-wide Samba configuration
    8 Version: 0.0.1
    9 Libs: -L${libdir} -lsamba-hostconfig
     8Version: @PACKAGE_VERSION@
     9Libs: @LIB_RPATH@ -L${libdir} -lsamba-hostconfig
    1010Cflags: -I${includedir}  -DHAVE_IMMEDIATE_STRUCTURES=1
  • vendor/current/source4/param/secrets.c

    r414 r740  
    2626#include "param/param.h"
    2727#include "system/filesys.h"
    28 #include "tdb_wrap.h"
    29 #include "lib/ldb/include/ldb.h"
    30 #include "../tdb/include/tdb.h"
     28#include "lib/util/tdb_wrap.h"
     29#include "lib/ldb-samba/ldb_wrap.h"
     30#include <ldb.h>
    3131#include "../lib/util/util_tdb.h"
    32 #include "../lib/util/util_ldb.h"
    3332#include "librpc/gen_ndr/ndr_security.h"
     33#include "dsdb/samdb/samdb.h"
    3434
    3535/**
     
    8787*/
    8888struct ldb_context *secrets_db_connect(TALLOC_CTX *mem_ctx,
    89                                         struct tevent_context *ev_ctx,
    9089                                        struct loadparm_context *lp_ctx)
    9190{
    92         char *path;
    93         const char *url;
    94         struct ldb_context *ldb;
    95 
    96         url = lp_secrets_url(lp_ctx);
    97         if (!url || !url[0]) {
    98                 return NULL;
    99         }
    100 
    101         path = private_path(mem_ctx, lp_ctx, url);
    102         if (!path) {
    103                 return NULL;
    104         }
    105 
    106         /* Secrets.ldb *must* always be local.  If we call for a
    107          * system_session() we will recurse */
    108         ldb = ldb_init(mem_ctx, ev_ctx);
    109         if (!ldb) {
    110                 talloc_free(path);
    111                 return NULL;
    112         }
    113 
    114         ldb_set_modules_dir(ldb,
    115                             talloc_asprintf(ldb, "%s/ldb", lp_modulesdir(lp_ctx)));
    116 
    117         if (ldb_connect(ldb, path, 0, NULL) != 0) {
    118                 talloc_free(path);
    119                 return NULL;
    120         }
    121 
    122         /* the update_keytab module relies on this being setup */
    123         if (ldb_set_opaque(ldb, "loadparm", lp_ctx) != LDB_SUCCESS) {
    124                 talloc_free(path);
    125                 talloc_free(ldb);
    126                 return NULL;
    127         }
    128 
    129         talloc_free(path);
    130        
    131         return ldb;
     91        return ldb_wrap_connect(mem_ctx, NULL, lp_ctx, lpcfg_secrets_url(lp_ctx),
     92                               NULL, NULL, 0);
    13293}
    13394
     
    13798 */
    13899struct dom_sid *secrets_get_domain_sid(TALLOC_CTX *mem_ctx,
    139                                        struct tevent_context *ev_ctx,
    140100                                       struct loadparm_context *lp_ctx,
    141                                        const char *domain)
     101                                       const char *domain,
     102                                       enum netr_SchannelType *sec_channel_type,
     103                                       char **errstring)
    142104{
    143105        struct ldb_context *ldb;
    144         struct ldb_message **msgs;
     106        struct ldb_message *msg;
    145107        int ldb_ret;
    146         const char *attrs[] = { "objectSid", NULL };
     108        const char *attrs[] = { "objectSid", "secureChannelType", NULL };
    147109        struct dom_sid *result = NULL;
    148110        const struct ldb_val *v;
    149111        enum ndr_err_code ndr_err;
    150112
    151         ldb = secrets_db_connect(mem_ctx, ev_ctx, lp_ctx);
     113        *errstring = NULL;
     114
     115        ldb = secrets_db_connect(mem_ctx, lp_ctx);
    152116        if (ldb == NULL) {
    153117                DEBUG(5, ("secrets_db_connect failed\n"));
     
    155119        }
    156120
    157         ldb_ret = gendb_search(ldb, ldb,
    158                                ldb_dn_new(mem_ctx, ldb, SECRETS_PRIMARY_DOMAIN_DN),
    159                                &msgs, attrs,
    160                               SECRETS_PRIMARY_DOMAIN_FILTER, domain);
     121        ldb_ret = dsdb_search_one(ldb, ldb, &msg,
     122                              ldb_dn_new(mem_ctx, ldb, SECRETS_PRIMARY_DOMAIN_DN),
     123                              LDB_SCOPE_ONELEVEL,
     124                              attrs, 0, SECRETS_PRIMARY_DOMAIN_FILTER, domain);
    161125
    162         if (ldb_ret == -1) {
    163                 DEBUG(5, ("Error searching for domain SID for %s: %s",
    164                           domain, ldb_errstring(ldb)));
    165                 talloc_free(ldb);
     126        if (ldb_ret != LDB_SUCCESS) {
     127                *errstring = talloc_asprintf(mem_ctx, "Failed to find record for %s in %s: %s: %s",
     128                                             domain, (char *) ldb_get_opaque(ldb, "ldb_url"),
     129                                             ldb_strerror(ldb_ret), ldb_errstring(ldb));
     130                return NULL;
     131        }
     132        v = ldb_msg_find_ldb_val(msg, "objectSid");
     133        if (v == NULL) {
     134                *errstring = talloc_asprintf(mem_ctx, "Failed to find a SID on record for %s in %s",
     135                                             domain, (char *) ldb_get_opaque(ldb, "ldb_url"));
    166136                return NULL;
    167137        }
    168138
    169         if (ldb_ret == 0) {
    170                 DEBUG(5, ("Did not find domain record for %s\n", domain));
    171                 talloc_free(ldb);
    172                 return NULL;
     139        if (sec_channel_type) {
     140                int t;
     141                t = ldb_msg_find_attr_as_int(msg, "secureChannelType", -1);
     142                if (t == -1) {
     143                        *errstring = talloc_asprintf(mem_ctx, "Failed to find secureChannelType for %s in %s",
     144                                                     domain, (char *) ldb_get_opaque(ldb, "ldb_url"));
     145                        return NULL;
     146                }
     147                *sec_channel_type = t;
    173148        }
    174149
    175         if (ldb_ret > 1) {
    176                 DEBUG(5, ("Found more than one (%d) domain records for %s\n",
    177                           ldb_ret, domain));
    178                 talloc_free(ldb);
    179                 return NULL;
    180         }
    181 
    182         v = ldb_msg_find_ldb_val(msgs[0], "objectSid");
    183         if (v == NULL) {
    184                 DEBUG(0, ("Domain object for %s does not contain a SID!\n",
    185                           domain));
    186                 return NULL;
    187         }
    188150        result = talloc(mem_ctx, struct dom_sid);
    189151        if (result == NULL) {
     
    192154        }
    193155
    194         ndr_err = ndr_pull_struct_blob(v, result, NULL, result,
     156        ndr_err = ndr_pull_struct_blob(v, result, result,
    195157                                       (ndr_pull_flags_fn_t)ndr_pull_dom_sid);
    196158        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
     159                *errstring = talloc_asprintf(mem_ctx, "Failed to parse SID on record for %s in %s",
     160                                             domain, (char *) ldb_get_opaque(ldb, "ldb_url"));
    197161                talloc_free(result);
    198162                talloc_free(ldb);
     
    202166        return result;
    203167}
     168
     169char *keytab_name_from_msg(TALLOC_CTX *mem_ctx, struct ldb_context *ldb, struct ldb_message *msg)
     170{
     171        const char *krb5keytab = ldb_msg_find_attr_as_string(msg, "krb5Keytab", NULL);
     172        if (krb5keytab) {
     173                return talloc_strdup(mem_ctx, krb5keytab);
     174        } else {
     175                char *file_keytab;
     176                char *relative_path;
     177                const char *privateKeytab = ldb_msg_find_attr_as_string(msg, "privateKeytab", NULL);
     178                if (!privateKeytab) {
     179                        return NULL;
     180                }
     181
     182                relative_path = ldb_relative_path(ldb, mem_ctx, privateKeytab);
     183                if (!relative_path) {
     184                        return NULL;
     185                }
     186                file_keytab = talloc_asprintf(mem_ctx, "FILE:%s", relative_path);
     187                talloc_free(relative_path);
     188                return file_keytab;
     189        }
     190        return NULL;
     191}
     192
  • vendor/current/source4/param/secrets.h

    r414 r740  
    2727#define SECRETS_KRBTGT_SEARCH "(&((|(realm=%s)(flatname=%s))(samAccountName=krbtgt)))"
    2828#define SECRETS_PRINCIPAL_SEARCH "(&(|(realm=%s)(flatname=%s))(servicePrincipalName=%s))"
    29 #define SECRETS_LDAP_FILTER "(objectclass=ldapSecret)"
     29#define SECRETS_LDAP_FILTER "(&(objectclass=ldapSecret)(cn=SAMDB Credentials))"
    3030
    3131/**
     
    3939struct loadparm_context;
    4040struct tevent_context;
     41struct ldb_message;
     42struct ldb_context;
     43
     44#include "librpc/gen_ndr/misc.h"
     45
    4146struct tdb_wrap *secrets_init(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
    42 struct ldb_context *secrets_db_connect(TALLOC_CTX *mem_ctx, struct tevent_context *ev_ctx, struct loadparm_context *lp_ctx);
    43 struct dom_sid *secrets_get_domain_sid(TALLOC_CTX *mem_ctx, struct tevent_context *ev_ctx, struct loadparm_context *lp_ctx, const char *domain);
     47struct ldb_context *secrets_db_connect(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
     48struct dom_sid *secrets_get_domain_sid(TALLOC_CTX *mem_ctx,
     49                                       struct loadparm_context *lp_ctx,
     50                                       const char *domain,
     51                                       enum netr_SchannelType *sec_channel_type,
     52                                       char **errstring);
     53char *keytab_name_from_msg(TALLOC_CTX *mem_ctx, struct ldb_context *ldb, struct ldb_message *msg);
    4454
    4555
  • vendor/current/source4/param/share.c

    r414 r740  
    147147NTSTATUS share_init(void)
    148148{
    149         extern NTSTATUS share_ldb_init(void);
    150         extern NTSTATUS share_classic_init(void);
     149#define _MODULE_PROTO(init) extern NTSTATUS init(void);
     150        STATIC_share_MODULES_PROTO;
    151151        init_module_fn static_init[] = { STATIC_share_MODULES };
    152152
  • vendor/current/source4/param/share.h

    r414 r740  
    6868struct loadparm_context;
    6969
    70 #include "param/share_proto.h"
     70const char *share_string_option(struct share_config *scfg, const char *opt_name, const char *defval);
     71int share_int_option(struct share_config *scfg, const char *opt_name, int defval);
     72bool share_bool_option(struct share_config *scfg, const char *opt_name, bool defval);
     73const char **share_string_list_option(TALLOC_CTX *mem_ctx, struct share_config *scfg, const char *opt_name);
     74NTSTATUS share_list_all(TALLOC_CTX *mem_ctx, struct share_context *sctx, int *count, const char ***names);
     75NTSTATUS share_get_config(TALLOC_CTX *mem_ctx, struct share_context *sctx, const char *name, struct share_config **scfg);
     76NTSTATUS share_create(struct share_context *sctx, const char *name, struct share_info *info, int count);
     77NTSTATUS share_set(struct share_context *sctx, const char *name, struct share_info *info, int count);
     78NTSTATUS share_remove(struct share_context *sctx, const char *name);
     79NTSTATUS share_register(const struct share_ops *ops);
     80NTSTATUS share_get_context_by_name(TALLOC_CTX *mem_ctx, const char *backend_name,
     81                                   struct tevent_context *event_ctx,
     82                                   struct loadparm_context *lp_ctx,
     83                                   struct share_context **ctx);
     84NTSTATUS share_init(void);
    7185
    7286/* list of shares options */
  • vendor/current/source4/param/share_classic.c

    r414 r740  
    4848        struct loadparm_service *s = talloc_get_type(scfg->opaque,
    4949                                                     struct loadparm_service);
    50         struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data, 
     50        struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data,
    5151                                                          struct loadparm_context);
    5252        char *parm, *val;
     
    6262                val++;
    6363
    64                 ret = lp_parm_string(lp_ctx, s, parm, val);
     64                ret = lpcfg_parm_string(lp_ctx, s, parm, val);
    6565                if (!ret) {
    6666                        ret = defval;
     
    7575
    7676        if (strcmp(opt_name, SHARE_PATH) == 0) {
    77                 return lp_pathname(s, lp_default_service(lp_ctx));
     77                return lpcfg_pathname(s, lpcfg_default_service(lp_ctx));
    7878        }
    7979
    8080        if (strcmp(opt_name, SHARE_COMMENT) == 0) {
    81                 return lp_comment(s, lp_default_service(lp_ctx));
     81                return lpcfg_comment(s, lpcfg_default_service(lp_ctx));
    8282        }
    8383
    8484        if (strcmp(opt_name, SHARE_VOLUME) == 0) {
    85                 return volume_label(s, lp_default_service(lp_ctx));
     85                return volume_label(s, lpcfg_default_service(lp_ctx));
    8686        }
    8787
    8888        if (strcmp(opt_name, SHARE_TYPE) == 0) {
    89                 if (lp_print_ok(s, lp_default_service(lp_ctx))) {
     89                if (lpcfg_print_ok(s, lpcfg_default_service(lp_ctx))) {
    9090                        return "PRINTER";
    9191                }
    92                 if (strcmp("NTFS", lp_fstype(s, lp_default_service(lp_ctx))) == 0) {
     92                if (strcmp("NTFS", lpcfg_fstype(s, lpcfg_default_service(lp_ctx))) == 0) {
    9393                        return "DISK";
    9494                }
    95                 return lp_fstype(s, lp_default_service(lp_ctx));
     95                return lpcfg_fstype(s, lpcfg_default_service(lp_ctx));
    9696        }
    9797
     
    110110        struct loadparm_service *s = talloc_get_type(scfg->opaque,
    111111                                                     struct loadparm_service);
    112         struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data, 
     112        struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data,
    113113                                                          struct loadparm_context);
    114114        char *parm, *val;
     
    124124                val++;
    125125
    126                 ret = lp_parm_int(lp_ctx, s, parm, val, defval);
     126                ret = lpcfg_parm_int(lp_ctx, s, parm, val, defval);
    127127                if (!ret) {
    128128                        ret = defval;
     
    133133
    134134        if (strcmp(opt_name, SHARE_CSC_POLICY) == 0) {
    135                 return lp_csc_policy(s, lp_default_service(lp_ctx));
     135                return lpcfg_csc_policy(s, lpcfg_default_service(lp_ctx));
    136136        }
    137137
    138138        if (strcmp(opt_name, SHARE_MAX_CONNECTIONS) == 0) {
    139                 return lp_max_connections(s, lp_default_service(lp_ctx));
     139                return lpcfg_max_connections(s, lpcfg_default_service(lp_ctx));
    140140        }
    141141
    142142        if (strcmp(opt_name, SHARE_CREATE_MASK) == 0) {
    143                 return lp_create_mask(s, lp_default_service(lp_ctx));
     143                return lpcfg_create_mask(s, lpcfg_default_service(lp_ctx));
    144144        }
    145145
    146146        if (strcmp(opt_name, SHARE_DIR_MASK) == 0) {
    147                 return lp_dir_mask(s, lp_default_service(lp_ctx));
     147                return lpcfg_dir_mask(s, lpcfg_default_service(lp_ctx));
    148148        }
    149149
    150150        if (strcmp(opt_name, SHARE_FORCE_DIR_MODE) == 0) {
    151                 return lp_force_dir_mode(s, lp_default_service(lp_ctx));
     151                return lpcfg_force_dir_mode(s, lpcfg_default_service(lp_ctx));
    152152        }
    153153
    154154        if (strcmp(opt_name, SHARE_FORCE_CREATE_MODE) == 0) {
    155                 return lp_force_create_mode(s, lp_default_service(lp_ctx));
     155                return lpcfg_force_create_mode(s, lpcfg_default_service(lp_ctx));
    156156        }
    157157
     
    168168        struct loadparm_service *s = talloc_get_type(scfg->opaque,
    169169                                                     struct loadparm_service);
    170         struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data, 
     170        struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data,
    171171                                                          struct loadparm_context);
    172172        char *parm, *val;
     
    182182                val++;
    183183
    184                 ret = lp_parm_bool(lp_ctx, s, parm, val, defval);
     184                ret = lpcfg_parm_bool(lp_ctx, s, parm, val, defval);
    185185                talloc_free(parm);
    186186                return ret;
     
    192192
    193193        if (strcmp(opt_name, SHARE_BROWSEABLE) == 0) {
    194                 return lp_browseable(s, lp_default_service(lp_ctx));
     194                return lpcfg_browseable(s, lpcfg_default_service(lp_ctx));
    195195        }
    196196
    197197        if (strcmp(opt_name, SHARE_READONLY) == 0) {
    198                 return lp_readonly(s, lp_default_service(lp_ctx));
     198                return lpcfg_readonly(s, lpcfg_default_service(lp_ctx));
    199199        }
    200200
    201201        if (strcmp(opt_name, SHARE_MAP_SYSTEM) == 0) {
    202                 return lp_map_system(s, lp_default_service(lp_ctx));
     202                return lpcfg_map_system(s, lpcfg_default_service(lp_ctx));
    203203        }
    204204
    205205        if (strcmp(opt_name, SHARE_MAP_HIDDEN) == 0) {
    206                 return lp_map_hidden(s, lp_default_service(lp_ctx));
     206                return lpcfg_map_hidden(s, lpcfg_default_service(lp_ctx));
    207207        }
    208208
    209209        if (strcmp(opt_name, SHARE_MAP_ARCHIVE) == 0) {
    210                 return lp_map_archive(s, lp_default_service(lp_ctx));
     210                return lpcfg_map_archive(s, lpcfg_default_service(lp_ctx));
    211211        }
    212212
    213213        if (strcmp(opt_name, SHARE_STRICT_LOCKING) == 0) {
    214                 return lp_strict_locking(s, lp_default_service(lp_ctx));
     214                return lpcfg_strict_locking(s, lpcfg_default_service(lp_ctx));
    215215        }
    216216
    217217        if (strcmp(opt_name, SHARE_OPLOCKS) == 0) {
    218                 return lp_oplocks(s, lp_default_service(lp_ctx));
     218                return lpcfg_oplocks(s, lpcfg_default_service(lp_ctx));
    219219        }
    220220
    221221        if (strcmp(opt_name, SHARE_STRICT_SYNC) == 0) {
    222                 return lp_strict_sync(s, lp_default_service(lp_ctx));
     222                return lpcfg_strict_sync(s, lpcfg_default_service(lp_ctx));
    223223        }
    224224
    225225        if (strcmp(opt_name, SHARE_MSDFS_ROOT) == 0) {
    226                 return lp_msdfs_root(s, lp_default_service(lp_ctx));
     226                return lpcfg_msdfs_root(s, lpcfg_default_service(lp_ctx));
    227227        }
    228228
    229229        if (strcmp(opt_name, SHARE_CI_FILESYSTEM) == 0) {
    230                 return lp_ci_filesystem(s, lp_default_service(lp_ctx));
     230                return lpcfg_ci_filesystem(s, lpcfg_default_service(lp_ctx));
    231231        }
    232232
     
    241241        struct loadparm_service *s = talloc_get_type(scfg->opaque,
    242242                                                     struct loadparm_service);
    243         struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data, 
     243        struct loadparm_context *lp_ctx = talloc_get_type(scfg->ctx->priv_data,
    244244                                                          struct loadparm_context);
    245245        char *parm, *val;
     
    255255                val++;
    256256
    257                 ret = lp_parm_string_list(mem_ctx, lp_ctx, s, parm, val, ",;");
     257                ret = lpcfg_parm_string_list(mem_ctx, lp_ctx, s, parm, val, ",;");
    258258                talloc_free(parm);
    259259                return ret;
     
    261261
    262262        if (strcmp(opt_name, SHARE_HOSTS_ALLOW) == 0) {
    263                 return lp_hostsallow(s, lp_default_service(lp_ctx));
     263                return lpcfg_hostsallow(s, lpcfg_default_service(lp_ctx));
    264264        }
    265265
    266266        if (strcmp(opt_name, SHARE_HOSTS_DENY) == 0) {
    267                 return lp_hostsdeny(s, lp_default_service(lp_ctx));
     267                return lpcfg_hostsdeny(s, lpcfg_default_service(lp_ctx));
    268268        }
    269269
    270270        if (strcmp(opt_name, SHARE_NTVFS_HANDLER) == 0) {
    271                 return lp_ntvfs_handler(s, lp_default_service(lp_ctx));
     271                return lpcfg_ntvfs_handler(s, lpcfg_default_service(lp_ctx));
    272272        }
    273273
     
    287287        const char **n;
    288288       
    289         num_services = lp_numservices((struct loadparm_context *)ctx->priv_data);
     289        num_services = lpcfg_numservices((struct loadparm_context *)ctx->priv_data);
    290290
    291291        n = talloc_array(mem_ctx, const char *, num_services);
     
    296296
    297297        for (i = 0; i < num_services; i++) {
    298                 n[i] = talloc_strdup(n, lp_servicename(lp_servicebynum((struct loadparm_context *)ctx->priv_data, i)));
     298                n[i] = talloc_strdup(n, lpcfg_servicename(lpcfg_servicebynum((struct loadparm_context *)ctx->priv_data, i)));
    299299                if (!n[i]) {
    300300                        DEBUG(0,("ERROR: Out of memory!\n"));
     
    318318        struct loadparm_service *service;
    319319
    320         service = lp_service((struct loadparm_context *)ctx->priv_data, name);
     320        service = lpcfg_service((struct loadparm_context *)ctx->priv_data, name);
    321321
    322322        if (service == NULL) {
     
    330330        }
    331331
    332         s->name = talloc_strdup(s, lp_servicename(service));
     332        s->name = talloc_strdup(s, lpcfg_servicename(service));
    333333        if (!s->name) {
    334334                DEBUG(0,("ERROR: Out of memory!\n"));
  • vendor/current/source4/param/share_ldb.c

    r414 r740  
    2121
    2222#include "includes.h"
    23 #include "ldb/include/ldb.h"
    24 #include "ldb/include/ldb_errors.h"
     23#include <ldb.h>
     24#include <ldb_errors.h>
    2525#include "auth/auth.h"
    2626#include "ldb_wrap.h"
     
    4141        }
    4242       
    43         sdb = ldb_wrap_connect(*ctx, ev_ctx, lp_ctx, 
     43        sdb = ldb_wrap_connect(*ctx, ev_ctx, lp_ctx,
    4444                               private_path(*ctx, lp_ctx, "share.ldb"),
    45                                system_session(*ctx, lp_ctx),
    46                                NULL, 0, NULL);
     45                               system_session(lp_ctx),
     46                               NULL, 0);
    4747
    4848        if (!sdb) {
  • vendor/current/source4/param/tests/loadparm.c

    r414 r740  
    3333{
    3434        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    35         torture_assert(tctx, lp_set_option(lp_ctx, "workgroup=werkgroep"), "lp_set_option failed");
    36         torture_assert_str_equal(tctx, "WERKGROEP", lp_workgroup(lp_ctx), "workgroup");
     35        torture_assert(tctx, lpcfg_set_option(lp_ctx, "workgroup=werkgroep"), "lpcfg_set_option failed");
     36        torture_assert_str_equal(tctx, "WERKGROEP", lpcfg_workgroup(lp_ctx), "workgroup");
    3737        return true;
    3838}
     
    4141{
    4242        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    43         torture_assert(tctx, lp_set_cmdline(lp_ctx, "workgroup", "werkgroep"), "lp_set_cmdline failed");
    44         torture_assert(tctx, lp_do_global_parameter(lp_ctx, "workgroup", "barbla"), "lp_set_option failed");
    45         torture_assert_str_equal(tctx, "WERKGROEP", lp_workgroup(lp_ctx), "workgroup");
     43        torture_assert(tctx, lpcfg_set_cmdline(lp_ctx, "workgroup", "werkgroep"), "lpcfg_set_cmdline failed");
     44        torture_assert(tctx, lpcfg_do_global_parameter(lp_ctx, "workgroup", "barbla"), "lpcfg_set_option failed");
     45        torture_assert_str_equal(tctx, "WERKGROEP", lpcfg_workgroup(lp_ctx), "workgroup");
    4646        return true;
    4747}
     
    5050{
    5151        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    52         torture_assert(tctx, lp_do_global_parameter(lp_ctx, "workgroup", "werkgroep42"),
    53                        "lp_set_cmdline failed");
    54         torture_assert_str_equal(tctx, lp_workgroup(lp_ctx), "WERKGROEP42", "workgroup");
     52        torture_assert(tctx, lpcfg_do_global_parameter(lp_ctx, "workgroup", "werkgroep42"),
     53                       "lpcfg_set_cmdline failed");
     54        torture_assert_str_equal(tctx, lpcfg_workgroup(lp_ctx), "WERKGROEP42", "workgroup");
    5555        return true;
    5656}
     
    6060{
    6161        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    62         torture_assert(tctx, lp_do_global_parameter_var(lp_ctx, "workgroup", "werk%s%d", "groep", 42),
    63                        "lp_set_cmdline failed");
    64         torture_assert_str_equal(tctx, lp_workgroup(lp_ctx), "WERKGROEP42", "workgroup");
     62        torture_assert(tctx, lpcfg_do_global_parameter_var(lp_ctx, "workgroup", "werk%s%d", "groep", 42),
     63                       "lpcfg_set_cmdline failed");
     64        torture_assert_str_equal(tctx, lpcfg_workgroup(lp_ctx), "WERKGROEP42", "workgroup");
    6565        return true;
    6666}
     
    7070{
    7171        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    72         torture_assert(tctx, !lp_set_option(lp_ctx, "workgroup"), "lp_set_option succeeded");
     72        torture_assert(tctx, !lpcfg_set_option(lp_ctx, "workgroup"), "lpcfg_set_option succeeded");
    7373        return true;
    7474}
     
    7777{
    7878        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    79         torture_assert(tctx, lp_set_option(lp_ctx, "some:thing=blaat"), "lp_set_option failed");
    80         torture_assert_str_equal(tctx, lp_parm_string(lp_ctx, NULL, "some", "thing"), "blaat",
     79        torture_assert(tctx, lpcfg_set_option(lp_ctx, "some:thing=blaat"), "lpcfg_set_option failed");
     80        torture_assert_str_equal(tctx, lpcfg_parm_string(lp_ctx, NULL, "some", "thing"), "blaat",
    8181                                 "invalid parametric option");
    8282        return true;
     
    8686{
    8787        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    88         torture_assert(tctx, lp_set_option(lp_ctx, "some:thing=3.4"), "lp_set_option failed");
    89         torture_assert(tctx, lp_parm_double(lp_ctx, NULL, "some", "thing", 2.0) == 3.4,
     88        torture_assert(tctx, lpcfg_set_option(lp_ctx, "some:thing=3.4"), "lpcfg_set_option failed");
     89        torture_assert(tctx, lpcfg_parm_double(lp_ctx, NULL, "some", "thing", 2.0) == 3.4,
    9090                                 "invalid parametric option");
    91         torture_assert(tctx, lp_parm_double(lp_ctx, NULL, "some", "bla", 2.0) == 2.0,
     91        torture_assert(tctx, lpcfg_parm_double(lp_ctx, NULL, "some", "bla", 2.0) == 2.0,
    9292                                 "invalid parametric option");
    9393        return true;
     
    9797{
    9898        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    99         torture_assert(tctx, lp_set_option(lp_ctx, "some:thing=true"), "lp_set_option failed");
    100         torture_assert(tctx, lp_parm_bool(lp_ctx, NULL, "some", "thing", false) == true,
     99        torture_assert(tctx, lpcfg_set_option(lp_ctx, "some:thing=true"), "lpcfg_set_option failed");
     100        torture_assert(tctx, lpcfg_parm_bool(lp_ctx, NULL, "some", "thing", false) == true,
    101101                                 "invalid parametric option");
    102         torture_assert(tctx, lp_parm_bool(lp_ctx, NULL, "some", "bla", true) == true,
     102        torture_assert(tctx, lpcfg_parm_bool(lp_ctx, NULL, "some", "bla", true) == true,
    103103                                 "invalid parametric option");
    104104        return true;
     
    108108{
    109109        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    110         torture_assert(tctx, lp_set_option(lp_ctx, "some:thing=34"), "lp_set_option failed");
    111         torture_assert_int_equal(tctx, lp_parm_int(lp_ctx, NULL, "some", "thing", 20), 34,
     110        torture_assert(tctx, lpcfg_set_option(lp_ctx, "some:thing=34"), "lpcfg_set_option failed");
     111        torture_assert_int_equal(tctx, lpcfg_parm_int(lp_ctx, NULL, "some", "thing", 20), 34,
    112112                                 "invalid parametric option");
    113         torture_assert_int_equal(tctx, lp_parm_int(lp_ctx, NULL, "some", "bla", 42), 42,
     113        torture_assert_int_equal(tctx, lpcfg_parm_int(lp_ctx, NULL, "some", "bla", 42), 42,
    114114                                 "invalid parametric option");
    115115        return true;
     
    119119{
    120120        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    121         torture_assert(tctx, lp_set_option(lp_ctx, "some:thing=16K"), "lp_set_option failed");
    122         torture_assert_int_equal(tctx, lp_parm_bytes(lp_ctx, NULL, "some", "thing", 20), 16 * 1024,
     121        torture_assert(tctx, lpcfg_set_option(lp_ctx, "some:thing=16K"), "lpcfg_set_option failed");
     122        torture_assert_int_equal(tctx, lpcfg_parm_bytes(lp_ctx, NULL, "some", "thing", 20), 16 * 1024,
    123123                                 "invalid parametric option");
    124         torture_assert_int_equal(tctx, lp_parm_bytes(lp_ctx, NULL, "some", "bla", 42), 42,
     124        torture_assert_int_equal(tctx, lpcfg_parm_bytes(lp_ctx, NULL, "some", "bla", 42), 42,
    125125                                 "invalid parametric option");
    126126        return true;
     
    130130{
    131131        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    132         struct loadparm_service *service = lp_add_service(lp_ctx, lp_default_service(lp_ctx), "foo");
    133         torture_assert(tctx, lp_do_service_parameter(lp_ctx, service,
    134                                                      "some:thing", "foo"), "lp_set_option failed");
    135         torture_assert_str_equal(tctx, lp_parm_string(lp_ctx, service, "some", "thing"), "foo",
     132        struct loadparm_service *service = lpcfg_add_service(lp_ctx, lpcfg_default_service(lp_ctx), "foo");
     133        torture_assert(tctx, lpcfg_do_service_parameter(lp_ctx, service,
     134                                                     "some:thing", "foo"), "lpcfg_set_option failed");
     135        torture_assert_str_equal(tctx, lpcfg_parm_string(lp_ctx, service, "some", "thing"), "foo",
    136136                                 "invalid parametric option");
    137137        return true;
     
    141141{
    142142        struct loadparm_context *lp_ctx = loadparm_init(tctx);
    143         struct loadparm_service *service = lp_add_service(lp_ctx, lp_default_service(lp_ctx), "foo");
    144         torture_assert(tctx, service == lp_service(lp_ctx, "foo"), "invalid service");
     143        struct loadparm_service *service = lpcfg_add_service(lp_ctx, lpcfg_default_service(lp_ctx), "foo");
     144        torture_assert(tctx, service == lpcfg_service(lp_ctx, "foo"), "invalid service");
    145145        return true;
    146146}
     
    148148struct torture_suite *torture_local_loadparm(TALLOC_CTX *mem_ctx)
    149149{
    150         struct torture_suite *suite = torture_suite_create(mem_ctx, "LOADPARM");
     150        struct torture_suite *suite = torture_suite_create(mem_ctx, "loadparm");
    151151
    152152        torture_suite_add_simple_test(suite, "create", test_create);
     
    160160        torture_suite_add_simple_test(suite, "set_lp_parm_bytes", test_lp_parm_bytes);
    161161        torture_suite_add_simple_test(suite, "service_parameter", test_lp_do_service_parameter);
    162         torture_suite_add_simple_test(suite, "lp_service", test_lp_service);
     162        torture_suite_add_simple_test(suite, "lpcfg_service", test_lp_service);
    163163        torture_suite_add_simple_test(suite, "do_global_parameter_var", test_do_global_parameter_var);
    164164        torture_suite_add_simple_test(suite, "do_global_parameter", test_do_global_parameter);
  • vendor/current/source4/param/tests/share.c

    r414 r740  
    107107        NTSTATUS status;
    108108
    109         status = share_remove(ctx, "nonexistant");
     109        status = share_remove(ctx, "nonexistent");
    110110
    111111        if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED))
     
    199199struct torture_suite *torture_local_share(TALLOC_CTX *mem_ctx)
    200200{
    201         struct torture_suite *suite = torture_suite_create(mem_ctx, "SHARE");
     201        struct torture_suite *suite = torture_suite_create(mem_ctx, "share");
    202202        struct torture_tcase *tcase;
    203203
  • vendor/current/source4/param/util.c

    r414 r740  
    3636
    3737
    38 bool lp_is_mydomain(struct loadparm_context *lp_ctx,
     38bool lpcfg_is_mydomain(struct loadparm_context *lp_ctx,
    3939                             const char *domain)
    4040{
    41         return strequal(lp_workgroup(lp_ctx), domain);
    42 }
    43 
    44 bool lp_is_my_domain_or_realm(struct loadparm_context *lp_ctx,
     41        return strequal(lpcfg_workgroup(lp_ctx), domain);
     42}
     43
     44bool lpcfg_is_my_domain_or_realm(struct loadparm_context *lp_ctx,
    4545                             const char *domain)
    4646{
    47         return strequal(lp_workgroup(lp_ctx), domain) ||
    48                 strequal(lp_realm(lp_ctx), domain);
     47        return strequal(lpcfg_workgroup(lp_ctx), domain) ||
     48                strequal(lpcfg_realm(lp_ctx), domain);
    4949}
    5050
     
    5353  netbios aliases. do a case insensitive match
    5454*/
    55 bool lp_is_myname(struct loadparm_context *lp_ctx, const char *name)
     55bool lpcfg_is_myname(struct loadparm_context *lp_ctx, const char *name)
    5656{
    5757        const char **aliases;
    5858        int i;
    5959
    60         if (strcasecmp(name, lp_netbios_name(lp_ctx)) == 0) {
     60        if (strcasecmp(name, lpcfg_netbios_name(lp_ctx)) == 0) {
    6161                return true;
    6262        }
    6363
    64         aliases = lp_netbios_aliases(lp_ctx);
     64        aliases = lpcfg_netbios_aliases(lp_ctx);
    6565        for (i=0; aliases && aliases[i]; i++) {
    6666                if (strcasecmp(name, aliases[i]) == 0) {
     
    8787        }
    8888
    89         dname = talloc_strdup(mem_ctx, lp_lockdir(lp_ctx));
     89        dname = talloc_strdup(mem_ctx, lpcfg_lockdir(lp_ctx));
    9090        trim_string(dname,"","/");
    9191       
     
    113113{
    114114        char *fname, *config_dir, *p;
    115         config_dir = talloc_strdup(mem_ctx, lp_configfile(lp_ctx));
     115        config_dir = talloc_strdup(mem_ctx, lpcfg_configfile(lp_ctx));
    116116        if (config_dir == NULL) {
    117117                config_dir = talloc_strdup(mem_ctx, lp_default_path());
     
    151151                return talloc_strdup(mem_ctx, name);
    152152        }
    153         fname = talloc_asprintf(mem_ctx, "%s/%s", lp_private_dir(lp_ctx), name);
     153        fname = talloc_asprintf(mem_ctx, "%s/%s", lpcfg_private_dir(lp_ctx), name);
    154154        return fname;
    155155}
     
    161161*/
    162162char *smbd_tmp_path(TALLOC_CTX *mem_ctx,
    163                              struct loadparm_context *lp_ctx, 
     163                             struct loadparm_context *lp_ctx,
    164164                             const char *name)
    165165{
     
    270270                          const char *name)
    271271{
    272         const char *env_moduledir = getenv("LD_SAMBA_MODULE_PATH");
    273272        return talloc_asprintf(mem_ctx, "%s/%s",
    274                                env_moduledir?env_moduledir:lp_modulesdir(lp_ctx),
     273                               lpcfg_modulesdir(lp_ctx),
    275274                               name);
    276275}
     
    294293}
    295294
    296 const char *lp_messaging_path(TALLOC_CTX *mem_ctx,
     295const char *lpcfg_messaging_path(TALLOC_CTX *mem_ctx,
    297296                                       struct loadparm_context *lp_ctx)
    298297{
    299         return smbd_tmp_path(mem_ctx, lp_ctx, "messaging");
    300 }
    301 
    302 struct smb_iconv_convenience *smb_iconv_convenience_init_lp(TALLOC_CTX *mem_ctx,
    303                                                          struct loadparm_context *lp_ctx)
    304 {
    305         return smb_iconv_convenience_init(mem_ctx, lp_dos_charset(lp_ctx),
    306                                           lp_unix_charset(lp_ctx),
    307                 lp_parm_bool(lp_ctx, NULL, "iconv", "native", true));
    308 }
    309 
    310 
    311 const char *lp_sam_name(struct loadparm_context *lp_ctx)
    312 {
    313         switch (lp_server_role(lp_ctx)) {
     298        return smbd_tmp_path(mem_ctx, lp_ctx, "msg");
     299}
     300
     301struct smb_iconv_convenience *smb_iconv_convenience_reinit_lp(TALLOC_CTX *mem_ctx,
     302                                                              struct loadparm_context *lp_ctx,
     303                                                              struct smb_iconv_convenience *old_ic)
     304{
     305        return smb_iconv_convenience_reinit(mem_ctx, lpcfg_dos_charset(lp_ctx),
     306                                            lpcfg_unix_charset(lp_ctx),
     307                                            lpcfg_display_charset(lp_ctx),
     308                                            lpcfg_parm_bool(lp_ctx, NULL, "iconv", "native", true),
     309                                            old_ic);
     310}
     311
     312
     313const char *lpcfg_sam_name(struct loadparm_context *lp_ctx)
     314{
     315        switch (lpcfg_server_role(lp_ctx)) {
    314316        case ROLE_DOMAIN_CONTROLLER:
    315                 return lp_workgroup(lp_ctx);
     317                return lpcfg_workgroup(lp_ctx);
    316318        default:
    317                 return lp_netbios_name(lp_ctx);
    318         }
    319 }
    320 
     319                return lpcfg_netbios_name(lp_ctx);
     320        }
     321}
     322
Note: See TracChangeset for help on using the changeset viewer.