mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
s4-param Autogenerate the loadparm_globals and loadparm_service tables
This makes it much easier and less error prone to add new parameters as we merge the s3 and s4 loadparm systems. Andrew Bartlett Autobuild-User: Andrew Bartlett <abartlet@samba.org> Autobuild-Date: Tue Jun 21 04:41:54 CEST 2011 on sn-devel-104
This commit is contained in:
parent
79b1a1092d
commit
233a6223b2
@ -75,161 +75,32 @@
|
||||
static bool do_parameter(const char *, const char *, void *);
|
||||
static bool defaults_saved = false;
|
||||
|
||||
/**
|
||||
* This structure describes global (ie., server-wide) parameters.
|
||||
*/
|
||||
struct loadparm_global
|
||||
{
|
||||
enum server_role server_role;
|
||||
|
||||
const char **smb_ports;
|
||||
char *ncalrpc_dir;
|
||||
char *dos_charset;
|
||||
char *unix_charset;
|
||||
char *display_charset;
|
||||
char *szLockDir;
|
||||
char *szPidDir;
|
||||
char *szServerString;
|
||||
char *szAutoServices;
|
||||
char *szPasswdChat;
|
||||
char *szShareBackend;
|
||||
char *szSPOOLSS_URL;
|
||||
char *szWINS_CONFIG_URL;
|
||||
char *szWINS_URL;
|
||||
char *szPrivateDir;
|
||||
const char **szPasswordServers;
|
||||
char *szSocketOptions;
|
||||
char *szRealm;
|
||||
char *szRealm_upper;
|
||||
char *szRealm_lower;
|
||||
const char **szWINSservers;
|
||||
const char **szInterfaces;
|
||||
char *szSocketAddress;
|
||||
char *szAnnounceVersion; /* This is initialised in init_globals */
|
||||
char *szWorkgroup;
|
||||
char *szNetbiosName;
|
||||
const char **szNetbiosAliases;
|
||||
char *szNetbiosScope;
|
||||
char *szDomainOtherSIDs;
|
||||
const char **szNameResolveOrder;
|
||||
const char **dcerpc_ep_servers;
|
||||
const char **server_services;
|
||||
char *ntptr_providor;
|
||||
char *szWinbindSeparator;
|
||||
char *szWinbinddPrivilegedSocketDirectory;
|
||||
char *szWinbinddSocketDirectory;
|
||||
char *szTemplateShell;
|
||||
char *szTemplateHomedir;
|
||||
int bWinbindSealedPipes;
|
||||
int bIdmapTrustedOnly;
|
||||
int tls_enabled;
|
||||
char *tls_keyfile;
|
||||
char *tls_certfile;
|
||||
char *tls_cafile;
|
||||
char *tls_crlfile;
|
||||
char *tls_dhpfile;
|
||||
char *logfile;
|
||||
char *loglevel;
|
||||
char *panic_action;
|
||||
int max_mux;
|
||||
int debuglevel;
|
||||
int max_xmit;
|
||||
int pwordlevel;
|
||||
int srv_maxprotocol;
|
||||
int srv_minprotocol;
|
||||
int cli_maxprotocol;
|
||||
int cli_minprotocol;
|
||||
int security;
|
||||
int paranoid_server_security;
|
||||
int max_wins_ttl;
|
||||
int min_wins_ttl;
|
||||
int announce_as; /* This is initialised in init_globals */
|
||||
int nbt_port;
|
||||
int dgram_port;
|
||||
int cldap_port;
|
||||
int krb5_port;
|
||||
int kpasswd_port;
|
||||
int web_port;
|
||||
char *socket_options;
|
||||
int bWINSsupport;
|
||||
int bWINSdnsProxy;
|
||||
char *szWINSHook;
|
||||
int bLocalMaster;
|
||||
int bPreferredMaster;
|
||||
int bEncryptPasswords;
|
||||
int bNullPasswords;
|
||||
int bObeyPamRestrictions;
|
||||
int bLargeReadwrite;
|
||||
int bReadRaw;
|
||||
int bWriteRaw;
|
||||
int bTimeServer;
|
||||
int bBindInterfacesOnly;
|
||||
int bNTSmbSupport;
|
||||
int bNTStatusSupport;
|
||||
int bLanmanAuth;
|
||||
int bNTLMAuth;
|
||||
int bUseSpnego;
|
||||
int server_signing;
|
||||
int client_signing;
|
||||
int bClientPlaintextAuth;
|
||||
int bClientLanManAuth;
|
||||
int bClientNTLMv2Auth;
|
||||
int client_use_spnego_principal;
|
||||
int bHostMSDfs;
|
||||
int bUnicode;
|
||||
int bUnixExtensions;
|
||||
int bDisableNetbios;
|
||||
int bRpcBigEndian;
|
||||
char *szNTPSignDSocketDirectory;
|
||||
const char **szRNDCCommand;
|
||||
const char **szDNSUpdateCommand;
|
||||
const char **szSPNUpdateCommand;
|
||||
const char **szNSUpdateCommand;
|
||||
struct parmlist_entry *param_opt;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This structure describes a single service.
|
||||
*/
|
||||
struct loadparm_service
|
||||
{
|
||||
char *szService;
|
||||
char *szPath;
|
||||
char *szCopy;
|
||||
char *szInclude;
|
||||
char *szPrintername;
|
||||
char **szHostsallow;
|
||||
char **szHostsdeny;
|
||||
char *comment;
|
||||
char *volume;
|
||||
char *fstype;
|
||||
char **ntvfs_handler;
|
||||
int iMaxPrintJobs;
|
||||
int iMaxConnections;
|
||||
int iCSCPolicy;
|
||||
int bAvailable;
|
||||
int bBrowseable;
|
||||
int bRead_only;
|
||||
int bPrint_ok;
|
||||
int bMap_system;
|
||||
int bMap_hidden;
|
||||
int bMap_archive;
|
||||
int bStrictLocking;
|
||||
int bOplocks;
|
||||
int iCreate_mask;
|
||||
int iCreate_force_mode;
|
||||
int iDir_mask;
|
||||
int iDir_force_mode;
|
||||
int *copymap;
|
||||
int bMSDfsRoot;
|
||||
int bStrictSync;
|
||||
int bCIFileSystem;
|
||||
struct parmlist_entry *param_opt;
|
||||
|
||||
#define LOADPARM_EXTRA_GLOBALS \
|
||||
struct parmlist_entry *param_opt; \
|
||||
char *szRealm; \
|
||||
char *tls_keyfile; \
|
||||
char *tls_certfile; \
|
||||
char *tls_cafile; \
|
||||
char *tls_crlfile; \
|
||||
char *tls_dhpfile; \
|
||||
char *loglevel; \
|
||||
char *panic_action; \
|
||||
int bPreferredMaster; \
|
||||
char *szAnnounceVersion; /* This is initialised in init_globals */
|
||||
#define LOADPARM_EXTRA_LOCALS \
|
||||
struct parmlist_entry *param_opt; \
|
||||
char *szService; \
|
||||
char *szCopy; \
|
||||
char *szInclude; \
|
||||
char *szPrintername; \
|
||||
int bAvailable; \
|
||||
int iMaxPrintJobs; \
|
||||
char *volume; \
|
||||
int *copymap; \
|
||||
char dummy[3]; /* for alignment */
|
||||
};
|
||||
|
||||
#include "param_global.h"
|
||||
#include "param_local.h"
|
||||
|
||||
#define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
|
||||
|
||||
|
@ -5,6 +5,16 @@ bld.SAMBA_GENERATOR('s3_param_h',
|
||||
target='s3_param.h',
|
||||
rule='${PERL} ${SRC[1].abspath(env)} ${SRC[0].abspath(env)} --file ${TGT}')
|
||||
|
||||
bld.SAMBA_GENERATOR('param_local_h',
|
||||
source= 'loadparm.c ../script/mkparamdefs.pl',
|
||||
target='param_local.h',
|
||||
rule='${PERL} ${SRC[1].abspath(env)} ${SRC[0].abspath(env)} --file ${TGT} --generate-scope=LOCAL')
|
||||
|
||||
bld.SAMBA_GENERATOR('param_global_h',
|
||||
source= 'loadparm.c ../script/mkparamdefs.pl',
|
||||
target='param_global.h',
|
||||
rule='${PERL} ${SRC[1].abspath(env)} ${SRC[0].abspath(env)} --file ${TGT} --generate-scope=GLOBAL')
|
||||
|
||||
bld.SAMBA_LIBRARY('samba-hostconfig',
|
||||
source='loadparm.c generic.c util.c',
|
||||
pc_files='samba-hostconfig.pc',
|
||||
|
192
source4/script/mkparamdefs.pl
Normal file
192
source4/script/mkparamdefs.pl
Normal file
@ -0,0 +1,192 @@
|
||||
#!/usr/bin/perl
|
||||
# Generate loadparm tables for loadparm.c
|
||||
# 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 = ".";
|
||||
my $generate_scope = undef;
|
||||
|
||||
sub public($)
|
||||
{
|
||||
my ($d) = @_;
|
||||
$$public_data .= $d;
|
||||
}
|
||||
|
||||
sub usage()
|
||||
{
|
||||
print "Usage: mkparamdefs.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 " --generate-scope=[GLOBAL|LOCAL] Filter which definitions to generate\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; },
|
||||
'generate-scope=s' => sub { my ($f,$v) = @_; $generate_scope = $v; },
|
||||
'help' => \&usage
|
||||
) or exit(1);
|
||||
|
||||
sub normalize_define($$)
|
||||
{
|
||||
my ($define, $file) = @_;
|
||||
|
||||
if (not defined($define) and defined($file)) {
|
||||
$define = "__" . uc($file) . "__";
|
||||
$define =~ tr{./}{__};
|
||||
$define =~ tr{\-}{_};
|
||||
} elsif (not defined($define)) {
|
||||
$define = '_S3_PARAM_H_';
|
||||
}
|
||||
|
||||
return $define;
|
||||
}
|
||||
|
||||
$public_define = normalize_define($public_define, $file);
|
||||
|
||||
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, $header_name,$generate_scope) = @_;
|
||||
$file->("#ifndef $header_name\n");
|
||||
$file->("#define $header_name\n\n");
|
||||
$file->("/* This file was automatically generated by mkparmdefs.pl. DO NOT EDIT */\n\n");
|
||||
$file->("/**\n");
|
||||
if ($generate_scope eq "GLOBAL") {
|
||||
$file->(" * This structure describes global (ie., server-wide) parameters.\n");
|
||||
$file->(" */\n");
|
||||
$file->("struct loadparm_global \n");
|
||||
} elsif ($generate_scope eq "LOCAL") {
|
||||
$file->(" * This structure describes a single service.\n");
|
||||
$file->(" */\n");
|
||||
$file->("struct loadparm_service \n");
|
||||
}
|
||||
$file->("{\n");
|
||||
}
|
||||
|
||||
sub print_footer($$$)
|
||||
{
|
||||
my ($file, $header_name, $generate_scope) = @_;
|
||||
$file->("LOADPARM_EXTRA_" . $generate_scope . "S\n");
|
||||
$file->("};\n");
|
||||
$file->("\n#endif /* $header_name */\n\n");
|
||||
}
|
||||
|
||||
sub handle_loadparm($$$)
|
||||
{
|
||||
my ($file,$line,$generate_scope) = @_;
|
||||
|
||||
if ($line =~ /^FN_(GLOBAL|LOCAL)_(CONST_STRING|STRING|BOOL|bool|CHAR|INTEGER|LIST)\((\w+),(.*)\)/o) {
|
||||
my $scope = $1;
|
||||
my $type = $2;
|
||||
my $name = $3;
|
||||
my $var = $4;
|
||||
|
||||
my %tmap = (
|
||||
"BOOL" => "int ",
|
||||
"CONST_STRING" => "char *",
|
||||
"STRING" => "char *",
|
||||
"INTEGER" => "int ",
|
||||
"CHAR" => "char ",
|
||||
"LIST" => "const char **",
|
||||
);
|
||||
|
||||
if ($scope eq $generate_scope) {
|
||||
$file->("\t$tmap{$type} $var;\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 =~ /^\/\*\*/) {
|
||||
$comment = "";
|
||||
$incomment = 1;
|
||||
}
|
||||
|
||||
if ($incomment) {
|
||||
$comment .= $line;
|
||||
if ($line =~ /\*\//) {
|
||||
$incomment = 0;
|
||||
}
|
||||
}
|
||||
|
||||
# these are ordered for maximum speed
|
||||
next if ($line =~ /^\s/);
|
||||
|
||||
next unless ($line =~ /\(/);
|
||||
|
||||
next if ($line =~ /^\/|[;]/);
|
||||
|
||||
if ($line =~ /^FN_/) {
|
||||
handle_loadparm($file, $line, $generate_scope);
|
||||
}
|
||||
next;
|
||||
}
|
||||
|
||||
close(FH);
|
||||
}
|
||||
|
||||
|
||||
print_header(\&public, $public_define, $generate_scope);
|
||||
|
||||
process_file(\&public, $_) foreach (@ARGV);
|
||||
print_footer(\&public, $public_define, $generate_scope);
|
||||
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user