1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00
samba-mirror/lib/param
Garming Sam 0eacbb6c96 param: change snum parameter in special functions to a loadparm_service pointer
Using either an snum or the current service for special functions
depending where it was called is unnecessary and complicates the process
of handling them generically.

idmap parameters now call lpcfg_do_parameter_parametric and are now set
like normal.

Change-Id: I3eca89791274280f9d3c7b987fbd790c16ec7981
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Nadezhda Ivanova <nivanova@samba.org>
2014-07-07 23:32:36 +02:00
..
generic.c lib/param move source4 param code to the top level 2011-10-11 13:41:34 +11:00
loadparm_server_role.c param: Remove _SAMBA_BUILD_ checks from now the autoconf build is gone 2013-05-28 12:17:11 +10:00
loadparm.c param: change snum parameter in special functions to a loadparm_service pointer 2014-07-07 23:32:36 +02:00
loadparm.h param: change snum parameter in special functions to a loadparm_service pointer 2014-07-07 23:32:36 +02:00
param_table.c param: handle smb_ports as a special handler 2014-07-07 23:32:36 +02:00
param.h param: use a single add_to_file_list method 2014-05-07 19:49:15 +02:00
README param: auto generate param_functions.c at build time 2014-02-12 13:17:13 +13:00
s3_param.h param: change snum parameter in special functions to a loadparm_service pointer 2014-07-07 23:32:36 +02:00
samba-hostconfig.pc.in lib/param move source4 param code to the top level 2011-10-11 13:41:34 +11:00
util.c lib/param: Remove special handling for 'state dir' and 'cache dir' 2014-02-12 13:17:13 +13:00
wscript_build param: correctly use param_table.c as a regular C file 2014-05-07 19:49:16 +02:00

libsamba-hostconfig
-------------------

This directory contains "libsamba-hostconfig". 

The libsamba-hostconfig library provides access to all host-wide configuration
such as the configured shares, default parameter values and host secret keys.


Adding a parameter
------------------

To add or change an smb.conf option, you only have to modify
lib/param/param_table.c and add the documentation to docs-xml/smbdotconf.
The rest is generated for you.


Using smb.conf parameters in the code
-------------------------------------

Call the lpcfg_*() function.  To get the lp_ctx, have the caller pass
it to you.  To get a lp_ctx for the source3/param loadparm system, use:

struct loadparm_context *lp_ctx = loadparm_init_s3(tmp_ctx, loadparm_s3_helpers());

Remember to talloc_unlink(tmp_ctx, lp_ctx) the result when you are done!

To get a lp_ctx for the lib/param loadparm system, typically the
pointer is already set up by popt at startup, and is passed down from
cmdline_lp_ctx.

In pure source3/ code, you may use lp_*() functions, but are
encouraged to use the lpcfg_*() functions so that code can be made
common.


How does loadparm_init_s3() work?
---------------------------------

loadparm_s3_helpers() returns a initialised table of function
pointers, pointing at all global lp_*() functions, except for those
that return substituted strings (% macros).  The lpcfg_*() function
then calls this plugged in function, allowing the one function and
pattern to use either loadparm system.


There is a lot of generated code, here, what generates what?
------------------------------------------------------------

The regular format of the CPP macros in param_functions.c is used to
generate up the prototypes (mkproto.pl, mks3param_proto.pl), the service
and globals table (mkparamdefs.pl), the glue table (mmks3param.pl) and
the initilisation of the glue table (mks3param_ctx_table.pl).

I have tried combining some of these, but it just makes the scripts more
complex.

The CPP macros are defined in and expand in lib/param/loadparm.c and
source3/param/loadparm.c to read the values from the generated
stuctures.  They are CPP #included into these files so that the same
macro has two definitions, depending on the system it is loading into.


Why was this done, rather than a 'proper' fix, or just using one system or the other?
-------------------------------------------------------------------------------------

This was done to allow merging from both ends - merging more parts of
the loadparm handling, and merging code that needs to read the
smb.conf, without having to do it all at once.  Ideally
param_functions.c would be generated from param_table.c or (even
better) our XML manpage source, and the CPP macros would instead be
generated expanded as generated C files, but this is a task nobody has
taken on yet.