📄 generate_parm_table.py
字号:
#!/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, commandsHEADER = """########################################################################## 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_tableP_LOCAL = 0P_GLOBAL = 1"""FOOTER = """##### end of smbparm.y ###########################################################################################################"""TESTPARM = "/usr/bin/testparm"## fields in Samba's parameter tabledisplayName = 0type = 1scope = 2variable = 3flags = 6parm_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 = "/usr/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]), "") ) new = parts[1].replace('\\', '\\\\') def_values[key] = new## 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( "" )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -