where should smb.conf % macros be supported?

Volker Lendecke Volker.Lendecke at SerNet.DE
Tue May 24 09:32:05 MDT 2011


Hi, Andrew!

I've been there, many times. I know lp_string is one of the
dirtiest pieces that Samba has, and probably the most
difficult one to extinguish.

The approach I had tried once was to make all the expansion
variables explicit. Maybe we should pick the ones that have
only very few callers, convert those to CONST_STRING and do
the required expansion explicitly in the callers. This is
really a case-by-case conversion unfortunately, at least
that's my 2ct on the issue.

On Tue, May 24, 2011 at 12:02:12PM +1000, Andrew Bartlett wrote:
> To start bridging the gap, I would like to convert the following
> parameters to FN_GLOBAL_CONST_STRING, which are truly constant (at least
> until an smb.conf reload):
> 
> FN_GLOBAL_STRING(lp_dos_charset, &Globals.dos_charset)
> FN_GLOBAL_STRING(lp_unix_charset, &Globals.unix_charset)
> FN_GLOBAL_STRING(lp_display_charset, &Globals.display_charset)

> FN_GLOBAL_STRING(lp_logfile, &Globals.szLogFile)
> FN_GLOBAL_STRING(lp_configfile, &Globals.szConfigFile)

Both log file and config file definitely need the
expansions.

> FN_GLOBAL_STRING(lp_smb_passwd_file, &Globals.szSMBPasswdFile)
> FN_GLOBAL_STRING(lp_private_dir, &Globals.szPrivateDir)
> FN_GLOBAL_STRING(lp_lockdir, &Globals.szLockDir)
> FN_GLOBAL_STRING(lp_piddir, &Globals.szPidDir)
> FN_GLOBAL_STRING(lp_utmpdir, &Globals.szUtmpDir)
> FN_GLOBAL_STRING(lp_wtmpdir, &Globals.szWtmpDir)
> FN_GLOBAL_STRING(lp_realm, &Globals.szRealm)
> FN_GLOBAL_STRING(lp_name_resolve_order, &Globals.szNameResolveOrder)
> FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction)
> FN_GLOBAL_STRING(lp_dedicated_keytab_file,
> &Globals.szDedicatedKeytabFile)
> FN_GLOBAL_STRING(lp_ncalrpc_dir, &Globals.ncalrpc_dir)
> FN_GLOBAL_STRING(lp_passwordserver, &Globals.szPasswordServer)

The other ones I could see as CONST_STRING.

> 
> These don't matter for my work - but the separate spoolss daemon will
> having trouble maintaining the existing behaviours for:
> 
> FN_GLOBAL_STRING(lp_addport_cmd, &Globals.szAddPortCommand)
> FN_GLOBAL_STRING(lp_enumports_cmd, &Globals.szEnumPortsCommand)
> FN_GLOBAL_STRING(lp_addprinter_cmd, &Globals.szAddPrinterCommand)
> FN_GLOBAL_STRING(lp_deleteprinter_cmd, &Globals.szDeletePrinterCommand)
> FN_GLOBAL_STRING(lp_os2_driver_map, &Globals.szOs2DriverMap)
> FN_GLOBAL_STRING(lp_iprint_server, &Globals.szIPrintServer)
> FN_GLOBAL_STRING(lp_cups_server, &Globals.szCupsServer)
> 
> For completeness, I list the remaining ones, most of which I think
> should not allow % subs are:
> 
> FN_GLOBAL_STRING(lp_smb_ports, &Globals.smb_ports)
> FN_GLOBAL_STRING(lp_serverstring, &Globals.szServerString)

This one probably is used with %, for the better or worse.

> FN_GLOBAL_STRING(lp_mangling_method, &Globals.szManglingMethod)
> FN_GLOBAL_STRING(lp_rootdir, &Globals.szRootdir)
> FN_GLOBAL_STRING(lp_perfcount_module, &Globals.szSMBPerfcountModule)
> FN_GLOBAL_STRING(lp_defaultservice, &Globals.szDefaultService)
> FN_GLOBAL_STRING(lp_msg_command, &Globals.szMsgCommand)

