Symantec Endpoint Protection & IE9

We’re currently testing the latest release of Symantec Endpoint Protection (SEP) 11 MR6a, to replace the Symantec Corporate Antivirus 10.1 that we’re currently using. During this testing, we’ve found a bug that is only mentioned a few other places online.Symantec Endpoint Protection 11

If you have SEP11 installed on a computer with the Internet Explorer 9 beta, it will not receive definition updates from the management server. I haven’t heard of a solution to this problem yet.

The work-around that we’ve done is to create a new Location within the management server whose membership filter the computer name or IP of the IE9 beta participants. Then we assign a new LiveUpdate policy to that location, which forces those computers to use LiveUpdate for definitions, instead of the management server.

Hopefully this issue is fixed before IE9 hits release.

HTML form for PHP email submission

At my company we use a software product called Mindtouch Core as a company Wiki/intranet. A future post will detail our implementation.

One feature request was to automate the vacation request procedure in our company.

Because we wanted to keep it simple, is it not fully automated or database driven, but automates the sending of email through the use of a HTML form to a php page.

I make no claims on this being ‘good’ code, as I’m not a coder. However, it is functional and serves it’s purpose.

HTML Form

This is the current contents of our HTML form, with comments for explanation.

<!-- Location of the PHP functions to execute email submission. This resides within our Mindtouch file system -->
<form method="post" action="/config/vacplanner/vacemail.php">

<!-- Script used to auto-hide the sub-departments. Note the specified sub departments specified in orange. -->
 <script type="text/javascript">/*<![CDATA[*/
var hide=['business-sub','finacct-sub','next','id2'];
function setOpt()
{
resetOpt();
for(var i=0,sel=document.getElementsByTagName('select');i<sel.length;i++) { sel[i].onchange=function() { if(this.parentNode.tagName.toLowerCase()!='div') resetOpt(); try { document.getElementById(this.value).style.display=''; } catch(e){} ; } }
} window.addEventListener?window.addEventListener('load',setOpt,false):
window.attachEvent('onload',setOpt); function resetOpt()
{
for(var i=0;i<hide.length;i++) document.getElementById(hide[i]).style.display='none';
}
/*]]>*/</script>

Name: <br />
<!-- Using the variables built within Dekiscript (Mindtouch code) we can hide the username but auto-fill it in with whoever is viewing the page. --> 
<input name="username" type="hidden" value="{{user.name}}" /><br />

<!-- Department field uses the Select function of the form. The values are email addresses, which are passed to the php file to be used as recipients -->
 Department: <br />
<select name="department">
<option value="" selected="selected"></option>
<option value="business-sub">Business</option>
<option value="finacct-sub">Finance &amp; Acct</option>
<option value="email.address@domain.com">Engineering</option>
<option value="email.address@domain.com">Geomatics</option>
<option value="email.address@domain.com">Operations</option>
<option value="email.address@domain.com">Safety</option>
</select>
<!-- This is a sub-department, for better organization. This matches the javascript at the top. -->

<div id="business-sub">Business Sections: <select name="busdepartment">
<option value="" selected="selected"></option>
<option value="email.address@domain.com">Business Admin</option>
<option value="email.address@domain.com">HR</option>
</select></div>
<div id="finacct-sub">Fin&amp;Acct Sections: <select name="finacctdepartment">
<option value="" selected="selected"></option>
<option value="email.address@domain.com">Accounting</option>
<option value="email.address@domain.com">Facilities</option>
<option value="email.address@domain.com">IT</option>
</select></div>
<div id="id2">Element with an ID of "id2" <select>
<option selected="selected">Opt1</option>
<option>Opt2</option>
<option>Opt3</option>
</select></div>
<div id="next">"Next" element <select>
<option selected="selected">Opt1</option>
<option>Opt2</option>
<option>Opt3</option>
</select></div>
<br />

<!--Supervisors are set up the same as the Departments section -->
 <div id="Supervisors">Supervisor: <br />
<select name="supervisor">
<option value="" selected="selected"></option>
<option value="email.address@domain.com">John Doe</option>
<option value="email.address@domain.com">John Doe</option>
<option value="email.address@domain.com">John Doe</option>
<option value="email.address@domain.com">John Doe</option>
</select></div>

<!--Section to gather vacation date information. Any type of text may be entered here. -->
 Last Working Date:<br />
<input name="lastworkdate" type="text" /><br />
Vacation Dates Requested:<br />
<input name="vacdatestart" type="text" /> To <input name="vacdateend" type="text" /><br />
Return to Work Date:<br />
<input name="returnworkdate" type="text" /><br />

<input type="submit" value="Submit" />
<!--A hidden field gathers the current date from the wiki, and submits it to the php file. -->
 <input type="hidden" name="date" value="{{ date.Date(date.now) }}" />
</form>

Here’s what the form looks like:

HTML form

PHP Backend

Here is the contents of our PHP form, again with comments for explanation:

<?php

