mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
param: Autogenerate s3 lp_ctx glue table
This allows us to use more lpcfg_ functions without adding them manually. Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
parent
651cf89390
commit
033dc776de
@ -11,6 +11,7 @@ bld.SAMBA_GENERATOR('s3_param_h',
|
|||||||
target='s3_param.h',
|
target='s3_param.h',
|
||||||
rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}')
|
rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}')
|
||||||
|
|
||||||
|
|
||||||
bld.SAMBA_GENERATOR('param_global_h',
|
bld.SAMBA_GENERATOR('param_global_h',
|
||||||
source= '../../script/mkparamdefs.pl loadparm.c param_functions.c',
|
source= '../../script/mkparamdefs.pl loadparm.c param_functions.c',
|
||||||
target='param_global.h',
|
target='param_global.h',
|
||||||
|
139
script/mks3param_ctx_table.pl
Normal file
139
script/mks3param_ctx_table.pl
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
# Generate loadparm interfaces tables for Samba3/Samba4 integration
|
||||||
|
# by Andrew Bartlett
|
||||||
|
# based on mkproto.pl Written by Jelmer Vernooij
|
||||||
|
# based on the original mkproto.sh by Andrew Tridgell
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
# don't use warnings module as it is not portable enough
|
||||||
|
# use warnings;
|
||||||
|
|
||||||
|
use Getopt::Long;
|
||||||
|
use File::Basename;
|
||||||
|
use File::Path;
|
||||||
|
|
||||||
|
#####################################################################
|
||||||
|
# read a file into a string
|
||||||
|
|
||||||
|
my $file = undef;
|
||||||
|
my $public_define = undef;
|
||||||
|
my $_public = "";
|
||||||
|
my $_private = "";
|
||||||
|
my $public_data = \$_public;
|
||||||
|
my $builddir = ".";
|
||||||
|
my $srcdir = ".";
|
||||||
|
|
||||||
|
sub public($)
|
||||||
|
{
|
||||||
|
my ($d) = @_;
|
||||||
|
$$public_data .= $d;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub usage()
|
||||||
|
{
|
||||||
|
print "Usage: mks3param.pl [options] [c files]\n";
|
||||||
|
print "OPTIONS:\n";
|
||||||
|
print " --srcdir=path Read files relative to this directory\n";
|
||||||
|
print " --builddir=path Write file relative to this directory\n";
|
||||||
|
print " --help Print this help message\n\n";
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetOptions(
|
||||||
|
'file=s' => sub { my ($f,$v) = @_; $file = $v; },
|
||||||
|
'srcdir=s' => sub { my ($f,$v) = @_; $srcdir = $v; },
|
||||||
|
'builddir=s' => sub { my ($f,$v) = @_; $builddir = $v; },
|
||||||
|
'help' => \&usage
|
||||||
|
) or exit(1);
|
||||||
|
|
||||||
|
sub file_load($)
|
||||||
|
{
|
||||||
|
my($filename) = @_;
|
||||||
|
local(*INPUTFILE);
|
||||||
|
open(INPUTFILE, $filename) or return undef;
|
||||||
|
my($saved_delim) = $/;
|
||||||
|
undef $/;
|
||||||
|
my($data) = <INPUTFILE>;
|
||||||
|
close(INPUTFILE);
|
||||||
|
$/ = $saved_delim;
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_header($)
|
||||||
|
{
|
||||||
|
my ($file) = @_;
|
||||||
|
$file->("/* This file was automatically generated by mks3param_ctx.pl. DO NOT EDIT */\n\n");
|
||||||
|
$file->("static const struct loadparm_s3_helpers s3_fns = \n");
|
||||||
|
$file->("{\n");
|
||||||
|
$file->("\t.get_parametric = lp_parm_const_string_service,\n");
|
||||||
|
$file->("\t.get_parm_struct = lp_get_parameter,\n");
|
||||||
|
$file->("\t.get_parm_ptr = lp_parm_ptr,\n");
|
||||||
|
$file->("\t.get_service = lp_service_for_s4_ctx,\n");
|
||||||
|
$file->("\t.get_servicebynum = lp_servicebynum_for_s4_ctx,\n");
|
||||||
|
$file->("\t.get_default_loadparm_service = lp_default_loadparm_service,\n");
|
||||||
|
$file->("\t.get_numservices = lp_numservices,\n");
|
||||||
|
$file->("\t.load = lp_load_for_s4_ctx,\n");
|
||||||
|
$file->("\t.set_cmdline = lp_set_cmdline,\n");
|
||||||
|
$file->("\t.dump = lp_dump,\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print_footer($)
|
||||||
|
{
|
||||||
|
my ($file) = @_;
|
||||||
|
$file->("};");
|
||||||
|
}
|
||||||
|
|
||||||
|
sub handle_loadparm($$)
|
||||||
|
{
|
||||||
|
my ($file,$line) = @_;
|
||||||
|
|
||||||
|
# STRING isn't handled here, as we still don't know what to do with the substituted vars */
|
||||||
|
# LOCAL also isn't handled here
|
||||||
|
if ($line =~ /^FN_(GLOBAL)_(CONST_STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),.*\)/o) {
|
||||||
|
my $scope = $1;
|
||||||
|
my $type = $2;
|
||||||
|
my $name = $3;
|
||||||
|
|
||||||
|
$file->(".$name = lp_$name,\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_file($$)
|
||||||
|
{
|
||||||
|
my ($file, $filename) = @_;
|
||||||
|
|
||||||
|
$filename =~ s/\.o$/\.c/g;
|
||||||
|
|
||||||
|
if ($filename =~ /^\//) {
|
||||||
|
open(FH, "<$filename") or die("Failed to open $filename");
|
||||||
|
} elsif (!open(FH, "< $builddir/$filename")) {
|
||||||
|
open(FH, "< $srcdir/$filename") || die "Failed to open $filename";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $comment = undef;
|
||||||
|
my $incomment = 0;
|
||||||
|
while (my $line = <FH>) {
|
||||||
|
if ($line =~ /^FN_/) {
|
||||||
|
handle_loadparm($file, $line);
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(FH);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print_header(\&public);
|
||||||
|
|
||||||
|
process_file(\&public, $_) foreach (@ARGV);
|
||||||
|
print_footer(\&public);
|
||||||
|
|
||||||
|
if (not defined($file)) {
|
||||||
|
print STDOUT $$public_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
mkpath(dirname($file), 0, 0755);
|
||||||
|
open(PUBLIC, ">$file") or die("Can't open `$file': $!");
|
||||||
|
print PUBLIC "$$public_data";
|
||||||
|
close(PUBLIC);
|
@ -56,69 +56,7 @@ static bool lp_load_for_s4_ctx(const char *filename)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* These are in the order that they appear in the s4 loadparm file.
|
#include "loadparm_ctx_table.c"
|
||||||
* All of the s4 loadparm functions should be here eventually, once
|
|
||||||
* they are implemented in the s3 loadparm, have the same format (enum
|
|
||||||
* values in particular) and defaults. */
|
|
||||||
static const struct loadparm_s3_helpers s3_fns =
|
|
||||||
{
|
|
||||||
.get_parametric = lp_parm_const_string_service,
|
|
||||||
.get_parm_struct = lp_get_parameter,
|
|
||||||
.get_parm_ptr = lp_parm_ptr,
|
|
||||||
.get_service = lp_service_for_s4_ctx,
|
|
||||||
.get_servicebynum = lp_servicebynum_for_s4_ctx,
|
|
||||||
.get_default_loadparm_service = lp_default_loadparm_service,
|
|
||||||
.get_numservices = lp_numservices,
|
|
||||||
.load = lp_load_for_s4_ctx,
|
|
||||||
.set_cmdline = lp_set_cmdline,
|
|
||||||
.dump = lp_dump,
|
|
||||||
|
|
||||||
._server_role = lp__server_role,
|
|
||||||
._security = lp__security,
|
|
||||||
._domain_master = lp__domain_master,
|
|
||||||
._domain_logons = lp__domain_logons,
|
|
||||||
|
|
||||||
.winbind_separator = lp_winbind_separator,
|
|
||||||
.template_homedir = lp_template_homedir,
|
|
||||||
.template_shell = lp_template_shell,
|
|
||||||
|
|
||||||
.dos_charset = lp_dos_charset,
|
|
||||||
.unix_charset = lp_unix_charset,
|
|
||||||
|
|
||||||
.realm = lp_realm,
|
|
||||||
.dnsdomain = lp_dnsdomain,
|
|
||||||
.socket_options = lp_socket_options,
|
|
||||||
.workgroup = lp_workgroup,
|
|
||||||
|
|
||||||
.netbios_name = lp_netbios_name,
|
|
||||||
.netbios_scope = lp_netbios_scope,
|
|
||||||
.netbios_aliases = lp_netbios_aliases,
|
|
||||||
|
|
||||||
.lanman_auth = lp_lanman_auth,
|
|
||||||
.ntlm_auth = lp_ntlm_auth,
|
|
||||||
|
|
||||||
.client_plaintext_auth = lp_client_plaintext_auth,
|
|
||||||
.client_lanman_auth = lp_client_lanman_auth,
|
|
||||||
.client_ntlmv2_auth = lp_client_ntlmv2_auth,
|
|
||||||
.client_use_spnego_principal = lp_client_use_spnego_principal,
|
|
||||||
|
|
||||||
.private_dir = lp_private_dir,
|
|
||||||
.ncalrpc_dir = lp_ncalrpc_dir,
|
|
||||||
.lockdir = lp_lockdir,
|
|
||||||
|
|
||||||
.passdb_backend = lp_passdb_backend,
|
|
||||||
|
|
||||||
.host_msdfs = lp_host_msdfs,
|
|
||||||
.unix_extensions = lp_unix_extensions,
|
|
||||||
.use_spnego = lp_use_spnego,
|
|
||||||
.use_mmap = lp_use_mmap,
|
|
||||||
.use_ntdb = lp_use_ntdb,
|
|
||||||
|
|
||||||
.srv_minprotocol = lp_srv_minprotocol,
|
|
||||||
.srv_maxprotocol = lp_srv_maxprotocol,
|
|
||||||
|
|
||||||
.passwordserver = lp_passwordserver
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct loadparm_s3_helpers *loadparm_s3_helpers(void)
|
const struct loadparm_s3_helpers *loadparm_s3_helpers(void)
|
||||||
{
|
{
|
||||||
|
@ -18,6 +18,11 @@ bld.SAMBA_GENERATOR('s3_param_proto_h',
|
|||||||
target='param_proto.h',
|
target='param_proto.h',
|
||||||
rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}')
|
rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}')
|
||||||
|
|
||||||
|
bld.SAMBA_GENERATOR('s3_loadparm_ctx_table_c',
|
||||||
|
source= ' ../../script/mks3param_ctx_table.pl ../../lib/param/loadparm.c ../../lib/param/param_functions.c',
|
||||||
|
target='loadparm_ctx_table.c',
|
||||||
|
rule='${PERL} ${SRC[0].abspath(env)} ${SRC[1].abspath(env)} ${SRC[2].abspath(env)} --file ${TGT}')
|
||||||
|
|
||||||
bld.SAMBA3_PYTHON('pys3param',
|
bld.SAMBA3_PYTHON('pys3param',
|
||||||
source='pyparam.c',
|
source='pyparam.c',
|
||||||
deps='param',
|
deps='param',
|
||||||
|
Loading…
Reference in New Issue
Block a user