That needs expansions.

> FN_GLOBAL_STRING(lp_get_quota_command, &Globals.szGetQuota)
> FN_GLOBAL_STRING(lp_set_quota_command, &Globals.szSetQuota)

Not sure about those.

> FN_GLOBAL_STRING(lp_auto_services, &Globals.szAutoServices)

> FN_GLOBAL_STRING(lp_passwd_program, &Globals.szPasswdProgram)
> FN_GLOBAL_STRING(lp_passwd_chat, &Globals.szPasswdChat)

> FN_GLOBAL_STRING(lp_log_nt_token_command, &Globals.szLogNtTokenCommand)

This one does definitely need some level of % substitutions.
Not sure it needs the full range.

> FN_GLOBAL_STRING(lp_username_map, &Globals.szUsernameMap)
> FN_GLOBAL_STRING(lp_remote_announce, &Globals.szRemoteAnnounce)
> FN_GLOBAL_STRING(lp_remote_browse_sync, &Globals.szRemoteBrowseSync)
> FN_GLOBAL_STRING(lp_nis_home_map_name, &Globals.szNISHomeMapName)
> static FN_GLOBAL_STRING(lp_announce_version, &Globals.szAnnounceVersion)
> /* FN_GLOBAL_STRING(lp_passdb_backend, &Globals.szPassdbBackend)

> FN_GLOBAL_STRING(lp_adduser_script, &Globals.szAddUserScript)
> FN_GLOBAL_STRING(lp_renameuser_script, &Globals.szRenameUserScript)
> FN_GLOBAL_STRING(lp_deluser_script, &Globals.szDelUserScript)
> FN_GLOBAL_STRING(lp_addgroup_script, &Globals.szAddGroupScript)
> FN_GLOBAL_STRING(lp_delgroup_script, &Globals.szDelGroupScript)
> FN_GLOBAL_STRING(lp_addusertogroup_script,
> &Globals.szAddUserToGroupScript)
> FN_GLOBAL_STRING(lp_deluserfromgroup_script,
> &Globals.szDelUserFromGroupScript)
> FN_GLOBAL_STRING(lp_setprimarygroup_script,
> &Globals.szSetPrimaryGroupScript)
> FN_GLOBAL_STRING(lp_addmachine_script, &Globals.szAddMachineScript)

Those ones definitely need some expansions. I'm not sure
however that this needs to be via the lp_string mechanism or
if it's done explicitly in the calles of the lp_ functions.

> FN_GLOBAL_STRING(lp_shutdown_script, &Globals.szShutdownScript)
> FN_GLOBAL_STRING(lp_abort_shutdown_script,
> &Globals.szAbortShutdownScript)
> FN_GLOBAL_STRING(lp_username_map_script, &Globals.szUsernameMapScript)
> FN_GLOBAL_STRING(lp_check_password_script,
> &Globals.szCheckPasswordScript)
> FN_GLOBAL_STRING(lp_wins_hook, &Globals.szWINSHook)
> FN_GLOBAL_STRING(lp_ldap_suffix, &Globals.szLdapSuffix)
> FN_GLOBAL_STRING(lp_ldap_admin_dn, &Globals.szLdapAdminDn)

> FN_GLOBAL_STRING(lp_add_share_cmd, &Globals.szAddShareCommand)
> FN_GLOBAL_STRING(lp_change_share_cmd, &Globals.szChangeShareCommand)
> FN_GLOBAL_STRING(lp_delete_share_cmd, &Globals.szDeleteShareCommand)
> FN_GLOBAL_STRING(lp_usershare_path, &Globals.szUsersharePath)

Same comment as above.

Volker

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen


More information about the samba-technical mailing list