Source code taken from cacert-20120810.tar.bz2
authorMichael Tänzer <neo@nhng.de>
Tue, 21 Aug 2012 21:43:10 +0000 (23:43 +0200)
committerMichael Tänzer <neo@nhng.de>
Tue, 21 Aug 2012 21:43:10 +0000 (23:43 +0200)
19 files changed:
CommModule/server.pl
includes/account.php
includes/account_stuff.php
includes/general.php
includes/lib/account.php
pages/account/29.php
pages/account/30.php
pages/account/35.php
pages/wot/6.php
scripts/44de-ate-duesseldorf-email.txt [new file with mode: 0644]
scripts/44de-ate-duesseldorf-mail.php.txt [new file with mode: 0644]
scripts/45au-ate-melbourne-email.txt [new file with mode: 0644]
scripts/45au-ate-melbourne-mail.php.txt [new file with mode: 0644]
scripts/46us-ate-raleigh-email.txt [new file with mode: 0644]
scripts/46us-ate-raleigh-mail.php.txt [new file with mode: 0644]
scripts/cron/permissionreview.php
scripts/cron/updatesort.php
scripts/resetpermissions.php [new file with mode: 0644]
www/policy/CertificationPracticeStatement.php

index eb5113a..c70bc9a 100755 (executable)
@@ -502,9 +502,28 @@ sub SignX509($$$$$$$$)
   {
     open OUT,">$wid/extfile";
     print OUT "basicConstraints = critical, CA:FALSE\n";
+    print OUT "keyUsage = critical, digitalSignature, keyEncipherment, keyAgreement\n";
     print OUT "extendedKeyUsage = clientAuth, serverAuth, nsSGC, msSGC\n";
-    print OUT "keyUsage = digitalSignature, keyEncipherment\n";
     print OUT "authorityInfoAccess = OCSP;URI:$OCSPUrl\n";
+    
+    my $CRLUrl="";
+    if($root==0)
+    {
+        $CRLUrl="http://crl.cacert.org/revoke.crl";
+    }
+    elsif($root==1)
+    {
+        $CRLUrl="http://crl.cacert.org/class3-revoke.crl";
+    }
+    elsif($root==2)
+    {
+        $CRLUrl="http://crl.cacert.org/class3s-revoke.crl";
+    }
+    else
+    {
+        $CRLUrl="http://crl.cacert.org/root${root}.crl";
+    }
+    print OUT "crlDistributionPoints = URI:${CRLUrl}\n";
     print OUT "subjectAltName = $san\n" if(length($san));
     close OUT;
     $extfile=" -extfile $wid/extfile ";
index 554713e..f84eb63 100644 (file)
 
        if($oldid == 29 && $process != "")
        {
-               $domain = mysql_real_escape_string(stripslashes(trim($domainname)));
+               $domain = mysql_real_escape_string(stripslashes(trim($_REQUEST['domainname'])));
 
-               $res1 = mysql_query("select * from `orgdomains` where `domain` like '$domain' and `id`!='".intval($_SESSION['_config']['domid'])."'");
+               $res1 = mysql_query("select * from `orgdomains` where `domain` like '$domain' and `id`!='".intval($domid)."'");
                $res2 = mysql_query("select * from `domains` where `domain` like '$domain' and `deleted`=0");
                if(mysql_num_rows($res1) > 0 || mysql_num_rows($res2) > 0)
                {
                }
        }
 
-       if(($oldid == 29 || $oldid == 30) && $process != _("Cancel"))
+       if(($oldid == 29 || $oldid == 30) && $process != "")      // _("Cancel") is handled in front of account.php
        {
                $query = "select `orgdomaincerts`.`id` as `id` from `orgdomlink`, `orgdomaincerts`, `orgdomains` where 
                                `orgdomlink`.`orgdomid`=`orgdomains`.`id` and
                                `orgdomaincerts`.`id`=`orgdomlink`.`orgcertid` and
-                               `orgdomains`.`id`='".intval($_SESSION['_config']['domid'])."'";
+                               `orgdomains`.`id`='".intval($domid)."'";
                $res = mysql_query($query);
                while($row = mysql_fetch_assoc($res))
                        mysql_query("update `orgdomaincerts` set `revoked`='1970-01-01 10:00:01' where `id`='".$row['id']."'");
                $query = "select `orgemailcerts`.`id` as `id` from `orgemailcerts`, `orgemaillink`, `orgdomains` where 
                                `orgemaillink`.`domid`=`orgdomains`.`id` and
                                `orgemailcerts`.`id`=`orgemaillink`.`emailcertsid` and
-                               `orgdomains`.`id`='".intval($_SESSION['_config']['domid'])."'";
+                               `orgdomains`.`id`='".intval($domid)."'";
                $res = mysql_query($query);
                while($row = mysql_fetch_assoc($res))
                        mysql_query("update `orgemailcerts` set `revoked`='1970-01-01 10:00:01' where `id`='".intval($row['id'])."'");
 
        if($oldid == 29 && $process != "")
        {
-               $row = mysql_fetch_assoc(mysql_query("select * from `orgdomains` where `id`='".intval($_SESSION['_config']['domid'])."'"));
-               mysql_query("update `orgdomains` set `domain`='$domain' where `id`='".intval($_SESSION['_config']['domid'])."'");
+               $row = mysql_fetch_assoc(mysql_query("select * from `orgdomains` where `id`='".intval($domid)."'"));
+               mysql_query("update `orgdomains` set `domain`='$domain' where `id`='".intval($domid)."'");
                showheader(_("My CAcert.org Account!"));
                printf(_("'%s' has just been successfully updated in the database."), sanitizeHTML($domain));
-               echo "<br><br><a href='account.php?id=26&orgid=".intval($_SESSION['_config']['orgid'])."'>"._("Click here")."</a> "._("to continue.");
+               echo "<br><br><a href='account.php?id=26&orgid=".intval($orgid)."'>"._("Click here")."</a> "._("to continue.");
                showfooter();
                exit;
        }
 
        if($oldid == 30 && $process != "")
        {
-               $row = mysql_fetch_assoc(mysql_query("select * from `orgdomains` where `id`='".intval($_SESSION['_config']['domid'])."'"));
+               $row = mysql_fetch_assoc(mysql_query("select * from `orgdomains` where `id`='".intval($domid)."'"));
                $domain = $row['domain'];
-               mysql_query("delete from `orgdomains` where `id`='".intval($_SESSION['_config']['domid'])."'");
+               mysql_query("delete from `orgdomains` where `id`='".intval($domid)."'");
                showheader(_("My CAcert.org Account!"));
                printf(_("'%s' has just been successfully deleted from the database."), sanitizeHTML($domain));
-               echo "<br><br><a href='account.php?id=26&orgid=".intval($_SESSION['_config']['orgid'])."'>"._("Click here")."</a> "._("to continue.");
+               echo "<br><br><a href='account.php?id=26&orgid=".intval($orgid)."'>"._("Click here")."</a> "._("to continue.");
                showfooter();
                exit;
        }
                $orgid = 0;
        }
 
-       if($id == 32 || $oldid == 32 || $id == 33 || $oldid == 33 || $id == 34 || $oldid == 34 ||
-               $id == 35 || $oldid == 35)
+       if($id == 32 || $oldid == 32 || $id == 33 || $oldid == 33 || $id == 34 || $oldid == 34)
        {
                $query = "select * from `org` where `memid`='".intval($_SESSION['profile']['id'])."' and `masteracc`='1'";
                $_macc = mysql_num_rows(mysql_query($query));
                }
        }
 
