<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://bugs.maemo.com/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Enterprise Configurator - Revision history</title>
		<link>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;action=history</link>
		<description>Revision history for this page on the wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Sat, 18 Apr 2026 12:04:52 GMT</lastBuildDate>
		<item>
			<title>amigadave:&amp;#32;add links</title>
			<link>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=41576&amp;oldid=prev</link>
			<guid>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=41576&amp;oldid=prev</guid>
			<description>&lt;p&gt;add links&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 10:20, 2 February 2011&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Supported devices:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Supported devices:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* N900 (Fremantle)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[Nokia &lt;/ins&gt;N900&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;|N900]] &lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[Open development/Maemo roadmap/Fremantle|&lt;/ins&gt;Fremantle&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]]&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;It supports the installation and modification of:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;It supports the installation and modification of:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 212:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 212:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A complete XML document...&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A complete XML document...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Tells that it's an &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;xml &lt;/del&gt;in-file.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Tells that it's an &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;XML &lt;/ins&gt;in-file.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;target&amp;lt;/code&amp;gt;: The file system path of the final output. If the file exists, it is also used as input.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;target&amp;lt;/code&amp;gt;: The file system path of the final output. If the file exists, it is also used as input.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;node_path&amp;lt;/code&amp;gt;: It is an XML-path that defines the nodes in the in-file &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section that will be added to the target file.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;node_path&amp;lt;/code&amp;gt;: It is an XML-path that defines the nodes in the in-file &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section that will be added to the target file.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-18 12:04:52 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 02 Feb 2011 10:20:51 GMT</pubDate>			<dc:creator>amigadave</dc:creator>			<comments>http://bugs.maemo.com/Talk:Enterprise_Configurator</comments>		</item>
		<item>
			<title>amigadave:&amp;#32;wikify slightly</title>
			<link>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=41394&amp;oldid=prev</link>
			<guid>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=41394&amp;oldid=prev</guid>
			<description>&lt;p&gt;wikify slightly&lt;/p&gt;
&lt;a href=&quot;http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;amp;diff=41394&amp;amp;oldid=35200&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Tue, 25 Jan 2011 11:01:27 GMT</pubDate>			<dc:creator>amigadave</dc:creator>			<comments>http://bugs.maemo.com/Talk:Enterprise_Configurator</comments>		</item>
		<item>
			<title>amigadave:&amp;#32;Category:Enterprise</title>
			<link>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=35200&amp;oldid=prev</link>
			<guid>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=35200&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=Category:Enterprise&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Enterprise (page does not exist)&quot;&gt;Category:Enterprise&lt;/a&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 13:19, 1 June 2010&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 276:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 276:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;scripts, perl and python scripts, etc..&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;scripts, perl and python scripts, etc..&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Command lines cannot start with &amp;lt;code&amp;gt;&amp;quot;install:&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;uninstall:&amp;quot;&amp;lt;/code&amp;gt;!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Command lines cannot start with &amp;lt;code&amp;gt;&amp;quot;install:&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;uninstall:&amp;quot;&amp;lt;/code&amp;gt;!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Enterprise]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-18 12:04:53 --&gt;
&lt;/table&gt;</description>
			<pubDate>Tue, 01 Jun 2010 13:19:58 GMT</pubDate>			<dc:creator>amigadave</dc:creator>			<comments>http://bugs.maemo.com/Talk:Enterprise_Configurator</comments>		</item>
		<item>
			<title>jpalko:&amp;#32;EDG - Configurator</title>
			<link>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=34937&amp;oldid=prev</link>
			<guid>http://bugs.maemo.com/index.php?title=Enterprise_Configurator&amp;diff=34937&amp;oldid=prev</guid>
			<description>&lt;p&gt;EDG - Configurator&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Epconf helps to configure software components that are commonly used in&lt;br /&gt;
