r4855: add some smb.conf script for add/delete/change share and addprinter hooks
authorGerald Carter <jerry@samba.org>
Wed, 19 Jan 2005 20:44:00 +0000 (20:44 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:54:00 +0000 (10:54 -0500)
examples/scripts/perl/modify_samba_config.pl [moved from examples/misc/modify_samba_config.pl with 100% similarity]
examples/scripts/perl/smbaddprinter.pl [new file with mode: 0755]
examples/scripts/python/SambaConfig.py [new file with mode: 0644]
examples/scripts/python/generate_parm_table.py [new file with mode: 0755]
examples/scripts/python/modify_samba_config.py [new file with mode: 0755]
examples/scripts/python/smbparm.py [new file with mode: 0644]

diff --git a/examples/scripts/perl/smbaddprinter.pl b/examples/scripts/perl/smbaddprinter.pl
new file mode 100755 (executable)
index 0000000..5571831
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+##   Add printer script for samba, APW, and cups
+##   Copyright (C) Jeff Hardy <hardyjm@potsdam.edu> 2004
+##
+##   This program is free software; you can redistribute it
+##   and/or modify it under the terms of the GNU General
+##   Public License as published by the Free Software Foundation;
+##   ither version 2 of the License, or (at your option) any
+##   later version.
+##
+##   This program is distributed in the hope that it will be useful,
+##   but WITHOUT ANY WARRANTY; without even the implied warranty of
+##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##   GNU General Public License for more details.
+##
+##   You should have received a copy of the GNU General Public
+##   License along with this program; if not, write to the Free
+##   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+##   USA.
+
+@argv = @ARGV;
+
+# take in args
+my $lpname=shift(@argv);       # printer name
+my $shname=shift(@argv);       # share name    -> used for CUPS queue name
+my $portname=shift(@argv);     # port name
+my $drivername=shift(@argv);   # driver name   -> used for CUPS description
+my $location=shift(@argv);     # location      -> used for CUPS device URI
+my $win9x=shift(@argv);                # win9x location
+
+#check for location syntax
+#if no protocol specified...
+if ($location !~ m#:/#){
+       #assume an lpd printer
+       $location = "lpd://".$location;
+}
+#else, simply pass the URI on to the lpadmin command
+
+#run the cups lpadmin command to add the printer
+system("/usr/sbin/lpadmin -p $shname -D \"$drivername\" -E -v $location");
+
diff --git a/examples/scripts/python/SambaConfig.py b/examples/scripts/python/SambaConfig.py
new file mode 100644 (file)
index 0000000..c70c231
--- /dev/null
@@ -0,0 +1,315 @@
+import sys, string, SambaParm
+from smbparm import parm_table
+
+######################################################################
+##
+##  smb.conf parser class
+##
+##  Copyright (C) Gerald Carter                       2004.
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+######################################################################
+
+
+#####################################################################
+## multi line Samba comment
+class SambaComment:
+
+       def __init__( self, comment ):
+               self.comment = comment
+               
+       def Dump( self, stream, whitespace=None ):
+               if not self.comment:
+                       return
+               for line in self.comment:
+                       if whitespace:
+                               stream.write( whitespace )
+                       stream.write( line )
+                       stream.write( "\n" )
+               
+       
+#####################################################################
+## string smb.conf parms
+class SambaParameter :
+
+       ## indexs into the parm table tuples
+       DisplayName  = 0
+       ObjectType   = 1
+       DefaultValue = 2
+       Scope        = 3
+
+       ## Stores a key into the parm_table and creates an
+       ## SambaParmXXX object to store the value
+       def __init__( self, name, value, comment=None ):
+               self.key = string.upper(string.strip(name))
+               self.comment = None
+               assert parm_table.has_key( self.key ), "Bad parameter name! [%s]" % name
+               self.parm = parm_table[self.key][self.ObjectType]( value )
+               if comment :
+                       self.comment = SambaComment( comment )
+                       
+               #if not self.parm.valid:
+               #       self.parm.SetValue( parm_table[self.key][self.DefaultValue] )
+
+       ## simple test for global or service parameter scope
+       def isGlobalParm( self ) :
+               return parm_table[self.key][Scope]
+
+       ## dump <the parameter to stdout
+       def Dump( self, stream ):
+               if self.comment:
+                       self.comment.Dump( stream, "\t" )
+               stream.write( "\t%s = %s\n" % ( parm_table[self.key][self.DisplayName], self.parm.StringValue() ))
+
+
+#####################################################################
+## Class for parsing and modifying Smb.conf 
+class SambaConf:
+               
+       def __init__( self ):
+               self.services = {}
+               self.valid = True
+               self.services["GLOBAL"] = {}
+               self.services_order = []
+               
+       
+       ## always return a non-empty line of input or None
+       ## if we hit EOF
+       def ReadLine( self, stream ):
+               result = None
+               input_str = None
+               
+               while True:
+                       input_str = stream.readline()
+               
+                       ## Are we done with the file ?
+                       
+                       if len(input_str) == 0:
+                               return result
+                       
+                       ## we need one line of valid input at least
+                       ## continue around the loop again if the result
+                       ## string is empty
+                       
+                       input_str = string.strip( input_str )
+                       if len(input_str) == 0:
+                               if not result:
+                                       continue
+                               else:
+                                       return result
+                       
+                       ## we have > 1` character so setup the result
+                       if not result: 
+                               result = ""
+                       
+                       ## Check for comments -- terminated by \n -- no continuation
+                       
+                       if input_str[0] == '#' or input_str[0] == ';' :
+                               result = input_str
+                               break
+                       
+                       ## check for line continuation                  
+                       
+                       if input_str[-1] == "\\" :
+                               result += input_str[0:-1]
+                               contine
+
+                       ## otherwise we have a complete line
+                       result += input_str
+                       break
+
+               return result
+               
+       ## convert the parameter name to a form suitable as a dictionary key    
+       def NormalizeParamName( self, param ):
+               return string.upper( string.join(string.split(param), "") )
+               
+       ## Open the file and parse it into a services dictionary
+       ## if possible
+       def ReadConfig( self, filename ):
+               self.filename = filename
+
+               try:
+                       fconfig = open( filename, "r" )
+               except IOError:
+                       self.valid = False
+                       return
+
+               section_name = None
+               
+               ## the most recent seen comment is stored as an array
+               current_comment = []
+               
+               while True:
+               
+                       str = self.ReadLine( fconfig )
+                       if not str:
+                               break
+
+                       ## Check for comments
+                       if str[0] == '#' or str[0] == ';' :
+                               current_comment.append( str )
+                               continue
+
+                       ## look for a next section name
+                       if str[0]=='[' and str[-1]==']' :
+                               section_name = str[1:-1]
+                               self.AddService( section_name, current_comment )
+                               current_comment = []
+                               continue
+
+                       str_list = string.split( str, "=" )
+
+                       if len(str_list) != 2 :
+                               continue
+
+                       if not section_name :
+                               print "parameter given without section name!"
+                               break
+
+                       param = self.NormalizeParamName( str_list[0] )
+                       value = string.strip(str_list[1])
+
+                       self.SetServiceOption( section_name, param, value, current_comment )
+                       self.dirty = False
+                       
+                       ## reset the comment strinf if we have one
+                       current_comment = []
+                       
+               fconfig.close()
+
+       ## Add a parameter to the global section
+       def SetGlobalOption( self, param, value, comment=None ) :
+               self.SetServiceOption( "GLOBAL", param, value, comment )
+
+       ## Add a parameter to a specific service
+       def SetServiceOption( self, servicename, param, value, comment=None ) :
+               service = string.upper(servicename)
+               parm = self.NormalizeParamName(param)
+               self.services[service]['_order_'].append( parm )
+               self.services[service][parm] = SambaParameter( parm, value, comment )
+               self.dirty = True
+
+       ## remove a service from the config file
+       def DelService( self, servicename ) :
+               service = string.upper(servicename)
+               self.services[service] = None
+               self.dirty = True
+               
+       ## remove a service from the config file
+       def AddService( self, servicename, comment=None ) :
+               service = string.upper(servicename)
+
+               self.services[service] = {}
+               self.services[service]['_order_'] = []
+
+               if ( comment ):
+                       self.services[service]['_comment_'] = SambaComment( comment )
+
+               self.services_order.append( service )
+
+               self.dirty = True
+               
+       def isService( self, servicename ):
+               service = string.upper(servicename)
+               return self.services.has_key( service )
+               
+       ## dump a single service to stream
+       def DumpService( self, stream, servicename ):
+       
+               ## comments first 
+               if self.services[servicename].has_key( '_comment_' ):
+                       self.services[servicename]['_comment_'].Dump( stream )
+                       
+               ## section header
+               stream.write( "[%s]\n" % (servicename) )
+               
+               ## parameter = value
+               for parm in self.services[servicename]['_order_']:
+                       self.services[servicename][parm].Dump(stream)
+       
+       ## dump the config to stream
+       def Dump( self, stream ):
+               self.DumpService( stream, "GLOBAL" )
+               stream.write("\n")
+               
+               for section in self.services_order:
+                       ## already handled the global section
+                       if section == "GLOBAL": 
+                               continue
+                               
+                       ## check for deleted sections ##
+                       if not self.services[section]:
+                               continue
+                               
+                       self.DumpService( stream, section )
+                       stream.write( "\n" )
+                       
+       ## write out any changes to disk
+       def Flush( self ):
+               if not self.dirty: 
+                       return
+                       
+               try:
+                       fconfig = open( self.filename, "w" )
+               except IOError:
+                       sys.stderr.write( "ERROR!\n" ) 
+                       return 1
+                       
+               self.Dump( fconfig )
+               fconfig.close()
+               return 0
+               
+       def Services( self ):
+               service_list = []
+               for section in self.services.keys():
+                       service_list.append( section )
+                       
+               return service_list
+               
+       def NumServices( self ):
+               return len(self.Services())
+               
+       def Write( self, filename ):
+               self.filename = filename
+               self.valid = True
+
+               if not self.dirty:
+                       return
+               
+               self.Flush()
+                       
+               
+
+######################################################################
+## Unit tests
+######################################################################
+
+if __name__ == "__main__" :
+
+       x = SambaConf( )
+       x.ReadConfig( sys.argv[1] )
+       if not x.valid :
+               print "Bad file!"
+               sys.exit(1)
+
+       x.Dump( sys.stdout )
+       
+       
+       
+## end of SambaConfig.py ######################################################
+###############################################################################
+
diff --git a/examples/scripts/python/generate_parm_table.py b/examples/scripts/python/generate_parm_table.py
new file mode 100755 (executable)
index 0000000..d25ff66
--- /dev/null
@@ -0,0 +1,222 @@
+#!/usr/bin/env python
+######################################################################
+##
+##  Generate parameter dictionary from param/loadparm.c
+##
+##  Copyright (C) Gerald Carter                       2004.
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+######################################################################
+
+import re, string, sys, commands
+
+HEADER = """######################################################################
+##
+## autogenerated file of smb.conf parameters
+## generate_parm_table <..../param/loadparm.c>
+##
+##  Copyright (C) Gerald Carter                       2004.
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+######################################################################
+
+from SambaParm import SambaParmString, SambaParmBool, SambaParmBoolRev
+
+## boolean defines for parm_table
+P_LOCAL    = 0
+P_GLOBAL   = 1
+
+"""
+
+FOOTER = """##### end of smbparm.y ##########################################
+#################################################################"""
+
+TESTPARM = "/opt/src/samba-cvs/samba-3.0/source/bin/testparm"
+
+## fields in Samba's parameter table
+displayName = 0
+type        = 1
+scope       = 2
+variable    = 3
+flags       = 6
+
+parm_table  = {}
+var_table   = {}
+def_values  = {}
+obj_table = {
+       'P_BOOL'    : 'SambaParmBool',
+       'P_BOOLREV' : 'SambaParmBoolRev',
+       'P_STRING'  : 'SambaParmString',
+       'P_USTRING' : 'SambaParmString',
+       'P_GSTRING' : 'SambaParmString',
+       'P_LIST'    : 'SambaParmString',
+       'P_ENUM'    : 'SambaParmString',
+       'P_CHAR'    : 'SambaParmString',
+       'P_OCTAL'   : 'SambaParmString',
+       'P_INTEGER' : 'SambaParmString',
+}
+
+######################################################################
+##                        BEGIN MAIN CODE                           ##
+######################################################################
+
+## First thing is to build the dictionary of parmeter names  ##
+## based on the output from testparm                         ##
+
+cmd = "/opt/samba/bin/testparm -s -v /dev/null"
+( status, testparm_output ) = commands.getstatusoutput( cmd )
+if status:
+       sys.stderr.write( "Failed to execute testparm!\n%s\n" % testparm_output )
+
+
+## break the output into a list ##
+
+lines = string.split( testparm_output, "\n" )
+
+## loop through list -- parameters in testparm output have ##
+## whitespace at the beginning of the line                 ##
+
+pattern = re.compile( "^\s+" )
+for input_str in lines:
+       if not pattern.search( input_str ):
+               continue
+       input_str = string.strip( input_str )
+       parts = string.split( input_str, "=" )
+       parts[0] = string.strip( parts[0] )
+       parts[1] = string.strip( parts[1] )
+       key = string.upper( string.join(string.split(parts[0]), "") )
+       def_values[key] = parts[1]
+
+## open loadparm.c and get the entire list of parameters ##
+## including synonums                                    ##
+               
+if len(sys.argv) != 2:
+       print "Usage: %s <.../param/loadparm.c>" % ( sys.argv[0] )
+       sys.exit( 1 )
+       
+try:
+       fconfig = open( sys.argv[1], "r" )
+except IOError:
+       print "%s does not exist!" % sys.argv[1]
+       sys.exit (1)
+
+## Loop through loadparm.c --  all parameters are either ##
+## P_LOCAL or P_GLOBAL                                   ##
+
+synonyms = []
+pattern = re.compile( '{".*P_[GL]' )
+while True:
+       input_str= fconfig.readline()
+       if  len(input_str) == 0 :
+               break
+       input_str= string.strip(input_str)
+       
+       ## see if we have a patch for a parameter definition ##
+       
+       parm = []
+       if pattern.search( input_str) :
+       
+               ## strip the surrounding '{.*},' ##
+               
+               input_str= input_str[1:-2]
+               parm = string.split(input_str, ",")
+               
+               ## strip the ""'s and upper case ##
+               
+               name = (string.strip(parm[displayName])[1:-1])
+               key = string.upper( string.join(string.split(name), "") )
+               var_name = string.strip( parm[variable] )
+               
+               ## try to catch synonyms -- if the parameter was not reported ##
+               ## by testparm, then save it and come back after we will out  ##
+               ## the variable list                                          ##
+               
+               if not def_values.has_key( key ):
+                       synonyms.append( input_str)
+                       continue
+               
+                       
+               var_table[var_name] = key 
+               
+               parmType = string.strip(parm[type])
+               
+               parm_table[key] = [ name , string.strip(parm[type]), string.strip(parm[scope]), def_values[key] ]
+
+## Deal with any synonyms ##
+
+for input_str in synonyms:
+               parm = string.split(input_str, ",")
+               name = (string.strip(parm[displayName])[1:-1])
+               key = string.upper( string.join(string.split(name), "") )
+               var_name = string.strip( parm[variable] )
+               
+               ## if there's no pre-existing key, then testparm doesn't know about it
+               if not var_table.has_key( var_name ):
+                       continue
+                       
+               ## just make a copy
+               parm_table[key] = parm_table[var_table[var_name]][:]
+               # parm_table[key][1] = parm[1]
+               parm_table[key][1] = string.strip(parm[1])
+
+##                      ##     
+## print out smbparm.py ##
+##                      ##     
+
+try:
+       smbparm = open ( "smbparm.py", "w" )
+except IOError:
+       print "Cannot write to smbparm.py"
+       sys.exit( 1 )
+       
+smbparm.write( HEADER )
+smbparm.write( "parm_table = {\n" )
+
+for x in parm_table.keys():
+       key = "\"%s\"" % x
+       smbparm.write("\t%-25s: (\"%s\", %s, %s, \"%s\"),\n" % ( key, parm_table[x][0], 
+               obj_table[parm_table[x][1]], parm_table[x][2], parm_table[x][3] ))
+
+smbparm.write( "}\n" )
+
+smbparm.write( FOOTER )
+smbparm.write( "\n" )
+
+sys.exit(0)
+
+
+##                  ##
+## cut-n-paste area ##
+##                  ##
+
+for x in parm_table.keys():
+       if def_values.has_key( x ):
+               parm_table[x].append( def_values[x] )
+       else:
+               parm_table[x].append( "" )
diff --git a/examples/scripts/python/modify_samba_config.py b/examples/scripts/python/modify_samba_config.py
new file mode 100755 (executable)
index 0000000..6a4cdca
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+######################################################################
+##
+##  Simple add/delete/change share command script for Samba
+##
+##  Copyright (C) Gerald Carter                       2004.
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+######################################################################
+
+import sys, os
+from SambaConfig import SambaConf
+
+
+##                             ##
+## check the command line args ##
+##                             ##
+delete_mode = False
+if len(sys.argv) == 3:
+       delete_mode = True
+       print "Deleting share..."
+elif len(sys.argv) == 5:
+       print "Adding/Updating share..."
+else:
+       print "Usage: %s configfile share [path] [comments]" % sys.argv[0]
+       sys.exit(1)
+       
+       
+##                                ##
+## read and parse the config file ##
+##                                ##
+
+confFile = SambaConf()
+
+confFile.ReadConfig( sys.argv[1] )
+if not confFile.valid:
+       exit( 1 )
+       
+if delete_mode:
+       if not confFile.isService( sys.argv[2] ):
+               sys.stderr.write( "Asked to delete non-existent service! [%s]\n" % sys.argv[2] )
+               sys.exit( 1 )
+               
+       confFile.DelService( sys.argv[2] )
+else:
+       ## make the path if it doesn't exist.  Bail out if that fails
+       if ( not os.path.isdir(sys.argv[3]) ):
+               try:
+                       os.makedirs( sys.argv[3] )
+                       os.chmod( sys.argv[3], 0777 )
+               except os.error:
+                       sys.exit( 1 )
+
+       ## only add a new service -- if it already exists, then 
+       ## just set the options
+       if not confFile.isService( sys.argv[2] ):
+               confFile.AddService( sys.argv[2], ['##', '## Added by modify_samba_config.py', '##']  )
+       confFile.SetServiceOption( sys.argv[2], "path", sys.argv[3] )
+       confFile.SetServiceOption( sys.argv[2], "comment", sys.argv[4] )
+       confFile.SetServiceOption( sys.argv[2], "read only", "no" )
+
+ret = confFile.Flush()
+
+sys.exit( ret )
+
diff --git a/examples/scripts/python/smbparm.py b/examples/scripts/python/smbparm.py
new file mode 100644 (file)
index 0000000..0dfcf00
--- /dev/null
@@ -0,0 +1,374 @@
+######################################################################
+##
+## autogenerated file of smb.conf parameters
+## generate_parm_table <..../param/loadparm.c>
+##
+##  Copyright (C) Gerald Carter                       2004.
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+######################################################################
+
+from SambaParm import SambaParmString, SambaParmBool, SambaParmBoolRev
+
+## boolean defines for parm_table
+P_LOCAL    = 0
+P_GLOBAL   = 1
+
+parm_table = {
+       "PRELOADMODULES"         : ("preload modules", SambaParmString, P_GLOBAL, ""),
+       "ONLYGUEST"              : ("guest only", SambaParmBool, P_LOCAL, "No"),
+       "PRIVATEDIR"             : ("private dir", SambaParmString, P_GLOBAL, "/etc/samba/private"),
+       "HIDESPECIALFILES"       : ("hide special files", SambaParmBool, P_LOCAL, "No"),
+       "WINBINDENUMUSERS"       : ("winbind enum users", SambaParmBool, P_GLOBAL, "Yes"),
+       "TIMESTAMPLOGS"          : ("debug timestamp", SambaParmBool, P_GLOBAL, "Yes"),
+       "LDAPPASSWDSYNC"         : ("ldap passwd sync", SambaParmString, P_GLOBAL, "no"),
+       "READBMPX"               : ("read bmpx", SambaParmBool, P_GLOBAL, "No"),
+       "PASSWORDSERVER"         : ("password server", SambaParmString, P_GLOBAL, "*"),
+       "COPY"                   : ("copy", SambaParmString, P_LOCAL, ""),
+       "MAXXMIT"                : ("max xmit", SambaParmString, P_GLOBAL, "16644"),
+       "MINPRINTSPACE"          : ("min print space", SambaParmString, P_LOCAL, "0"),
+       "CASESENSITIVE"          : ("case sensitive", SambaParmString, P_LOCAL, "Auto"),
+       "LDAPIDMAPSUFFIX"        : ("ldap idmap suffix", SambaParmString, P_GLOBAL, ""),
+       "NAMECACHETIMEOUT"       : ("name cache timeout", SambaParmString, P_GLOBAL, "660"),
+       "MAPARCHIVE"             : ("map archive", SambaParmBool, P_LOCAL, "Yes"),
+       "LANMANAUTH"             : ("lanman auth", SambaParmBool, P_GLOBAL, "Yes"),
+       "NETBIOSSCOPE"           : ("netbios scope", SambaParmString, P_GLOBAL, ""),
+       "MAXREPORTEDPRINTJOBS"   : ("max reported print jobs", SambaParmString, P_LOCAL, "0"),
+       "CREATEMODE"             : ("create mask", SambaParmString, P_LOCAL, "0744"),
+       "READLIST"               : ("read list", SambaParmString, P_LOCAL, ""),
+       "WINBINDNESTEDGROUPS"    : ("winbind nested groups", SambaParmBool, P_GLOBAL, "No"),
+       "COMMENT"                : ("comment", SambaParmString, P_LOCAL, ""),
+       "PRINTER"                : ("printer name", SambaParmString, P_LOCAL, ""),
+       "LMANNOUNCE"             : ("lm announce", SambaParmString, P_GLOBAL, "Auto"),
+       "SYSLOGONLY"             : ("syslog only", SambaParmBool, P_GLOBAL, "No"),
+       "LMINTERVAL"             : ("lm interval", SambaParmString, P_GLOBAL, "60"),
+       "MANGLINGMETHOD"         : ("mangling method", SambaParmString, P_GLOBAL, "hash2"),
+       "PROFILEACLS"            : ("profile acls", SambaParmBool, P_LOCAL, "No"),
+       "LDAPGROUPSUFFIX"        : ("ldap group suffix", SambaParmString, P_GLOBAL, ""),
+       "MAPTOGUEST"             : ("map to guest", SambaParmString, P_GLOBAL, "Never"),
+       "NULLPASSWORDS"          : ("null passwords", SambaParmBool, P_GLOBAL, "No"),
+       "ONLYUSER"               : ("only user", SambaParmBool, P_LOCAL, "No"),
+       "UTMP"                   : ("utmp", SambaParmBool, P_GLOBAL, "No"),
+       "DONTDESCEND"            : ("dont descend", SambaParmString, P_LOCAL, ""),
+       "PRINTING"               : ("printing", SambaParmString, P_LOCAL, "cups"),
+       "SOCKETOPTIONS"          : ("socket options", SambaParmString, P_GLOBAL, "TCP_NODELAY"),
+       "CLIENTUSESPNEGO"        : ("client use spnego", SambaParmBool, P_GLOBAL, "Yes"),
+       "USESPNEGO"              : ("use spnego", SambaParmBool, P_GLOBAL, "Yes"),
+       "FAKEOPLOCKS"            : ("fake oplocks", SambaParmBool, P_LOCAL, "No"),
+       "FORCECREATEMODE"        : ("force create mode", SambaParmString, P_LOCAL, "00"),
+       "SETDIRECTORY"           : ("set directory", SambaParmBoolRev, P_LOCAL, "No"),
+       "SMBPORTS"               : ("smb ports", SambaParmString, P_GLOBAL, "445 139"),
+       "LOCKDIR"                : ("lock directory", SambaParmString, P_GLOBAL, "/var/lib/samba"),
+       "BROWSEABLE"             : ("browseable", SambaParmBool, P_LOCAL, "Yes"),
+       "WINSPROXY"              : ("wins proxy", SambaParmBool, P_GLOBAL, "No"),
+       "FORCEGROUP"             : ("force group", SambaParmString, P_LOCAL, ""),
+       "NTSTATUSSUPPORT"        : ("nt status support", SambaParmBool, P_GLOBAL, "Yes"),
+       "EXEC"                   : ("preexec", SambaParmString, P_LOCAL, ""),
+       "DOMAINLOGONS"           : ("domain logons", SambaParmBool, P_GLOBAL, "No"),
+       "TEMPLATESHELL"          : ("template shell", SambaParmString, P_GLOBAL, "/bin/false"),
+       "USESENDFILE"            : ("use sendfile", SambaParmBool, P_LOCAL, "No"),
+       "USEMMAP"                : ("use mmap", SambaParmBool, P_GLOBAL, "Yes"),
+       "VALIDUSERS"             : ("valid users", SambaParmString, P_LOCAL, ""),
+       "DEBUGLEVEL"             : ("log level", SambaParmString, P_GLOBAL, "0"),
+       "PRINTCAPCACHETIME"      : ("printcap cache time", SambaParmString, P_GLOBAL, "0"),
+       "SOCKETADDRESS"          : ("socket address", SambaParmString, P_GLOBAL, "0.0.0.0"),
+       "FORCEDIRECTORYMODE"     : ("force directory mode", SambaParmString, P_LOCAL, "00"),
+       "MSDFSROOT"              : ("msdfs root", SambaParmBool, P_LOCAL, "No"),
+       "ROOTPREEXEC"            : ("root preexec", SambaParmString, P_LOCAL, ""),
+       "WRITEOK"                : ("read only", SambaParmBoolRev, P_LOCAL, "Yes"),
+       "MAXLOGSIZE"             : ("max log size", SambaParmString, P_GLOBAL, "5000"),
+       "FORCESECURITYMODE"      : ("force security mode", SambaParmString, P_LOCAL, "00"),
+       "VFSOBJECT"              : ("vfs objects", SambaParmString, P_LOCAL, ""),
+       "CHECKPASSWORDSCRIPT"    : ("check password script", SambaParmString, P_GLOBAL, ""),
+       "DELETEPRINTERCOMMAND"   : ("deleteprinter command", SambaParmString, P_GLOBAL, ""),
+       "OSLEVEL"                : ("os level", SambaParmString, P_GLOBAL, "20"),
+       "ENUMPORTSCOMMAND"       : ("enumports command", SambaParmString, P_GLOBAL, ""),
+       "DELETEUSERFROMGROUPSCRIPT": ("delete user from group script", SambaParmString, P_GLOBAL, ""),
+       "IDMAPGID"               : ("idmap gid", SambaParmString, P_GLOBAL, ""),
+       "PREEXECCLOSE"           : ("preexec close", SambaParmBool, P_LOCAL, "No"),
+       "UTMPDIRECTORY"          : ("utmp directory", SambaParmString, P_GLOBAL, ""),
+       "DOSFILEMODE"            : ("dos filemode", SambaParmBool, P_LOCAL, "No"),
+       "LOGFILE"                : ("log file", SambaParmString, P_GLOBAL, ""),
+       "WORKGROUP"              : ("workgroup", SambaParmString, P_GLOBAL, "WORKGROUP"),
+       "DIRECTORYSECURITYMASK"  : ("directory security mask", SambaParmString, P_LOCAL, "0777"),
+       "ENCRYPTPASSWORDS"       : ("encrypt passwords", SambaParmBool, P_GLOBAL, "Yes"),
+       "PRINTABLE"              : ("printable", SambaParmBool, P_LOCAL, "No"),
+       "MAXPROTOCOL"            : ("max protocol", SambaParmString, P_GLOBAL, "NT1"),
+       "KERNELOPLOCKS"          : ("kernel oplocks", SambaParmBool, P_GLOBAL, "Yes"),
+       "NETBIOSALIASES"         : ("netbios aliases", SambaParmString, P_GLOBAL, ""),
+       "ANNOUNCEAS"             : ("announce as", SambaParmString, P_GLOBAL, "NT"),
+       "DIRECTORYMASK"          : ("directory mask", SambaParmString, P_LOCAL, "0755"),
+       "MAPSYSTEM"              : ("map system", SambaParmBool, P_LOCAL, "No"),
+       "CHANGENOTIFYTIMEOUT"    : ("change notify timeout", SambaParmString, P_GLOBAL, "60"),
+       "WINBINDTRUSTEDDOMAINSONLY": ("winbind trusted domains only", SambaParmBool, P_GLOBAL, "No"),
+       "SHUTDOWNSCRIPT"         : ("shutdown script", SambaParmString, P_GLOBAL, ""),
+       "FOLLOWSYMLINKS"         : ("follow symlinks", SambaParmBool, P_LOCAL, "Yes"),
+       "MAPHIDDEN"              : ("map hidden", SambaParmBool, P_LOCAL, "No"),
+       "GROUP"                  : ("force group", SambaParmString, P_LOCAL, ""),
+       "DENYHOSTS"              : ("hosts deny", SambaParmString, P_LOCAL, ""),
+       "WINBINDCACHETIME"       : ("winbind cache time", SambaParmString, P_GLOBAL, "300"),
+       "DELETEVETOFILES"        : ("delete veto files", SambaParmBool, P_LOCAL, "No"),
+       "DISABLESPOOLSS"         : ("disable spoolss", SambaParmBool, P_GLOBAL, "No"),
+       "MAXCONNECTIONS"         : ("max connections", SambaParmString, P_LOCAL, "0"),
+       "WRITERAW"               : ("write raw", SambaParmBool, P_GLOBAL, "Yes"),
+       "SERVERSIGNING"          : ("server signing", SambaParmString, P_GLOBAL, "No"),
+       "VOLUME"                 : ("volume", SambaParmString, P_LOCAL, ""),
+       "UNIXPASSWORDSYNC"       : ("unix password sync", SambaParmBool, P_GLOBAL, "No"),
+       "OBEYPAMRESTRICTIONS"    : ("obey pam restrictions", SambaParmBool, P_GLOBAL, "No"),
+       "PASSWDCHATTIMEOUT"      : ("passwd chat timeout", SambaParmString, P_GLOBAL, "2"),
+       "USER"                   : ("username", SambaParmString, P_LOCAL, ""),
+       "HIDEDOTFILES"           : ("hide dot files", SambaParmBool, P_LOCAL, "Yes"),
+       "ROOTPOSTEXEC"           : ("root postexec", SambaParmString, P_LOCAL, ""),
+       "PROTOCOL"               : ("max protocol", SambaParmString, P_GLOBAL, "NT1"),
+       "LDAPADMINDN"            : ("ldap admin dn", SambaParmString, P_GLOBAL, ""),
+       "DNSPROXY"               : ("dns proxy", SambaParmBool, P_GLOBAL, "Yes"),
+       "OS2DRIVERMAP"           : ("os2 driver map", SambaParmString, P_GLOBAL, ""),
+       "QUEUERESUMECOMMAND"     : ("queueresume command", SambaParmString, P_LOCAL, ""),
+       "SERVERSCHANNEL"         : ("server schannel", SambaParmString, P_GLOBAL, "Auto"),
+       "IDMAPUID"               : ("idmap uid", SambaParmString, P_GLOBAL, ""),
+       "WINBINDENABLELOCALACCOUNTS": ("winbind enable local accounts", SambaParmBool, P_GLOBAL, "No"),
+       "PRINTERNAME"            : ("printer name", SambaParmString, P_LOCAL, ""),
+       "NTACLSUPPORT"           : ("nt acl support", SambaParmBool, P_LOCAL, "Yes"),
+       "LOGLEVEL"               : ("log level", SambaParmString, P_GLOBAL, "0"),
+       "STATCACHE"              : ("stat cache", SambaParmBool, P_GLOBAL, "Yes"),
+       "LPQCACHETIME"           : ("lpq cache time", SambaParmString, P_GLOBAL, "30"),
+       "LEVEL2OPLOCKS"          : ("level2 oplocks", SambaParmBool, P_LOCAL, "Yes"),
+       "LARGEREADWRITE"         : ("large readwrite", SambaParmBool, P_GLOBAL, "Yes"),
+       "LDAPREPLICATIONSLEEP"   : ("ldap replication sleep", SambaParmString, P_GLOBAL, "1000"),
+       "SECURITYMASK"           : ("security mask", SambaParmString, P_LOCAL, "0777"),
+       "LDAPUSERSUFFIX"         : ("ldap user suffix", SambaParmString, P_GLOBAL, ""),
+       "NETBIOSNAME"            : ("netbios name", SambaParmString, P_GLOBAL, "PANTHER"),
+       "LOCKSPINCOUNT"          : ("lock spin count", SambaParmString, P_GLOBAL, "3"),
+       "OPLOCKS"                : ("oplocks", SambaParmBool, P_LOCAL, "Yes"),
+       "MINWINSTTL"             : ("min wins ttl", SambaParmString, P_GLOBAL, "21600"),
+       "HOMEDIRMAP"             : ("homedir map", SambaParmString, P_GLOBAL, ""),
+       "REMOTEANNOUNCE"         : ("remote announce", SambaParmString, P_GLOBAL, ""),
+       "PREFERREDMASTER"        : ("preferred master", SambaParmString, P_GLOBAL, "Auto"),
+       "SECURITY"               : ("security", SambaParmString, P_GLOBAL, "USER"),
+       "AUTHMETHODS"            : ("auth methods", SambaParmString, P_GLOBAL, ""),
+       "ENABLERIDALGORITHM"     : ("enable rid algorithm", SambaParmBool, P_GLOBAL, "Yes"),
+       "LPRMCOMMAND"            : ("lprm command", SambaParmString, P_LOCAL, ""),
+       "KERNELCHANGENOTIFY"     : ("kernel change notify", SambaParmBool, P_GLOBAL, "Yes"),
+       "LOGONSCRIPT"            : ("logon script", SambaParmString, P_GLOBAL, ""),
+       "PRESERVECASE"           : ("preserve case", SambaParmBool, P_LOCAL, "Yes"),
+       "UNIXCHARSET"            : ("unix charset", SambaParmString, P_GLOBAL, "UTF-8"),
+       "FORCEPRINTERNAME"       : ("force printername", SambaParmBool, P_LOCAL, "No"),
+       "LDAPFILTER"             : ("ldap filter", SambaParmString, P_GLOBAL, "(uid"),
+       "DELETEREADONLY"         : ("delete readonly", SambaParmBool, P_LOCAL, "No"),
+       "ABORTSHUTDOWNSCRIPT"    : ("abort shutdown script", SambaParmString, P_GLOBAL, ""),
+       "DFREECOMMAND"           : ("dfree command", SambaParmString, P_GLOBAL, ""),
+       "VETOFILES"              : ("veto files", SambaParmString, P_LOCAL, ""),
+       "LOCKING"                : ("locking", SambaParmBool, P_LOCAL, "Yes"),
+       "EASUPPORT"              : ("ea support", SambaParmBool, P_LOCAL, "No"),
+       "MAXSMBDPROCESSES"       : ("max smbd processes", SambaParmString, P_GLOBAL, "0"),
+       "HIDEFILES"              : ("hide files", SambaParmString, P_LOCAL, ""),
+       "PASSWDCHATDEBUG"        : ("passwd chat debug", SambaParmBool, P_GLOBAL, "No"),
+       "SMBPASSWDFILE"          : ("smb passwd file", SambaParmString, P_GLOBAL, "/etc/samba/private/smbpasswd"),
+       "GETQUOTACOMMAND"        : ("get quota command", SambaParmString, P_GLOBAL, ""),
+       "OPLOCKCONTENTIONLIMIT"  : ("oplock contention limit", SambaParmString, P_LOCAL, "2"),
+       "DOMAINMASTER"           : ("domain master", SambaParmString, P_GLOBAL, "Auto"),
+       "DELETESHARECOMMAND"     : ("delete share command", SambaParmString, P_GLOBAL, ""),
+       "INVALIDUSERS"           : ("invalid users", SambaParmString, P_LOCAL, ""),
+       "POSIXLOCKING"           : ("posix locking", SambaParmBool, P_LOCAL, "Yes"),
+       "INCLUDE"                : ("include", SambaParmString, P_LOCAL, ""),
+       "ALGORITHMICRIDBASE"     : ("algorithmic rid base", SambaParmString, P_GLOBAL, "1000"),
+       "FORCEDIRECTORYSECURITYMODE": ("force directory security mode", SambaParmString, P_LOCAL, "00"),
+       "ANNOUNCEVERSION"        : ("announce version", SambaParmString, P_GLOBAL, "4.9"),
+       "USERNAMEMAP"            : ("username map", SambaParmString, P_GLOBAL, ""),
+       "MANGLEDNAMES"           : ("mangled names", SambaParmBool, P_LOCAL, "Yes"),
+       "ROOTDIRECTORY"          : ("root directory", SambaParmString, P_GLOBAL, ""),
+       "DEBUGHIRESTIMESTAMP"    : ("debug hires timestamp", SambaParmBool, P_GLOBAL, "No"),
+       "LOGONDRIVE"             : ("logon drive", SambaParmString, P_GLOBAL, ""),
+       "LOCALMASTER"            : ("local master", SambaParmBool, P_GLOBAL, "Yes"),
+       "ROOTPREEXECCLOSE"       : ("root preexec close", SambaParmBool, P_LOCAL, "No"),
+       "CONFIGFILE"             : ("config file", SambaParmString, P_GLOBAL, ""),
+       "USECLIENTDRIVER"        : ("use client driver", SambaParmBool, P_LOCAL, "No"),
+       "MINPROTOCOL"            : ("min protocol", SambaParmString, P_GLOBAL, "CORE"),
+       "ADDUSERTOGROUPSCRIPT"   : ("add user to group script", SambaParmString, P_GLOBAL, ""),
+       "MAPACLINHERIT"          : ("map acl inherit", SambaParmBool, P_LOCAL, "No"),
+       "DELETEUSERSCRIPT"       : ("delete user script", SambaParmString, P_GLOBAL, ""),
+       "WINBINDUID"             : ("idmap uid", SambaParmString, P_GLOBAL, ""),
+       "READRAW"                : ("read raw", SambaParmBool, P_GLOBAL, "Yes"),
+       "WINBINDENUMGROUPS"      : ("winbind enum groups", SambaParmBool, P_GLOBAL, "Yes"),
+       "PASSWORDLEVEL"          : ("password level", SambaParmString, P_GLOBAL, "0"),
+       "MAXPRINTJOBS"           : ("max print jobs", SambaParmString, P_LOCAL, "1000"),
+       "PRINTCAP"               : ("printcap name", SambaParmString, P_GLOBAL, ""),
+       "LOADPRINTERS"           : ("load printers", SambaParmBool, P_GLOBAL, "Yes"),
+       "DEFAULT"                : ("default service", SambaParmString, P_GLOBAL, ""),
+       "GUESTACCOUNT"           : ("guest account", SambaParmString, P_GLOBAL, "nobody"),
+       "AUTOSERVICES"           : ("preload", SambaParmString, P_GLOBAL, ""),
+       "WRITEABLE"              : ("read only", SambaParmBoolRev, P_LOCAL, "Yes"),
+       "CLIENTLANMANAUTH"       : ("client lanman auth", SambaParmBool, P_GLOBAL, "Yes"),
+       "MESSAGECOMMAND"         : ("message command", SambaParmString, P_GLOBAL, ""),
+       "UNIXEXTENSIONS"         : ("unix extensions", SambaParmBool, P_GLOBAL, "Yes"),
+       "LDAPPASSWORDSYNC"       : ("ldap passwd sync", SambaParmString, P_GLOBAL, "no"),
+       "AFSUSERNAMEMAP"         : ("afs username map", SambaParmString, P_GLOBAL, ""),
+       "SYSLOG"                 : ("syslog", SambaParmString, P_GLOBAL, "1"),
+       "SETPRIMARYGROUPSCRIPT"  : ("set primary group script", SambaParmString, P_GLOBAL, ""),
+       "DEADTIME"               : ("deadtime", SambaParmString, P_GLOBAL, "0"),
+       "RESTRICTANONYMOUS"      : ("restrict anonymous", SambaParmString, P_GLOBAL, "0"),
+       "USERNAMELEVEL"          : ("username level", SambaParmString, P_GLOBAL, "0"),
+       "DISPLAYCHARSET"         : ("display charset", SambaParmString, P_GLOBAL, "LOCALE"),
+       "FORCEUSER"              : ("force user", SambaParmString, P_LOCAL, ""),
+       "HOSTSDENY"              : ("hosts deny", SambaParmString, P_LOCAL, ""),
+       "HIDEUNWRITEABLEFILES"   : ("hide unwriteable files", SambaParmBool, P_LOCAL, "No"),
+       "DOSCHARSET"             : ("dos charset", SambaParmString, P_GLOBAL, "CP850"),
+       "DOSFILETIMES"           : ("dos filetimes", SambaParmBool, P_LOCAL, "No"),
+       "REALM"                  : ("realm", SambaParmString, P_GLOBAL, ""),
+       "LDAPSUFFIX"             : ("ldap suffix", SambaParmString, P_GLOBAL, ""),
+       "LPPAUSECOMMAND"         : ("lppause command", SambaParmString, P_LOCAL, ""),
+       "FAKEDIRECTORYCREATETIMES": ("fake directory create times", SambaParmBool, P_LOCAL, "No"),
+       "MAGICSCRIPT"            : ("magic script", SambaParmString, P_LOCAL, ""),
+       "WRITECACHESIZE"         : ("write cache size", SambaParmString, P_LOCAL, "0"),
+       "BLOCKSIZE"              : ("block size", SambaParmString, P_LOCAL, "1024"),
+       "LOCKSPINTIME"           : ("lock spin time", SambaParmString, P_GLOBAL, "10"),
+       "ACLCOMPATIBILITY"       : ("acl compatibility", SambaParmString, P_GLOBAL, ""),
+       "MSDFSPROXY"             : ("msdfs proxy", SambaParmString, P_LOCAL, ""),
+       "POSTEXEC"               : ("postexec", SambaParmString, P_LOCAL, ""),
+       "HIDEUNREADABLE"         : ("hide unreadable", SambaParmBool, P_LOCAL, "No"),
+       "WIDELINKS"              : ("wide links", SambaParmBool, P_LOCAL, "Yes"),
+       "STRICTSYNC"             : ("strict sync", SambaParmBool, P_LOCAL, "No"),
+       "PRINTCAPNAME"           : ("printcap name", SambaParmString, P_GLOBAL, ""),
+       "PREFEREDMASTER"         : ("preferred master", SambaParmString, P_GLOBAL, "Auto"),
+       "MAXMUX"                 : ("max mux", SambaParmString, P_GLOBAL, "50"),
+       "VETOOPLOCKFILES"        : ("veto oplock files", SambaParmString, P_LOCAL, ""),
+       "WINBINDSEPARATOR"       : ("winbind separator", SambaParmString, P_GLOBAL, "\\"),
+       "NISHOMEDIR"             : ("NIS homedir", SambaParmBool, P_GLOBAL, "No"),
+       "AVAILABLE"              : ("available", SambaParmBool, P_LOCAL, "Yes"),
+       "KEEPALIVE"              : ("keepalive", SambaParmString, P_GLOBAL, "300"),
+       "USERNAME"               : ("username", SambaParmString, P_LOCAL, ""),
+       "PRINTCOMMAND"           : ("print command", SambaParmString, P_LOCAL, ""),
+       "LPRESUMECOMMAND"        : ("lpresume command", SambaParmString, P_LOCAL, ""),
+       "USEKERBEROSKEYTAB"      : ("use kerberos keytab", SambaParmBool, P_GLOBAL, "No"),
+       "HOSTSALLOW"             : ("hosts allow", SambaParmString, P_LOCAL, ""),
+       "MAXOPENFILES"           : ("max open files", SambaParmString, P_GLOBAL, "10000"),
+       "PARANOIDSERVERSECURITY" : ("paranoid server security", SambaParmBool, P_GLOBAL, "Yes"),
+       "WTMPDIRECTORY"          : ("wtmp directory", SambaParmString, P_GLOBAL, ""),
+       "ADDPRINTERCOMMAND"      : ("addprinter command", SambaParmString, P_GLOBAL, ""),
+       "PRINTERADMIN"           : ("printer admin", SambaParmString, P_LOCAL, ""),
+       "WINSSERVER"             : ("wins server", SambaParmString, P_GLOBAL, ""),
+       "LDAPTIMEOUT"            : ("ldap timeout", SambaParmString, P_GLOBAL, "15"),
+       "LOCKDIRECTORY"          : ("lock directory", SambaParmString, P_GLOBAL, "/var/lib/samba"),
+       "LOGONHOME"              : ("logon home", SambaParmString, P_GLOBAL, "\\%N\%U"),
+       "MINPASSWDLENGTH"        : ("min password length", SambaParmString, P_GLOBAL, "5"),
+       "CLIENTPLAINTEXTAUTH"    : ("client plaintext auth", SambaParmBool, P_GLOBAL, "Yes"),
+       "CSCPOLICY"              : ("csc policy", SambaParmString, P_LOCAL, "manual"),
+       "ADDSHARECOMMAND"        : ("add share command", SambaParmString, P_GLOBAL, ""),
+       "MANGLINGCHAR"           : ("mangling char", SambaParmString, P_LOCAL, "~"),
+       "DIRECTORY"              : ("path", SambaParmString, P_LOCAL, ""),
+       "DEBUGTIMESTAMP"         : ("debug timestamp", SambaParmBool, P_GLOBAL, "Yes"),
+       "ALLOWHOSTS"             : ("hosts allow", SambaParmString, P_LOCAL, ""),
+       "FSTYPE"                 : ("fstype", SambaParmString, P_LOCAL, "NTFS"),
+       "BLOCKINGLOCKS"          : ("blocking locks", SambaParmBool, P_LOCAL, "Yes"),
+       "LDAPSSL"                : ("ldap ssl", SambaParmString, P_GLOBAL, ""),
+       "PAMPASSWORDCHANGE"      : ("pam password change", SambaParmBool, P_GLOBAL, "No"),
+       "GUESTOK"                : ("guest ok", SambaParmBool, P_LOCAL, "No"),
+       "DEFAULTDEVMODE"         : ("default devmode", SambaParmBool, P_LOCAL, "No"),
+       "MAXDISKSIZE"            : ("max disk size", SambaParmString, P_GLOBAL, "0"),
+       "ADDMACHINESCRIPT"       : ("add machine script", SambaParmString, P_GLOBAL, ""),
+       "MANGLEPREFIX"           : ("mangle prefix", SambaParmString, P_GLOBAL, "1"),
+       "DISABLENETBIOS"         : ("disable netbios", SambaParmBool, P_GLOBAL, "No"),
+       "LOGONPATH"              : ("logon path", SambaParmString, P_GLOBAL, "\\%N\%U\profile"),
+       "IDMAPBACKEND"           : ("idmap backend", SambaParmString, P_GLOBAL, ""),
+       "SHORTPRESERVECASE"      : ("short preserve case", SambaParmBool, P_LOCAL, "Yes"),
+       "CUPSSERVER"             : ("cups server", SambaParmString, P_GLOBAL, ""),
+       "NTPIPESUPPORT"          : ("nt pipe support", SambaParmBool, P_GLOBAL, "Yes"),
+       "READONLY"               : ("read only", SambaParmBool, P_LOCAL, "Yes"),
+       "MACHINEPASSWORDTIMEOUT" : ("machine password timeout", SambaParmString, P_GLOBAL, "604800"),
+       "PIDDIRECTORY"           : ("pid directory", SambaParmString, P_GLOBAL, "/var/run"),
+       "PUBLIC"                 : ("guest ok", SambaParmBool, P_LOCAL, "No"),
+       "DEBUGPID"               : ("debug pid", SambaParmBool, P_GLOBAL, "No"),
+       "GUESTONLY"              : ("guest only", SambaParmBool, P_LOCAL, "No"),
+       "DELETEGROUPSCRIPT"      : ("delete group script", SambaParmString, P_GLOBAL, ""),
+       "CUPSOPTIONS"            : ("cups options", SambaParmString, P_LOCAL, ""),
+       "PASSWDCHAT"             : ("passwd chat", SambaParmString, P_GLOBAL, "*new*password* %n\n *new*password* %n\n *changed*"),
+       "STRICTLOCKING"          : ("strict locking", SambaParmString, P_LOCAL, "Yes"),
+       "TEMPLATEHOMEDIR"        : ("template homedir", SambaParmString, P_GLOBAL, "/home/%D/%U"),
+       "WINBINDGID"             : ("idmap gid", SambaParmString, P_GLOBAL, ""),
+       "INHERITPERMISSIONS"     : ("inherit permissions", SambaParmBool, P_LOCAL, "No"),
+       "TIMESERVER"             : ("time server", SambaParmBool, P_GLOBAL, "No"),
+       "BROWSELIST"             : ("browse list", SambaParmBool, P_GLOBAL, "Yes"),
+       "HOSTNAMELOOKUPS"        : ("hostname lookups", SambaParmBool, P_GLOBAL, "No"),
+       "DOSFILETIMERESOLUTION"  : ("dos filetime resolution", SambaParmBool, P_LOCAL, "No"),
+       "CREATEMASK"             : ("create mask", SambaParmString, P_LOCAL, "0744"),
+       "WINSHOOK"               : ("wins hook", SambaParmString, P_GLOBAL, ""),
+       "DEFAULTCASE"            : ("default case", SambaParmString, P_LOCAL, "lower"),
+       "PATH"                   : ("path", SambaParmString, P_LOCAL, ""),
+       "SHOWADDPRINTERWIZARD"   : ("show add printer wizard", SambaParmBool, P_GLOBAL, "Yes"),
+       "WINSPARTNERS"           : ("wins partners", SambaParmString, P_GLOBAL, ""),
+       "ENABLEPRIVILEGES"       : ("enable privileges", SambaParmBool, P_GLOBAL, "No"),
+       "VFSOBJECTS"             : ("vfs objects", SambaParmString, P_LOCAL, ""),
+       "STRICTALLOCATE"         : ("strict allocate", SambaParmBool, P_LOCAL, "No"),
+       "PREEXEC"                : ("preexec", SambaParmString, P_LOCAL, ""),
+       "WINSSUPPORT"            : ("wins support", SambaParmBool, P_GLOBAL, "No"),
+       "HOSTMSDFS"              : ("host msdfs", SambaParmBool, P_GLOBAL, "No"),
+       "AFSTOKENLIFETIME"       : ("afs token lifetime", SambaParmString, P_GLOBAL, "604800"),
+       "PRINTOK"                : ("printable", SambaParmBool, P_LOCAL, "No"),
+       "TEMPLATEPRIMARYGROUP"   : ("template primary group", SambaParmString, P_GLOBAL, "nobody"),
+       "PASSWDPROGRAM"          : ("passwd program", SambaParmString, P_GLOBAL, ""),
+       "SYNCALWAYS"             : ("sync always", SambaParmBool, P_LOCAL, "No"),
+       "QUEUEPAUSECOMMAND"      : ("queuepause command", SambaParmString, P_LOCAL, ""),
+       "BINDINTERFACESONLY"     : ("bind interfaces only", SambaParmBool, P_GLOBAL, "No"),
+       "MAXWINSTTL"             : ("max wins ttl", SambaParmString, P_GLOBAL, "518400"),
+       "GETWDCACHE"             : ("getwd cache", SambaParmBool, P_GLOBAL, "Yes"),
+       "MAGICOUTPUT"            : ("magic output", SambaParmString, P_LOCAL, ""),
+       "ADMINUSERS"             : ("admin users", SambaParmString, P_LOCAL, ""),
+       "DIRECTORYMODE"          : ("directory mask", SambaParmString, P_LOCAL, "0755"),
+       "CLIENTSIGNING"          : ("client signing", SambaParmString, P_GLOBAL, "auto"),
+       "PASSDBBACKEND"          : ("passdb backend", SambaParmString, P_GLOBAL, "smbpasswd"),
+       "CASESIGNAMES"           : ("case sensitive", SambaParmString, P_LOCAL, "Auto"),
+       "SETQUOTACOMMAND"        : ("set quota command", SambaParmString, P_GLOBAL, ""),
+       "LPQCOMMAND"             : ("lpq command", SambaParmString, P_LOCAL, ""),
+       "SERVERSTRING"           : ("server string", SambaParmString, P_GLOBAL, "Samba 3.0.11pre2-SVN-build-4840"),
+       "DEFAULTSERVICE"         : ("default service", SambaParmString, P_GLOBAL, ""),
+       "WINBINDUSEDEFAULTDOMAIN": ("winbind use default domain", SambaParmBool, P_GLOBAL, "No"),
+       "INTERFACES"             : ("interfaces", SambaParmString, P_GLOBAL, ""),
+       "ROOTDIR"                : ("root directory", SambaParmString, P_GLOBAL, ""),
+       "ADDUSERSCRIPT"          : ("add user script", SambaParmString, P_GLOBAL, ""),
+       "CLIENTNTLMV2AUTH"       : ("client NTLMv2 auth", SambaParmBool, P_GLOBAL, "No"),
+       "FORCEUNKNOWNACLUSER"    : ("force unknown acl user", SambaParmBool, P_LOCAL, "No"),
+       "MANGLEDMAP"             : ("mangled map", SambaParmString, P_LOCAL, ""),
+       "NTLMAUTH"               : ("ntlm auth", SambaParmBool, P_GLOBAL, "Yes"),
+       "INHERITACLS"            : ("inherit acls", SambaParmBool, P_LOCAL, "No"),
+       "HOSTSEQUIV"             : ("hosts equiv", SambaParmString, P_GLOBAL, ""),
+       "ALLOWTRUSTEDDOMAINS"    : ("allow trusted domains", SambaParmBool, P_GLOBAL, "Yes"),
+       "MINPASSWORDLENGTH"      : ("min password length", SambaParmString, P_GLOBAL, "5"),
+       "USERS"                  : ("username", SambaParmString, P_LOCAL, ""),
+       "PRELOAD"                : ("preload", SambaParmString, P_GLOBAL, ""),
+       "DEBUGUID"               : ("debug uid", SambaParmBool, P_GLOBAL, "No"),
+       "CHANGESHARECOMMAND"     : ("change share command", SambaParmString, P_GLOBAL, ""),
+       "BROWSABLE"              : ("browseable", SambaParmBool, P_LOCAL, "Yes"),
+       "ENHANCEDBROWSING"       : ("enhanced browsing", SambaParmBool, P_GLOBAL, "Yes"),
+       "PANICACTION"            : ("panic action", SambaParmString, P_GLOBAL, ""),
+       "LDAPMACHINESUFFIX"      : ("ldap machine suffix", SambaParmString, P_GLOBAL, ""),
+       "UPDATEENCRYPTED"        : ("update encrypted", SambaParmBool, P_GLOBAL, "No"),
+       "MAXTTL"                 : ("max ttl", SambaParmString, P_GLOBAL, "259200"),
+       "WRITABLE"               : ("read only", SambaParmBoolRev, P_LOCAL, "Yes"),
+       "SHAREMODES"             : ("share modes", SambaParmBool, P_LOCAL, "Yes"),
+       "REMOTEBROWSESYNC"       : ("remote browse sync", SambaParmString, P_GLOBAL, ""),
+       "STOREDOSATTRIBUTES"     : ("store dos attributes", SambaParmBool, P_LOCAL, "No"),
+       "CLIENTSCHANNEL"         : ("client schannel", SambaParmString, P_GLOBAL, "Auto"),
+       "WRITELIST"              : ("write list", SambaParmString, P_LOCAL, ""),
+       "ADDGROUPSCRIPT"         : ("add group script", SambaParmString, P_GLOBAL, ""),
+       "OPLOCKBREAKWAITTIME"    : ("oplock break wait time", SambaParmString, P_GLOBAL, "0"),
+       "TIMEOFFSET"             : ("time offset", SambaParmString, P_GLOBAL, "0"),
+       "LDAPDELETEDN"           : ("ldap delete dn", SambaParmBool, P_GLOBAL, "No"),
+       "AFSSHARE"               : ("afs share", SambaParmBool, P_LOCAL, "No"),
+       "ROOT"                   : ("root directory", SambaParmString, P_GLOBAL, ""),
+       "NAMERESOLVEORDER"       : ("name resolve order", SambaParmString, P_GLOBAL, "lmhosts wins host bcast"),
+}
+##### end of smbparm.y ##########################################
+#################################################################