+       if($id == 35 || $oldid == 35)
+       {
+               $query = "select 1 from `org` where `memid`='".intval($_SESSION['profile']['id'])."'";
+               $is_orguser = mysql_num_rows(mysql_query($query));
+               if($_SESSION['profile']['orgadmin'] != 1 && $is_orguser <= 0)
+               {
+                       showheader(_("My CAcert.org Account!"));
+                       echo _("You don't have access to this area.");
+                       showfooter();
+                       exit;
+               }
+       }
+
        if($id == 33 && $_SESSION['profile']['orgadmin'] != 1)
        {
                $orgid = intval($_SESSION['_config']['orgid']);
                        $_SESSION['_config']['errmsg'] = sprintf(_("Wasn't able to match '%s' against any user in the system"), sanitizeHTML($_REQUEST['email']));
                } else {
                        $row = mysql_fetch_assoc($res);
-                       mysql_query("insert into `org` set `memid`='".intval($row['id'])."', `orgid`='".intval($_SESSION['_config']['orgid'])."',
-                                       `masteracc`='$masteracc', `OU`='$OU', `comments`='$comments'");
+                       if ( !is_assurer(intval($row['id'])) )
+                       {
+                               $id = $oldid;\r
+                               $oldid=0;\r
+                               $_SESSION['_config']['errmsg'] =
+                                               _("The user is not an Assurer yet");
+                       } else {
+                               mysql_query(
+                                       "insert into `org`
+                                               set `memid`='".intval($row['id'])."',
+                                                       `orgid`='".intval($_SESSION['_config']['orgid'])."',
+                                                       `masteracc`='$masteracc',
+                                                       `OU`='$OU',
+                                                       `comments`='$comments'");
+                       }
                }
        }
 
                $_SESSION['_config']['orgid'] = intval($orgid);
        if(intval($memid) > 0)
                $_SESSION['_config']['memid'] = intval($memid);
-       if(intval($domid) > 0)
-               $_SESSION['_config']['domid'] = intval($domid);
 ?>
index 108bd57..794266a 100644 (file)
@@ -209,7 +209,7 @@ function hideall() {
       <ul class="menu" id="serverorg"><li><a href="account.php?id=20"><?=_("New")?></a></li><li><a href="account.php?id=22"><?=_("View")?></a></li></ul>
     </div>
 <? } ?>
-<? if(mysql_num_rows(mysql_query("select * from `org` where `memid`='".intval($_SESSION['profile']['id'])."' and `masteracc`='1'")) > 0 || $_SESSION['profile']['orgadmin'] == 1) { ?>
+<? if(mysql_num_rows(mysql_query("select * from `org` where `memid`='".intval($_SESSION['profile']['id'])."'")) > 0 || $_SESSION['profile']['orgadmin'] == 1) { ?>
     <div class="relatedLinks">
       <h3 class="pointer" onclick="explode('orgadmin')">+ <?=_("Org Admin")?></h3>
       <ul class="menu" id="orgadmin"><? if($_SESSION['profile']['orgadmin'] == 1) { ?><li><a href="account.php?id=24"><?=_("New Organisation")?></a></li><li><a href="account.php?id=25"><?=_("View Organisations")?></a></li><? } ?><li><a href="account.php?id=35"><?=_("View")?></a></li></ul>
index 9e2b131..3478dd4 100644 (file)
 
                //echo "Points due to name matches: $points<br/>";
 
-               $do = `grep '$pwd' /usr/share/dict/american-english`;
+               $shellpwd = escapeshellarg($pwd);
+               $do = `grep $shellpwd /usr/share/dict/american-english`;
                if($do)
                        $points--;
 
index c7697ce..e311668 100644 (file)
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-function fix_assurer_flag($userID)
+/**
+ * Function to recalculate the cached Assurer status
+ * 
+ * @param int $userID
+ *     if the user ID is not given the flag will be recalculated for all users
+ * 
+ * @return bool
+ *     false if there was an error on fixing the flag. This does NOT return the
+ *     new value of the flag
+ */
+function fix_assurer_flag($userID = NULL)
 {
-       // If requirements for assurers are modified see also scripts/cron/updatesort.php
-
-       // Update Assurer-Flag on users table if 100 points.
-       // Should the number of points be SUM(points) or SUM(awarded)?
-       $query = mysql_query('UPDATE `users` AS `u` SET `assurer` = 1 WHERE '.
-               '`u`.`id` = \''.(int)intval($userID).'\' AND '.
-               'EXISTS(SELECT 1 FROM `cats_passed` AS `cp`, `cats_variant` AS `cv` '.
-                       'WHERE `cp`.`variant_id` = `cv`.`id` AND `cv`.`type_id` = 1 AND '.
-                       '`cp`.`user_id` = `u`.`id`) AND '.
-               '(SELECT SUM(`points`) FROM `notary` AS `n` WHERE `n`.`to` = `u`.`id` '.
-                       'AND (`n`.`expire` > now() OR `n`.`expire` IS NULL)) >= 100');
-       // Challenge has been passed and non-expired points >= 100
-
+       // Update Assurer-Flag on users table if 100 points and CATS passed.
+       // 
+       // We may have some performance issues here if no userID is given
+       // there are ~150k assurances and ~220k users currently
+       // but the exists-clause on cats_passed should be a good filter
+       $sql = '
+               UPDATE `users` AS `u` SET `assurer` = 1
+               WHERE '.(
+                                       ($userID === NULL) ?
+                                       '`u`.`assurer` = 0' :
+                                       '`u`.`id` = \''.intval($userID).'\''
+                               ).'
+                       AND EXISTS(
+                               SELECT 1 FROM `cats_passed` AS `cp`, `cats_variant` AS `cv`
+                               WHERE `cp`.`variant_id` = `cv`.`id`
+                                       AND `cv`.`type_id` = 1
+                                       AND `cp`.`user_id` = `u`.`id`
+                       ) 
+                       AND (
+                               SELECT SUM(`points`) FROM `notary` AS `n`
+                               WHERE `n`.`to` = `u`.`id`
+                                       AND (`n`.`expire` > now()
+                                       OR `n`.`expire` IS NULL)
+                       ) >= 100';
+       
+       $query = mysql_query($sql);
        if (!$query) {
                return false;
        }
-
+       // Challenge has been passed and non-expired points >= 100
+       
        // Reset flag if requirements are not met
-       $query = mysql_query('UPDATE `users` AS `u` SET `assurer` = 0 WHERE '.
-               '`u`.`id` = \''.(int)intval($userID).'\' AND '.
-               '(NOT EXISTS(SELECT 1 FROM `cats_passed` AS `cp`, `cats_variant` AS '.
-                       '`cv` WHERE `cp`.`variant_id` = `cv`.`id` AND `cv`.`type_id` = 1 '.
-                       'AND `cp`.`user_id` = `u`.`id`) OR '.
-               '(SELECT SUM(`points`) FROM `notary` AS `n` WHERE `n`.`to` = `u`.`id` '.
-                       'AND (`n`.`expire` > now() OR `n`.`expire` IS NULL)) < 100)');
-
+       //
+       // Also a bit performance critical but assurer flag is only set on
+       // ~5k accounts
+       $sql = '
+               UPDATE `users` AS `u` SET `assurer` = 0
+               WHERE '.(
+                                       ($userID === NULL) ?
+                                       '`u`.`assurer` <> 0' :
+                                       '`u`.`id` = \''.intval($userID).'\''
+                               ).'
+                       AND (
+                               NOT EXISTS(
+                                       SELECT 1 FROM `cats_passed` AS `cp`,
+                                               `cats_variant` AS `cv`
+                                       WHERE `cp`.`variant_id` = `cv`.`id`
+                                               AND `cv`.`type_id` = 1
+                                               AND `cp`.`user_id` = `u`.`id`
+                               )
+                               OR (
+                                       SELECT SUM(`points`) FROM `notary` AS `n`
+                                       WHERE `n`.`to` = `u`.`id`
+                                               AND (
+                                                       `n`.`expire` > now()
+                                                       OR `n`.`expire` IS NULL
+                                               )
+                               ) < 100
+                       )';
+       
+       $query = mysql_query($sql);
        if (!$query) {
                return false;
        }
-
+       
        return true;
 }
\ No newline at end of file
index c1a3def..4229b3b 100644 (file)
     <td class="DataTD"><input type="text" name="domainname" value="<?=sanitizeHTML($_SESSION['_config']['domain'])?>"></td>
   </tr>
   <tr>
-    <td class="DataTD" colspan="2"><input type="submit" name="process" value="<?=_("Update")?>"></td>
+    <td class="DataTD"><input type="submit" name="cancel" value="<?=_("Cancel")?>"></td>
+    <td class="DataTD"><input type="submit" name="process" value="<?=_("Update")?>"></td>
   </tr>
 </table>
 <input type="hidden" name="oldid" value="<?=intval($id)?>">
 <input type="hidden" name="orgid" value="<?=intval($_REQUEST['orgid'])?>">
+<input type="hidden" name="domid" value="<?=intval($_REQUEST['domid'])?>">
 
 </form>
index 33eeca8..04ad229 100644 (file)
@@ -41,5 +41,6 @@
 <input type="hidden" name="oldid" value="<?=intval($id)?>">
 <input type="hidden" name="orgid" value="<?=intval($_REQUEST['orgid'])?>">
 <input type="hidden" name="domain" value="<?=sanitizeHTML($row['domain'])?>">
+<input type="hidden" name="domid" value="<?=intval($_REQUEST['domid'])?>">
 
 </form>
index 3a4714f..05c7f2b 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */ ?>
+
 <table align="center" valign="middle" border="0" cellspacing="0" cellpadding="0" class="wrapper" width="400">
-  <tr>
-    <td colspan="3" class="title"><?=_("Organisations")?></td>
-  </tr>
-  <tr>
-    <td class="DataTD">#</td>
-    <td class="DataTD"><?=_("Organisation")?></td>
-    <td class="DataTD"><?=_("Admins")?></td>
-  </tr>
-<?
-       $query = "select * from `orginfo`,`org` where `orginfo`.`id`=`org`.`orgid` and `org`.`memid`='".intval($_SESSION['profile']['id'])."'";
-       $res = mysql_query($query);
-       while($row = mysql_fetch_assoc($res))
-       {
-               //number of admins for the org
-               $r2 = mysql_query("select * from `org` where `orgid`='".intval($row['id'])."'");
-               $admincount = mysql_num_rows($r2);
 
-               // number of domains for the org
-               $r2 = mysql_query("select * from `orgdomains` where `orgid`='".intval($row['id'])."'");
-               $domcount = mysql_num_rows($r2);
-?>
-  <tr>
-    <td class="DataTD"><?=intval($row['id'])?></td>
-    <td class="DataTD"><?=($row['O'])?>, <?=($row['ST'])?> <?=sanitizeHTML($row['C'])?></td>
-    <td class="DataTD"><a href="account.php?id=32&amp;orgid=<?=$row['id']?>"><?=_("Admins")?> (<?=$admincount?>)</a></td>
-  </tr>
 <?
-       // display the domains of each organisation
-       $query3 = "select * from `orgdomains` where `orgid`='".intval($row['id'])."'";
-       $res3 = mysql_query($query3);
-       while($detailorg = mysql_fetch_assoc($res3))
+$query = "select *
+                       from `orginfo`,`org`
+                       where `orginfo`.`id`=`org`.`orgid`
+                       and `org`.`memid`='".intval($_SESSION['profile']['id'])."'";
+
+$res = mysql_query($query);
+while($row = mysql_fetch_assoc($res))
+{
+       ?>
+       <tr>
+               <td colspan="3" class="title"><?=_("Organisation")?></td>
+       </tr>
+       <tr>
+               <td class="DataTD"><?=_("Organisation Name")?>:</td>
+               <td colspan="2" class="DataTD" ><b><?=$row['O']?></b></td>
+       </tr>
+       <tr>
+               <td class="DataTD"><?=_("Contact Email")?>:</td>
+               <td colspan="2" class="DataTD"><?=($row['contact'])?></td>
+       </tr>
+       <tr>
+               <td class="DataTD"><?=_("Town/Suburb")?>:</td>
+               <td colspan="2" class="DataTD"><?=($row['L'])?></td>
+       </tr>
+       <tr>
+               <td class="DataTD"><?=_("State/Province")?>:</td>
+               <td colspan="2" class="DataTD"><?=($row['ST'])?></td>
+       </tr>
+       <tr>
+               <td class="DataTD"><?=_("Country")?>:</td>
+               <td colspan="2" class="DataTD"><?=($row['C'])?></td>
+       </tr>
+       <?
+       
+       //domain info
+       $query = "select `domain` from `orgdomains` where `orgid`='".intval($row['id'])."'";
+       $res1 = mysql_query($query);
+       while($domain = mysql_fetch_assoc($res1))
+       {
+               ?>
+               <tr>
+                       <td class="DataTD"><?=_("Domain")?></td>
+                       <td colspan="2" class="DataTD"><?=sanitizeHTML($domain['domain'])?></td>
+               </tr>
+               <?
+       }
+       
+       ?>
+       <tr>
+               <td class="DataTD"><?=_("Administrator")?></td>
+               <td class="DataTD"><?=_("Master Account")?></td>
+               <td class="DataTD"><?=_("Department")?></td>
+       </tr>
+       <?
+       
+       //org admins
+       $query = "select * from `org` where `orgid`='".intval($row['id'])."'";
+       $res2 = mysql_query($query);
+       while($org = mysql_fetch_assoc($res2))
        {
-?>
-  <tr>
-    <td class="DataTD"><?=intval($detailorg['id'])?></td>
-    <td class="DataTD"><?=_("Domain available")?></td>
-    <td class="DataTD"><?=sanitizeHTML($detailorg['domain'])?></td>
-  </tr>                
-<? } } ?>
+               $user = mysql_fetch_assoc(mysql_query("select * from `users` where `id`='".intval($org['memid'])."'"));
+               ?> 
+               <tr>
+                       <td class="DataTD"><a href='mailto:<?=$user['email']?>'><?=($user['fname'])?> <?=($user['lname'])?></a></td>
+                       <td class="DataTD"><?=($org['masteracc'])?></td>
+                       <td class="DataTD"><?=($org['OU'])?></td>
+               </tr>
+               <?
+               
+               if(intval($org['masteracc']) === 1 &&
+                                intval($org['memid']) === intval($_SESSION['profile']['id']))
+               { 
+                       $master="account.php?id=32&amp;orgid=".intval($row['id']);
+                       ?>
+                       <tr>
+                               <td colspan="3" class="DataTD"><a href="<?=$master ?>"><?=_("Edit")?></a></td>
+                       </tr>
+                       <?
+               }
+       } 
+} ?>
 </table>
