root/source4/param/param.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* 
   2    Unix SMB/CIFS implementation.
   3    Generic parameter parsing interface
   4    Copyright (C) Jelmer Vernooij                                          2005
   5    
   6    This program is free software; you can redistribute it and/or modify
   7    it under the terms of the GNU General Public License as published by
   8    the Free Software Foundation; either version 3 of the License, or
   9    (at your option) any later version.
  10    
  11    This program is distributed in the hope that it will be useful,
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14    GNU General Public License for more details.
  15    
  16    You should have received a copy of the GNU General Public License
  17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18 */
  19 
  20 #ifndef _PARAM_H /* _PARAM_H */
  21 #define _PARAM_H 
  22 
  23 struct param_opt {
  24         struct param_opt *prev, *next;
  25         char *key;
  26         char *value;
  27         int priority;
  28 };
  29 
  30 struct param_context {
  31         struct param_section *sections;
  32 };
  33 
  34 struct param_section {
  35         const char *name;
  36         struct param_section *prev, *next;
  37         struct param_opt *parameters;
  38 };
  39 
  40 struct param_context;
  41 struct smbsrv_connection;
  42 
  43 #define Auto (2)
  44 
  45 typedef NTSTATUS (*init_module_fn) (void);
  46 
  47 /* this needs to be a string which is not in the C library. We
  48    previously used "init_module", but that meant that modules which
  49    did not define this function ended up calling the C library
  50    function init_module() which makes a system call */
  51 #define SAMBA_INIT_MODULE "samba_init_module"
  52 
  53 enum server_role {
  54         ROLE_STANDALONE=0,
  55         ROLE_DOMAIN_MEMBER=1,
  56         ROLE_DOMAIN_CONTROLLER=2,
  57 };
  58 
  59 enum announce_as {/* Types of machine we can announce as. */
  60         ANNOUNCE_AS_NT_SERVER=1,
  61         ANNOUNCE_AS_WIN95=2,
  62         ANNOUNCE_AS_WFW=3,
  63         ANNOUNCE_AS_NT_WORKSTATION=4
  64 };
  65 
  66 struct loadparm_context;
  67 struct loadparm_service;
  68 struct smbcli_options;
  69 struct smbcli_session_options;
  70 struct gensec_settings;
  71 
  72 void reload_charcnv(struct loadparm_context *lp_ctx);
  73 
  74 struct loadparm_service *lp_default_service(struct loadparm_context *lp_ctx);
  75 struct parm_struct *lp_parm_table(void);
  76 int lp_server_role(struct loadparm_context *);
  77 const char **lp_smb_ports(struct loadparm_context *);
  78 int lp_nbt_port(struct loadparm_context *);
  79 int lp_dgram_port(struct loadparm_context *);
  80 int lp_cldap_port(struct loadparm_context *);
  81 int lp_krb5_port(struct loadparm_context *);
  82 int lp_kpasswd_port(struct loadparm_context *);
  83 int lp_web_port(struct loadparm_context *);
  84 const char *lp_swat_directory(struct loadparm_context *);
  85 bool lp_tls_enabled(struct loadparm_context *);
  86 char *lp_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
  87 char *lp_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
  88 char *lp_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
  89 char *lp_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
  90 char *lp_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *);
  91 const char *lp_share_backend(struct loadparm_context *);
  92 const char *lp_sam_url(struct loadparm_context *);
  93 const char *lp_idmap_url(struct loadparm_context *);
  94 const char *lp_secrets_url(struct loadparm_context *);
  95 const char *lp_spoolss_url(struct loadparm_context *);
  96 const char *lp_wins_config_url(struct loadparm_context *);
  97 const char *lp_wins_url(struct loadparm_context *);
  98 const char *lp_winbind_separator(struct loadparm_context *);
  99 const char *lp_winbindd_socket_directory(struct loadparm_context *);
 100 const char *lp_winbindd_privileged_socket_directory(struct loadparm_context *);
 101 const char *lp_template_shell(struct loadparm_context *);
 102 const char *lp_template_homedir(struct loadparm_context *);
 103 bool lp_winbind_sealed_pipes(struct loadparm_context *);
 104 bool lp_idmap_trusted_only(struct loadparm_context *);
 105 const char *lp_private_dir(struct loadparm_context *);
 106 const char *lp_serverstring(struct loadparm_context *);
 107 const char *lp_lockdir(struct loadparm_context *);
 108 const char *lp_modulesdir(struct loadparm_context *);
 109 const char *lp_setupdir(struct loadparm_context *);
 110 const char *lp_ncalrpc_dir(struct loadparm_context *);
 111 const char *lp_dos_charset(struct loadparm_context *);
 112 const char *lp_unix_charset(struct loadparm_context *);
 113 const char *lp_display_charset(struct loadparm_context *);
 114 const char *lp_piddir(struct loadparm_context *);
 115 const char **lp_dcerpc_endpoint_servers(struct loadparm_context *);
 116 const char **lp_server_services(struct loadparm_context *);
 117 const char *lp_ntptr_providor(struct loadparm_context *);
 118 const char *lp_auto_services(struct loadparm_context *);
 119 const char *lp_passwd_chat(struct loadparm_context *);
 120 const char **lp_passwordserver(struct loadparm_context *);
 121 const char **lp_name_resolve_order(struct loadparm_context *);
 122 const char *lp_realm(struct loadparm_context *);
 123 const char *lp_socket_options(struct loadparm_context *);
 124 const char *lp_workgroup(struct loadparm_context *);
 125 const char *lp_netbios_name(struct loadparm_context *);
 126 const char *lp_netbios_scope(struct loadparm_context *);
 127 const char **lp_wins_server_list(struct loadparm_context *);
 128 const char **lp_interfaces(struct loadparm_context *);
 129 const char *lp_socket_address(struct loadparm_context *);
 130 const char **lp_netbios_aliases(struct loadparm_context *);
 131 bool lp_disable_netbios(struct loadparm_context *);
 132 bool lp_wins_support(struct loadparm_context *);
 133 bool lp_wins_dns_proxy(struct loadparm_context *);
 134 const char *lp_wins_hook(struct loadparm_context *);
 135 bool lp_local_master(struct loadparm_context *);
 136 bool lp_readraw(struct loadparm_context *);
 137 bool lp_large_readwrite(struct loadparm_context *);
 138 bool lp_writeraw(struct loadparm_context *);
 139 bool lp_null_passwords(struct loadparm_context *);
 140 bool lp_obey_pam_restrictions(struct loadparm_context *);
 141 bool lp_encrypted_passwords(struct loadparm_context *);
 142 bool lp_time_server(struct loadparm_context *);
 143 bool lp_bind_interfaces_only(struct loadparm_context *);
 144 bool lp_unicode(struct loadparm_context *);
 145 bool lp_nt_status_support(struct loadparm_context *);
 146 bool lp_lanman_auth(struct loadparm_context *);
 147 bool lp_ntlm_auth(struct loadparm_context *);
 148 bool lp_client_plaintext_auth(struct loadparm_context *);
 149 bool lp_client_lanman_auth(struct loadparm_context *);
 150 bool lp_client_ntlmv2_auth(struct loadparm_context *);
 151 bool lp_client_use_spnego_principal(struct loadparm_context *);
 152 bool lp_host_msdfs(struct loadparm_context *);
 153 bool lp_unix_extensions(struct loadparm_context *);
 154 bool lp_use_spnego(struct loadparm_context *);
 155 bool lp_rpc_big_endian(struct loadparm_context *);
 156 int lp_max_wins_ttl(struct loadparm_context *);
 157 int lp_min_wins_ttl(struct loadparm_context *);
 158 int lp_maxmux(struct loadparm_context *);
 159 int lp_max_xmit(struct loadparm_context *);
 160 int lp_passwordlevel(struct loadparm_context *);
 161 int lp_srv_maxprotocol(struct loadparm_context *);
 162 int lp_srv_minprotocol(struct loadparm_context *);
 163 int lp_cli_maxprotocol(struct loadparm_context *);
 164 int lp_cli_minprotocol(struct loadparm_context *);
 165 int lp_security(struct loadparm_context *);
 166 bool lp_paranoid_server_security(struct loadparm_context *);
 167 int lp_announce_as(struct loadparm_context *);
 168 
 169 const char *lp_servicename(const struct loadparm_service *service);
 170 const char *lp_pathname(struct loadparm_service *, struct loadparm_service *);
 171 const char **lp_hostsallow(struct loadparm_service *, struct loadparm_service *);
 172 const char **lp_hostsdeny(struct loadparm_service *, struct loadparm_service *);
 173 const char *lp_comment(struct loadparm_service *, struct loadparm_service *);
 174 const char *lp_fstype(struct loadparm_service *, struct loadparm_service *);
 175 const char **lp_ntvfs_handler(struct loadparm_service *, struct loadparm_service *);
 176 bool lp_msdfs_root(struct loadparm_service *, struct loadparm_service *);
 177 bool lp_browseable(struct loadparm_service *, struct loadparm_service *);
 178 bool lp_readonly(struct loadparm_service *, struct loadparm_service *);
 179 bool lp_print_ok(struct loadparm_service *, struct loadparm_service *);
 180 bool lp_map_hidden(struct loadparm_service *, struct loadparm_service *);
 181 bool lp_map_archive(struct loadparm_service *, struct loadparm_service *);
 182 bool lp_strict_locking(struct loadparm_service *, struct loadparm_service *);
 183 bool lp_oplocks(struct loadparm_service *, struct loadparm_service *);
 184 bool lp_strict_sync(struct loadparm_service *, struct loadparm_service *);
 185 bool lp_ci_filesystem(struct loadparm_service *, struct loadparm_service *);
 186 bool lp_map_system(struct loadparm_service *, struct loadparm_service *);
 187 int lp_max_connections(struct loadparm_service *, struct loadparm_service *);
 188 int lp_csc_policy(struct loadparm_service *, struct loadparm_service *);
 189 int lp_create_mask(struct loadparm_service *, struct loadparm_service *);
 190 int lp_force_create_mode(struct loadparm_service *, struct loadparm_service *);
 191 int lp_dir_mask(struct loadparm_service *, struct loadparm_service *);
 192 int lp_force_dir_mode(struct loadparm_service *, struct loadparm_service *);
 193 int lp_server_signing(struct loadparm_context *);
 194 int lp_client_signing(struct loadparm_context *);
 195 const char *lp_ntp_signd_socket_directory(struct loadparm_context *);
 196 
 197 
 198 const char *lp_get_parametric(struct loadparm_context *lp_ctx,
 199                               struct loadparm_service *service,
 200                               const char *type, const char *option);
 201 
 202 const char *lp_parm_string(struct loadparm_context *lp_ctx,
 203                            struct loadparm_service *service, const char *type,
 204                            const char *option);
 205 const char **lp_parm_string_list(TALLOC_CTX *mem_ctx,
 206                                  struct loadparm_context *lp_ctx,
 207                                  struct loadparm_service *service,
 208                                  const char *type,
 209                                  const char *option, const char *separator);
 210 int lp_parm_int(struct loadparm_context *lp_ctx,
 211                 struct loadparm_service *service, const char *type,
 212                 const char *option, int default_v);
 213 int lp_parm_bytes(struct loadparm_context *lp_ctx,
 214                   struct loadparm_service *service, const char *type,
 215                   const char *option, int default_v);
 216 unsigned long lp_parm_ulong(struct loadparm_context *lp_ctx,
 217                             struct loadparm_service *service, const char *type,
 218                             const char *option, unsigned long default_v);
 219 double lp_parm_double(struct loadparm_context *lp_ctx,
 220                       struct loadparm_service *service, const char *type,
 221                       const char *option, double default_v);
 222 bool lp_parm_bool(struct loadparm_context *lp_ctx,
 223                   struct loadparm_service *service, const char *type,
 224                   const char *option, bool default_v);
 225 struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
 226                                      const struct loadparm_service *pservice,
 227                                      const char *name);
 228 bool lp_add_home(struct loadparm_context *lp_ctx,
 229                  const char *pszHomename,
 230                  struct loadparm_service *default_service,
 231                  const char *user, const char *pszHomedir);
 232 bool lp_add_printer(struct loadparm_context *lp_ctx,
 233                     const char *pszPrintername,
 234                     struct loadparm_service *default_service);
 235 struct parm_struct *lp_parm_struct(const char *name);
 236 void *lp_parm_ptr(struct loadparm_context *lp_ctx,
 237                   struct loadparm_service *service, struct parm_struct *parm);
 238 bool lp_file_list_changed(struct loadparm_context *lp_ctx);
 239 
 240 bool lp_do_global_parameter(struct loadparm_context *lp_ctx,
 241                             const char *pszParmName, const char *pszParmValue);
 242 bool lp_do_service_parameter(struct loadparm_context *lp_ctx,
 243                              struct loadparm_service *service,
 244                              const char *pszParmName, const char *pszParmValue);
 245 
 246 /**
 247  * Process a parameter.
 248  */
 249 bool lp_do_global_parameter_var(struct loadparm_context *lp_ctx,
 250                                 const char *pszParmName, const char *fmt, ...);
 251 bool lp_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
 252                     const char *pszParmValue);
 253 bool lp_set_option(struct loadparm_context *lp_ctx, const char *option);
 254 
 255 /**
 256  * Display the contents of a single services record.
 257  */
 258 bool lp_dump_a_parameter(struct loadparm_context *lp_ctx,
 259                          struct loadparm_service *service,
 260                          const char *parm_name, FILE * f);
 261 
 262 /**
 263  * Return info about the next service  in a service. snum==-1 gives the globals.
 264  * Return NULL when out of parameters.
 265  */
 266 struct parm_struct *lp_next_parameter(struct loadparm_context *lp_ctx, int snum, int *i, 
 267                                       int allparameters);
 268 
 269 /**
 270  * Unload unused services.
 271  */
 272 void lp_killunused(struct loadparm_context *lp_ctx,
 273                    struct smbsrv_connection *smb,
 274                    bool (*snumused) (struct smbsrv_connection *, int));
 275 
 276 /**
 277  * Initialise the global parameter structure.
 278  */
 279 struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx);
 280 const char *lp_configfile(struct loadparm_context *lp_ctx);
 281 bool lp_load_default(struct loadparm_context *lp_ctx);
 282 const char *lp_default_path(void);
 283 
 284 /**
 285  * Load the services array from the services file.
 286  *
 287  * Return True on success, False on failure.
 288  */
 289 bool lp_load(struct loadparm_context *lp_ctx, const char *filename);
 290 
 291 /**
 292  * Return the max number of services.
 293  */
 294 int lp_numservices(struct loadparm_context *lp_ctx);
 295 
 296 /**
 297  * Display the contents of the services array in human-readable form.
 298  */
 299 void lp_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
 300              int maxtoprint);
 301 
 302 /**
 303  * Display the contents of one service in human-readable form.
 304  */
 305 void lp_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service, struct loadparm_service *sDefault);
 306 struct loadparm_service *lp_servicebynum(struct loadparm_context *lp_ctx,
 307                                          int snum);
 308 struct loadparm_service *lp_service(struct loadparm_context *lp_ctx,
 309                                     const char *service_name);
 310 
 311 /**
 312  * A useful volume label function.
 313  */
 314 const char *volume_label(struct loadparm_service *service, struct loadparm_service *sDefault);
 315 
 316 /**
 317  * If we are PDC then prefer us as DMB
 318  */
 319 const char *lp_printername(struct loadparm_service *service, struct loadparm_service *sDefault);
 320 
 321 /**
 322  * Return the max print jobs per queue.
 323  */
 324 int lp_maxprintjobs(struct loadparm_service *service, struct loadparm_service *sDefault);
 325 struct smb_iconv_convenience *lp_iconv_convenience(struct loadparm_context *lp_ctx);
 326 void lp_smbcli_options(struct loadparm_context *lp_ctx,
 327                          struct smbcli_options *options);
 328 void lp_smbcli_session_options(struct loadparm_context *lp_ctx,
 329                                  struct smbcli_session_options *options);
 330 struct dcerpc_server_info *lp_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
 331 struct gensec_settings *lp_gensec_settings(TALLOC_CTX *, struct loadparm_context *);
 332 
 333 
 334 /* The following definitions come from param/generic.c  */
 335 
 336 struct param_section *param_get_section(struct param_context *ctx, const char *name);
 337 struct param_opt *param_section_get(struct param_section *section, 
 338                                     const char *name);
 339 struct param_opt *param_get (struct param_context *ctx, const char *name, const char *section_name);
 340 struct param_section *param_add_section(struct param_context *ctx, const char *section_name);
 341 struct param_opt *param_get_add(struct param_context *ctx, const char *name, const char *section_name);
 342 const char *param_get_string(struct param_context *ctx, const char *param, const char *section);
 343 int param_set_string(struct param_context *ctx, const char *param, const char *value, const char *section);
 344 const char **param_get_string_list(struct param_context *ctx, const char *param, const char *separator, const char *section);
 345 int param_set_string_list(struct param_context *ctx, const char *param, const char **list, const char *section);
 346 int param_get_int(struct param_context *ctx, const char *param, int default_v, const char *section);
 347 void param_set_int(struct param_context *ctx, const char *param, int value, const char *section);
 348 unsigned long param_get_ulong(struct param_context *ctx, const char *param, unsigned long default_v, const char *section);
 349 void param_set_ulong(struct param_context *ctx, const char *name, unsigned long value, const char *section);
 350 struct param_context *param_init(TALLOC_CTX *mem_ctx);
 351 int param_read(struct param_context *ctx, const char *fn);
 352 int param_use(struct loadparm_context *lp_ctx, struct param_context *ctx);
 353 int param_write(struct param_context *ctx, const char *fn);
 354 
 355 /* The following definitions come from param/util.c  */
 356 
 357 
 358 /**
 359  * @file
 360  * @brief Misc utility functions
 361  */
 362 bool lp_is_mydomain(struct loadparm_context *lp_ctx, 
 363                              const char *domain);
 364 
 365 /**
 366   see if a string matches either our primary or one of our secondary 
 367   netbios aliases. do a case insensitive match
 368 */
 369 bool lp_is_myname(struct loadparm_context *lp_ctx, const char *name);
 370 
 371 /**
 372  A useful function for returning a path in the Samba lock directory.
 373 **/
 374 char *lock_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
 375                          const char *name);
 376 
 377 /**
 378  * @brief Returns an absolute path to a file in the directory containing the current config file
 379  *
 380  * @param name File to find, relative to the config file directory.
 381  *
 382  * @retval Pointer to a talloc'ed string containing the full path.
 383  **/
 384 char *config_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
 385                            const char *name);
 386 
 387 /**
 388  * @brief Returns an absolute path to a file in the Samba private directory.
 389  *
 390  * @param name File to find, relative to PRIVATEDIR.
 391  * if name is not relative, then use it as-is
 392  *
 393  * @retval Pointer to a talloc'ed string containing the full path.
 394  **/
 395 char *private_path(TALLOC_CTX* mem_ctx, 
 396                             struct loadparm_context *lp_ctx,
 397                             const char *name);
 398 
 399 /**
 400   return a path in the smbd.tmp directory, where all temporary file
 401   for smbd go. If NULL is passed for name then return the directory 
 402   path itself
 403 */
 404 char *smbd_tmp_path(TALLOC_CTX *mem_ctx, 
 405                              struct loadparm_context *lp_ctx, 
 406                              const char *name);
 407 
 408 /**
 409  * Obtain the init function from a shared library file
 410  */
 411 init_module_fn load_module(TALLOC_CTX *mem_ctx, const char *path);
 412 
 413 /**
 414  * Obtain list of init functions from the modules in the specified
 415  * directory
 416  */
 417 init_module_fn *load_modules(TALLOC_CTX *mem_ctx, const char *path);
 418 
 419 /**
 420  * Run the specified init functions.
 421  *
 422  * @return true if all functions ran successfully, false otherwise
 423  */
 424 bool run_init_functions(init_module_fn *fns);
 425 
 426 /**
 427  * Load the initialization functions from DSO files for a specific subsystem.
 428  *
 429  * Will return an array of function pointers to initialization functions
 430  */
 431 init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *subsystem);
 432 const char *lp_messaging_path(TALLOC_CTX *mem_ctx, 
 433                                        struct loadparm_context *lp_ctx);
 434 struct smb_iconv_convenience *smb_iconv_convenience_init_lp(TALLOC_CTX *mem_ctx,
 435                                                          struct loadparm_context *lp_ctx);
 436 
 437 /* The following definitions come from lib/version.c  */
 438 
 439 const char *samba_version_string(void);
 440 
 441 
 442 #endif /* _PARAM_H */

/* [<][>][^][v][top][bottom][index][help] */