1 | libsamba-hostconfig
|
---|
2 | -------------------
|
---|
3 |
|
---|
4 | This directory contains "libsamba-hostconfig".
|
---|
5 |
|
---|
6 | The libsamba-hostconfig library provides access to all host-wide configuration
|
---|
7 | such as the configured shares, default parameter values and host secret keys.
|
---|
8 |
|
---|
9 |
|
---|
10 | Adding a parameter
|
---|
11 | ------------------
|
---|
12 |
|
---|
13 | To add or change an smb.conf option, in general you only have to add
|
---|
14 | the documentation to docs-xml/smbdotconf, or change it.
|
---|
15 | In addition to that, if special defaults are needed, the functions
|
---|
16 | loadparm_init() in lib/param/loadparm.c and/or init_globals() in
|
---|
17 | source3/param/loadparm.c need to be adapted accordingly.
|
---|
18 | The rest is generated for you.
|
---|
19 |
|
---|
20 | It is important to get the attributes right in the <samba:parameter ...>
|
---|
21 | tag of the xml files. These determine the details of the generated code.
|
---|
22 |
|
---|
23 | - Supported attributes are name, context, type, constant, function,
|
---|
24 | generated_function, synonym, parm, enumlist, handler, and deprecated.
|
---|
25 | - Supported contexts are 'G' (for global) and 'S' (for share).
|
---|
26 | - Supported types are boolean, boolean-rev, boolean-auto, list,
|
---|
27 | cmdlist, string, ustring, char, integer, bytes, octal, and enum.
|
---|
28 |
|
---|
29 |
|
---|
30 |
|
---|
31 | Using smb.conf parameters in the code
|
---|
32 | -------------------------------------
|
---|
33 |
|
---|
34 | Call the lpcfg_*() function. To get the lp_ctx, have the caller pass
|
---|
35 | it to you. To get a lp_ctx for the source3/param loadparm system, use:
|
---|
36 |
|
---|
37 | struct loadparm_context *lp_ctx = loadparm_init_s3(tmp_ctx, loadparm_s3_helpers());
|
---|
38 |
|
---|
39 | Remember to talloc_unlink(tmp_ctx, lp_ctx) the result when you are done!
|
---|
40 |
|
---|
41 | To get a lp_ctx for the lib/param loadparm system, typically the
|
---|
42 | pointer is already set up by popt at startup, and is passed down from
|
---|
43 | cmdline_lp_ctx.
|
---|
44 |
|
---|
45 | In pure source3/ code, you may use lp_*() functions, but are
|
---|
46 | encouraged to use the lpcfg_*() functions so that code can be made
|
---|
47 | common.
|
---|
48 |
|
---|
49 |
|
---|
50 | How does loadparm_init_s3() work?
|
---|
51 | ---------------------------------
|
---|
52 |
|
---|
53 | loadparm_s3_helpers() returns a initialised table of function
|
---|
54 | pointers, pointing at all global lp_*() functions, except for those
|
---|
55 | that return substituted strings (% macros). The lpcfg_*() function
|
---|
56 | then calls this plugged in function, allowing the one function and
|
---|
57 | pattern to use either loadparm system.
|
---|
58 |
|
---|
59 |
|
---|
60 | There is a lot of generated code, here, what generates what?
|
---|
61 | ------------------------------------------------------------
|
---|
62 |
|
---|
63 | The regular format of the CPP macros in param_functions.c is used to
|
---|
64 | generate up the prototypes (mkproto.pl, mks3param_proto.pl), the service
|
---|
65 | and globals table (mkparamdefs.pl), the glue table (mmks3param.pl) and
|
---|
66 | the initilisation of the glue table (mks3param_ctx_table.pl).
|
---|
67 |
|
---|
68 | I have tried combining some of these, but it just makes the scripts more
|
---|
69 | complex.
|
---|
70 |
|
---|
71 | The CPP macros are defined in and expand in lib/param/loadparm.c and
|
---|
72 | source3/param/loadparm.c to read the values from the generated
|
---|
73 | stuctures. They are CPP #included into these files so that the same
|
---|
74 | macro has two definitions, depending on the system it is loading into.
|
---|
75 |
|
---|
76 |
|
---|
77 | Why was this done, rather than a 'proper' fix, or just using one system or the other?
|
---|
78 | -------------------------------------------------------------------------------------
|
---|
79 |
|
---|
80 | This was done to allow merging from both ends - merging more parts of
|
---|
81 | the loadparm handling, and merging code that needs to read the
|
---|
82 | smb.conf, without having to do it all at once. Ideally
|
---|
83 | param_functions.c would be generated from param_table.c or (even
|
---|
84 | better) our XML manpage source, and the CPP macros would instead be
|
---|
85 | generated expanded as generated C files, but this is a task nobody has
|
---|
86 | taken on yet.
|
---|