LDAP scripting
Inleiding
Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel van deze server naar andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.
Type scripts
Er zijn globaal een aantal soorten scripts te onderscheiden:
- De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).
- De cronjob scripts. Gewoonlijk herkenbaar aan de .sh extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.
- Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (init_ldap, dump_ldap en restore_ldap). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.
Overzicht scripts
0_DIT_IS_EEN_LOCAL_DIR gen_passwd_code2.php LDAP_include_telefoon.php sync_hccforums.php check_ms gen_passwd_hcc.php LDAP_lid_weg.php sync_hobbynetbin_2.sh cron_joomla.php gen_shadow_admin.php LDAP_maak_hccOptOutTokens.php sync_hobbynetdata_2.sh cron_joomla.sh gen_shadow_code2.php _LDAP_schoon_4045431_op.php sync_hobbynetetc_2.sh database-onderhoud.sh gen_shadow_hcc.php LDAP_schoon_database.php sync_hobbynetfw_2.sh dump_ldap.sh gen_xml_fw_ip4.php LDAP_schoon_mysql_op.php sync_hobbynetlib_2.sh enquete-specials gen_xml_fw_ip6.php LDAP_schoon_testleden_op.php tel_unieke_bezoekers-volgens-LDAP_en_SQL.php forum-specials get_all_mailbox_sizes.sh LDAP_vul_leden.php tel_unieke_bezoekers-volgens-LDAP.php gen_bezoekersstatistiek_xml.php get_ip4 LDAP_vul_profielbekend.php tel_unieke_bezoekers-volgens-LDAP.sh gen_compusers_csv.php get_ip6 mailman-specials test.php gen_dmarc_hcc.php getip-http mail_tripolis_export_report.sh tripolis_import gen_fw.sh hccforums_db.php optouts unblock_joomla.php gen_group_admin.php hcc.nl.mx.fallback other-specials unblock_joomla.sh gen_group_code2.php huisgenoot_lidmaatschappen.php popbull-specials update_domeinen.php gen_group_hcc.php huisgenoot_lidmaatschappen.sh postcode-specials update_domeinen.sh gen_hobbyabon.php init_ldap_mdb.sh purge_hccforums.php update_hccforums.sh gen_iplist_partners.php init_ldap.sh renameusers_joomla.php update_joomla.php gen_iplist_partners.sh kader_maak_html.php renameusers_joomla.sh update_joomla.sh gen_kader_csv.php kader_maak_lijsten.sh restore_ldap.sh upd_code2_accounts.sh gen_kaderfunc.php kader_maak_txt.php rss_joomla.php upd_hcc_accounts.sh gen_kaderlist.php kader_maak_xb_csv.php rss_joomla.sh upd_ldap_dev.sh gen_ldap_bul_export.php LDAP_bepaal_startconditie.php ruim_lock_files_op.sh upd_ldap-test-dev.expect gen_ldap_cor_export.php ldap.conf.ldif ruim_pdf_facturen_op.sh upd_ldap_test.sh gen_ldap_hoofdbestuur_export.php LDAP_controleer_groeperingen.php ruimsmsverstuurdsmsop.sql upd_mailserver_report.sh gen_ldap_kader_export.php LDAP_controleer_kader.php run_maand_rapport.sh upd_mailserver.sh gen_ldap_ledenraad_export.php LDAP_controleer_users.php run_tripolis_export.sh upd_nameserver.sh gen_ldap_niet_leden_export.php LDAP_copyright.txt schoon_alles_op_include.php upd_srv gen_leden_csv.php LDAP_cronjob.sh schoon_alles_op.sh upg_vmware_tools gen_leden_dubbel.log LDAP_forceer_CSV.sh schoon_breg_token_tabel_op.php upload_bezoekersstatistiek.sh gen_leden_dubbel.php LDAP_ftps_lget_CRM_leden.sh schoon_forms_database_op.php upload_compusers_csv.sh gen_maand_rap.php LDAP_herstel_profielbekend.php schoon_JoomlaTokens_tabel_op.php upload_kader_csv.sh gen_mail_exclude_txt.php LDAP_include_henz.php schoon_LDAP_en_hcc_Bezoek_op.php upload_leden_csv.sh gen_mx_hcc-fallback.php LDAP_include_ISO.php set_menu_joomla.sh vergelijk_scripts.readme gen_mx_hcc.php LDAP_include_Joomla_db.php set_menu.php verrijk_factuur.php gen_mx_hobby.php LDAP_include_mail.php statistiek_xml.php verrijk_factuur.sh gen_passwd_admin.php LDAP_include.php statistiek_xml.sh
Crontab
Wijzigingen
vbs20220516: Tripolis Import en rapportage uitgeschakeld.
############################################################################################################## # Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting # ############################################################################################################## # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command # Update rssfeeds joomla 1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh >>/var/log/rss_joomla.log # Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2 55 5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh 55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh 55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh 55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh # Herstart Firewall 0 6 * * * /etc/init.d/hobby-firewall restart >/dev/null 0 12 * * * /etc/init.d/hobby-firewall restart >/dev/null 0 18 * * * /etc/init.d/hobby-firewall restart >/dev/null 0 0 * * * /etc/init.d/hobby-firewall restart >/dev/null # Check op updates en download deze alvast ivm Nagios detectie 0 6 * * * apt-get clean -y >/dev/null ; apt-get update >/dev/null ;apt-get upgrade -d -y >/dev/null 0 18 * * * apt-get clean -y >/dev/null ; apt-get update >/dev/null ;apt-get upgrade -d -y >/dev/null # Maak een beveiligde backup 45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash >>/var/log/backup_encrypted.log # Sync bin dir naar ldap-lb2 50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh # Sync etc dir naar ldap-lb2 51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh # Sync lib dir naar ldap-lb2 52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh # Voer de cron_joomla.sh cronjob uit voor de bit backup 01 0 * * * /usr/local/hobbynet/bin/cron_joomla.sh >>/var/log/cron_joomla.log # Voer de cron_joomla.sh cronjob uit voor 'update_joomla.sh' 15 1 * * * /usr/local/hobbynet/bin/cron_joomla.sh >>/var/log/cron_joomla.log # Forceer dat er een verse set CSV bestanden klaar wordt gezet 05 3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh >/dev/null # Doe alle processing CRM->LDAP 10 3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh >>/var/log/LDAP_cronjob.log # Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan 7 3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh # Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report 26 3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh >/var/log/upd_mailserver.log 30 3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh # Haal de opt-outs op van Tripolis ### disabled 20220516 ###15 3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh >/var/log/run_tripolis_import.log # Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert ### disabled 20220516 ###31 3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh # Maak en plaats de ledenlijst voor Kantoor 35 3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh >/dev/null # Maak en plaats de kaderlijst voor Kantoor 40 3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh >/dev/null # Deblokkeer actieve joomla gebruikers 45 3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh >>/var/log/unblock_joomla.log # Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving 47 3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh >/dev/null # Maak overzicht van alle opt-ins voor Tripolis 50 3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh >/var/log/run_tripolis_export.log # Hernoem in Joomla de users die zijn hernoemd in ldap 50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh >>/var/log/renameusers_joomla.log # Haal het resultaat van de Tripolis export op, en mail die naar Egbert 52 3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh # Maak en plaats statistiek overzicht van alle HCC groeperingen 55 3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh >/dev/null # Start joomla onderhoud 0 4 * * * /usr/local/hobbynet/bin/update_joomla.sh >>/var/log/update_joomla.log # Doe de Hobbynet maand rapportage 0 4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh >/dev/null # Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB 5 4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh >/dev/null # Maak een lijst van onjuiste huisgenoot-lidmaatschappen 10 4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh >/dev/null # Schoon mySQL en LDAP op 5 4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh # Verrijk een naar SFTP geupload factuur bestand met factuurtokens 15 * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh >>/var/log/verrijk_factuur.log # ruim sms database op 42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql >/dev/null # corigeer menu elke 4 uur #42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh >>/var/log/set_menu_joomla.log
Toepassingen
Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de master data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).
LDAP
Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.
- dump_ldap.sh
Dumpt alle ou's in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van. - init_ldap.sh <beheer-password>
Bouwt de hele LDAP structuur van de grond af op. - restore_ldap.sh
Vult de hele LDAP structuur met file uit de dump_ldap stap.
Statistieken
Iedere nacht worden er door het script statistiek_xml.sh van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script statistiek_xml.sh naar de kadernet server overgezet.
Mailserver
De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:
- gen_hobbyabon.php.
Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels). - gen_kaderfunc.php.
Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200). - gen_kaderlist.php.
Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen. - gen_mail_exclude_txt.php.
Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig's die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder. - upd_mailserver_report.sh.
Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan. - upd_mailserver.sh.
Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start upd_mailserver_all op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.
Maandrapportage
- gen_maand_rap.php.
Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie -m mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen 'eigenaar' meer van zijn. - run_maand_rapport.sh.
Cronjob die bovenstaande scripts 1x per maand draait.
Passwd, shadow en group
- gen_group_admin.php
- gen_group_code2.php
- gen_group_hcc.php
- gen_passwd_admin.php
- gen_passwd_code2.php
- gen_passwd_hcc.php
- gen_shadow_admin.php
- gen_shadow_code2.php
- gen_shadow_hcc.php
- upd_admin_accounts.sh (is er niet)
- upd_code2_accounts.sh
- upd_hcc_accounts.sh
Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.
HCC Verenigingsbureau
Het HCC Verenigingsbureau ('VB') heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.
Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).
- upload_kader_csv.sh
de cronjob - gen_kader_csv.php
het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden. - upload_leden_csv.sh
de cronjob - gen_leden_csv.php
het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden. - upload_bezoekersstatistiek.sh
de cronjob - gen_bezoekersstatistiek_csv.php
het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.
CompUsers
2020: VB heeft 'eigen' afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.
Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.
- upload_compusers_csv.sh
de cronjob gen_compusers_csv.php
het script dat een CSV maakt. Dit is een afgeslankt vorm van het gen_leden_csv.php script.
Koppeling met Tripolis
Het oude "popbull" systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap.
Sync van Tripolis naar ldap (uitgeschakeld vbs20220516)
- run_tripolis_import.sh
de eigenlijke cronjob - import_tripolis_csv.php
vertaalt de CSV van opt-outs naar het wissen van de individuele optins.
Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.
Sync van ldap naar Tripolis
- run_tripolis_export.sh
de eigenlijk cronjob - gen_ldap_bul_export.php
maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis. - gen_ldap_cor_export.php
maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.
Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina's of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).
Rapportage
Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.
Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.
Eénmalige jobs
Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory popbull-specials geplaatst.
- import_digizine_csv.php
de initiële Digizine lijst - import_nieuwsflash_csv.php
de initiële Nieuwsflash lijst - import_popbull_csv.php
de initiële lijst zoals die van HenZ (popbull provider) komt
ISIZ enquête
Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de enquete-specials subdirectory.
- gen_enquete_csv.php
enquête per email - gen_enquete_csv_no_mail.php
enquête per post
Nameserver
- gen_mx_hcc.php
- gen_mx_hobby.php
- upd_nameserver.sh
Firewall (op ldap servers)
- gen_xml_fw_ip4.php
- gen_xml_fw_ip6.php
- sync_hobbynetfw.sh
- gen_fw.sh