// Required for email to work. Dependencies on existing files from the wiki.
require_once("/var/www/dekiwiki/phpmailer/class.phpmailer.php");
require_once("/var/www/dekiwiki/phpmailer/class.smtp.php");
require_once("/var/www/dekiwiki/phpmailer/language/phpmailer.lang-en.php");
// List of variables to gather from the vacform used on the wiki page. These map to the input boxes and department/supervisor dropdowns
$username = $_POST['username'];
$department = $_POST['department'];
$date = $_POST['date'];
$supervisor = $_POST['supervisor'];
$lastworkdate = $_POST['lastworkdate'];
$vacdatestart = $_POST['vacdatestart'];
$vacdateend = $_POST['vacdateend'];
$returnworkdate = $_POST['returnworkdate'];
$finacctdepartment = $_POST['finacctdepartment'];
$busdepartment = $_POST['busdepartment'];
// Used in conjunction with the IF statements below to add recipient.
$srchstrg = ".domain.com";
$wildcardsearch = preg_match("/$srchstrg/", $department);
$wildcardsearch2 = preg_match("/$srchstrg/", $finacctdepartment);
$wildcardsearch3 = preg_match("/$srchstrg/", $busdepartment);
// For our C-Level staff, we want the CEO to be automatically selected as supervisor. If the username is one of the below, supervisor is automatically set to CEO
if ($username=='jdoe' OR $username=='jsmith') {
$supervisor = 'big.cheese@domain.com';
}

// Error checking on empty fields
if ($lastworkdate=="") {
echo "Last Work Date was left blank. Please press Back to retry.";
die;
}

// Error checking on empty fields
if ($vacdatestart=="") {
echo "Vacation Start Date was left blank. Please press Back to retry.";
die;
}

// Error checking on empty fields
if ($vacdateend=="") {
echo "Vacation End Date was left blank. Please press Back to retry.";
die;
}

// Error checking on empty fields
if ($returnworkdate=="") {
echo "Return to Work Date was left blank. Please press Back to retry.";
die;
}

 // Error checking on empty fields, if all departments are empty
if ($department=="" && $finacctdepartment=="" && $busdepartment=="") {
echo "A Department was not selected. Please press Back to retry.";
die;
}

// Error checking on empty fields, if Business is selected but no sub-business department is.
if ($department=="business-sub" && $busdepartment=="") {
echo "A Business sub-department was not selected. Please press Back to retry.";
die;
}

if ($department=="finacct-sub" && $finacctdepartment=="") {
echo "A Finance&Accounting sub-department was not selected. Please press Back to retry.";
die;
}

if ($supervisor=="") {
echo "A Supervisor was not selected. Please press Back to retry.";
die;
}
if ($username=="") {
echo "A name was not entered. Please press Back to retry.";
die;
}
// Begin the code for the mail to be sent.
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = "smtp.domain.com"; // SMTP server

$mail->From = 'email@domain.com';
$mail->FromName = "Vacation Planner";

// Adds supervisor as recipient
$mail->AddAddress($supervisor);
// Used with wildcard searches above to determine if a department was selected, and if so, set that value as a recipient
if ( $wildcardsearch != 0 ) {
$mail->AddAddress($department);
}
else {
// Do Nothing
}

If ( $wildcardsearch2 !=0 ) {
$mail->AddAddress($finacctdepartment);
}
else {
// Do Nothing
}

If ($wildcardsearch3 !=0 ) {
$mail->AddAddress($busdepartment);
}
else {
// Do Nothing
}

// Sets the subject
$mail->Subject = "Vacation Request from $username";
$mail->IsHTML(true);

// Body is built from variables used in HTML form.
$mail->Body = "A request for Vacation time was received by <b>$username</b> on $date.
<br>
<br>
<b>Last Working Date:</b>
<br>
$lastworkdate
<br>
<b>Vacation Dates Requested:</b>
<br>
$vacdatestart To $vacdateend
<br>
<b>Return to Work Date:</b>
<br>
$returnworkdate
<br>
<br>
<b>Notes To Supervisor:</b>
If approved, please forward this request to appropriate department contact for entering into calendar.";

// Mail gets sent

if(!$mail->Send()) {
echo 'Request was not sent';
echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
echo 'Thank You. Your request has been submitted.';
}
?>
<!-- Refreshes the page after 3 seconds, going back to the form. -->
<meta http-equiv="refresh" content="1;url=http://wiki.domain.com/Vacation_Planner" />

And the resulting email:

PHP email

Run Windows Explorer as Administrator

Sometimes you need to get admin credentials within a user account without them, without logging off that user. Here’s how:

Windows 2000/XP

  • Click Start > Run (or hit Winkey+R) and type:
  • runas /user:domain\administrator "explorer /separate
  • Enter the password for the account you specified:
    Runas Administrator
  • Now you’ve got full access to that system

Windows Vista/7

With the UAC changes in Windows Vista and Windows 7, you can’t open a Windows Explorer window similar to above. However you do have a couple alternative options:

  1. If Windows 7, use the “Switch User” functionality from the Start Menu
  2. switchuser

  3. In the start menu search box, type:
    runas /user:domain\administrator "notepad.exe

    When Notepad opens, you can click File > Open, and from that window access any file on the computer or the network that requires admin rights. This isn’t as effective for accessing Control Panel or other system functions, however with Windows 7 UAC this isn’t as much of an issue.