index e648ed4..28c1875 100644 (file)
 */ ?>
 <?
 
-function makecap()
-{
-}
-
         if(!array_key_exists('notarise',$_SESSION['_config']))
        {
           echo "Error: No user data found.";
@@ -44,8 +40,6 @@ function makecap()
        $name = $fname." ".$mname." ".$lname." ".$suffix;
        $_SESSION['_config']['wothash'] = md5($name."-".$dob);
 
-       $cap=makecap($fname,$mname,$lname,$suffix,$dob,$row['email'],$_SESSION['profile']['fname'],$_SESSION['profile']['mname'],$_SESSION['profile']['lname'],$_SESSION['profile']['suffix']);
-
        include_once($_SESSION['_config']['filepath']."/includes/wot.inc.php");
 
        AssureHead(_("Assurance Confirmation"),sprintf(_("Please check the following details match against what you witnessed when you met %s in person. You MUST NOT proceed unless you are sure the details are correct. You may be held responsible by the CAcert Arbitrator for any issues with this Assurance."), $fname));
@@ -61,6 +55,5 @@ function makecap()
        AssureInboxLine("points",_("Points"),"","<br />(Max. ".maxpoints().")");
        AssureCCABoxLine("CCAAgreed",sprintf(_("Check this box only if %s agreed to the <a href=\"/policy/CAcertCommunityAgreement.php\">CAcert Community Agreement</a>"),$fname));
        AssureCCABoxLine("CCAAgree",_("Check this box only if YOU agree to the <a href=\"/policy/CAcertCommunityAgreement.php\">CAcert Community Agreement</a>"));
-       AssureTextLine(_("WoT Form"),"<a href=\"".$cap."\" target=\"_blank\">A4 - "._("WoT Form")."</a> <a href=\"".$cap."&amp;format=letter\" target=\"_blank\">US - "._("WoT Form")."</a>");
        AssureFoot($id,_("I confirm this Assurance"));
 ?>
diff --git a/scripts/44de-ate-duesseldorf-email.txt b/scripts/44de-ate-duesseldorf-email.txt
new file mode 100644 (file)
index 0000000..b4b3708
--- /dev/null
@@ -0,0 +1,104 @@
+[Deutsch]
+
+Es hat sich viel getan im letzten Jahr. Eine ganze Reihe von bisher
+eher "muendlich ueberlieferten" Regeln wurden in Policies gegossen.
+Neue Prozeduren (z.B. die Assurer Challenge) und Verpflichtungen (z.B. in dem CAcert Community Agreement) wurden beschlossen. Die Assurer Training Events wollen versuchen, die ganzen Informationen unter\92s Volk zu bringen:
+
+- Welcher Satz fehlt auf alten CAP Formularen?
+- Warum soll ich mir R/L/O einpraegen?
+- Wie verhaelst du dich, wenn du ein fremdes Ausweis Dokument das erste mal pruefst?
+
+Antworten auf diese und weitere Fragen erhaelst du bei den Assurer Training Events (ATEs).
+
+Darueberhinaus wird beim ATE der Vorgang der Identitaetsueberpruefung trainiert und auditiert, um die Qualitaet der Assurances in der taeglichen Praxis zu erfassen. Dabei gilt es moegliche Fehler und Fallstricke zu erkennen und aufzudecken. Die Assurer haben also die Moeglichkeit, sich mit den Fehlern auseinanderzusetzen und zu erfahren, wie diese vermieden werden koennen.
+
+As IanG said: The ATE or Assurer Training Event is exceptionally recommended for all Assurers, and include parts which contribute directly to our audit. Come and find out how you can also contribute.
+
+Die kommende Veranstaltung in deiner Naehe findet statt am:
+
+- Montag, den 09. Juli 2012
+- in der Zeit von: 19:00 - ca. 22:00 Uhr
+- in der Heinrich-Heine-Universitaet Duesseldorf
+- Raum: 25
+- Universitaetsstraße 1
+- 40225 Duesseldorf 
+
+
+Details zum Veranstaltungsort und Anfahrthinweise findet Ihr im
+Wiki [http://wiki.cacert.org/events/ATE-Duesseldorf]
+Blog [http://blog.cacert.org/2012/06/559.html]
+
+Teilnehmer Registrierung mit Rueckantwort:
+ 'Ich moechte am ATE-Duesseldorf teilnehmen'
+
+Das Veranstaltungs-Team freut sich schon auf Eure Teilnahme.
+
+Kontakt: events@cacert.org
+
+
+[French]
+
+Bon nombre de changements ont eu lieu au cours de la derniere annee au sein de CAcert. Beaucoup de regles "orales" ont ete transformees en reglements ("Policies"). De nouvelles procedures (par exemple le Challenge Assureur) et devoirs (par exemple le CAcert Community Agreement) ont ete activees. Les Assurer Training Events essaient de propager ces informations :
+
+- Que manque-t-il sur les "anciens" formulaires CAP ?
+- Pourquoi dois-je me souvenir de R/L/O ?
+- Que faire si une personne vous montre un document d'identite qui vous est inconnu ?
+
+Durant les Assurer Training Events (ATEs) vous recevrez les reponses a ces questions et a plein d'autres.
+
+De plus, les ATE vous permettent de vous entrainer a verifier les identites. Ceci sera audite afin de mesurer la qualite des assurances effectuees dans la routine quotidienne. On essaiera de vous induire en erreur. Vous aurez ainsi la possibilite de voir les problemes et d'apprendre a dejouer les pieges.
+
+Comme IanG l'a dit : il est fortement recommande aux assureurs de participer aux ATE. Le programmme contient des parties qui entrent directement en ligne de compte pour le succes de notre audit. Venez et decouvrez comment contribuer.
+
+Le prochain ATE qui aura lieu pres de chez vous sera :
+- Lundi le 09 juli 2012
+- de 19:00 a environ 22:00
+- dans Heinrich-Heine-Universitaet Duesseldorf
+- Chambre: 25
+- Universitaetsstraße 1
+- 40225 Duesseldorf 
+
+NB : les exposes auront lieu en Allemand
+
+Plus de renseignements sur le lieu : 
+Wiki [http://wiki.cacert.org/events/ATE-Duesseldorf]
+Blog [http://blog.cacert.org/2012/06/566.html]
+
+Pour participer, repondez a ce courriel : 'Je viendrais au ATE-Karlsruhe'
+
+Le comite d'organisation se rejouit de votre venue.
+
+Contact: events@cacert.org
+
+[English]
+
+During the last year many changes took place inside CAcert. Many "oral" rules have been put into Policies. New procedures (e.g. Assurer Challenge) and obligations (e.g. CAcert Community Agreement) have been put into live. The Assurer Training Events (ATE) try to spread this information:
+
+- What is missing on the "old" CAP forms?
+- Why should I remember R/L/O?
+- What can you do if an Assuree shows an ID document unknown to you?
+
+These and more questions will be answered during the Assurer Training Events (ATEs)
+
+Furthermore, the ATE trains how to do assurances and audits assurances, to measure the quality of assurances in the daily routine. Here are some possible errors and pitfalls which need to be found. Assurers have the opportunity to see those errors and how to avoid them.
+
+As IanG said: The ATE or Assurer Training Event is exceptionally recommended for all Assurers and includes parts which contribute directly to our audit. Come and find out how you can also contribute.
+
+The next event held in your area will be:
+
+- Monday 9th July 2012
+- during 19:00 - ca. 22:00
+- in the Heinrich-Heine-Universitaet Duesseldorf
+- Room: 25
+- Universitaetsstraße 1
+- 40225 Duesseldorf 
+
+Details to the location can be found: 
+Wiki [http://wiki.cacert.org/events/ATE-Duesseldorf]
+Blog [http://blog.cacert.org/2012/06/566.html]
+
+User reply for registration: 'I will attend the ATE-Duesseldorf'
+
+The event team is looking forward for your attendance:
+
+Contact: events@cacert.org
diff --git a/scripts/44de-ate-duesseldorf-mail.php.txt b/scripts/44de-ate-duesseldorf-mail.php.txt
new file mode 100644 (file)
index 0000000..7b89e96
--- /dev/null
@@ -0,0 +1,160 @@
+#!/usr/bin/php -q
+<? /*
+    LibreSSL - CAcert web application
+    Copyright (C) 2004-2009  CAcert Inc.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; version 2 of the License.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+       include_once("../includes/mysql.php");
+
+       $lines = "";
+       $fp = fopen("44de-ate-duesseldorf-email.txt", "r");
+       while(!feof($fp))
+       {
+               $line = trim(fgets($fp, 4096));
+               $lines .= wordwrap($line, 75, "\n")."\n";
+       }
+       fclose($fp);
+
+
+//     $locid = intval($_REQUEST['location']);
+//     $maxdist = intval($_REQUEST['maxdist']);
+//  maxdist in [Km]
+  $maxdist = 200;
+
+
+// location      location.ID
+//   verified: 29.4.09 u.schroeter
+//   $locid = 7902857;       // Paris
+//   $locid = 238568;        // Bielefeld  
+//   $locid = 715191;        // Hamburg    
+//   $locid = 1102495;       // London     
+//   $locid = 520340;        // Duesseldorf
+//   $locid = 1260319;       // Muenchen   
+//   $locid = 606058;        // Frankfurt  
+//   $locid = 1775784;       // Stuttgart  
+//   $locid = 228950;        // Berlin  
+//   $locid = 606058;        // Frankfurt
+//   $locid = 599389;        // Flensburg
+//   $locid = 61065;        // Amsterdam, Eemnes
+//   $locid = 228950;        // Berlin  
+
+//  Software Freedom Day 19. Sept 2009
+//   $locid = 715191;        // Hamburg
+
+//  LISA2009 Baltimore, 1.11.2009
+//     $locid = 2138880;      // Baltimore (Baltimore (city)), Maryland, United States   
+//     $city = "Baltimore, MD - Nov. 3rd 2009";
+
+//  OpenSourceTreffen-Muenchen, 20.11.2009
+//       $locid = 1260319;       // Muenchen   
+//       $city = "Muenchen - 20. Nov 2009";
+
+//  BLIT2009, Brandenburger Linux-Infotag, 21.11.2009
+//       $locid = 1486658;       // Potsdam
+//       $eventname = "Brandenburger Linux-Infotag (BLIT2009)";
+//       $city = "Potsdam - 21. Nov 2009";
+
+//  ATE-Goteborg, 16.12.2009
+//       $locid = 664715;       // Goteborg, Vastra Gotaland, Sweden
+//       $eventname = "ATE-Goteborg";
+//       $city = "Goteborg - Dec 16th 2009";
+
+//  Assurance Event Mission Hills CA, 15.01.2010
+//       $locid = 2094781;       // Mission Hills (Los Angeles), California, United States 
+//       $eventname = "Assurance Event";
+//       $city = "Mission Hills CA - Jan 15th 2010";
+
+//  Assurance Event OSD Copenhagen DK, 5.03.2010
+//       $locid = 423655;       // Copenhagen, Kobenhavn*, Denmark 
+//       $eventname = "Assurance Event OpenSource-Days 2010";
+//       $city = "Copenhagen DK - March 5th/6th 2010";
+
+// SCALE 8x Los Angeles, CA, Feb 19-21 2010 
+//       $locid = 2093625;       // Copenhagen, Kobenhavn*, Denmark 
+//       $eventname = "SCALE 8x 2010";
+//       $city = "Los Angeles, CA - February 19-21 2010";
+
+// ATE Sydney, AU, Mar 24 2010 
+//       $locid = 2257312;       // Sydney, New South Wales, Australia
+//       $eventname = "ATE-Sydney";
+//       $city = "March 24, 2010";
+
+// ATE Essen, DE, Sept 28 2010 
+//       $locid = 572764;       //  Essen, Nordrhein-Westfalen, Germany 
+//       $eventname = "ATE-Essen";
+//       $city = "September 28, 2010";
+
+// ATE Aachen, DE, Oct 4th 2010 
+//       $locid = 78;       //  Aachen, Nordrhein-Westfalen, Germany 
+//       $eventname = "ATE-Aachen";
+//       $city = "October 4th, 2010";
+
+// ATE Muenchen, DE, Apr 2nd 2011
+//       $locid = 1260319;       // Muenchen    
+//       $eventname = "ATE-Muenchen";
+//       $city = "2. April, 2011";
+
+// ATE Bonn, DE, Jun 8th 2011
+//       $locid = 266635;       // Bonn, Nordrhein-Westfalen, Germany
+//       $eventname = "ATE-Bonn";
+//       $city = "8. Juni, 2011";
+
+// ATE Karlsruhe, DE, May 15th 2012
+//       $locid = 873779;       // Karlsruhe, Baden-Wuerttemberg, Germany
+//       $eventname = "ATE-Karlsruhe";
+//       $city = "15. May 2012";
+
+// ATE Duesseldorf, DE, May 15th 2012
+       $locid = 520340;       // Dusseldorf, Nordrhein-Westfalen, Germany
+       $eventname = "ATE-Duesseldorf";
+       $city = "09. July 2012";
+
+       $query = "select * from `locations` where `id`='$locid'";
+        $loc = mysql_fetch_assoc(mysql_query($query));
+
+       $query = "SELECT ROUND(6378.137 * ACOS(0.9999999*((SIN(PI() * $loc[lat] / 180) * SIN(PI() * `locations`.`lat` / 180)) + 
+                       (COS(PI() * $loc[lat] / 180 ) * COS(PI() * `locations`.`lat` / 180) * 
+                        COS(PI() * `locations`.`long` / 180 - PI() * $loc[long] / 180)))), -1) AS `distance`, sum(`points`) as pts, `users`.* 
+                       FROM `locations`
+                               inner join `users`  on `users`.`locid` = `locations`.`id` 
+                               inner join `alerts` on `users`.`id`=`alerts`.`memid`
+                               inner join `notary` on `users`.`id`=`notary`.`to`
+                       WHERE   (`alerts`.`general`=1 OR `alerts`.`country`=1 OR `alerts`.`regional`=1 OR `alerts`.`radius`=1)
+                       GROUP BY `users`.`id`
+                       HAVING `distance` <= '$maxdist' 
+                       ORDER BY `distance` ";
+        echo $query;
+
+    // comment next line when starting to send mail not only to me 
+    // $query = "select * from `users` where `email` like 'cacerttest%'";
+
+       $res = mysql_query($query);
+       $xrows = mysql_num_rows($res);
+
+       while($row = mysql_fetch_assoc($res))
+       {
+    //    uncomment next line to send mails ...
+               sendmail($row['email'], "[CAcert.org] $eventname - $city", $lines, "events@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);
+       }
+  // 1x cc to events.cacert.org
+       sendmail("events@cacert.org", "[CAcert.org] $eventname - $city", $lines, "events@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);
+       // 1x mailing report to events.cacert.org
+  sendmail("events@cacert.org", "[CAcert.org] $eventname - $city Report", "invitation sent to $xrows recipients.", "support@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);       
+
+       // 1x mailing report to Arbitrator of case http://wiki.cacert.org/wiki/Arbitrations/a20090525.1
+  sendmail("p.dunkel@cacert.org", "[CAcert.org] $eventname - $city Report", "invitation sent to $xrows recipients.", "support@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);     
+       echo "invitation sent to $xrows recipients.\n";
+
+?>
diff --git a/scripts/45au-ate-melbourne-email.txt b/scripts/45au-ate-melbourne-email.txt
new file mode 100644 (file)
index 0000000..aa46112
--- /dev/null
@@ -0,0 +1,32 @@
+
+
+During the last years many changes took place inside CAcert. Many "oral" rules have been put into Policies. New procedures (e.g. Assurer Challenge) and obligations (e.g. CAcert Community Agreement) have been put into live. The Assurer Training Events (ATE) try to spread this information:
+
+- What is missing on the "old" CAP forms?
+- Why should I remember R/L/O?
+- What can you do if an Assuree shows an ID document unknown to you?
+
+These and more questions will be answered during the Assurer Training Events (ATEs)
+
+Furthermore, the ATE trains how to do assurances and audits assurances, to measure the quality of assurances in the daily routine. Here are some possible errors and pitfalls which need to be found. Assurers have the opportunity to see those errors and how to avoid them.
+
+As IanG said: The ATE or Assurer Training Event is exceptionally recommended for all Assurers and includes parts which contribute directly to our audit. Come and find out how you can also contribute.
+
+The next event held in your area will be:
+
+- Saturday 28th July 2012
+- starting around 05:00 pm
+- Urban Camp
+  Brens Drive
+  Parkville
+  Victoria 3052
+
+Details to the location and time can be found: 
+Wiki [http://wiki.cacert.org/events/20120728_ATE-Melbourne]
+Blog [http://blog.cacert.org/2012/07/571.html]
+
+User reply for registration: 'I will attend the ATE-Melbourne'
+
+The event team is looking forward for your attendance:
+
+Contact: events@cacert.org
diff --git a/scripts/45au-ate-melbourne-mail.php.txt b/scripts/45au-ate-melbourne-mail.php.txt
new file mode 100644 (file)
index 0000000..5161e97
--- /dev/null
@@ -0,0 +1,106 @@
+#!/usr/bin/php -q
+<? /*
+    LibreSSL - CAcert web application
+    Copyright (C) 2004-2009  CAcert Inc.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; version 2 of the License.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+       include_once("../includes/mysql.php");
+
+       $lines = "";
+       $fp = fopen("45au-ate-melbourne-email.txt", "r");
+       while(!feof($fp))
+       {
+               $line = trim(fgets($fp, 4096));
+               $lines .= wordwrap($line, 75, "\n")."\n";
+       }
+       fclose($fp);
+
+
+//     $locid = intval($_REQUEST['location']);
+//     $maxdist = intval($_REQUEST['maxdist']);
+//  maxdist in [Km]
+  $maxdist = 200;
+
+
+// location      location.ID
+//   verified: 29.4.09 u.schroeter
+//   $locid = 7902857;       // Paris
+//   $locid = 238568;        // Bielefeld  
+//   $locid = 715191;        // Hamburg    
+//   $locid = 1102495;       // London     
+//   $locid = 606058;        // Frankfurt  
+//   $locid = 1775784;       // Stuttgart  
+//   $locid = 228950;        // Berlin  
+//   $locid = 606058;        // Frankfurt
+//   $locid = 599389;        // Flensburg
+//   $locid = 61065;        // Amsterdam, Eemnes
+//   $locid = 228950;        // Berlin  
+//   $locid = 2138880;      // Baltimore (Baltimore (city)), Maryland, United States   
+//   $locid = 1486658;       // Potsdam
+//   $locid = 664715;       // Goteborg, Vastra Gotaland, Sweden
+//   $locid = 2094781;       // Mission Hills (Los Angeles), California, United States 
+//   $locid = 423655;       // Copenhagen, Kobenhavn*, Denmark 
+//   $locid = 2093625;       // Los Angeles, CA ???
+//   $locid = 2094326       // Los Angeles (Los Angeles), California, United States
+//   $locid = 2257312;       // Sydney, New South Wales, Australia
+//   $locid = 572764;       //  Essen, Nordrhein-Westfalen, Germany 
+//   $locid = 78;       //  Aachen, Nordrhein-Westfalen, Germany 
+//   $locid = 1260319;       // Muenchen    
+//   $locid = 266635;       // Bonn, Nordrhein-Westfalen, Germany
+//   $locid = 873779;       // Karlsruhe, Baden-Wuerttemberg, Germany
+//   $locid = 520340;       // Dusseldorf, Nordrhein-Westfalen, Germany
+       
+// ATE Melbourne, AU, July 28th 2012
+       $locid = 2262656;       // Melbourne, Victoria, Australia
+       $eventname = "ATE-Melbourne";
+       $city = "28th July 2012";
+
+       $query = "select * from `locations` where `id`='$locid'";
+        $loc = mysql_fetch_assoc(mysql_query($query));
+
+       $query = "SELECT ROUND(6378.137 * ACOS(0.9999999*((SIN(PI() * $loc[lat] / 180) * SIN(PI() * `locations`.`lat` / 180)) + 
+                       (COS(PI() * $loc[lat] / 180 ) * COS(PI() * `locations`.`lat` / 180) * 
+                        COS(PI() * `locations`.`long` / 180 - PI() * $loc[long] / 180)))), -1) AS `distance`, sum(`points`) as pts, `users`.* 
+                       FROM `locations`
+                               inner join `users`  on `users`.`locid` = `locations`.`id` 
+                               inner join `alerts` on `users`.`id`=`alerts`.`memid`
+                               inner join `notary` on `users`.`id`=`notary`.`to`
+                       WHERE   (`alerts`.`general`=1 OR `alerts`.`country`=1 OR `alerts`.`regional`=1 OR `alerts`.`radius`=1)
+                       GROUP BY `users`.`id`
+                       HAVING `distance` <= '$maxdist' 
+                       ORDER BY `distance` ";
+        echo $query;
+
+    // comment next line when starting to send mail not only to me 
+    // $query = "select * from `users` where `email` like 'cacerttest%'";
+
+       $res = mysql_query($query);
+       $xrows = mysql_num_rows($res);
+
+       while($row = mysql_fetch_assoc($res))
+       {
+    //    uncomment next line to send mails ...
+               sendmail($row['email'], "[CAcert.org] $eventname - $city", $lines, "events@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);
+       }
+  // 1x cc to events.cacert.org
+       sendmail("events@cacert.org", "[CAcert.org] $eventname - $city", $lines, "events@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);
+       // 1x mailing report to events.cacert.org
+  sendmail("events@cacert.org", "[CAcert.org] $eventname - $city Report", "invitation sent to $xrows recipients.", "support@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);       
+
+       // 1x mailing report to Arbitrator of case http://wiki.cacert.org/wiki/Arbitrations/a20090525.1
+  sendmail("p.dunkel@cacert.org", "[CAcert.org] $eventname - $city Report", "invitation sent to $xrows recipients.", "support@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);     
+       echo "invitation sent to $xrows recipients.\n";
+
+?>
diff --git a/scripts/46us-ate-raleigh-email.txt b/scripts/46us-ate-raleigh-email.txt
new file mode 100644 (file)
index 0000000..c263db5
--- /dev/null
@@ -0,0 +1,41 @@
+\r
+\r
+During the last years many changes took place inside CAcert. Many "oral"\r
+rules have been put into Policies. New procedures (e.g. Assurer Challenge)\r
+and obligations (e.g. CAcert Community Agreement) have been put into live.\r
+The Assurer Training Events (ATE) try to spread this information:\r
+\r
+- What is missing on the "old" CAP forms?\r
+- Why should I remember R/L/O?\r
+- What can you do if an Assuree shows an ID document unknown to you?\r
+\r
+These and more questions will be answered during the Assurer Training\r
+Events (ATEs)\r
+\r
+Furthermore, the ATE trains how to do assurances and audits assurances, to\r
+measure the quality of assurances in the daily routine. Here are some\r
+possible errors and pitfalls which need to be found. Assurers have the\r
+opportunity to see those errors and how to avoid them.\r
+\r
+As IanG said: The ATE or Assurer Training Event is exceptionally\r
+recommended for all Assurers and includes parts which contribute directly\r
+to our audit. Come and find out how you can also contribute.\r
+\r
+The next event held in your area will be:\r
+\r
+- Saturday 11th August 2012\r
+- 10:00-13:00\r
+- Splat Space - Durham's Hackerspace\r
+  331 W. Main St - Basement\r
+  Durham, NC\r
+\r
+\r
+Details to the location and time can be found:\r
+Wiki [http://wiki.cacert.org/events/ATE-Raleigh]\r
+Blog [http://blog.cacert.org/2012/07/572.html]  \r
+\r
+User reply for registration: 'I will attend the ATE-Raleigh'\r
+\r
+The event team is looking forward for your attendance:\r
+\r
+Contact: events@cacert.org\r
diff --git a/scripts/46us-ate-raleigh-mail.php.txt b/scripts/46us-ate-raleigh-mail.php.txt
new file mode 100644 (file)
index 0000000..0c55567
--- /dev/null
@@ -0,0 +1,112 @@
+#!/usr/bin/php -q\r
+<? /*\r
+    LibreSSL - CAcert web application\r
+    Copyright (C) 2004-2009  CAcert Inc.\r
+\r
+    This program is free software; you can redistribute it and/or modify\r
+    it under the terms of the GNU General Public License as published by\r
+    the Free Software Foundation; version 2 of the License.\r
+\r
+    This program is distributed in the hope that it will be useful,\r
+    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+    GNU General Public License for more details.\r
+\r
+    You should have received a copy of the GNU General Public License\r
+    along with this program; if not, write to the Free Software\r
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
+*/\r
+       include_once("../includes/mysql.php");\r
+\r
+       $lines = "";\r
+       $fp = fopen("46us-ate-raleigh-email.txt", "r");\r
+       while(!feof($fp))\r
+       {\r
+               $line = trim(fgets($fp, 4096));\r
+               $lines .= wordwrap($line, 75, "\n")."\n";\r
+       }\r
+       fclose($fp);\r
+\r
+\r
+//     $locid = intval($_REQUEST['location']);\r
+//     $maxdist = intval($_REQUEST['maxdist']);\r
+//  maxdist in [Km]\r
+  $maxdist = 200;\r
+\r
+\r
+// location      location.ID\r
+//   verified: 29.4.09 u.schroeter\r
+//   $locid = 7902857;       // Paris\r
+//   $locid = 238568;        // Bielefeld  \r
+//   $locid = 715191;        // Hamburg    \r
+//   $locid = 1102495;       // London     \r
+//   $locid = 606058;        // Frankfurt  \r
+//   $locid = 1775784;       // Stuttgart  \r
+//   $locid = 228950;        // Berlin  \r
+//   $locid = 606058;        // Frankfurt\r
+//   $locid = 599389;        // Flensburg\r
+//   $locid = 61065;        // Amsterdam, Eemnes\r
+//   $locid = 228950;        // Berlin  \r
+//   $locid = 2138880;      // Baltimore (Baltimore (city)), Maryland, United States   \r
+//   $locid = 1486658;       // Potsdam\r
+//   $locid = 664715;       // Goteborg, Vastra Gotaland, Sweden\r
+//   $locid = 2094781;       // Mission Hills (Los Angeles), California, United States \r
+//   $locid = 423655;       // Copenhagen, Kobenhavn*, Denmark \r
+//   $locid = 2093625;       // Los Angeles, CA ???\r
+//   $locid = 2094326       // Los Angeles (Los Angeles), California, United States\r
+//   $locid = 2257312;       // Sydney, New South Wales, Australia\r
+//   $locid = 572764;       //  Essen, Nordrhein-Westfalen, Germany \r
+//   $locid = 78;       //  Aachen, Nordrhein-Westfalen, Germany \r
+//   $locid = 1260319;       // Muenchen    \r
+//   $locid = 266635;       // Bonn, Nordrhein-Westfalen, Germany\r
+//   $locid = 873779;       // Karlsruhe, Baden-Wuerttemberg, Germany\r
+//   $locid = 520340;       // Dusseldorf, Nordrhein-Westfalen, Germany\r
+       \r
+// ATE Melbourne, AU, July 28th 2012\r
+//       $locid = 2262656;       // Melbourne, Victoria, Australia\r
+//       $eventname = "ATE-Melbourne";\r
+//       $city = "28th July 2012";\r
+\r
+// ATE Raleigh, US, August 11th 2012\r
+   $locid = 2185076;       // Raleigh (Wake), North Carolina, United States\r
+   $eventname = "ATE-Raleigh";\r
+   $city = "11th August 2012";\r
+\r
+\r
+       $query = "select * from `locations` where `id`='$locid'";\r
+        $loc = mysql_fetch_assoc(mysql_query($query));\r
+\r
+       $query = "SELECT ROUND(6378.137 * ACOS(0.9999999*((SIN(PI() * $loc[lat] / 180) * SIN(PI() * `locations`.`lat` / 180)) + \r
+                       (COS(PI() * $loc[lat] / 180 ) * COS(PI() * `locations`.`lat` / 180) * \r
+                        COS(PI() * `locations`.`long` / 180 - PI() * $loc[long] / 180)))), -1) AS `distance`, sum(`points`) as pts, `users`.* \r
+                       FROM `locations`\r
+                               inner join `users`  on `users`.`locid` = `locations`.`id` \r
+                               inner join `alerts` on `users`.`id`=`alerts`.`memid`\r
+                               inner join `notary` on `users`.`id`=`notary`.`to`\r
+                       WHERE   (`alerts`.`general`=1 OR `alerts`.`country`=1 OR `alerts`.`regional`=1 OR `alerts`.`radius`=1)\r
+                       GROUP BY `users`.`id`\r
+                       HAVING `distance` <= '$maxdist' \r
+                       ORDER BY `distance` ";\r
+        echo $query;\r
+\r
+    // comment next line when starting to send mail not only to me \r
+    // $query = "select * from `users` where `email` like 'cacerttest%'";\r
+\r
+       $res = mysql_query($query);\r
+       $xrows = mysql_num_rows($res);\r
+\r
+       while($row = mysql_fetch_assoc($res))\r
+       {\r
+    //    uncomment next line to send mails ...\r
+               sendmail($row['email'], "[CAcert.org] $eventname - $city", $lines, "events@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);\r
+       }\r
+  // 1x cc to events.cacert.org\r
+       sendmail("events@cacert.org", "[CAcert.org] $eventname - $city", $lines, "events@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);\r
+       // 1x mailing report to events.cacert.org\r
+  sendmail("events@cacert.org", "[CAcert.org] $eventname - $city Report", "invitation sent to $xrows recipients.", "support@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);       \r
+\r
+       // 1x mailing report to Arbitrator of case http://wiki.cacert.org/wiki/Arbitrations/a20090525.1\r
+  sendmail("p.dunkel@cacert.org", "[CAcert.org] $eventname - $city Report", "invitation sent to $xrows recipients.", "support@cacert.org", "", "", "CAcert Events Organisation", "returns@cacert.org", 1);     \r
+       echo "invitation sent to $xrows recipients.\n";\r
+\r
+?>\r
index 572c1fd..0f2fc2e 100755 (executable)
@@ -21,19 +21,71 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 require_once(dirname(__FILE__).'/../../includes/mysql.php');
 
 $BOARD_PRIVATE = 'cacert-board-private@lists.cacert.org';
+$ASSURANCE_OFFICER = 'ao@cacert.org';
+$ORGANISATION_ASSURANCE_OFFICER = 'oao@cacert.org';
 
+
+//defines to whom to send the lists
 $flags = array(
-       'admin' => 'Support Engineer',
-       'orgadmin' => 'Organisation Assurer',
-       'board' => 'Board Member',
-       'ttpadmin' => 'Trusted Third Party Admin',
-       'tverify' => 'Tverify Admin',
-       'locadmin' => 'Location Admin'
+       'admin' => array(
+                       'name'    => 'Support Engineer',
+                       'own'     => false, //Don't send twice
+                       'board'   => true,
+                       'support' => true,
+                       'ao'      => false,
+                       'oao'     => false
+                       ),
+       
+       'orgadmin' => array(
+                       'name'    => 'Organisation Assurer',
+                       'own'     => true,
+                       'board'   => true,
+                       'support' => true,
+                       'ao'      => true,
+                       'oao'     => true
+                       ),
+       
+       'board' => array(
+                       'name'    => 'Board Member',
+                       'own'     => false,
+                       'board'   => true,
+                       'support' => true,
+                       'ao'      => true,
+                       'oao'     => false
+                       ),
+       
+       'ttpadmin' => array(
+                       'name'    => 'Trusted Third Party Admin',
+                       'own'     => true,
+                       'board'   => true,
+                       'support' => true,
+                       'ao'      => true,
+                       'oao'     => true
+                       ),
+       
+       'tverify' => array(
+                       'name'    => 'Tverify Admin',
+                       'own'     => false,
+                       'board'   => true,
+                       'support' => true,
+                       'ao'      => true,
+                       'oao'     => false
+                       ),
+       
+       'locadmin' => array(
+                       'name'    => 'Location Admin',
+                       'own'     => false,
+                       'board'   => true,
+                       'support' => true,
+                       'ao'      => false,
+                       'oao'     => false
+                       ),
        );
 
-$adminlist = array();
 
-foreach ($flags as $flag => $description) {
+// Build up list of various admins
+$adminlist = array();
+foreach ($flags as $flag => $flag_properties) {
        $query = "select `fname`, `lname`, `email` from `users` where `$flag` = 1";
        if(! $res = mysql_query($query) ) {
                fwrite(STDERR,
@@ -45,52 +97,64 @@ foreach ($flags as $flag => $description) {
                continue;
        }
        
-       $admins = array();
-       $adminlist[$flag] = "";
+       $adminlist[$flag] = array();
        
        while ($row = mysql_fetch_assoc($res)) {
-               $admins[] = $row;
-               $adminlist[$flag] .= "$row[fname] $row[lname] $row[email]\n";
+               $adminlist[$flag][] = $row;
        }
        
-       foreach ($admins as $admin) {
-               $message = <<<EOF
+       
+       // Send mail to admins of this group if 'own' is set
+       if ($flag_properties['own']) {
+               foreach ($adminlist[$flag] as $admin) {
+                       $message = <<<EOF
 Hello $admin[fname],
 
-you get this message, because you are listed as $description on
+you get this message, because you are listed as $flag_properties[name] on
 CAcert.org. Please review the following list of persons with the same privilege
 and report to the responsible team leader or board
 ($BOARD_PRIVATE) if you spot any errors.
 
-$adminlist[$flag]
+
+EOF;
+                       
+                       foreach ($adminlist[$flag] as $colleague) {
+                               $message .= "$colleague[fname] $colleague[lname] $colleague[email]\n";
+                       }
+                       
+                       $message .= <<<EOF
 
 
 Best Regards,
 CAcert Support
 EOF;
-               sendmail($admin['email'], "Permissions Review", $message, 'support@cacert.org');
+                       
+                       sendmail($admin['email'], "Permissions Review", $message, 'support@cacert.org');
+               }
        }
 }
 
 
 
+// Send to support engineers
 $message = <<<EOF
-Dear Board Members,
+Dear Support Engineers,
 
 it's time for the permission review again. Here is the list of privileged users
-in the CAcert web application. Please review them and also ask the persons 
-responsible for an up-to-date copy of access lists not directly recorded in the
-web application (critical admins, software assessors etc.) 
+in the CAcert web application. Please review them.
 
 
 EOF;
 
-foreach ($flags as $flag => $description) {
-       $message .= <<<EOF
-List of ${description}s:
-$adminlist[$flag]
-
-EOF;
+foreach ($flags as $flag => $flag_properties) {
+       if ($flag_properties['support']) {
+               $message .= "List of $flag_properties[name]s:\n\n";
+               foreach ($adminlist[$flag] as $colleague) {
+                       $message .= "$colleague[fname] $colleague[lname] $colleague[email]\n";
+               }
+               
+               $message .= "\n\n";
+       }
 }
 
 $message .= <<<EOF
@@ -99,4 +163,55 @@ Best Regards,
 CAcert Support
 EOF;
 
-sendmail($BOARD_PRIVATE, "Permissions Review", $message, 'support@cacert.org');
+foreach ($adminlist['admin'] as $support_engineer) {
+       sendmail(
+                       $support_engineer['email'],
+                       "Permissions Review",
+                       $message,
+                       'support@cacert.org');
+}
+
+
+// Send to one-email addresses
+foreach (array(
+                       'ao' => array(
+                                       'description' => 'Assurance Officer',
+                                       'email' => $ASSURANCE_OFFICER),
+                       'oao' => array(
+                                       'description' => 'Organisation Assurance Officer',
+                                       'email' => $ORGANISATION_ASSURANCE_OFFICER),
+                       'board' => array(
+                                       'description' => 'Board Members',
+                                       'email' => $BOARD_PRIVATE)
+               ) as $key => $values) {
+       $message = <<<EOF
+Dear $values[description],
+
+it's time for the permission review again. Here is the list of privileged users
+in the CAcert web application. Please review them and also ask the persons 
+responsible for an up-to-date copy of access lists not directly recorded in the
+web application (critical admins, software assessors etc.) 
+
+
+
+EOF;
+       
+       foreach ($flags as $flag => $flag_properties) {
+               if ($flag_properties[$key]) {
+                       $message .= "List of $flag_properties[name]s:\n\n";
+                       foreach ($adminlist[$flag] as $colleague) {
+                               $message .= "$colleague[fname] $colleague[lname] $colleague[email]\n";
+                       }
+                       $message .= "\n\n";
+               }
+       }
+       
+       $message .= <<<EOF
+
+
+Best Regards,
+CAcert Support
+EOF;
+       
+       sendmail($values['email'], "Permissions Review", $message, 'support@cacert.org');
+}
index 498eda2..051b179 100755 (executable)
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
        require_once(dirname(__FILE__).'/../../includes/mysql.php');
+       require_once(dirname(__FILE__).'/../../includes/lib/account.php');
 
 
-
-       /* Set assurer flag for accounts who miss it
-
-          See also includes/lib/account.php, function fix_assurer_flag($userID)
-
-          We may have some performance problems here, there are 150k assurances and 220k users
-          in the production database. The exists-clause on cats_passed should be a good filter... */
-          
-  /* Synchronisation of assurer flag currently deactivated, see https://bugs.cacert.org/view.php?id=1003
-     and https://bugs.cacert.org/view.php?id=1024 */
-/*
-       $query = "select `n`.`to` as `uid` from `notary` as `n`, `users` as `u` ".
-                "  where `n`.`to`=`u`.`id` and `u`.`assurer`<>'1' ".
-                "    and (`n`.`expire` > now() OR `n`.`expire` IS NULL) ".
-                "    and exists(select 1 from `cats_passed` as `cp`, `cats_variant` as `cv` ".
-                "                 where `cp`.`variant_id`=`cv`.`id` and `cv`.`type_id` = 1 and `cp`.`user_id`=`n`.`to`)".
-                "  group by `n`.`to` having sum(`n`.`points`)>=100";
-
-       $res = mysql_query($query);
-       while($row = mysql_fetch_assoc($res))
-       {
-               $query = "update users set `assurer`='1' where `id`='${row['uid']}'";
-               //echo $query."\n";
-               mysql_query($query);
+       // Recalculate assurer flag for all accounts
+       if (!fix_assurer_flag()) {
+               fwrite(STDERR, "ERROR on fixing the assurer flag. Continuing anyway");
        }
-*/
-       /* Remove assurer flag from accounts not eligible.
-
-          Also a bit performance critical, but assurer flag is only set at 5k accounts
 
-       */
-  /* Synchronisation of assurer flag currently deactivated, see https://bugs.cacert.org/view.php?id=1003
-     and https://bugs.cacert.org/view.php?id=1024 */
-/*
-    $query = "select `u`.id as `uid` from `users` as `u` " .
-                "  where `u`.`assurer` = '1' ".
-                "    and (not exists(select 1 from `cats_passed` as `cp`, `cats_variant` as `cv` ".
-                "                     where `cp`.`variant_id`=`cv`.`id` and `cv`.`type_id` = 1 and `cp`.`user_id`=`u`.`id`) ".
-                "         or (select sum(`n`.`points`) from `notary` as `n` where `n`.`to`=`u`.`id` and (`n`.`expire` > now() OR `n`.`expire` IS NULL)) < 100) ";
-       $res = mysql_query($query);
-       while($row = mysql_fetch_assoc($res))
-       {
-               $query = "update users set `assurer`='0' where `id`='${row['uid']}'";
-               //echo $query."\n";
-               mysql_query($query);
-       }
-*/
 
        mysql_query("update `locations` set `acount`=0");
        $query = "SELECT `users`.`locid` AS `locid`, count(*) AS `total` FROM `users`
diff --git a/scripts/resetpermissions.php b/scripts/resetpermissions.php
new file mode 100644 (file)
index 0000000..0bfdaa3
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/php -q
+<?php
+/*
+LibreSSL - CAcert web application
+Copyright (C) 2004-2012  CAcert Inc.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; version 2 of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+require_once(dirname(__FILE__).'/../includes/mysql.php');
+
+$flags = array('board', 'tverify');
+
+foreach ($flags as $flag) {
+       echo "Resetting $flag flag:\n";
+       $query = "select `id`, `fname`, `lname`, `email` from `users`
+                       where `$flag` = 1";
+       if(! $res = mysql_query($query) ) {
+               fwrite(STDERR,
+                               "MySQL query for flag $flag failed:\n".
+                               "\"$query\"\n".
+                               mysql_error()
+               );
+       
+               continue;
+       }
+       
+       while ($row = mysql_fetch_assoc($res)) {
+               echo "$row[fname] $row[lname] $row[email]";
+               
+               $update = "update `users` set `$flag` = 0 where `id` = $row[id]";
+               if(! $res2 = mysql_query($update) ) {
+                       echo " NOT RESET!!!\n";
+                       fwrite(STDERR,
+                                       "MySQL query for $flag flag reset on user $row[id] failed:\n".
+                                       "\"$update\"\n".
+                                       mysql_error()
+                       );
+                       
+               } else {
+                       
+                       $message = <<<EOF
+Hi $row[fname],
+
+As per Arbitration a20110118.1 [1] the $flag permission has been removed
+from your account.
+
+[1] https://wiki.cacert.org/Arbitrations/a20110118.1
+
+Best Regards,
+CAcert Support
+EOF;
+                       sendmail($row['email'], "Permissions have been reset", $message, 'support@cacert.org');
+                       
+                       echo " reset.\n";
+               }
+       }
+       
+       echo "\n\n";
+}
\ No newline at end of file
index e17056b..b18273c 100644 (file)
@@ -69,7 +69,7 @@ a:hover {
 <a href="PolicyOnPolicy.html"><img src="cacert-draft.png" alt="CAcert Policy Status" height="31" width="88" style="border-style: none;" /></a><br />
 Creation date: 20060726<br />
 Status: DRAFT p20091108<br />
-<!-- $Id: CertificationPracticeStatement.php,v 1.2 2011-07-27 10:41:01 wytze Exp $ -->
+<!-- $Id: CertificationPracticeStatement.php,v 1.3 2012-07-27 16:00:29 wytze Exp $ -->
 
 
 <font size="-1">
@@ -3203,54 +3203,50 @@ The form of the PGP signatures depends on several factors, therefore no stipulat
 <h4><a name="p7.1.2" id="p7.1.2">7.1.2. Certificate extensions</a></h4>
 
 <p>
-Client certificates include the following extensions:.
+  Client certificates include the following extensions:
 </p>
-<ul><li>
-    basicConstraints=CA:FALSE (critical)
-  </li><li>
-    keyUsage=digitalSignature,keyEncipherment,cRLSign
-  </li><li>
-  </li><li>
-    extendedKeyUsage=emailProtection,clientAuth,serverAuth,msEFS,msSGC,nsSGC
-  </li><li>
-    authorityInfoAccess = OCSP;URI:http://ocsp.cacert.org
-  </li><li>
-    subjectAltName=(as per <a href="#p3.1.1">&sect;3.1.1.</a>).
-</li></ul>
+<ul>
+  <li>basicConstraints=CA:FALSE (critical)</li>
+  <li>keyUsage=digitalSignature,keyEncipherment,keyAgreement (critical)</li>
+  <li>extendedKeyUsage=emailProtection,clientAuth,msEFS,msSGC,nsSGC</li>
+  <li>authorityInfoAccess = OCSP;URI:http://ocsp.cacert.org</li>
+  <li>crlDistributionPoints=URI:&lt;crlUri&gt; where &lt;crlUri&gt; is replaced 
+    with the URI where the certificate revocation list relating to the 
+    certificate is found</li>
+  <li>subjectAltName=(as per <a href="#p3.1.1">&sect;3.1.1.</a>).</li>
+</ul>
   <ul class="q">
     <li> what about Client Certificates Adobe Signing extensions ?</li>
     <li> SubjectAltName should become critical if DN is removed http://tools.ietf.org/html/rfc5280#section-4.2.1.6</li>
   </ul>
 
-
 <p>
-Server certificates include the following extensions:
+  Server certificates include the following extensions:
 </p>
-<ul><li>
-    basicConstraints=CA:FALSE (critical)
-  </li><li>
-    keyUsage=digitalSignature,keyEncipherment
-  </li><li>
-    extendedKeyUsage=clientAuth,serverAuth,nsSGC,msSGC
-  </li><li>
-    authorityInfoAccess = OCSP;URI:http://ocsp.cacert.org
-  </li><li>
-    subjectAltName=(as per <a href="#p3.1.1">&sect;3.1.1.</a>).
-</li></ul>
+<ul>
+  <li>basicConstraints=CA:FALSE (critical)</li>
+  <li>keyUsage=digitalSignature,keyEncipherment,keyAgreement (critical)</li>
+  <li>extendedKeyUsage=clientAuth,serverAuth,nsSGC,msSGC</li>
+  <li>authorityInfoAccess = OCSP;URI:http://ocsp.cacert.org</li>
+  <li>crlDistributionPoints=URI:&lt;crlUri&gt; where &lt;crlUri&gt; is replaced 
+    with the URI where the certificate revocation list relating to the 
+    certificate is found</li>
+  <li>subjectAltName=(as per <a href="#p3.1.1">&sect;3.1.1.</a>).</li>
+</ul>
 
 <p>
-Code-Signing certificates include the following extensions:
+  Code-Signing certificates include the following extensions:
 </p>
-
-<ul><li>
-    basicConstraints=CA:FALSE (critical)
-  </li><li>
-    keyUsage=digitalSignature,keyEncipherment
-  </li><li>
-    extendedKeyUsage=emailProtection,clientAuth,codeSigning,msCodeInd,msCodeCom,msEFS,msSGC,nsSGC
-  </li><li>
-    authorityInfoAccess = OCSP;URI:http://ocsp.cacert.org
-</li></ul>
+<ul>
+  <li>basicConstraints=CA:FALSE (critical)</li>
+  <li>keyUsage=digitalSignature,keyEncipherment,keyAgreement (critical)</li>
+  <li>extendedKeyUsage=emailProtection,clientAuth,codeSigning,msCodeInd,msCodeCom,msEFS,msSGC,nsSGC</li>
+  <li>authorityInfoAccess = OCSP;URI:http://ocsp.cacert.org</li>
+  <li>crlDistributionPoints=URI:&lt;crlUri&gt; where &lt;crlUri&gt; is replaced 
+    with the URI where the certificate revocation list relating to the 
+    certificate is found</li>
+  <li>subjectAltName=(as per <a href="#p3.1.1">&sect;3.1.1.</a>).</li>
+</ul>
   <ul class="q">
     <li> what about subjectAltName for Code-signing</li>
   </ul>