<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>My Random Access Memory</title>
	<atom:link href="http://kevinyeandel.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kevinyeandel.wordpress.com</link>
	<description>If you don&#039;t use it you loose it.</description>
	<lastBuildDate>Wed, 14 Dec 2011 12:14:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='kevinyeandel.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>My Random Access Memory</title>
		<link>http://kevinyeandel.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kevinyeandel.wordpress.com/osd.xml" title="My Random Access Memory" />
	<atom:link rel='hub' href='http://kevinyeandel.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Content Server 6.7 Patch 4 automatic deployer (RedHat/Linux)</title>
		<link>http://kevinyeandel.wordpress.com/2011/11/04/content-server-6-7-patch-4-automatic-deployer-redhatlinux/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/11/04/content-server-6-7-patch-4-automatic-deployer-redhatlinux/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 13:47:46 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=776</guid>
		<description><![CDATA[Patching anything can be boring. Patching a content server is no exception. Here is a 2-part script which makes life easier. If anyone knows how to upload shell scripts and properly format them in wordpress please let me know. However, PM me if you want the shell scripts mailed to you. If you have improvements [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=776&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Patching anything can be boring. Patching a content server is no exception. Here is a 2-part script which makes life easier. If anyone knows how to upload shell scripts and properly format them in wordpress please let me know. However, PM me if you want the shell scripts mailed to you. If you have improvements please let me know.</p>
<p>This applies to Linux Content Server 6.7 Patch04 and requires a secure shell, access as the installation owner and access to a user with root or root access.</p>
<p>1. Login as the installation owner and copy up the patch04 &#8220;gz&#8221; file to $DOCUMENTUM<br />
2. Stop Java Method Server and Content server<br />
3. In the shell, execute patch04_step1.sh &lt;REPO&gt;<br />
4. su root (not su -) or ask root user to execute the script run_as_root.sh which is automatically generated<br />
5. exit back or otherwise log back in as installation owner.<br />
6. execute patch04_step2.sh &lt;REPO&gt; &lt;INSTALLOWNER&gt;</p>
<p>Done.</p>
<p>I take no responsibility for anything so run at own risk</p>
<h2>patch04_step1.sh</h2>
<p><pre class="brush: plain;">

#!/bin/bash
# Patch deployment script version 1.0 for Content Server CS_6.7.0040.0238 Patch 4 - Script part 1
# Kevin Yeandel. Use at own risk. No responsibility taken by me.
# Prerequisits - Steps 1 to 4 of DocumentumContentServer_6.7_P04 have been completed.
if [[ -z $DOCUMENTUM ]] ; then
echo &quot;\$DOCUMENTUM NOT SET&quot; ;
exit 1;
else
echo &quot;\$DOCUMENTUM set - OK&quot;;
fi

if [[ -z $DOCUMENTUM_SHARED ]] ; then
echo &quot;\$DOCUMENTUM_SHARED NOT SET&quot; ;
exit 1;
else
echo &quot;\$DOCUMENTUM_SHARED set - OK&quot;;
fi

if [[ &quot;$1&quot; == &quot;&quot; ]] ; then
echo &quot;USAGE $0 &quot;
exit 1
fi

REPO=$1

if [[ ! -f &quot;$DOCUMENTUM/dba/dm_start_$REPO&quot; ]] ; then
echo &quot;REPOSITORY $REPO does not seem to exist. Please check repository name&quot;
exit 1
fi

#Define the patch file here (located in $DOCUMENTUM)
INITFILE=&quot;&quot;
XML_STORE=&quot;N&quot;
FAST=&quot;N&quot;
XPLORE=&quot;Y&quot;
PATCH=CS_6.7.0040.0238_linux_ora.tar
GUIDE=&quot;DocumentumContentServer_6.7_P04.pdf&quot;
SIGNATURE=&quot;b7e8940dd6b129f5e0634d43c4bd204e&quot;

# patch 03 was CS_6.7.0030.0232_linux_ora.tar
echo &quot;Press enter to confirm the following 3 items or ctrl+c to abort&quot;
echo &quot;Item 1. FAST is installed:$FAST&quot;
echo &quot;Item 2. XPLORE is installed:$XPLORE&quot;
echo &quot;Item 3. XML_STORE is installed:$XML_STORE&quot;
echo &quot;(Where Y is Yes and N is No)&quot;
read n

I_OWNER=`ls -l install.log | awk '{ print $3 }'`
GROUP=`ls -l install.log | awk '{ print $4 }'`
echo &quot;GROUP is $GROUP&quot;

if [[ $I_OWNER == `whoami` ]] ; then
echo &quot;Patch execution by installation owner&quot;
else
echo &quot;You are not logged in as the installation owner. Quitting&quot;
exit 1
fi

if [[ -f $DOCUMENTUM/$PATCH.gz ]] ; then
echo &quot;file $PATCH exists&quot;
else
echo &quot;$PATCH.gz does not exit&quot;
exit 1
fi

SUM=`md5sum $DOCUMENTUM/$PATCH.gz`

if [[ `md5sum $PATCH.gz | awk '{ print $1 }'` = $SIGNATURE ]] ; then
echo &quot;SIGNATURE OK&quot; ;
else
echo &quot;The SIGNATURE ($SUM) does not match the patch (should be $SIGNATURE). Please validate your downloaded file&quot;
exit 1
fi

#check step 1
INITFILE=`ps -fel | grep \./[j]boss `
if [[ $INITFILE = *$DOCUMENTUM_SHARED* ]] ; then
echo &quot;Step 1 has not been completed. Please refer to $GUIDE. The Java Method Server is running. Please shut it down before running this patch install. Aborting.&quot;
exit 1
fi

#check step 2
INITFILE=`ps -fel | grep &quot;\./[d]ocumentum -docbase_name $REPO&quot; | awk {'print $21'} | awk 'NR&gt;0 &amp;&amp; NRif [[ $INITFILE = *$REPO* ]] ; then
echo &quot;Step 2 has not been completed. Please refer to $GUIDE. The Repository is running. Please shut it down before running this patch install. Aborting.&quot;
exit 1
fi
gunzip $DOCUMENTUM/$PATCH.gz
if [[ -f $DOCUMENTUM/$PATCH ]] ; then
echo &quot;file $PATCH exists&quot;
else
echo &quot;patch tar file, $PATCH does not exit. Please check it gunzip'ed correctly before running this script again.&quot;
exit 1
fi

if [[ $XPLORE=&quot;Y&quot; ]] ; then
echo &quot;Step 3. Please ensure you have stopped the Index Agent and Index Server. If not do it now. Pressing ENTER confirms your agreement. Otherwise ctrl+c to abort to rerun this script again later.&quot;
read x
fi

echo &quot;Step 4. If you have not backed up \$DOCUMENTUM please press ctrl+c to abort to rerun this script later, otherwise press ENTER to continue&quot;;
read x

echo &quot;Step 5a. Prerequisit for running script is that the gz patch file has been gunzip'ed. Untarring files&quot;

tar xvf $DOCUMENTUM/$PATCH
echo &quot;Unpacked tar. &quot;
echo &quot;Step 5b. Moving and copying files&quot;
echo &quot;Step 5b. -1. Deployment of dmldap.jar&quot;
mv $DOCUMENTUM/dmldap.jar $DOCUMENTUM_SHARED/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/APP-INF/lib/dmldap.jar
echo &quot;Step 5b. -2. Deployment of server-impl.jar&quot;
cp $DOCUMENTUM/server-impl.jar $DOCUMENTUM_SHARED/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/APP-INF/lib/server-impl.jar
echo &quot;Step 5b. -3. Deployment of mthdservlet.jar&quot;
mv $DOCUMENTUM/mthdservlet.jar $DOCUMENTUM_SHARED/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/DmMethods.war/WEB-INF/lib/mthdservlet.jar

#if xmlstore is configured
if [[ XML_STORE == &quot;Y&quot; ]] ; then
echo &quot;Step 5c - xhiveconnector.jar&quot;
cp $DOCUMENTUM/xhiveconnector.jar $DOCUMENTUM_SHARED/jboss4.3.0/server/DctmServer_MethodServer/deploy/XhiveConnector.ear/XhiveConnector.war/WEB-INF/lib/xhiveconnector.jar
fi

rm $DOCUMENTUM/xhiveconnector.jar

#Step 5(d) FAST is not deployed by this script but the files will be removed.
rm $DOCUMENTUM/adminagent.jar
rm $DOCUMENTUM/server-impl.jar
rm $DOCUMENTUM/libFastQueryPlugin.so
if [[ $XPLORE == &quot;Y&quot; ]] ; then
echo &quot;Step 5e - deploying files for XPLORE - serverapps.ear to two locations&quot;
cp -r $DOCUMENTUM/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/APP-INF/lib/* $DOCUMENTUM_SHARED/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/APP-INF/lib
cp -r $DOCUMENTUM/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/DmMethods.war/WEB-INF/lib/* $DOCUMENTUM_SHARED/jboss4.3.0/server/DctmServer_MethodServer/deploy/ServerApps.ear/DmMethods.war/WEB-INF/lib
fi
echo &quot;Creating a root file for root user to execute which will execute Step 5g&quot;
cat &lt;&lt; EOF &gt;$DOCUMENTUM/run_as_root.sh
if [ &quot;\$(id -u)&quot; != &quot;0&quot; ]; then
echo &quot;ERROR - Script should be run as root&quot;
exit 1
fi
cp $DOCUMENTUM/product/6.7/install/external_apps/checkpass/dm_check_password $DOCUMENTUM/dba
cp $DOCUMENTUM/product/6.7/install/external_apps/assumeuser/dm_assume_user $DOCUMENTUM/dba
cp $DOCUMENTUM/product/6.7/install/external_apps/checkpass/dm_check_password $DOCUMENTUM/dba
#note the following commented out file does not exist in the bundle on page 8 of the P03 ReadMe.
#echo &quot;cp $DOCUMENTUM/product/6.7/install/external_apps/changepass/dm_change_password $DOCUMENTUM/dba&quot;
cp $DOCUMENTUM/product/6.7/install/external_apps/assumeuser/dm_assume_user $DOCUMENTUM/dba
$DOCUMENTUM/dba/dm_root_task &lt;&lt; xEOF
$GROUP
o
o
o
o
o
xEOF
EOF
chmod +x $DOCUMENTUM/run_as_root.sh
cp $DOCUMENTUM/shared/dfc.jar $DOCUMENTUM_SHARED
echo &quot;Please execute $DOCUMENTUM/run_as_root.sh as a root user before running part 2 of this script.&quot;

</pre></p>
<h2>patch04_step2.sh</h2>
<p><pre class="brush: plain;">
#!/bin/bash
# Patch deployment script version 1.0 for Content Server CS_6.7.0030.0232 Patch 3 - Script part 2
if [[ -z $DOCUMENTUM ]] ; then
echo &quot;\$DOCUMENTUM NOT SET&quot; ;
exit 1;
else
echo &quot;\$DOCUMENTUM set&quot;;
fi

if [[ -z $DOCUMENTUM_SHARED ]] ; then
echo &quot;\$DOCUMENTUM_SHARED NOT SET&quot; ;
exit 1;
else
echo &quot;\$DOCUMENTUM_SHARED set&quot;;
fi

REPO=$1
PASS=$2

if [[ &quot;$1&quot; == &quot;&quot; ]] ; then
echo &quot;USAGE $0  &quot;
exit 1
fi

if [[ &quot;$2&quot; == &quot;&quot; ]] ; then
echo &quot;USAGE $0  &quot;
exit 1
fi

REPO=$1

if [[ ! -f &quot;$DOCUMENTUM/dba/dm_start_$REPO&quot; ]] ; then
echo &quot;REPOSITORY $REPO does not seem to exist. Please check repository name&quot;
exit 1
fi

ROOT_TASK=`ls -l $DOCUMENTUM/dba/dm_check_password | awk '{ print $3 }'`
I_OWNER=`ls -l $DOCUMENTUM/install.log | awk '{ print $3 }'`

echo &quot;root task: $ROOT_TASK&quot;
if [[ $ROOT_TASK == &quot;root&quot; ]] ; then
echo &quot;dm_check_password is owned by root (OK)&quot;
else
echo &quot;Looks like part 1 of this script was executed but root task step has not been executed. Quitting&quot;
exit 1
fi

if [[ $I_OWNER == `whoami` ]] ; then
echo &quot;patch execution by installation owner&quot;
else
echo &quot;You are not logged in as the installation owner. Quitting&quot;
exit 1
fi

echo &quot;Step 8. Starting docbroker (if required)&quot;
$DOCUMENTUM/dba/dm_launch_Docbroker
sleep 5
echo &quot;Step 8a. Starting docbase (if required) and waiting 60 seconds&quot;
$DOCUMENTUM/dba/dm_start_$REPO
sleep 60
echo &quot;Step 8b. Starting java method server (if required)&quot;
nohup $DOCUMENTUM_SHARED/jboss4.3.0/server/startMethodServer.sh &amp;

echo &quot;Please ensure to start the IndexAgent and IndexServer in the case that xPlore or FAST is required. Press ENTER to confirm and continue.&quot;
read x
echo &quot;Steps 9 and 10 - install MessagingApp and Workflow dar files. &quot;
echo &quot;Step 9d. Creating a temporary xml file to prepare to install dar files.&quot;
cat &lt;&lt; EOF &gt;$DOCUMENTUM/build.xml
&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt;
This is the ant script code to install a dar in the docbase




EOF
echo &quot;Step 9e. Launching dar installer&quot;
$JAVA_HOME/bin/java -Dlogpath=/tmp/$REPO\.log -cp $DM_HOME/install/composer/ComposerHeadless/startup.jar org.eclipse.core.launcher.Main -data $DM_HOME/install/composer/workspace -application org.eclipse.ant.core.antRunner -buildfile build.xml
echo &quot;Please check the log in /tmp/$REPO.log&quot;

echo &quot;Step 11. Installing lifecycle.jar&quot;
iapi $REPO -U$I_OWNER -P -e &lt;&lt; EOF
retrieve,c,dmc_jar where object_name = 'lifecycle.jar'
checkout,c,l
setfile,c,l,$DOCUMENTUM/lifecycle.jar
checkin,c,l
exit
EOF
status=$?

echo &quot;EVIDENCE confirming jar has been installed follows:&quot;
idql $REPO -U$I_OWNER -P -e &lt;&lt; EOF
select r_modify_date, r_creation_date from dmc_jar where object_name='lifecycle.jar';
go
exit
EOF
status=$?
echo $status
echo &quot;Step 6. This is moved to last and is just cleaning up files from the application of the patch.&quot;
rm -rf $DOCUMENTUM/jboss4.3.0
rm -rf $DOCUMENTUM/shared
if [[ -f $DOCUMENTUM/lifecycle.jar ]] ; then rm $DOCUMENTUM/lifecycle.jar ; fi
if [[ -f $DOCUMENTUM/MessagingApp.dar ]] ; then rm $DOCUMENTUM/MessagingApp.dar ; fi
if [[ -f $DOCUMENTUM/Workflow.dar ]] ; then rm $DOCUMENTUM/Workflow.dar ; fi
if [[ -f $DOCUMENTUM/mthdservlet.jar ]] ; then rm $DOCUMENTUM/mthdservlet.jar ; fi
if [[ -f $DOCUMENTUM/dmldap.jar ]] ; then rm $DOCUMENTUM/dmldap.jar ; fi
if [[ -f $DOCUMENTUM/build.xml ]] ; then rm $DOCUMENTUM/build.xml ; fi
if [[ -f $DOCUMENTUM/server-impl.jar ]] ; then rm $DOCUMENTUM/server-impl.jar ; fi
if [[ -f $DOCUMENTUM/xhiveconnector.jar ]] ; then rm $DOCUMENTUM/xhiveconnector.jar ; fi
if [[ -f $DOCUMENTUM/adminagent.jar ]] ; then rm $DOCUMENTUM/adminagent.jar ; fi
if [[ -f $DOCUMENTUM/run_as_root.sh ]] ; then rm $DOCUMENTUM/run_as_root.sh ; fi

echo &quot;Please refer to the patch documentation technical notes and any final deployment tasks. This automation is complete.&quot;

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/776/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=776&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/11/04/content-server-6-7-patch-4-automatic-deployer-redhatlinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>DM_FT_INDEX_E_FULLTEXT_CONFIG_NOT_LOADED</title>
		<link>http://kevinyeandel.wordpress.com/2011/09/16/dm_ft_index_e_fulltext_config_not_loaded/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/09/16/dm_ft_index_e_fulltext_config_not_loaded/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 06:53:33 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=766</guid>
		<description><![CDATA[xPlore 6.7 Content Server 6.6 When configuring xPlore 6.7 against 6.6 repository (maybe other versions) Documentum server config object will not save with the out-of-the-box file, dmfulltext.ini &#8211; if using RedHat Linux. This is because of an incorrect ini file. If suitably configured to use xPlore, the Content Server log should properly document the correct [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=766&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>xPlore 6.7 Content Server 6.6</h1>
<p>When configuring xPlore 6.7 against 6.6 repository (maybe other versions) Documentum server config object will not save with the out-of-the-box file, dmfulltext.ini &#8211; if using RedHat Linux.<br />
This is because of an incorrect ini file.</p>
<p>If suitably configured to use xPlore, the Content Server log should properly document the correct plugin which would be something like</p>
<p><span style="font-size:x-small;"><span style="font-family:Arial;">Loaded FT Query Plugin: /srv/ecm/dmreach01/product/6.6/bin/libDsearchQueryPlugin.so, API Interface version: 1.0, Build number: HEAD; May 17 2011 05:20:39, FT Engine version: X-Hive/DB 8.2</span></span></p>
<p>The dm_server_config_object may fail to update properly when running fulltext_setup_for_dss.ebs with the error message DM_FT_INDEX_E_FULLTEXT_CONFIG_NOT_LOADED when it reaches the function setupFulltextLocation within the script which is used as part of the setup.</p>
<p>The location dsearch should already be setup in file_system_path of dm_location (select file_system_path from dm_location where object_name=&#8217;dsearch&#8217; should return /path/to/fulltext/dsearch where dmfulltext.ini is located.</p>
<p>fulltext.ini may well be there and should be but contains an invalid path to the search plugin. This path reads:<br />
[LINUX_FULLTEXT]<br />
bin_location = _ssol26/bin<br />
library_name = libDsearchQueryPlugin.so</p>
<p>but should read</p>
<p>[LINUX_FULLTEXT]<br />
bin_location = bin<br />
library_name = libDsearchQueryPlugin.so</p>
<p>Backup the original file and remove the _ssol26/ from the bin_location parameter as shown.<br />
Once changed run the api against the repository (assuming dsearch is a valid dm_location):</p>
<p>&gt;retrieve,c,dm_server_config<br />
&gt;set,c,l,fulltext_location<br />
SET&gt;dsearch<br />
&gt;save,c,l</p>
<p>Which should be OK now. If the CS can&#8217;t find the library file then it is not possible to save the changes to the server_config.</p>
<p>Restart repository and check the loaded FT Query plugin refers to the xhive as shown towards the top of this post.<br />
Make sure the other instructions were followed in the xplore 1.1 installation guide.<br />
Obviously verify the installation and test the search from a WDK app connected to the repository.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/766/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=766&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/09/16/dm_ft_index_e_fulltext_config_not_loaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>Reading XML Blender 2.5x using Python and Minidom</title>
		<link>http://kevinyeandel.wordpress.com/2011/07/16/reading-xml-blender-2-5x-using-python-and-minidom/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/07/16/reading-xml-blender-2-5x-using-python-and-minidom/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 07:36:46 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Python and Blender]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=742</guid>
		<description><![CDATA[reading and extracting XML data in Python and Blender Just found a Blender App for drawing charts from xml data on my HD that I wrote some months ago. It may have a bit of use for someone learning Blender/Python who needs to process data from XML. The Python code was cut in the built-in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=742&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><H1>reading and extracting XML data in Python and Blender</H1></p>
<p>Just found a Blender App for drawing charts from xml data on my HD that I wrote some months ago.<br />
It may have a bit of use for someone learning Blender/Python who needs to process data from XML.<br />
The Python code was cut in the built-in editor of Blender 2.5 and does not require any additions beyond the installation of Blender to process it.</p>
<p>The purpose of this post is simply to illustrate the reading and and extraction of data from an xml &#8211; in this case in the context of Blender. It is not to convey any knowledge of the Blender API. </p>
<p>The following XML is in chart.xml on a local drive as can be seen from the python code below</p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;graph height=&quot;150&quot; width=&quot;200&quot;&gt;
  &lt;bar colour=&quot;red&quot; id=&quot;1&quot; title=&quot;WF01&quot; value=&quot;100&quot;/&gt;
  &lt;bar colour=&quot;green&quot; id=&quot;2&quot; title=&quot;WF02&quot; value=&quot;114&quot;/&gt;
  &lt;bar colour=&quot;yellow&quot; id=&quot;3&quot; title=&quot;WF03&quot; value=&quot;80&quot;/&gt;
  &lt;bar colour=&quot;blue&quot; id=&quot;4&quot; title=&quot;WF04&quot; value=&quot;75&quot;/&gt;
&lt;/graph&gt;
</pre></p>
<p>This is the bit of python code used to process the elements of the xml<br />
<pre class="brush: python;">
import xml.dom.minidom
from xml.dom.minidom import Node
import bpy
from bpy import *
import sys,os
os.chdir('/Users/kev/Blender/xmltest')
doc = xml.dom.minidom.parse(&quot;chart.xml&quot;)

height_max=0  
columns=0                                       
layers = [False]*32
layers[0] = True
matblue = bpy.data.materials.new('blue')
matblue.diffuse_color = (0.0, 0.0, 1.0)
matblue.specular_color = (1.0, 1.0, 0.0)
matred = bpy.data.materials.new('red')
matred.diffuse_color = (1.0, 0.0, 0.0)
matred.specular_color = (0.0, 1.0, 1.0)
matgreen = bpy.data.materials.new('red')
matgreen.diffuse_color = (0.0, 1.0, 0.0)
matgreen.specular_color = (1.0, 0.0, 1.0)
matyellow = bpy.data.materials.new('yellow')
matyellow.diffuse_color = (1.0, 1.0, 0.0)
matyellow.specular_color = (0.5, 0.5, 1.0)


for element in doc.getElementsByTagName(&quot;bar&quot;): 
    a = element.attributes[&quot;id&quot;]
    b = element.attributes[&quot;colour&quot;]
    c = element.attributes[&quot;title&quot;]
    d = element.attributes[&quot;value&quot;]
    if int(d.value) &gt; height_max:
        height_max=int(d.value)
    columns +=1 
    bpy.ops.mesh.primitive_cube_add()
    cube = bpy.context.object
    cube.name = a.value
    ob = bpy.context.object
    bpy.ops.object.material_slot_remove()
    bpy.context.active_object.location = [0, columns *2.2, 0]
etc...
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/742/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=742&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/07/16/reading-xml-blender-2-5x-using-python-and-minidom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>300K Icon? Pointless network overhead in TaskSpace and other WDK apps</title>
		<link>http://kevinyeandel.wordpress.com/2011/07/01/300k-icon-pointless-network-overhead-in-taskspace-and-other-wdk-apps/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/07/01/300k-icon-pointless-network-overhead-in-taskspace-and-other-wdk-apps/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 05:50:22 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=733</guid>
		<description><![CDATA[There is an icon in the root of WDK apps called favicon.ico which is 300,318 bytes &#8211; rather rediculously large for an icon. It&#8217;s in Documentum 6.5 through to 6.7 at least and seems to get loaded each time a new page is called putting a massive overhead on the network and slowing down TaskSpace [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=733&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There is an icon in the root of WDK apps called favicon.ico which is 300,318 bytes &#8211; rather rediculously large for an icon.<br />
It&#8217;s in Documentum 6.5 through to 6.7 at least and seems to get loaded each time a new page is called putting a massive overhead on the network and slowing down TaskSpace and other apps built on WDK.</p>
<p>I put a ticket into EMC for this but also tried a number of tools online to shrink the icon from 300K to 1.4K and the best site was <a href="http://www.prodraw.net/favicon/generator.php" title="prodraw.net"></a>. This tool also provides a number of rendition options (which all looked pretty much the same so I picked the smallest filesize).</p>
<p>Another tool I tried online shrunk it to 61K which is still huge for an icon but definitely prodraw offers the most efficient solution.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/733/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=733&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/07/01/300k-icon-pointless-network-overhead-in-taskspace-and-other-wdk-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>VirtualBox [other] running Redhat Linux Putty and Internet Access</title>
		<link>http://kevinyeandel.wordpress.com/2011/05/14/virtualbox-other-running-redhat-linux-putty-and-internet-access/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/05/14/virtualbox-other-running-redhat-linux-putty-and-internet-access/#comments</comments>
		<pubDate>Sat, 14 May 2011 13:17:11 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=710</guid>
		<description><![CDATA[Redhat/CentOS on a Virtual Machine with Putty/WinSSh/SSh and access to Internet Trying to get things all connected at once is easy unless you have a porous memory like me. Hence the Random Access Memory Blog. Also this is a quick and dirty guide which should apply to any VM, the issues are generally with the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=710&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Redhat/CentOS on a Virtual Machine with Putty/WinSSh/SSh and access to Internet</h2>
<p>Trying to get things all connected at once is easy unless you have a porous memory like me. Hence the Random Access Memory Blog.<br />
Also this is a quick and dirty guide which should apply to any VM, the issues are generally with the OS config. (RedHat in this case, OOTB without SELinux enabled). Please send me any enhancements and recommendations if you don&#8217;t mind.</p>
<h2>Assumptions</h2>
<p>You didn&#8217;t already set everything up when you installed the OS during VM creation (else you wouldn&#8217;t be here or the install didn&#8217;t work)<br />
The network adapter for the OS is bridged.<br />
The version of RedHat Enterprise Server I used is Enterprise Client 5.6 (irrelevant really, should work on CentOS et al)<br />
Host is Windows 7 in this case.<br />
The host is connected to the Internet.<br />
You have installed WinSCP and/or Putty. (Its always cleaner to get things like this from www.portableapps.com)</p>
<h2>Launch Instance &#8211; check security settings</h2>
<p>From the OS go to System -&gt; Administration -&gt; Security Level Configuration<br />
Check the firewall is open along with SSH<br />
Apply/Save changes</p>
<h2>Identify Adapter IP and information from the host</h2>
<p>This is the network adapter which has been installed with the VM<br />
At the CMD prompt on the Windows host type ipconfig /all<br />
Identify the adapter IP associated with the instance. Write it down.<br />
Identify the DNS servers. Write these down.<br />
Identify the Gateway address and write this down.</p>
<p>Note that if your host is DHCP &#8211; enabled then you should modify the router settings so DHCP does not assign possible values to all local IP&#8217;s in the range. You should configure your host to use a static local IP. You may have a few odd issues if you don&#8217;t remember to do this later&#8230; moving on.</p>
<h2>Configure OS</h2>
<p>Assume to be on the VM in the OS as root.<br />
From System -&gt; Administration -&gt; Network Configuration<br />
Select default Network Device and press the Edit button.<br />
Set Statically set IP Address. Refer now to the range that you wrote down. e.g. If you wrote 192.168.3.3 then enter a high value such as 192.168.3.133 (rather than 192.168.3.4 because the DHCP may try to assign it to another user that came on the network, you are just reducing risk of conflict by picking a higher number &#8211; this only applies if you couldn&#8217;t be bothered to follow the note about configuring your router).<br />
Write down the IP address you chose. This is needed to access the VM from the host OS. It is also necessary to ensure you did not assign this IP to a previous VM.<br />
Add the Default Gateway Address that you wrote down.</p>
<p>Select the DNS tab and enter the DNS entries you wrote down that were sourced from your router when you ran ipconfig /all from the cmd prompt of the host.</p>
<p>Go to File -&gt; Save<br />
Open a terminal window and type:<br />
service network restart<br />
You should see OK appear about 4 times.<br />
type<br />
ping www.google.co.uk<br />
You should see the ip address of Google appear<br />
Check also with a browser that you can connect to the Internet.<br />
Launch Putty and enter the IP address that you statically assigned to your VM.</p>
<p>You should be able to shell in. If you can&#8217;t then you will have to surf for a solution elsewhere because OOTB RH/CentOS defined in this document works fine.</p>
<p>&nbsp;</p>
<h2>Configure Kernel</h2>
<p>kernel /vmlinuz-2.6.18-238.9.1.el5 ro <strong>divider=10</strong> root=/dev/VolGroup00/LogVol00 rhgb quiet</p>
<p>Set the divider value in /boot/grub/menu.lst as shown above to stop IO/CPU thrashing</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/710/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/710/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/710/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=710&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/05/14/virtualbox-other-running-redhat-linux-putty-and-internet-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>Verbal Abuse &#8211; it&#8217;s beyond words</title>
		<link>http://kevinyeandel.wordpress.com/2011/04/16/597/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/04/16/597/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 18:59:33 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Abusers]]></category>
		<category><![CDATA[Controlling Behaviour]]></category>
		<category><![CDATA[Domestic Abuse]]></category>
		<category><![CDATA[Personality Disorders]]></category>
		<category><![CDATA[Psychopaths]]></category>
		<category><![CDATA[Verbal Abuse]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=597</guid>
		<description><![CDATA[The presentation above is the &#8216;first cut&#8217; of one I intend putting on a new website addressing the painful issue of &#8216;verbal abuse and control&#8217;. A professional will tailor the final &#8211; hopefully with a voice-over. I want to promote understanding and knowledge through the website and a discussion forum controlling.proboards.com where the victims and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=597&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe frameborder="0" width="508" height="388" src="http://wpcomwidgets.com/?src=http%3A%2F%2Fprezi.com%2Fbin%2Fpreziloader.swf&amp;type=application%2Fx-shockwave-flash&amp;allowfullscreen=true&amp;allowscriptaccess=always&amp;width=500&amp;height=380&amp;bgcolor=%23ffffff&amp;flashvars=prezi_id%3Dnccjwu_ihjnv%26lock_to_path%3D0%26color%3Dffffff%26autoplay%3Dno%26autohide_ctrls%3D0&amp;_tag=gigya&amp;_hash=fc721c49193beb0e5febec8cc2eaebe6" id="fc721c49193beb0e5febec8cc2eaebe6"></iframe>
<p>The presentation above is the &#8216;first cut&#8217; of one I intend putting on a new website addressing the painful issue of &#8216;verbal abuse and control&#8217;. A professional will tailor the final &#8211; hopefully with a voice-over.<br />
I want to promote understanding and knowledge through the website and a discussion forum <a href="http://controlling.proboards.com">controlling.proboards.com</a> where the victims and recovering abusers can share their experiences &#8211; it&#8217;s been done before and can be done again so it&#8217;s not unexplored territory. Right now I get lots of visitors but no posts, so, please I&#8217;m asking those addressed to be bold enough to help me start it. It&#8217;s not necessary to leave more established forums you may be involved in but I would value content and support to (initially) leverage publicity.</p>
<p>In the past MEVAC (Men Ending Verbal Abuse And Control) hosted forums for both victims and abusers but the rules changed and MEVAC now focus on the &#8216;here and now&#8217; in relation to men wanting to heal themselves.</p>
<p>Other forum&#8217;s exist exclusively for women but I think it necessary to have &#8220;in view&#8221; BOTH sides for what I am trying to achieve.<br />
Additionly, I believe &#8220;Parental Alienation&#8221; also has a place here &#8211; it&#8217;s a related abuse and something which should be addressed in the same forum.</p>
<p>Lastly, a discussion group for school teachers and classroom assistants (acting as schoolteachers) to share thoughts and concerns (anonymously) so they can optimise the means to best identify potential problems so vulnerable children can be connected to those trained to safely evaluate and address matters potentially relating to an abusive home that is impacting that child&#8217;s mental growth and future stability.</p>
<h2>Under exposed and improperly managed &#8211; My findings</h2>
<p>Verbal Abuse (UK:under the heading of domestic abuse) is more often conducted by men against women. It&#8217;s purpose is &#8216;control&#8217; and that may extend beyond one target to the entire family <em>possibly</em> into the workplace.</p>
<p>In the case of separated couples (and couples living in a &#8216;control&#8217; environment) it can tie in with Parental Vilification (Parental Alienation &#8211; as it&#8217;s also known).<br />
Parental Alienation (PA) occurs when one parent targets the other to make a child hate or fear the targeted parent (for no logical reason, as hopefully the child grows up to discover &#8211; although this may lead to trauma).</p>
<p>It can be the case that both parents are guilty of using their children against the other parent (children are powerful weapons) which the law would normally offer protection. And since both parents are responsible for the welfare of their child (according to this legislation), one parent reporting the other for abuse is potentially &#8216;self-indictment&#8217; and minimises the chance of exposure to the authority charged with protecting the child from all types of abuse.</p>
<p>The child therefore remains open to toxic parenting in the longer term and further &#8216;detriment&#8217; in regards to mental health &#8211; to include ongoing of unconscious &#8216;programming&#8217; of antisocial behaviour and subsequent continuation of the &#8216;cycle of abuse&#8217; to the next generation &#8211; And the reason?<br />
Because the child was literally not afforded their basic human rights defined by our lawmakers and intrinsic to society.</p>
<h2>Lack of education &#8211; a danger in schools</h2>
<p>My God-daughters (14 and 16 years old girl) are beautiful kids and the product of sound parents who I have known from school. I asked the girls what their understanding of Verbal/Domestic/Physical Abuse was and received limited answers. It was clear they didn&#8217;t really have a grasp of the details of verbal abuse and it was evident that, even if their school had delivered the message as part of their education, it wasn&#8217;t received in any detail. There is also the business of <a href="http://www.bbc.co.uk/news/education-13183289">unqualified teachers</a> and if these are being used in the classroom then it it an opportunity for them to be made aware of the issues as well as fully qualified teachers.</p>
<p>A <a href="http://news.bbc.co.uk/1/hi/england/8361684.stm">BBC article</a> last year revealed that many divorced couples have long term disputes centred around their children. It states England&#8217;s Children&#8217;s Minister Delyth Morgan saying: &#8220;Divorce and separation can have a devastating impact on children caught in the middle. But this survey, looking as far back as 20 years ago, simply doesn&#8217;t reflect what support is available for families now.&#8221; It doesn&#8217;t state that many of <a href="http://kevinyeandel.wordpress.com/2011/01/05/411/">these parents have personality disorders</a> a core problem mentioned in &#8220;Adult Children of Parental Alienation Syndrome &#8211; by Amy J L Baker&#8221; and &#8220;The Narcissistic/Borderline Couple by Joan Lachkar&#8221;.</p>
<p>I have no reason to doubt the Minister is true to her words and that support is available to children but is that support getting to the children? I know for a fact it is most definitely not and that children remain subject to intoxication which could otherwise be avoided.</p>
<p>Another BBC article, <a href="http://www.bbc.co.uk/news/education-11380470">&#8220;Divorcing parents can &#8216;damage&#8217; children, says judge&#8221;</a> makes many interesting points to include, &#8220;Sir Nicholas Wall, president of the Family Division of the High Court, said well-educated parents were particularly adept at using their children &#8220;.</p>
<p>&#8216;Well educated&#8217; parents often have an earning potential to send their children to private schools. I asked an investigator to conduct research. One of the things looked at were the finances of a private school at which I believed it likely there were children attending who were subject to emotional/psychological abuse. It highlighted an issue but did not implicate the school.</p>
<p>On paper, the school was teetering on the brink of a financial catastrophe. It would suggest the subsequent removal of even one child by a fee-paying parent &#8216;spooked&#8217; by a sudden befriending of their child(ren) by people trained to deal with those &#8216;secrets behind the front door&#8217; would not be beneficial in it&#8217;s survival.</p>
<p>What were the choices&#8230;. Nothing materialised that suggested the school had at any time deliberately acted &#8220;out of the&#8221; interest of any child. If anything was of particular concern it was that of the local authority. (It&#8217;s deliberate that not all details are provided in this post but likely revealed later).</p>
<p>As part of that &#8216;exercise&#8217; I contacted Visyon, a Cheshire based charity, and asked them what the terms of engagement were in the case that I wanted them to attend a school to befriend a child who, say, recently self harmed as a result of parental dysfunction. I offered to pay for the services personally but it was not possible to engage. I recall the reason was that consent would have to be given by one of the parents. This, again, would potentially be an act of self-indictment if both parents are instigators of emotional and mental abuse &#8211; it could be construed that their ongoing disputes would take precedence over their own child&#8217;s welfare. Basically, these parents don&#8217;t want their children to talk regardless of the long term implications.</p>
<p>In other words, those most likely to advise a child to seek assistance are not the parents but other adults which come into proximity of the child &#8211; such as school teachers and (worse for a controller) adult family friends having life experience and further knowledge of the controller. That person subsequently being of utmost &#8216;danger&#8217; to the controller and one he would put at arms length if he thought someone had sussed his modus-operandi &#8211; more dangerous if that person was being approached by his confused child.</p>
<h2>Using the legal system to aid manipulation and control</h2>
<p>I tried to identify cases where parents had been prosecuted under the Children&#8217;s Act 1989 and found the supply limited. In fact, I didn&#8217;t find any.<br />
Mental and emotional abuse doesn&#8217;t get the attention sexual abuse does yet it remains devastating.</p>
<p>I wanted to understand why mental abuse seemed so under-investigated and discovered little other than it would seem &#8216;hard to prove&#8217; and testimony from those involved highly unreliable and further hindered by lack of law-enforcement. First it should be born in mind in relation to the abuses below:</p>
<ul>
<li>Parental Alienation &#8216;seems&#8217; mostly the work of mothers targeting the other parent (meaning what &#8216;I&#8217; discovered not necessarily a universal belief)</li>
<li>Verbal Abuse and Control is predominantly a function of dysfunctional men &#8211; this is pretty much cast in stone</li>
</ul>
<p>In both cases it seems the Freudian Defence Mechanism, &#8216;Projection&#8217; is at work.</p>
<p>Projection can be analysed in a therapeutic setting and a useful aid in understanding the thinking of the client.<br />
It offers revelation of actual truth about the projector, for example, one who has gay tendencies which they have internalised as being objectionable may project this &#8216;objectionable&#8217; characteristic onto another through accusation of the targets sexual preference in a negative manner.</p>
<p>Further random examples include:</p>
<p>(i) a mother detesting her ex husband but developed sexual feelings towards their child may claim her husband has sexually assaulted that child and she may attempt to use that in the court to disrupt his access.<br />
(ii) a father claiming to others that his ex-wife wants to hurt the children to punish him may in fact be bullying the mother and hurting the child in the process to punish her.</p>
<p>In any case those who absorb their own lies as truthful depictions of reality are particularly troublesome if the police get involved and don&#8217;t get a proper handle on the situation. If these projections are interpreted as accurate representations of the truth then it can be extremely harmful to anyone targeted by the controller that was trying to make sense of a chaotic situation &#8211; by seeing &#8216;behind the mask&#8217; of the controller &#8211; especially dangerous if that controller is a <a href="http://kevinyeandel.wordpress.com/2011/04/19/extremely-disturbing-but-extremely-accurate-and-well-worded">serial bully/psychopath</a>.</p>
<p>I looked into what it takes to become a police officer in the UK, not much: a CRB and credit check will essentially open the door to an interview room &#8211; hardly surprising the prerequisite does not include a degree in psychology and 8 years experience working with the insane &#8211; however, the police come into contact with them daily.</p>
<p>Police get used to dealing with liars &#8211; people out to deceive them all the time &#8211; they deal with domestic abuse and generally won&#8217;t have a clue how many psychopaths they come into contact with in any given month.</p>
<p>Deception is an intentional act and a big component of police investigatory work. It might be that police officers career, like any other, begins with minimal experience and conclude &#8220;fully seasoned&#8221; but even after years of experience, there is currently no infallible system available to him providing 100% reliable deception detection.</p>
<p>Police officers are used to dealing with persons with limited intelligence more often than smart people. Sending an inexperienced police officer into a &#8216;domestic&#8217; where the abuse involves psychological violence (caused by one probably far smarter than the police officer) has the potential to result in a misread situation which is not then properly followed up.<br />
Is he more likely to believe a psychopathic (verbal abuser) &#8220;master of deception&#8221; than a confused witness?</p>
<p>As it happens, the BBC article, <a href="http://www.bbc.co.uk/news/health-12395656">Personality disorders are widespread, say experts</a> tells that video training is being rolled out to police officers &#8211; so there is an identified problem.<br />
I&#8217;ve no information as to what is in those videos but it&#8217;s one thing being able to spot when a lie is being offered but completely another if that suspect or witness is able to avoid visual cues (such as behavioural controls or impression management) associated with deception or because they are psychotic enough to portrait belief in something which is completely untrue.</p>
<h2>Validation and the danger of forums</h2>
<p>A friend told me (not that I checked the accuracy of this) that Hitler (one with a psychopathic persuasion) had a psychiatrist who endorsed his behaviour. He validated it. He suggested to Hitler that what he was doing was just.</p>
<p>Since there are always numerous sides to any story, determining the facts may need testimony from more than a single source or viewpoint.</p>
<p>I have visited the forums of (e.g.) <a href="http://fnf.org.uk">Families need Fathers</a> and read numerous postings. It is obviously incomprehensibly distressing and mental torture when a mother somehow prevents a father from accessing his children &#8211; especially when it is wholly unjustified.<br />
And while it&#8217;s highly beneficial for men to lean on the shoulders of other men to support them it&#8217;s important that validation isn&#8217;t given to fathers based on distorted facts these men fully believe to be true otherwise problems are deepened. I just picked FnF as an example, the principle applies to any forum dealing with &#8216;life matters&#8217; where counsel is given by fellow members.</p>
<p>Its not my expectation a recovering verbal abuser will register in his section here and his corresponding victim in hers &#8211; this is not &#8216;couple&#8217;s therapy&#8217; it&#8217;s simply to get support for both but also allow others to witness and learn from the anguish and trauma that both are experiencing so that learning can be applied, if needed.</p>
<p>Other links<br />
<a href="http://kevinyeandel.wordpress.com/2011/01/23/verbal-abuse-part-2-a-great-move-by-the-french/" title="Domestic (psychological) violence - part 2 - a good move by France"></a><br />
<a href="http://kevinyeandel.wordpress.com/2010/12/28/verbal-abuse-some-comments-part-1/" title="Domestic (psychological) violence - part 1 - understanding verbal abuse and control"></a><br />
&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/597/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/597/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/597/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=597&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/04/16/597/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>Securing Documentum &#8211; Audit trail lockdown</title>
		<link>http://kevinyeandel.wordpress.com/2011/04/15/securing-documentum-audit-trail-lockdown/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/04/15/securing-documentum-audit-trail-lockdown/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 12:09:29 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Document Management]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Regulatory]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=566</guid>
		<description><![CDATA[Installing &#8216;Big Brother&#8217; round the back (For Securing a Unix/Linux Installation please see here) Documentum has the ability to audit hundreds of events relating to activity within a Repository. Events are generated because something happens (a user read a document, their login failed, a document reached a certain point in a workflow). These events are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=566&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Installing &#8216;Big Brother&#8217; round the back</h2>
<p>(For Securing a Unix/Linux Installation please see <a href="http://kevinyeandel.wordpress.com/2011/04/08/securing-documentum-lockdown-script-1/" title="Securing an installation" target="_blank">here</a>)</p>
<p>Documentum has the ability to audit hundreds of events relating to activity within a Repository. Events are generated because something happens (a user read a document, their login failed, a document reached a certain point in a workflow). These events are captured if the business required them and they were properly registered in the Documentum system.</p>
<p>That’s all well and good but a dubious Documentum administrator is able to act wrecklessly or maliciously: He can create random users, giving them extreme powers. He has the ability to get in the back end database and remove or change information &#8211; particularly that of the Documentum audit trail tables which capture the events mentioned.<br />
But &#8211; and especially if it is a regulated/production system the customer won&#8217;t want that system open to compromise.<br />
There are ways to make sure unauthorised change is identified and culprits caught. We also have the option of preventing security incidents by letting staff having special privileges know any abuse of power is recorded as evidence &#8211; which they can&#8217;t change. What evidence? Well that&#8217;s generally what audit trails are good at capturing &#8211; but it&#8217;s not reliable if it is easy to delete evidence or maliciously implicate another. Proof may be needed that someone wanted to:</p>
<ul>
<li>delete evidence from the audit trail – that he unregistered certain events or something else.</li>
<li>modify an entry in the audittrail to “point the finger” at an unsuspecting and otherwise totally innocent scientist by pushing a sensitive document into an approved and published state.</li>
</ul>
<p>The thing to do is to look at how we can capture any suspicious activity and good ways to do it.</p>
<h2>Oracle Auditing</h2>
<p>From a recent read-up on Oracle&#8217;s Auditing features I got the impression that it&#8217;s not Oracle&#8217;s most well-known and most utilised feature.<br />
Since possibly you need to manufacture a solution post-haste and the Oracle Admin was not already familiar with Oracle Auditing it could be lead to voluminous amounts of redundant information being captured only then to have to be filtered as well as decreasing performance if all the options are enabled.<br />
I’m not an expert on Oracle and was given a fair bit of help from my friend Ari with the Oracle parts of this Document. This is a slick and easy alternative method which focuses on the audit trail tables. It works but is subject to further customisation and enhancements. Please feed them back to me.</p>
<h2>Alternative and effective method</h2>
<p>First the drawback here is that the following SQL is more limited that Oracle Auditing but it could be implemented as either a proper solution to satisfactorally address a security requirement or react quicly to a potential security incident. The steps are first to prepare the system and ensure the right events are being captured. For this post we are only interested in Documentum&#8217;s dm_getlogin event and so we&#8217;ll commence by making sure getlogin events are being captured.</p>
<h2>Register the dm_getlogin event</h2>
<p>(Also register dm_connect)</p>
<p>Using the API tool, connect to the repository as a user that has been assigned the extended privileges which permit the manipulation of the audit trail. The simplest way to achieve this is to login to DA as the installation owner, create user with an inline password and provide them with Superuser and all extended privileges.</p>
<p>Login to the API tool with this new account and execute the following:</p>
<p><code><br />
API&gt; retrieve,c,dm_type where name = 'dm_user'<br />
...<br />
030f436180000103<br />
API&gt; audit,c,,dm_connect<br />
...<br />
OK<br />
API&gt; audit,c,,dm_getlogin<br />
...<br />
OK<br />
API&gt;<br />
</code></p>
<h2>Create some events</h2>
<p>Have available the login details of a user you which to spoof. The user has to be one that exists in the repository.<br />
Write down the name of a different user that also exists in the repository and connect as that user to the repository using the API tool and get a login:<br />
<code><br />
Connected to Documentum Server running Release 6.6.0.041 Linux.Oracle<br />
Session id is s0<br />
API&gt; getlogin,c,user01<br />
...<br />
DM_TICKET=T0JKIE5VTEwgMAoxMwp2ZXJzaW9uIElOVCBTIDAKMwpmbGFncyBJTlQgUyAwCjAKc2VxdWVuY2VfbnVtIElOVCBTIDAKMTkKY3JlYXRlX3RpbWUgSU5UIFMgMAoxMzAyNTA0MDQ2CmV4cGlyZV90aW1lIElOVCBTIDAKMTMwMjUwNDM0Ngpkb21haW4gSU5UIFMgMAowCnVzZXJfbmFtZSBTVFJJTkcgUyAwCkEgMTIgWUFOREVMIEtldmluCnBhc3N3b3JkIElOVCBTIDAKMApkb2NiYXNlX25hbWUgU1RSSU5HIFMgMApBIDExIFNWSENfUFJPVE8yCmhvc3RfbmFtZSBTVFJJTkcgUyAwCkEgMzEgcy1kZXYtdmRlY20tMDYuZGV2LmV1cm9wYS5sb2NhbApzZXJ2ZXJfbmFtZSBTVFJJTkcgUyAwCkEgMTEgU1ZIQ19QUk9UTzIKc2lnbmF0dXJlX2xlbiBJTlQgUyAwCjU2CnNpZ25hdHVyZSBTVFJJTkcgUyAwCkEgNTYgcWZQMFY3U1hkQitrTDdGUmpKc29hSEl2U2FqcklrbGRqMWpJcWgrZVlRMlJHYnloU1orNXFBPT0K<br />
</code><br />
While you are at it, quit the tool and repeat the exercise with a different user.<br />
Make sure to write down who you are going to log in as this time and who you are going to spoof.</p>
<p><code><br />
API&gt; getlogin,c,user02<br />
...<br />
DM_TICKET=T0JKIE5VTEwgMAoxMwp2ZXJzaW9uIElOVCBTIDAKMwpmbGFncyBJTlQgUyAwCjAKc2VxdWVuY2VfbnVtIElOVCBTIDAKMjAKY3JlYXRlX3RpbWUgSU5UIFMgMAoxMzAyNTA0MDc2CmV4cGlyZV90aW1lIElOVCBTIDAKMTMwMjUwNDM3Ngpkb21haW4gSU5UIFMgMAowCnVzZXJfbmFtZSBTVFJJTkcgUyAwCkEgMTggTUFMQ1pFV1NLSSBNaWNoYWVsCnBhc3N3b3JkIElOVCBTIDAKMApkb2NiYXNlX25hbWUgU1RSSU5HIFMgMApBIDExIFNWSENfUFJPVE8yCmhvc3RfbmFtZSBTVFJJTkcgUyAwCkEgMzEgcy1kZXYtdmRlY20tMDYuZGV2LmV1cm9wYS5sb2NhbApzZXJ2ZXJfbmFtZSBTVFJJTkcgUyAwCkEgMTEgU1ZIQ19QUk9UTzIKc2lnbmF0dXJlX2xlbiBJTlQgUyAwCjU2CnNpZ25hdHVyZSBTVFJJTkcgUyAwCkEgNTYgcWZQMFY3U1hkQitrTDdGUmpKc29hSWhyUGRZZFpqNUtBVUVPeUF6SXB3YldyTzI0dFdjUXZBPT0K<br />
</code></p>
<h2>List the events captured to the audit trail</h2>
<p>Test the actual events are being recorded in the audit trail. The example below uses SQLPLUS but you can use DQL.</p>
<p><code><br />
COL event_name FORMAT A12<br />
COL string_1 FORMAT A20<br />
COL host_name format A26<br />
COL user_name format A14</p>
<p>select time_stamp, user_name, host_name, string_1 from dm_audittrail_s<br />
where event_name='dm_getlogin';</p>
<p>TIME_STAM USER_NAME HOST_NAME STRING_1<br />
--------- -------------- -------------------------- --------------------<br />
11-APR-11 user01 psyc-vdev06.dev.local YEANDEL Kevin<br />
11-APR-11 user02 psyc-vdev10.dev.local ANOTHER User<br />
</code></p>
<h2>Creating the secured database</h2>
<p>We need to covertly and secretly sniff for certain things occurring in the Documentum audit trail.<br />
A secured database is designed to capture deletes, inserts and changes to user permissions and certain Documentum auditable events (such as dm_getlogin).</p>
<p>This database schema is not accessible to the Documentum Administrator and the password is kept by a secure user.<br />
There are no changes made to the Documentum installation or its underlying database. The Documentum Administrators need have no knowledge of it’s existence.<br />
<a href="http://kevinyeandel.files.wordpress.com/2011/04/security.jpg"><img src="http://kevinyeandel.files.wordpress.com/2011/04/security.jpg?w=300&#038;h=204" alt="" title="security" width="300" height="204" class="alignnone size-medium wp-image-568" /></a></p>
<h2>Secured audit user</h2>
<p>The account is created and a number of grants given.<br />
This user has to select rows from the dm_audit_trail_s table of the Documentum repository(y|ies) of interest.<br />
A grant is given for each Documentum installation it has to be aware of.<br />
<code><br />
CREATE USER "ECMAUDIT" PROFILE "DEFAULT" IDENTIFIED BY DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "USERS" ACCOUNT UNLOCK;<br />
GRANT UNLIMITED TABLESPACE TO "ECMAUDIT";<br />
GRANT SELECT ON "REPOSITORY_OWNER"."DM_AUDITTRAIL_S" TO "ECMAUDIT";<br />
GRANT "CONNECT" TO "ECMAUDIT";<br />
GRANT CREATE ANY TRIGGER TO "ECMAUDIT";<br />
GRANT "RESOURCE" TO "ECMAUDIT";<br />
</code></p>
<h2>Creating the table</h2>
<p>We need to securely store data from the audit trail belonging to a repository. We need to limit the data to what is really needed and in this case the table is a cut down version of a standard dm_audittrail_s table that is in Documentum Version 6.6</p>
<p><code><br />
create table ecmaudit.dm_audittrail_admin_log (<br />
EVENT_NAME varchar2(64),<br />
USER_NAME varchar2(32),<br />
TIME_STAMP DATE,<br />
STRING_1 varchar2(200),<br />
STRING_2 varchar2(200),<br />
HOST_NAME varchar2(128),<br />
ENTRY_DATE DATE,<br />
ENTRY_USER varchar2(15),<br />
ACTION varchar2(10)<br />
);<br />
</code><br />
A couple of additional fields have been created. One of these is to record the action (DELETE, INSERT, CHANGE) and which user (repository) it came from as well as the date the event occurred.<br />
A couple of additional fields have been created. One of these is to record the action (DELETE, INSERT, CHANGE) and which user (repository) it came from as well as the date the event occurred.</p>
<h2>Creation of triggers</h2>
<p><pre class="brush: plain;">
-- Creates a trigger to monitor INSERT statements with 'dm_getlogin', 'dm_connect' and 'dm_audit' event_names
-- Trigger generates a row for each insert done to dm_audittrail_s
-- NOTE: Remember to change the db user of dm_audittrail_s table

create or replace trigger ecmaudit.dm_audittrail_ins_trg
before insert
on svhc_proto2.dm_audittrail_s
REFERENCING NEW AS NEW OLD AS OLD
for each row

declare
	v_username varchar2(15);
	v_action varchar2(10);
	
begin
	select user into v_username from dual;
	
	v_action := 'INSERT';
	
	if :new.event_name = 'dm_getlogin' then
		insert into dm_audittrail_admin_log values (
			:new.event_name,
			:new.user_name,
			:new.time_stamp,
			:new.string_1,
			:new.string_2,
			:new.host_name,
			sysdate,
			v_username,
			v_action);
	elsif :new.event_name = 'dm_connect' then
		insert into dm_audittrail_admin_log values (
			:new.event_name,
			:new.user_name,
			:new.time_stamp,
			:new.string_1,
			:new.string_2,
			:new.host_name,
			sysdate,
			v_username,
			v_action);
	elsif :new.event_name = 'dm_audit' then
		insert into dm_audittrail_admin_log values (
			:new.event_name,
			:new.user_name,
			:new.time_stamp,
			:new.string_1,
			:new.string_2,
			:new.host_name,
			sysdate,
			v_username,
			v_action);
	end if;

end referencing_clause;
/

-- Creates a trigger to monitor DELETE statements with 'dm_getlogin', 'dm_connect' and 'dm_audit' event_names
-- Trigger generates a row for each delete done to dm_audittrail_s
-- NOTE: Remember to change the db user of dm_audittrail_s table
	
create or replace trigger ecmaudit.dm_audittrail_del_trg
before delete
on proto2.dm_audittrail_s
REFERENCING NEW AS NEW OLD AS OLD
for each row

declare
	v_username varchar2(15);
	v_action varchar2(10);
	
begin
	select user into v_username from dual;
	
	v_action := 'DELETE';
	
	if :old.event_name = 'dm_getlogin' then
		insert into dm_audittrail_admin_log values (
			:old.event_name,
			:old.user_name,
			:old.time_stamp,
			:old.string_1,
			:old.string_2,
			:old.host_name,
			sysdate,
			v_username,
			v_action);
	elsif :old.event_name = 'dm_connect' then
		insert into dm_audittrail_admin_log values (
			:old.event_name,
			:old.user_name,
			:old.time_stamp,
			:old.string_1,
			:old.string_2,
			:old.host_name,
			sysdate,
			v_username,
			v_action);
	elsif :old.event_name = 'dm_audit' then
		insert into dm_audittrail_admin_log values (
			:old.event_name,
			:old.user_name,
			:old.time_stamp,
			:old.string_1,
			:old.string_2,
			:old.host_name,
			sysdate,
			v_username,
			v_action);
	end if;

end referencing_clause;
/

-- Creates a trigger to monitor UPDATE statements with 'dm_getlogin', 'dm_connect' and 'dm_audit' event_names
-- Trigger generates a row for each update done to dm_audittrail_s
-- It records the OLD and NEW values, so you end up with two records for each update done on dm_audittrail_s table
-- NOTE: Remember to change the db user of dm_audittrail_s table

create or replace trigger ecmaudit.dm_audittrail_upd_trg
before update
on proto2.dm_audittrail_s
REFERENCING NEW AS NEW OLD AS OLD
for each row

declare
	v_username varchar2(15);
	v_action varchar2(10);
	
begin
	select user into v_username from dual;
	
	
	
	if :old.event_name = 'dm_getlogin' then
	
		v_action := 'UPDATE_OLD';

		insert into dm_audittrail_admin_log values (
			:old.event_name,
			:old.user_name,
			:old.time_stamp,
			:old.string_1,
			:old.string_2,
			:old.host_name,
			sysdate,
			v_username,
			v_action);
		
		v_action := 'UPDATE_NEW';
		
		insert into dm_audittrail_admin_log values (
			:new.event_name,
			:new.user_name,
			:new.time_stamp,
			:new.string_1,
			:new.string_2,
			:new.host_name,
			sysdate,
			v_username,
			v_action);
			
	elsif :old.event_name = 'dm_connect' then
		
		v_action := 'UPDATE_OLD';
		
		insert into dm_audittrail_admin_log values (
			:old.event_name,
			:old.user_name,
			:old.time_stamp,
			:old.string_1,
			:old.string_2,
			:old.host_name,
			sysdate,
			v_username,
			v_action);
		
		v_action := 'UPDATE_NEW';
		
		insert into dm_audittrail_admin_log values (
			:new.event_name,
			:new.user_name,
			:new.time_stamp,
			:new.string_1,
			:new.string_2,
			:new.host_name,
			sysdate,
			v_username,
			v_action);
	elsif :old.event_name = 'dm_audit' then
		
		v_action := 'UPDATE_OLD';
		
		insert into dm_audittrail_admin_log values (
			:old.event_name,
			:old.user_name,
			:old.time_stamp,
			:old.string_1,
			:old.string_2,
			:old.host_name,
			sysdate,
			v_username,
			v_action);
			
		v_action := 'UPDATE_NEW';	
			
		insert into dm_audittrail_admin_log values (
			:new.event_name,
			:new.user_name,
			:new.time_stamp,
			:new.string_1,
			:new.string_2,
			:new.host_name,
			sysdate,
			v_username,
			v_action);
	end if;

end referencing_clause;
/
</pre></p>
<h2>Output</h2>
<p>The output captures any changes in the audit trail before change was applied. It captures the name of the user that has been getlogin&#8217;d and actual deletes &#8211; which apply. It probably wont be so useful when the audittrail purge runs but its something to get up and running with.</p>
<p><code><br />
SQL&gt; select event_name,action,user_name from dm_audittrail_admin_log</p>
<p>EVENT_NAME                                                       ACTION     USER_NAME<br />
---------------------------------------------------------------- ---------- --------------------------------<br />
dm_connect                                                       DELETE     dev-op-jb<br />
dm_getlogin                                                      DELETE     dev-op-jb<br />
dm_connect                                                       DELETE     dev-op-jb<br />
dm_connect                                                       INSERT     dmadmin2<br />
dm_getlogin                                                      INSERT     dmadmin2<br />
dm_connect                                                       INSERT     dmadmin2<br />
dm_connect                                                       INSERT     dev-op-ky<br />
dm_getlogin                                                      INSERT     dev-op-ky<br />
dm_getlogin                                                      INSERT     dev-op-ky<br />
dm_connect                                                       INSERT     dmadmin2<br />
dm_connect                                                       INSERT     dev-op-ky<br />
dm_getlogin                                                      INSERT     dev-op-ky</p>
<p></code></p>
<h2>Conclusion</h2>
<p>Documentum is safe and secure &#8211; if all the measures have been put in place. This can only be achieved if the vulnerabilities are exposed. In the mean time, I&#8217;ve yet to work at a customer site which has properly locked down Documentum in an environment which hosts it &#8211; I&#8217;m sure they are out there.<br />
(If you know of any please let me know).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/566/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=566&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/04/15/securing-documentum-audit-trail-lockdown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>

		<media:content url="http://kevinyeandel.files.wordpress.com/2011/04/security.jpg?w=300" medium="image">
			<media:title type="html">security</media:title>
		</media:content>
	</item>
		<item>
		<title>Putty ssh shell colours not so good &#8211; a tidbit since I have a spare moment</title>
		<link>http://kevinyeandel.wordpress.com/2011/04/13/putty-ssh-shell-colours-not-so-good-a-tidbit-since-i-have-a-spare-moment/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/04/13/putty-ssh-shell-colours-not-so-good-a-tidbit-since-i-have-a-spare-moment/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 14:59:10 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=557</guid>
		<description><![CDATA[If you&#8217;ve not customised the colours in your putty session then chances are blue is hard to see &#8211; makes directory listings a bit difficult. You can type unset LS_COLORS at the prompt to make things display easier. You can also configure your shell to be a bit more attractive. edit ~/.bash_profile unset LS_COLORS red='\e[0;31m' [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=557&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve not customised the colours in your putty session then chances are blue is hard to see &#8211; makes directory listings a bit difficult.<br />
You can type<br />
<code>unset LS_COLORS</code><br />
at the prompt to make things display easier.</p>
<p>You can also configure your shell to be a bit more attractive. </p>
<p>edit ~/.bash_profile<br />
<code><br />
unset LS_COLORS<br />
red='\e[0;31m' # '\e[1;32m'<br />
green='\e[0;32m' # '\e[1;32m'<br />
endColor='\e[0m'<br />
#when logging in show the version of documentum - this is nice to have if you have a lot of installs on one box<br />
echo ""<br />
echo -e "${green}" `documentum -version` "${endColor}"<br />
echo ""<br />
</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/557/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=557&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/04/13/putty-ssh-shell-colours-not-so-good-a-tidbit-since-i-have-a-spare-moment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>Victims of Verbal Abuse and Control, Parental Alienation</title>
		<link>http://kevinyeandel.wordpress.com/2011/04/12/victims-of-verbal-abuse-and-control-parental-alienation/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/04/12/victims-of-verbal-abuse-and-control-parental-alienation/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 19:07:17 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Abusers]]></category>
		<category><![CDATA[Controlling Behaviour]]></category>
		<category><![CDATA[Domestic Abuse]]></category>
		<category><![CDATA[Verbal Abuse]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=540</guid>
		<description><![CDATA[I started this group many months ago but never really went public with it. It&#8217;s mainly for women who have been victims of verbal abuse but it is an open forum which can also host other related subject matters. The group is here: controlling.proboards.com There is also a well established group called MEVAC which is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=540&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I started this group many months ago but never really went public with it.<br />
It&#8217;s mainly for women who have been victims of verbal abuse but it is an open forum which can also host other related subject matters. The group is here:<br />
<a href="http://controlling.proboards.com">controlling.proboards.com</a></p>
<p>There is also a well established group called MEVAC which is a forum mainly for men who are recovering verbal abusers and controllers:<br />
<a href="http://mevac.proboards.com">mevac.proboards.com</a>.</p>
<p>When I first discovered someone I had known for many years was a verbal abuser and controller I was particularly shocked at the secret they had kept from me for a decade and the lengths they would go to in trying to prevent me from seeing behind their mask in their persuit of control.<br />
I feel very sad for these men but moreso for their victims &#8211; the women and children they hurt.</p>
<p>When his partner also told me she was receiving therapy for his abuse and that nobody could help her I didn&#8217;t really &#8216;disbelieve her&#8217; but also I found what she was saying to be extremely hard to believe. I didn&#8217;t know what verbal abuse was until I read Patricia Evan&#8217;s book &#8220;Controlling People&#8221; and Lundy Bankcroft&#8217;s book, &#8220;Why does he do that? Inside the minds of angry and controlling men&#8221;.</p>
<p>Even though I have myself been on the receiving end of his emailed abuse and horiffic attacks online, I don&#8217;t hate him. I just wish he&#8217;d get some help and realise what he is doing.</p>
<p>My focus changed once I discovered what verbal abuse and control was.  I started spending thousands of hours basically doing the material for a PhD in psychoanalysis. I find it amazing how we think, how the brain works and what coping styles humans will use, how some lie and brainwash their children to hate their targeted parent. How couples with personality disorders come together and lock themselves in never ending battles centred around their children. How some distort truth, believe their own lies, sell their faulty beliefs to their children, how they use their children as amunition &#8211; regardless of the long term consequences it has on their own childs mental health.</p>
<p>If you are a man that has recognised his behaviour to be less than perfect then you may wish to start moving forward by making yourself known here:<br />
<a href="http://mevac.proboards.com/">mevac.proboards.com</a></p>
<p>Where you will meet other men like yourself. Where you can start to learn about your behaviour and how to stop hurting other people in your life. How you don&#8217;t need to control them.</p>
<p>The focus really has changed since the new year (2011) and steered more towards men who are recovering verbal abusers rather than women expressing themselves.</p>
<p>I do visit from time to time but it&#8217;s not a place for me. That&#8217;s why I started my groups in <a href="http://controlling.proboards.com">controlling.proboards.com</a> in response to changes in the rules in MEVAC. I am a researcher essentially but want to invite women and adult children of parental alienation and victims of control to feel free to share their experiences and both receive and provide other men and women support.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/540/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=540&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/04/12/victims-of-verbal-abuse-and-control-parental-alienation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
		<item>
		<title>Securing Documentum &#8211; Lockdown script (1)</title>
		<link>http://kevinyeandel.wordpress.com/2011/04/08/securing-documentum-lockdown-script-1/</link>
		<comments>http://kevinyeandel.wordpress.com/2011/04/08/securing-documentum-lockdown-script-1/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 05:38:51 +0000</pubDate>
		<dc:creator>kevinyeandel</dc:creator>
				<category><![CDATA[Document Management]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Psychopaths]]></category>
		<category><![CDATA[Regulatory]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://kevinyeandel.wordpress.com/?p=499</guid>
		<description><![CDATA[Introduction (For Oracle/Documentum audittrail lockdown please see here) I would love to sit all day writing shell scripts for things like this and there would be no end of work too. So I took a couple of days and wrote this script based on experience working with customers of Documentum that have separate Unix and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=499&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>(For Oracle/Documentum audittrail lockdown please see <a href="http://kevinyeandel.wordpress.com/2011/04/15/securing-documentum-audit-trail-lockdown/" title="Oracle Big Brother" target="_blank">here)</a></p>
<p>I would love to sit all day writing shell scripts for things like this and there would be no end of work too.</p>
<p>So I took a couple of days and wrote this script based on experience working with customers of Documentum that have separate Unix and Oracle teams and limited exposure to Documentum itself.  The audience here is more operations-related than Documentum and of less value to those running Documentum on Windows (hello!). Hopefully it will help a little in crossing the bridge into the world of Documentum running on the servers which they are managing.</p>
<p>The point of this is really two-fold:<br />
In the first case it gives some further insight into what is already known about the newly hosted Documentum Content Server &#8211; essentially a Unix/LinuxWindows application that writes files to a file system and makes connections to a database and to other parts within an infrastructure.</p>
<p>The script uses SQL instead of DQL (Documentum Query Language) – although very similar SQL is more familiar to an Oracle Admin that has not used tools like Documentum Administrator or the idql tool.</p>
<p>Secondly, it’s about locking down the installation from a security/operations point of view and looking for vulnerabilities.</p>
<h2>Validity and prerequisites</h2>
<p>This script is &#8216;bash&#8217; and should be run as root.  It assumes root password had been properly contained and not been made available to other administrators. If not run as root then full checks won&#8217;t be possible and it will persistently challenge for the Documentum installation owner password.</p>
<p>Below are highlights of the code and not the main body. I will upload a fully working script in the coming weeks.</p>
<h2>Highlights of the code</h2>
<p>Note the variable:</p>
<p><CODE>SIGNATURE=&#8221;273c7ea8ffdf840138b2c6ab86095de3&#8243;</CODE></p>
<p>This is the standard signature of dm_check_password which runs through many versions of Documentum (maybe as back as 5.4 unchanged).<br />
You can deem this fingerprint to be reliable but should be properly obtained from an approved source – such as via the official EMC/Documentum download site.<br />
As part of your upgrade/patching process it is advisable to build into your checklists a new check against dm_check_password using<br />
md5sum dm_check_password<br />
and place the value into the SIGNATURE variable shown above.<br />
If there are different versions of Documentum on the same host you made need multiple copies of dm_sectest.sh &#8211; you can obviously rename the script as required.<br />
You may wish to consider any dependencies this file has (such as libraries).</p>
<p>The script declares the variable SANITY<br />
<code>SANITY="/srv/ecm/$2/dba/config/$1/server.ini.default"</code></p>
<p>In this case a verified copy of $DOCUMENTUM/dba/config/docbase-name/server.ini to be made to a location declared by SANITY. It should be owned by root with read access to the installation owner of Documentum (not write access).</p>
<p>I have actually tested re-owning the actual server.ini as root with read access to the installation owner without encountering problems but you must ensure you change the permissions back before doing an upgrade. You may well find the EMC never thought to test this so probable they would report this activity as unsupported.</p>
<p>Example:<br />
Locked server.ini<br />
-rw-r&#8211;r&#8211; 1 root dmadmin 1585 May  4  2010 server.ini</p>
<p>Unlocked server.ini<br />
-rw-rw-r&#8211; 1 dmadmin dmadmin   1585 May  4  2010 server.ini</p>
<p>While a root owned server.ini could lend itself to managing and controlling change, it is a massive hindrance to the Documentum Administrator in that a small but vital emergency increasing the number of sessions &#8211; is going to add delay at a busy (inconvenient) time but worked around by a change to the docbase start script to point the repository at a writeable initialisation file – such an unmanaged or unauthorised change will be identified by this script and written to the log.</p>
<p>2 final notes on the subject of server.ini: (1) The script expects a space before and after the &#8216;=&#8217; with regards to variable declaration. If your server.ini doesn&#8217;t conform to this then tidy it up or rewrite this script. (2) server.ini can be a different name &#8211; e.g. if host repository installation was created using the content server cfs tool from a running repository on a different host.</p>
<p>And a final note in regards to configuration files in general: You could use this means (with copy and paste) to add further tests for other configuration files which are part of your installation – such as $DOCUMENTUM_SHARED/config/dfc.properties for changes to trace levels etc. </p>
<h2>Limitation and testing</h2>
<p>The script goes some way to reducing risk but does not exhaust all the possibilities. It is very focussed on vulnerabilities “around” Documentum and access to that core system. For example, if you upload confidential documents to a Documentum system and apply a security model which makes them public then that’s the type problem dealt with elsewhere (not this script &#8211; yet) and more to do with your system design and implementation. </p>
<p>I tested the script on RedHat Release 5.3 and 5.4<br />
If you need to know which version of RedHat you are using at the prompt you can enter<br />
cat /etc/redhat-release</p>
<p>The Oracle Version used for the client and server was 11.1.0.7.0<br />
If you need to determine which version of Oracle client you are using, at the prompt type<br />
sqlplus -version</p>
<p>The Documentum version was 6.5.0.342 SP3 Linux.Oracle.<br />
If you want to know what version of Documentum you are running type<br />
documentum -version<br />
at the prompt but log in as the installation owner and source the variables to do this &#8211; especially if there are multiple versions of Documentum on the same host)</p>
<h2>Usage</h2>
<p>The script should be installed as root user with rwx permissions. The user running the script must be able to execute sqlplus.</p>
<p>dm_sectest.sh REPOSITORY installation_owner<br />
Example:<br />
./dm_sectest.sh ECMREPO dmadmin</p>
<p>This will set up two variables which will be used throughout the script.<br />
DOCBASE=$1<br />
USER=$2</p>
<h2>Output</h2>
<p>The output from executing the script is a log file the location and name of which is stored in<br />
<CODE>LOG=&#8221;./dm_sec_check.log&#8221;</CODE><br />
The log should be written with the same permissions as the person executing it.<br />
Since the script uses the same convention for renaming the docbase server log that Documentum does it backs up the old log and creates a new one.<br />
This will fail if the user tries to run the script as non-root after previously running it as root. The name of the old log is the time at which it was saved as a new name – not the time it was executed. This can be found at the top of the report.</p>
<p>The code user to rename the log is<br />
<CODE><br />
RTIME=`date +%m.%d.%Y.%H.%M.%S`<br />
if [ -f $LOG ] ; then<br />
  mv $LOG $LOG.save.$RTIME<br />
fi<br />
</CODE></p>
<h1>How it works</h1>
<p>The script goes through a number of checks which are described under the following headings.</p>
<h2>Get the initialisation file</h2>
<p>Analyse a process running as documentum and determine the name of the init file<br />
<code><br />
INITFILE=`ps -fel | grep "\./[d]ocumentum -docbase_name $DOCBASE" | awk {'print $21'} | awk 'NR&gt;0 &amp;&amp; NR&lt;1&#039;`<br />
</code><br />
This will be the initialisation file passed in by the dm_start_DOCBASE script. The process is documentum and is entered [d]ocumentum to prevent the INITFILE being blank because the ps returned the result of the grep function instead of the process.</p>
<h2>Check the script is being run by root</h2>
<p><code><br />
if [ "$(id -u)" != "0" ]; then<br />
	echo "WARNING       - Script should be run as root" &gt;&gt;$LOG<br />
fi</code></p>
<p>If the script is not being run as root user you will need the passwords to the Documentum installation owner account and will be challenged for this password. It&#8217;s OK to run this as an installation owner as it will produce some very useful output but that output will also be written as the installation owner and subject to alteration.</p>
<h2>Check the repository is running</h2>
<p><code><br />
if [[ -z "$INITFILE" ]] ; then<br />
     echo "Docbase not running"<br />
     exit<br />
fi<br />
</code></p>
<h2>Check the root_secure_validator</h2>
<p>Since we know exactly which password check program was passed to the content server we should test it against a known signature.<br />
The known signature is hardcoded into the script in the variable SIGNATURE and discussed previously.<br />
This signature should be checked against a standard. You should also note that the program relies on other binary libraries which may have started life as an open source project on some operating systems.<br />
These dependencies can be identified by examining the source code that was definitely used in the compilation of dm_check_password or using the Unix commands lsof (tricky since this examines running processes) or strace (which could be prefixed and dm_check_password and run at the prompt to grab the system calls). The dependencies may be checked for timestamps against known files.</p>
<p><code><br />
RSVAL=$(echo `grep root_secure_validator $INITFILE | awk '{print $3}'`)<br />
RSVSUM=$(echo `md5sum $RSVAL | awk {'print $1'}`)<br />
if [[ "$RSVSUM" == "$SIGNATURE" ]] ; then<br />
        echo "Signature Match ($RSVSUM)" &gt;&gt;$LOG ;<br />
else<br />
        echo "ALERT: Signature Mismatch. Found ($RSVSUM) expected ($SIGNATURE)" &gt;&gt;$LOG<br />
fi<br />
</code><br />
As can be seen in the code above, the password check program is extracted from a copy of a file which is supposed to be running in memory.</p>
<p>It may be possible to start Documentum then change the server.ini file on the filesystem so it would not be picked up by a security audit but changes to this file would be detected by this script in the defences are in place. But the security manager may also want to make a note of the time and date stamps on configuration files in general.</p>
<h2>Database Checks &#8211; check the root_secure_validator</h2>
<p>I’m keen to discover why Documentum keeps the dm_check_password program in both a database table AND a configuration file but I certainly know it totally depends on server.ini. However, as part of out checks we&#8217;ll determine where Documentum expects to see the root_secure_validator from and RDBMS perspective.</p>
<p><code><br />
#extract a couple of values for the following functions<br />
DOMAIN=$(echo `grep database_conn $INITFILE | awk '{print $3}'`)<br />
DBP=$(echo `grep database_password_file $INITFILE | awk '{print $3}'`)<br />
function db_check_root_secure_validator(){<br />
	ENC=$(cat $DBP)<br />
	X=`su - $USER -c "iapi $DOCBASE -U$USER -P -e &lt;&lt; EOF<br />
	decrypttext,c,$ENC<br />
	exit<br />
	EOF<br />
	status=$?<br />
	"  `<br />
	PASS=$(echo $X | awk -F$ENC'|~' '{print $2}' | awk {'print $2'})<br />
	if [[ -z "$PASS" ]] ; then<br />
		echo "Password failure"<br />
		exit 1<br />
	fi<br />
	X=`su $USER -c "sqlplus -s -l $DOCBASE/$PASS@$DOMAIN &lt;&lt;EOF<br />
	SELECT COUNT(*) FROM DM_LOCATION_S WHERE FILE_SYSTEM_PATH='\$RSVAL';<br />
	exit<br />
	EOF<br />
	  "`<br />
	echo "ROWS = $X"<br />
	ROWS=$(echo $X | awk -F'COUNT\\(\\*\\) ---------- |~' '{print $2}')<br />
	if [[ "$ROWS" -eq "0" ]] ; then<br />
	echo "ALERT: Mismatch between DM_LOCATION_FILE_SYSTEM_PATH and server config" &gt;&gt;$LOG;<br />
	else<br />
		echo "Database and initialisation file correspond (check_password program)" &gt;&gt;$LOG;<br />
	fi<br />
}<br />
</code></p>
<p>What we are doing in the above code is switching user to the installation owner to get some database connectivity details then connecting as the Oracle user and executing a query against the database. If there is an inconsistency then the report will be appended. The output is parsed as text. We could have made life easier in the SQL by including,<br />
SET HEADING OFF<br />
SET VERIFY OFF<br />
SET FEEDBACK OFF<br />
Which would cause sqlplus to return the output free of chaff and make it easier to store in a Unix variable. </p>
<h2>Checking the LDAP Active Directory Configuration</h2>
<p>The function below checks to see the installation is using Active Directory.<br />
AD is a means of authenticating users into a repository. If it is setup without using network encryption then it could offer an opportunist the chance to obtain authentication details of any user using easy to install network packet sniffers.<br />
<code><br />
function ldap_check_ssl(){<br />
	echo "" &gt;&gt;$LOG<br />
	echo "Checking LDAP configuration" &gt;&gt;$LOG<br />
	X=`su $USER -c "sqlplus -s -l $DOCBASE/$PASS@$DOMAIN &lt;&lt;$LOG<br />
	SET VERIFY OFF<br />
	SELECT ALL r_object_id,ssl_mode,ssl_port,TRIM(ldap_host),TRIM(certdb_location) FROM dm_ldap_config_s where r_object_id like '08%';<br />
	exit;<br />
	else<br />
		echo "LDAP CONFIGURATION EXISTS" &gt;&gt;$LOG<br />
	fi<br />
	SSLMODE=$(echo $X | awk  '{print $2}')<br />
	SSLPORT=$(echo $X | awk  '{print $3}')<br />
	LDAPHOST=$(echo $X | awk '{print $4}')<br />
	echo "SSL MODE   = $SSLMODE" &gt;&gt;$LOG<br />
	echo "SSL PORT   = $SSLPORT" &gt;&gt;$LOG<br />
	echo "LDAP HOST  = $LDAPHOST" &gt;&gt;$LOG<br />
	if [[ "$SSLMODE" -eq "0" ]] ; then<br />
		echo "Secure Sockets Layer not available. It is recommended you change your configuration or implement alternative security" &gt;&gt;$LOG<br />
	fi<br />
}</code></p>
<h2>System Admin and Superuser Check</h2>
<p>It’s very easy in Documentum as an Administrator for one Superuser to create another user with God like privileges (PLUS the ability to view, edit and purge the audit). </p>
<p>Since you can give that account “inline” passwords it means the Administrator doesn’t have to go through a standard process within the company to formalise a request of of a new user via, say, the AD team and thus reduce the chances of the request be challenged and sanctioned.</p>
<p>The block below adds a table to the report of users having System Admin or Superuser privileges. From this table you can also deduce those that have inline passwords. (I used decode in the SQL query because “inline password” is two words and I actually have far more sophisticated checks which I am not publishing and was reading the values into Unix variables)</p>
<p><code><br />
function check_sysadmin_and_superusers(){<br />
	echo "" &gt;&gt;$LOG<br />
	echo "Checking User Permissions" &gt;&gt;$LOG<br />
	USERP=`su $USER -c "sqlplus -s -l $DOCBASE/$PASS@$DOMAIN &lt;=8;<br />
	SPOOL $LOG APPEND<br />
	select user_name, decode(user_source,'inline password','inline',' ','NULL'),user_privileges from dm_user_s where user_privileges &gt;=8;<br />
	SPOOL OFF<br />
	exit<br />
	EOF<br />
	"`<br />
	echo $USERP<br />
}<br />
</code></p>
<h2>Auditing privileged users</h2>
<p>In the context of this document, an “Administrator” is one who has obtained a password to the Documentum system which gives them Administrator access to tools for which they could administrate the system. It doesn’t mean they have been working with Documentum for 1+ years and done the certifications.</p>
<p>This function looks for sysadmins and superusers which can execute a getlogin if they have access to a suitable tool – such as iapi (Documentum’s Interactive Application Progamming Interface) or Documentum Administrator.</p>
<p>A getlogin api command returns a long “token” which can be used in place of a password, so, if an Administrator wanted to connect as another user in Documentum Webtop or TaskSpace then they could do this without that user being aware.<br />
The unaware user could be a business user who could find themselves in a situation where something was approved and published for which they could be blamed.<br />
Although a Documentum Administrator already has access to most of that system, in most cases having a sneaky look at a document of interest would most likely not set off any alarm bells – unless that person was under corporate surveillance.<br />
<code><br />
function dm_check_audit_events(){<br />
	echo “”<br />
	echo "PRIVILEGED USERS WITH NO GETLOGIN EVENT" &gt;&gt;$LOG<br />
	USERP=`su $USER -c "sqlplus -s -l $DOCBASE/$PASS@$DOMAIN<br />
	SET HEADING OFF<br />
	SET LINESIZE 200<br />
	SPOOL $LOG APPEND<br />
	select user_name from dm_user_s where user_privileges&gt;=8 and user_name not in (select user_name from dmi_registry_s where event in 		('dm_getlogin'));<br />
	SPOOL OFF<br />
	exit<br />
	EOF<br />
	"`<br />
	echo $USERP<br />
	echo "" &gt;&gt;$LOG<br />
	echo "PRIVILEGED USERS WITH GETLOGIN EVENT" &gt;&gt;$LOG<br />
	SPOOL $LOG APPEND<br />
	select user_name from dm_user_s where user_privileges&gt;=8 and user_name in (select user_name from dmi_registry_s where event in ('dm_getlogin'));<br />
	SPOOL OFF<br />
	exit<br />
	EOF<br />
	"`<br />
	echo $USERP<br />
}<br />
</code></p>
<h2>Executing the code</h2>
<p>Some tests are made when the script is executed – such as determining if the repository is running. It really begins in the function start() which is below.<br />
It would be an idea to automate the execution of this script and add an alert handler which would email the report to a security official.</p>
<p>A final check done by the script is to determine if there is an alternate server.ini file on the system and compare one with unmodified parameters against one that root owns and add that to the report.<br />
<code><br />
function start(){<br />
db_check_root_secure_validator;#must be run first to get oracle password<br />
ldap_check_ssl;<br />
check_sysadmin_and_superusers;<br />
dm_check_audit_events;<br />
if [ -f $SANITY ]; then<br />
	echo "Sanity checking server init file against root secured init file" &gt;&gt;$LOG<br />
	D=$(echo `diff --brief $INITFILE $SANITY`)<br />
	if [[ -z "$D" ]] ; then<br />
		echo "Root secured init files compares with live" &gt;&gt;$LOG;<br />
	else<br />
		echo "Live init file and root secured file differ" &gt;&gt;$LOG<br />
	fi<br />
else<br />
	echo "Can't sanity check $INITFILE against $SANITY because $SANITY is missing"<br />
fi<br />
};<br />
#start. This is the entry point<br />
start<br />
echo "Finished"<br />
#[conditionally] mutt a mail but better to make the log accessible to monitoring such as the nagios system.<br />
</code></p>
<h2>Conclusion</h2>
<p>This is a paranoid approach to adding some security or having reason to monitor situations/people – especially since Documentum is used to secure a companies most valuable assets. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinyeandel.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinyeandel.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinyeandel.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinyeandel.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinyeandel.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinyeandel.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinyeandel.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinyeandel.wordpress.com/499/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinyeandel.wordpress.com&amp;blog=1858280&amp;post=499&amp;subd=kevinyeandel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinyeandel.wordpress.com/2011/04/08/securing-documentum-lockdown-script-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6d259713cf4714749642eabcf987019f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinyeandel</media:title>
		</media:content>
	</item>
	</channel>
</rss>