an enterprise environment (e.g. at companies).&lt;br /&gt;
&lt;br /&gt;
Supported devices:&lt;br /&gt;
* N900 (Fremantle)&lt;br /&gt;
&lt;br /&gt;
It supports the installation and modification of:&lt;br /&gt;
* Browser bookmark thumbnail images: thumbnail_* files.&lt;br /&gt;
* Wifi root certificates: &amp;lt;code&amp;gt;*.crt&amp;lt;/code&amp;gt; files are used when authenticating via WLAN.&lt;br /&gt;
* GConf schemas: &amp;lt;code&amp;gt;*.schemas&amp;lt;/code&amp;gt; files are registered with GConf.&lt;br /&gt;
* VCard files: &amp;lt;code&amp;gt;*.vcard&amp;lt;/code&amp;gt; files are added to the contact list.&lt;br /&gt;
* Custom actions: Custom configuration can be done with epconftool in-files (&amp;lt;code&amp;gt;*.epin&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The above mentioned input files are taken from the&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/share/epconf-sets/SET&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
With epconf in-files you can configure:&lt;br /&gt;
* Arbitrary XML files&lt;br /&gt;
* GConf values&lt;br /&gt;
* Anything with script files&lt;br /&gt;
&lt;br /&gt;
If an epconf in-file file matches &amp;lt;code&amp;gt;*.do-as-user.epin&amp;lt;/code&amp;gt; then the&lt;br /&gt;
operations described by it will be executed as the user &amp;lt;code&amp;gt;'user'&amp;lt;/code&amp;gt;.&lt;br /&gt;
For more information about in-files, please refer to epconftool.&lt;br /&gt;
See [[Enterprise_Configurator#epconftool|here]] for more details about epconftool in-files.&lt;br /&gt;
&lt;br /&gt;
== Command line syntax ==&lt;br /&gt;
&lt;br /&gt;
 usage: epconf [debug] macro file_name ACTION SET[:GROUP[:ELEMENT]]...&lt;br /&gt;
     debug            Enables debug output.&lt;br /&gt;
     macro            Uses the specified macro file instead of the default one.&lt;br /&gt;
     ACTION           May be either install or uninstall.&lt;br /&gt;
     SET              Name of the configuration set to process.&lt;br /&gt;
                      It may be &amp;quot;all&amp;quot; which means &amp;quot;Process all the available set&amp;quot;.&lt;br /&gt;
                      &amp;quot;all&amp;quot; cannot be mixed with other sets!&lt;br /&gt;
     GROUP            Can be one of&lt;br /&gt;
                          thumbnail: Process thumbnail_* thumbnails&lt;br /&gt;
                          crt: Process *.crt certificates&lt;br /&gt;
                          vcard: Process *.vcard vCards.&lt;br /&gt;
                          schemas: Process *.schemas GConf schemas&lt;br /&gt;
                          epin: Process *.epin epconftool in-files&lt;br /&gt;
                      If it is not given then all the groups are processed.&lt;br /&gt;
     ELEMENT          This can be used only with epin group.&lt;br /&gt;
                      Only the infile with the given name willbe processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following example pulls the input files from &amp;lt;code&amp;gt;/usr/share/enterprise_pilot/my_set&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 epconf macro /home/user/macro.xml install my_set&lt;br /&gt;
&lt;br /&gt;
The following example processes&lt;br /&gt;
* &amp;lt;code&amp;gt;best_in*.epin&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;/usr/share/enterprise_pilot/my_set&amp;lt;/code&amp;gt; then&lt;br /&gt;
* &amp;lt;code&amp;gt;*.vcard&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;/usr/share/enterprise_pilot/your_set&amp;lt;/code&amp;gt; and finally&lt;br /&gt;
* all supported files from &amp;lt;code&amp;gt;/usr/share/enterprise_pilot/their_set&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 epconf install my_set:epin:best_in your_set:vcard their_set&lt;br /&gt;
&lt;br /&gt;
= epconftool =&lt;br /&gt;
&lt;br /&gt;
Epconftool processes in-files that can be used for the creation of sophisticated configuration&lt;br /&gt;
scripts.&lt;br /&gt;
&lt;br /&gt;
== Command line syntax ==&lt;br /&gt;
&lt;br /&gt;
 usage: epconftool [-f] [-s] [-d] { -x | -l } macro-file { -i | -u } in-files...&lt;br /&gt;
 &lt;br /&gt;
   -i    Install using the given input files.&lt;br /&gt;
   -u    Uninstall using the given input files.&lt;br /&gt;
   -x    Macro file in XML format&lt;br /&gt;
   -l    Macro file in plain key-value format&lt;br /&gt;
   -f    Force. If the process fails at one input file it goes on to the next one.&lt;br /&gt;
         Without this option (default), a bad input file stops the entire process&lt;br /&gt;
         and the subsequent input files are not processed.&lt;br /&gt;
   -s    Do simple macro substitution (a macro in a macro is not processed).&lt;br /&gt;
   -d    Print debug output to stderr.&lt;br /&gt;
         Either -i or -u can be used. They cannot be mixed.&lt;br /&gt;
&lt;br /&gt;
Built-in macros:&lt;br /&gt;
* &amp;lt;code&amp;gt;TIME_EPOCH&amp;lt;/code&amp;gt;: The seconds elapsed since 1970.01.01 (see 'man 2 time').&lt;br /&gt;
* &amp;lt;code&amp;gt;INFILE_DIR&amp;lt;/code&amp;gt;:  Absolute path of the directory containing the in-file being processed.&lt;br /&gt;
* &amp;lt;code&amp;gt;MARKER&amp;lt;/code&amp;gt;: This may be used e.g. in XML in-files. If a node_path node contains this as a text field anywhere in its subtree, then that node is removed during un-installation. Otherwise it is not removed!&lt;br /&gt;
&lt;br /&gt;
== Macro file ==&lt;br /&gt;
&lt;br /&gt;
The MACRO file contains usernames, passwords, etc.&lt;br /&gt;
Each value in this file has a key associated with it.&lt;br /&gt;
E.g., the WLAN_username key may have the value Jack.&lt;br /&gt;
The keys of the MACRO file can be used in in-files&lt;br /&gt;
as &amp;lt;code&amp;gt;%key_name%&amp;lt;/code&amp;gt;. E.g., &amp;lt;code&amp;gt;%WLAN_username%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Two kinds of macro files are supported:&lt;br /&gt;
* XML&lt;br /&gt;
* Key-value list&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
Let's take the following as an example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
 &amp;lt;CONF&amp;gt;&lt;br /&gt;
   &amp;lt;NAME&amp;gt;Joe Buck&amp;lt;/NAME&amp;gt;&lt;br /&gt;
   &amp;lt;REMOTE_ACCESS&amp;gt;&lt;br /&gt;
     &amp;lt;LOGIN&amp;gt;joebuck&amp;lt;/LOGIN&amp;gt;&lt;br /&gt;
   &amp;lt;/REMOTE_ACCESS&amp;gt;&lt;br /&gt;
   &amp;lt;SIP&amp;gt;&lt;br /&gt;
     &amp;lt;NAME&amp;gt;ext-joe.4.buck&amp;lt;/NAME&amp;gt;&lt;br /&gt;
     &amp;lt;PASS&amp;gt;98765876&amp;lt;/PASS&amp;gt;&lt;br /&gt;
   &amp;lt;/SIP&amp;gt;&lt;br /&gt;
   &amp;lt;WLAN&amp;gt;&lt;br /&gt;
     &amp;lt;RESTAURANT&amp;gt;&lt;br /&gt;
       &amp;lt;LOGIN&amp;gt;joejoe&amp;lt;/LOGIN&amp;gt;&lt;br /&gt;
       &amp;lt;PASS&amp;gt;buckybuck&amp;lt;/PASS&amp;gt;&lt;br /&gt;
     &amp;lt;/RESTAURANT&amp;gt;&lt;br /&gt;
   &amp;lt;/WLAN&amp;gt;&lt;br /&gt;
   &amp;lt;EMAIL&amp;gt;&lt;br /&gt;
     &amp;lt;ADDRESS&amp;gt;ext-joe.4.buck@company.org&amp;lt;/ADDRESS&amp;gt;&lt;br /&gt;
   &amp;lt;/EMAIL&amp;gt;&lt;br /&gt;
 &amp;lt;/CONF&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When using the above example macro file, the macro values are the text nodes&lt;br /&gt;
and the macro names are formed formed the tag names. For example, the&lt;br /&gt;
&amp;lt;code&amp;gt;%CONF_REMOTE_ACCESS_LOGIN%&amp;lt;/code&amp;gt; macro refers to the value &amp;lt;code&amp;gt;&amp;quot;joebuck&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Key-value list ===&lt;br /&gt;
&lt;br /&gt;
Let's take the following as an example:&lt;br /&gt;
 &amp;quot;CONF_NAME&amp;quot; &amp;quot;Joe Buck&amp;quot;&lt;br /&gt;
 &amp;quot;CONF_REMOTE_ACCESS_LOGIN&amp;quot; &amp;quot;joebuck&amp;quot;&lt;br /&gt;
 &amp;quot;CONF_SIP_NAME&amp;quot; &amp;quot;ext-joe.4.buck&amp;quot;&lt;br /&gt;
 &amp;quot;CONF_SIP_PASS&amp;quot; &amp;quot;98765876&amp;quot;&lt;br /&gt;
 &amp;quot;CONF_WLAN_RESTAURANT_LOGIN&amp;quot; &amp;quot;joejoe&amp;quot;&lt;br /&gt;
 &amp;quot;CONF_WLAN_RESTAURANT_PASS&amp;quot; &amp;quot;buckybuck&amp;quot;&lt;br /&gt;
 &amp;quot;CONF_EMAIL_ADDRESS&amp;quot; &amp;quot;ext-joe.4.buck@company.org&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When using the above example macro file, the&lt;br /&gt;
&amp;lt;code&amp;gt;%CONF_REMOTE_ACCESS_LOGIN%&amp;lt;/code&amp;gt; macro refers to the value &amp;quot;joebuck&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot; (double quote) character appears in a key or a value, then it must be escaped. For example, &amp;quot;Norton said \&amp;quot;Howdy!\&amp;quot; and then he left.&amp;quot;. Same for the \ (backslash) character. For example, &amp;quot;\\&amp;quot; represents a single backslash character.&lt;br /&gt;
&lt;br /&gt;
== Input Template file (in-file) ==&lt;br /&gt;
&lt;br /&gt;
In-files have the following general format:&lt;br /&gt;
&lt;br /&gt;
 [CONTROL]&lt;br /&gt;
 # Comment&lt;br /&gt;
 type:gconf|xml|shell&lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 [DATA]&lt;br /&gt;
 ...&lt;br /&gt;
 ...%MACRO%...&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The following lines are ignored:&lt;br /&gt;
* empty lines: lines with only whitespace or newline&lt;br /&gt;
* comments: lines whose first non-whitespace character is hash-mark (&amp;quot;#&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The tag (e.g., &amp;quot;type&amp;quot;) and its value (e.g., &amp;quot;xml&amp;quot;) in the &amp;lt;code&amp;gt;CONTROL&amp;lt;/code&amp;gt; section are&lt;br /&gt;
separated by a single colon character.&lt;br /&gt;
The &amp;quot;type&amp;quot; tag is mandatory, and it must be the first non-ignored line in the&lt;br /&gt;
&amp;lt;code&amp;gt;CONTROL&amp;lt;/code&amp;gt; section.&lt;br /&gt;
&lt;br /&gt;
Every &amp;lt;code&amp;gt;%MACRO%&amp;lt;/code&amp;gt; macro is replaced with the matching value from the &amp;lt;code&amp;gt;MACRO&amp;lt;/code&amp;gt;&lt;br /&gt;
file during the installation/un-installation process. Macro substitution&lt;br /&gt;
is applied to the entire in-file (e.g. if the value of &amp;lt;code&amp;gt;MARKER&amp;lt;/code&amp;gt; is &amp;quot;Hello Hippo&amp;quot; then &amp;lt;code&amp;gt;[CON%MARKER%TROL]&amp;lt;/code&amp;gt; is replaced with&lt;br /&gt;
&amp;lt;code&amp;gt;[CONHello HippoTROL]&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
No recursive macro substitution is done. For example, if macro &amp;lt;code&amp;gt;%APPLE%&amp;lt;/code&amp;gt; has&lt;br /&gt;
the value &amp;lt;code&amp;gt;&amp;quot;Hello %WORLD%&amp;quot;&amp;lt;/code&amp;gt; then the &amp;lt;code&amp;gt;%WORLD&amp;quot;&amp;lt;/code&amp;gt; is not considered as a macro&lt;br /&gt;
for substitution.&lt;br /&gt;
&lt;br /&gt;
=== gconf ===&lt;br /&gt;
&lt;br /&gt;
This in-file is used to add/remove gconf values.&lt;br /&gt;
See [2] for an example!&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
 [CONTROL]&lt;br /&gt;
 type:gconf&lt;br /&gt;
 &lt;br /&gt;
 [DATA]&lt;br /&gt;
 dir:/path/to/gconf/directory&lt;br /&gt;
 behavior:type:key_name:value&lt;br /&gt;
 behavior:type-list:key_name:[value,value,...]&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/code&amp;gt; tag tells that it's a gconf in-file.&lt;br /&gt;
The first line in the DATA section is the gconf directory that we want to configure.&lt;br /&gt;
Subsequent lines describe key/value pairs for gconf keys, whitespaces are&lt;br /&gt;
not allowed.&lt;br /&gt;
Value lists are also supported. In this case, the type name is suffixed&lt;br /&gt;
with the &amp;lt;code&amp;gt;&amp;quot;-list&amp;quot;&amp;lt;/code&amp;gt; word and the value is a comma separated list enclosed in brackets.&lt;br /&gt;
The behavior can be one of the following:&lt;br /&gt;
* &amp;lt;code&amp;gt;replace&amp;lt;/code&amp;gt;: If the key already exists, it is replaced.&lt;br /&gt;
* &amp;lt;code&amp;gt;merge&amp;lt;/code&amp;gt;: Only for value lists. If the key already exists, it is merged with the specified one.&lt;br /&gt;
* &amp;lt;code&amp;gt;keepold&amp;lt;/code&amp;gt;: If the key already exists, it is not changed.&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
* In the &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section, all the &amp;lt;code&amp;gt;%MACRO%&amp;lt;/code&amp;gt; tags are replaced with the proper values.&lt;br /&gt;
* If the gconf directory &amp;lt;code&amp;gt;/path/to/gconf/directory&amp;lt;/code&amp;gt; does not exist, it is created and populated with the provided key/value pairs.&lt;br /&gt;
* If the gconf directory &amp;lt;code&amp;gt;/path/to/gconf/directory&amp;lt;/code&amp;gt; exists:&lt;br /&gt;
** If a provided key does not exist, it is created and its value is set.&lt;br /&gt;
** If a provided key exists, the action taken depends on the specified behavior.&lt;br /&gt;
&lt;br /&gt;
Uninstallation:&lt;br /&gt;
* Simple values: The key is deleted.&lt;br /&gt;
* List values: If behavior is &amp;lt;code&amp;gt;&amp;quot;merge&amp;quot;&amp;lt;/code&amp;gt; only the values given in the in-file are removed from the list. For other behaviors, the entire key is deleted.&lt;br /&gt;
* If after removing the keys, the entire &amp;lt;code&amp;gt;/path/to/gconf/directory&amp;lt;/code&amp;gt; directory is deleted from gconf if it has become empty.&lt;br /&gt;
&lt;br /&gt;
=== xml ===&lt;br /&gt;
&lt;br /&gt;
This in-file is used to add/remove xml nodes in xml files, such as bookmarks&lt;br /&gt;
and Pidgin accounts.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&lt;br /&gt;
 [CONTROL]&lt;br /&gt;
 type:xml&lt;br /&gt;
 target:/path/to/the/xml/file/that/we/want/to/modify/or/create.xml&lt;br /&gt;
 node_path:/xml/path/to/a/node&lt;br /&gt;
 node_id_path:/xml/path/to/the/id/node /xml/path/to/another/id/node&lt;br /&gt;
 remove_by:id|marker&lt;br /&gt;
 if_exists:replace|keepold&lt;br /&gt;
 &lt;br /&gt;
 [DATA]&lt;br /&gt;
 A complete XML document...&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Tells that it's an xml in-file.&lt;br /&gt;
* &amp;lt;code&amp;gt;target&amp;lt;/code&amp;gt;: The file system path of the final output. If the file exists, it is also used as input.&lt;br /&gt;
* &amp;lt;code&amp;gt;node_path&amp;lt;/code&amp;gt;: It is an XML-path that defines the nodes in the in-file &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section that will be added to the target file.&lt;br /&gt;
* &amp;lt;code&amp;gt;node_id_path&amp;lt;/code&amp;gt;: It is a spaces and/or tabs separated list of XML-paths. These paths are combined and used as the primary-key to identify duplicate/existing entries.&lt;br /&gt;
* &amp;lt;code&amp;gt;if_exists&amp;lt;/code&amp;gt;: Optional. Default is &amp;lt;code&amp;gt;&amp;quot;keepold&amp;quot;&amp;lt;/code&amp;gt;. Defines the behavior for installation. When set to &amp;lt;code&amp;gt;&amp;quot;replace&amp;quot;&amp;lt;/code&amp;gt;, existing nodes are replaced with the ones in the &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section. When set to &amp;lt;code&amp;gt;&amp;quot;keepold&amp;quot;&amp;lt;/code&amp;gt;, existing nodes are left intact.&lt;br /&gt;
* &amp;lt;code&amp;gt;remove_by&amp;lt;/code&amp;gt;: Optional. Default is &amp;lt;code&amp;gt;&amp;quot;marker&amp;quot;&amp;lt;/code&amp;gt;. Defines the behavior for uninstallation. When set to &amp;lt;code&amp;gt;&amp;quot;id&amp;quot;&amp;lt;/code&amp;gt;, nodes that match the &amp;lt;code&amp;gt;node_path/node_id_path&amp;lt;/code&amp;gt; are removed. When set to &amp;lt;code&amp;gt;&amp;quot;marker&amp;quot;&amp;lt;/code&amp;gt;, nodes that contain the &amp;lt;code&amp;gt;%MARKER%&amp;lt;/code&amp;gt; value in any of their (or children) attributes or children nodes, are removed.&lt;br /&gt;
&lt;br /&gt;
All XML-paths use the X-Path syntax, see http://www.w3schools.com/XPath/default.asp, http://www.w3.org/TR/xpath20/, http://xmlsoft.org/html/libxml-xpath.html.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section contains a complete XML document.&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
* In the &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section, all the &amp;lt;code&amp;gt;%MACRO%&amp;lt;/code&amp;gt; tags are replaced with the proper values.&lt;br /&gt;
* If the target file does not exist, it is created with the output of the previous steps, which is the processed &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section (the un-macroed &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section).&lt;br /&gt;
* If the target file exists:&lt;br /&gt;
** Based on the &amp;lt;code&amp;gt;node_id_path&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;node_path&amp;lt;/code&amp;gt;, nodes from the processed &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section are added to the target file. If a node already exists (based on &amp;lt;code&amp;gt;node_id_path&amp;lt;/code&amp;gt;), the node is not added.&lt;br /&gt;
&lt;br /&gt;
Uninstallation:&lt;br /&gt;
* If &amp;lt;code&amp;gt;remove_by&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;&amp;quot;marker&amp;quot;&amp;lt;/code&amp;gt;: Delete every node (based on &amp;lt;code&amp;gt;node_path&amp;lt;/code&amp;gt;), from the target file that has a text element anywhere in it with the &amp;lt;code&amp;gt;%MARKER%&amp;lt;/code&amp;gt; macro. Therefore, you MUST add the &amp;lt;code&amp;gt;%MARKER%&amp;lt;/code&amp;gt; macro somewhere in the nodes that you want to be removed later.&lt;br /&gt;
* If &amp;lt;code&amp;gt;remove_by&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;&amp;quot;id&amp;quot;&amp;lt;/code&amp;gt;: Delete every node (based on &amp;lt;code&amp;gt;node_path&amp;lt;/code&amp;gt;), from the target file that has the same id value (based on &amp;lt;code&amp;gt;node_id_path&amp;lt;/code&amp;gt;) as the XML in the &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section.&lt;br /&gt;
&lt;br /&gt;
=== shell ===&lt;br /&gt;
&lt;br /&gt;
Shell in-files are a flexible way to create custom configurator scripts.&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
&lt;br /&gt;
 [CONTROL]&lt;br /&gt;
 type:shell&lt;br /&gt;
 &lt;br /&gt;
 [DATA]&lt;br /&gt;
 install:&lt;br /&gt;
 commands&lt;br /&gt;
 commands&lt;br /&gt;
 commands&lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 uninstall:&lt;br /&gt;
 commands&lt;br /&gt;
 commands&lt;br /&gt;
 commands&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; section consists of and &amp;lt;code&amp;gt;&amp;quot;install&amp;quot;&amp;lt;/code&amp;gt; and an &amp;lt;code&amp;gt;&amp;quot;uninstall&amp;quot;&amp;lt;/code&amp;gt; subsection. The command&lt;br /&gt;
lines below the subsections constitute the content of the script. A script file&lt;br /&gt;
is created with that content and is executed. So basically, you can write, e.g., shell&lt;br /&gt;
scripts, perl and python scripts, etc..&lt;br /&gt;
Command lines cannot start with &amp;lt;code&amp;gt;&amp;quot;install:&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;uninstall:&amp;quot;&amp;lt;/code&amp;gt;!&lt;/div&gt;</description>
			<pubDate>Thu, 27 May 2010 12:01:11 GMT</pubDate>			<dc:creator>jpalko</dc:creator>			<comments>http://bugs.maemo.com/Talk:Enterprise_Configurator</comments>		</item>
	</channel>
</rss>