home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / Networking / MailTIFF.database-1.1-MIHS / mailDBupdate.in < prev    next >
Encoding:
Paul Falstad's zsh script  |  1997-06-19  |  32.8 KB  |  752 lines

  1. #!/usr/bin/zsh
  2.  
  3. # Copyright 1997 by Uli Zappe <uli@nexttoyou.de> / NEXTTOYOU
  4. # Distributed under the terms of the GNU General Public License
  5. #
  6. # This software is provided as is, without any warranty
  7. #
  8. # Version 1.1
  9. #
  10. # Diese Software ist ausführlich beschrieben in NEXTTOYOU 1/97
  11.  
  12.  
  13.  
  14. ########################################################################################
  15. ## Defaults
  16. ########################################################################################
  17.  
  18. DELTIME=10                                    # Tage bis zum nächsten Löschen
  19. INNPFAD=/usr/spool/news/database/nov        # Pfad zur Overview-Datenbank von INN
  20. EMPFAD=/Library/Mail/Images                 # Pfad relativ zum Homeverzeichnis mit zusätzlichen TIFFs (beginnt mit / !)
  21. ZEIT=6                                        # Monate, nach denen ein Eintrag gelöscht wird
  22. LOGZ=2000                                    # maximale Zeilenzahl der Log-Datei
  23. DATASIZE=10                                    # maximale Datengröße in MB; für sehr große Newsserver u.U. zu vergrößern (zsh Default 6MB)
  24.  
  25. OVERVIEW='*verview'                            # Name der Dateien in der INN-Overview-Datenbank
  26. DATABASE=/LocalLibrary/Images/People        # Ordner, in dem die MailTIFFs abgelegt werden
  27. MAILBOXES=/Mailboxes                        # Pfad zu den Mailboxen relativ zum Heimverzeichnis der Nutzer
  28. NET='/Net/$H'                                # Pfad für nicht-lokale Ordner
  29.  
  30. RECYCLER=/.NeXT/.NextTrash                    # Pfad zum Recycler
  31.  
  32.  
  33.  
  34. ########################################################################################
  35. ## Lokalisierung
  36. ########################################################################################
  37.  
  38. SPRACHE=$(dread System "Language" | sed -e 's/System Language //' -e 's/;.*//')
  39. if [[ $SPRACHE = German ]]; then
  40.  
  41. FALSCH_ARG="Ungültiges Argument "
  42. FALSCH_OPT="Ungültige Option -"
  43. FEHL_ARG="Fehlendes Argument bei Option -"
  44. ANWENDUNG="mailDBupdate.in unterstützt folgende Optionen und Parameter:\n
  45. -a HOST  Ergänze den alternativen Hostnamen HOST. In diesem Fall wird für Nutzer
  46.          des lokalen Netzwerkes nicht nur das Alias Nutzer@Hostname.Domain
  47.          erstellt, sondern auch das Alias Nutzer@HOST.Domain. Das ist
  48.          erforderlich, falls sendmail so konfiguriert ist, daß man in seiner
  49.          E-Mail-Adresse nicht den Hostnamen seines Rechners trägt. In diesem
  50.          Fall sorgt das Alias mit HOST dafür, daß man selbst trotzdem erkannt
  51.          wird, wenn eigene Postings aus Mailinglisten zurückkommen. Insbesondere
  52.          kann mit \"\" auch ein leerer Hostname angegeben werden, falls die
  53.          eigene E-Mail-Adresse Nutzer@Domain lauten sollte (Achtung! Hierfür
  54.          funktioniert NUR die Schreibweise -a<LEERZEICHEN>\"\"!). Außerdem
  55.          bewirkt diese Angabe, daß eine eigene Datei Nutzer@HOST.Domain.aliases
  56.          korrekt eingeordnet wird, wenn sie via fetchMailTIFFs vom NEXTTOYOU-
  57.          Server zurückkommt.\n
  58. -d ZAHL  Das Löschen alter MailTIFFs soll alle ZAHL Tage vorgenommen werden
  59.          (Default $DELTIME). ZAHL sollte kleiner als der kürzeste Ablauf-
  60.          Zeitraum der Artikel von PersonalINN sein, wenn auch alle Personen
  61.          in den News lückenlos berücksichtigt werden sollen.
  62.          Ist ZAHL=0, wird die Löschfunktion ausgeschaltet. Die Optionen -n, -s
  63.          und -t sind dann hinfällig.\n
  64. -f       Forciere Update. Ist diese Option gesetzt, wird die MailTIFF-Datenbank
  65.          upgedatet, auch wenn keine neuen MailTIFFs hinzugekommen sind. Das
  66.          kann sinnvoll sein, wenn die Datenbank korrupt ist.\n
  67. -h       Zeige diese Hilfe an.\n
  68. -l ZAHL  Maximale Zeilenzahl der Log-Datei (Default $LOGZ).\n
  69. -m PFAD  Zum Heimverzeichnis relativer Pfad zu Ordnern, die zusätzliche
  70.          MailTIFFs enthalten (Default $EMPFAD). Der Pfad
  71.          muß für alle Heimverzeichnisse aller Nutzer derselbe sein. In jedem
  72.          Ordner muß sich eine Datei aliases.tiffs befinden, die zu allen Tiffs
  73.          in diesem Ordner die zugehörigen E-Mail-Adressen im Format
  74.             MailTIFF.tiff Nutzer@Host.Domain
  75.          auflistet. Mit Hilfe dieser Angaben kann mailDBupdate.in die MailTIFFs
  76.          nach $DATABASE verschieben und korrekt benennen.
  77.          EnhanceMail.bundle legt Dateien dieses Formats an und kann so
  78.          mailDBupdate.in MailTIFFs liefern.
  79.          Ist PFAD=0, werden keine zusätzlichen Ordner mit MailTIFFs ausgewertet.
  80.          Ist die Option -o gesetzt, werden nur Ordner auf dem eigenen Rechner
  81.          ausgewertet.\n
  82. -n PFAD  Pfad zu der Overview-Datenbank von INN (Default ist der in PersonalINN
  83.          verwendete Pfad $INNPFAD). Diese Datenbank wird
  84.          benötigt, um festzustellen, welche Personen, von denen MailTIFFs vor-
  85.          handen sind, in Newsgruppen gepostet haben, um entsprechend veraltete
  86.          MailTIFFs zu löschen. Der Pfad sollte zu einem Ordner führen, in dem
  87.          möglichst ausschließlich Overview-Dateien untergebracht sind.
  88.          Ist PFAD=0, wertet mailDBupdate.in zum Löschen nicht benötigter
  89.          MailTIFFs ausschließlich die Daten der Mailbox-Ordner aus.\n
  90. -o       mailDBupdate.in überprüft beim Löschen der MailTIFFs die Mailbox-
  91.          Ordner aller Rechner des Netzwerks; dazu müssen die Ordner der
  92.          Client-Maschinen jedoch exportiert werden. Kann dies nicht geschehen,
  93.          so bewirkt diese Option, daß nur Mailboxen ausgewertet werden, die sich
  94.          auf dem Server-Rechner befinden, auf dem mailDBupdate.in läuft.
  95.          Ebenso werden für zusätzliche MailTIFFs (siehe Option -m) nur
  96.          Ordner des eigenen Rechners ausgewertet.\n
  97. -s ZAHL  maximale Datengröße in MB, die mailDBupdate.in verarbeiten kann
  98.          (Default $DATASIZE MB). Dieser Wert muß größer als die größte einzelne
  99.          Overview-Datei der Overview-Datenbank von INN, größer als die größte
  100.          table_of_contents-Datei der Mailboxen und größer als die Liste aller
  101.          in den News gespeicherten E-Mail-Adressen insgesamt sein.\n
  102. -t ZAHL  MailTIFFs einer Person werden gelöscht, wenn sie länger als ZAHL Monate
  103.          weder in einer Mailbox noch in einer Newsgruppe mehr gespeichert war
  104.          (Default $ZEIT).\n
  105. -x PFAD  Pfad, über den die Ordner anderer Rechner als desjenigen, auf dem
  106.          mailDBupdate.in läuft, zu erreichen sind (Default '$NET').
  107.          Kommt in diesem Pfad der Hostname des jeweilige Rechners vor, so kann
  108.          er hier durch die Variable \$H angegeben werden. In diesem Fall ist der
  109.          Pfad unbedingt in einfache Anführungszeichen ('...') einzuschließen!
  110.          Der Pfad kann auch leer sein (Achtung! Dabei ist NUR die Schreibweise
  111.          -x<LEERZEICHEN>'' zulässig!); allerdings funktioniert die Option -o
  112.          mangels Unterscheidungskriterium dann nicht mehr.\n
  113. RECHNER  Nach den Optionen können noch die Hostnamen RECHNER beliebig vieler
  114.          Computer des lokalen Netzwerkes als Parameter aufgelistet werden.
  115.          mailDBupdate.in wertet dann auch die lokalen Nutzer dieser Computer
  116.          aus.\n\n"
  117.          
  118. AKTUALISIERE="Aktualisiere MailTIFF-Datenbank"
  119. NETINFO="  Registriere Nutzer des lokalen Netzwerks aus NetInfo..."
  120. HOL_MT="  Hole MailTIFFs aus "
  121. HOLE="    Hole "
  122. FEHLER1="Fehler "
  123. HOL_FEHLER=" beim Holen von "
  124. EINTRAG_FEHLER=" beim Eintragen von "
  125. INTERNET="  Registriere MailTIFFs von Internet-Nutzern..."
  126. REGISTER="    Registriere "
  127. NEU_ALIAS="  Registriere neue Aliases..."
  128. REG_ALIAS="    Registriere Aliases für "
  129. LOESCH_MT="Lösche veraltete MailTIFFs"
  130. REG_MAIL="  Registriere in Mails gespeicherte Adressen..."
  131. REG_NEWS="  Registriere in News gespeicherte Adressen..."
  132. ABGLEICH="  Gleiche Adressen der MailTIFF-Datenbank mit den registrierten Adressen ab..."
  133. KEIN_LOESCHEN="  Keine MailTIFFs zu löschen"
  134. LOESCH1="  Lösche 1 MailTIFF..."
  135. LOESCH_1="  Lösche "
  136. LOESCH_2=" MailTIFFs..."
  137. LOESCHE="    Lösche "
  138. LOESCH_FEHLER=" beim Löschen von "
  139.  
  140. TEXT1="# Nutzerliste
  141. # Diese Datei wird von mailDBupdate.in automatisch erstellt.\n
  142. # Mail.app zeigt nur Bilder von Nutzern an, die hier aufgelistet sind.
  143. # Das Bild muß genau den Namen der E-Mail-Adresse des Nutzers (plus der
  144. # Endung \".tiff\") haben.
  145. # Diese Nutzer erscheinen auch unter \"login\"-Namen im Adreßpanel von Mail.app.\n\n\n
  146. # Nutzer des lokalen Netzes:\n"
  147. TEXT2="# Aliases für die Mail-Adressen in passwd
  148. # Diese Datei wird von mailDBupdate.in automatisch erstellt.\n
  149. # Sind ein Bild und passwd-Eintrag für die Adresse hinter
  150. # dem Doppelpunkt vorhanden, so wird dieses Bild auch für
  151. # die Adresse vor dem Doppelpunkt angezeigt.\n\n\n
  152. # Standard-Aliases für Nutzer des lokalen Netzes;
  153. # benötigt für PersonalINN & Newsreader sowie Mail.app
  154. # bei eigenen Beiträgen, die aus Mailinglisten zurückkommen
  155. # (Standardkonfiguration von sendmail vorausgesetzt):\n"
  156. TEXT3="\n\n\n# Spezial-Aliases für Nutzer des lokalen Netzes;
  157. # benötigt für Mail.app bei besonderen Konfigurationen
  158. # von sendmail oder anderen Sonderfällen für
  159. # eigene Beiträge, die aus Mailinglisten zurückkommen:\n"
  160. TEXT4="\n\n\n# Nutzer aus dem Internet, von denen Mail-Bilder gespeichert sind:
  161. # (Die Angaben hinter dem Doppelpunkt markieren, in welchem Monat
  162. # seit Januar 1990 von diesem Nutzer das letzte Mal eine E-Mail oder
  163. # ein News-Beitrag gespeichert waren und wo (NA = der Nutzer war von
  164. # Beginn an nicht gespeichert).\n"
  165. TEXT5="\n\n\n# Aliases für Nutzer aus dem Internet, die von mehreren Mail-Adressen
  166. # aus schreiben; gemäß der Datei $DATABASE/aliases.in:\n"
  167. TEXT6="Keine DNS-Daten erhältlich!
  168.  Bitte konfigurieren Sie Ihren Domain-Namen korrekt in der NetInfo- 
  169.  Domain (/locations/resolver) oder aber in /etc/resolv.conf."
  170. TEXT7="DOMAIN_NICHT_KONFIGURIERT"
  171. TEXT8="# Aliases fuer Nutzer aus dem Internet, die von mehreren Mail-Adressen
  172. # aus schreiben; Einträge in diese Datei können auch selbst manuell
  173. # vorgenommen werden im Format \"Alias-Adresse: Adresse\", wobei \"Adresse\"
  174. # die E-Mail-Adresse des Nutzers ist, wie sie im Namen des Mail-Bildes
  175. # auftaucht (OHNE \".tiff\" am Ende!).\n\n\n"
  176.  
  177.  
  178. else
  179.  
  180.  
  181. FALSCH_ARG="Illegal argument "
  182. FALSCH_OPT="Illegal option -"
  183. FEHL_ARG="Missing argument for Option -"
  184. ANWENDUNG="mailDBupdate.in supports the following options and parameters:\n
  185. -a HOST    Add the alternative hostname HOST. In this case not only will the
  186.            alias user@hostname.domain be added for users of the local network,
  187.            but also the alias user@HOST.domain. This is necessary if you have
  188.            sendmail configured in such a way that the hostname of your machine
  189.            is not part of your email address. In this case the alias with HOST
  190.            ensures that your own address is recognized if postings of yours
  191.            return from mailing lists. Note that HOST may be an empty string
  192.            (\"\") in case your address is user@domain (Attention! In this
  193.            case ONLY the notation -a<SPACE>\"\" will work!). Furthermore,
  194.            this entry causes an aliases file of one's own to be correctly
  195.            adjusted when it returns from the NEXTTOYOU server via
  196.            fetchMailTIFFs.\n
  197. -d NUMBER  Old MailTIFFs will be deleted every NUMBER days (default $DELTIME).
  198.            NUMBER should be smaller than the shortest article expiration cycle
  199.            in PersonalINN if all persons stored in the news shall be taken
  200.            into account without a gap.
  201.            If NUMBER=0 the delete function is disabled. The options -n, -s and
  202.            -t are meaningless in this case.
  203. -f         Force update. If this option is set, the MailTIFF database will get
  204.            updated even if no new MailTIFFs have arrived. This may be useful in
  205.            case the database becomes corrupt.\n
  206. -h         Display this help.\n
  207. -l NUMBER  Maximum line number of the log file (default $LOGZ).\n
  208. -m PATH    Path to directories including additional MailTIFFs, relative to the
  209.            home directories (default $EMPFAD). This path
  210.            must be the same for all home directories. In each directory there
  211.            must be a file aliases.tiffs that lists the corresponding email
  212.            addresses for all tiffs in this directory in the format
  213.               MailTIFF.tiff user@host.domain 
  214.            With this list mailDBupdate.in is able to move the MailTIFFs to
  215.            $DATABASE and name them correctly.
  216.            EnhanceMail.bundle creates lists in this format and can thus
  217.            provide MailTIFFs for mailDBupdate.in.
  218.            If PATH=0 no additional directories with MailTIFFs are checked.
  219.            If the option -o is set, only directories on the own machine
  220.            will be checked.\n
  221. -n PATH    Path to the overview database of INN (default is the path used
  222.            by PersonalINN, $INNPFAD). This database is
  223.            needed to check which persons with MailTIFFs stored have posted
  224.            to newsgroups, to delete accordingly outdated MailTIFFs. PATH
  225.            should lead to a directory with preferably only overview files
  226.            in it.
  227.            If PATH=0 mailDBupdate.in checks only the data of the mailbox
  228.            directories to determine which MailTIFFs to delete.\n
  229. -o         For deleting MailTIFFs, mailDBupdate.in checks the mailbox
  230.            directories of all machines of the network; however, for this
  231.            purpose the directories of the client machines need to be exported.
  232.            If this is not feasible, this option may be used to make
  233.            mailDBupdate.in check only mailbox directories on the server machine
  234.            it runs on.
  235.            Also, for additional MailTIFFs (see option -m) only directories of
  236.            the own machine will be checked.\n
  237. -s NUMBER  Maximum data size in MB mailDBupdate.in can handle (default $DATASIZE MB).
  238.            This number must be larger than the largest single overview file
  239.            of INN, larger than the largest table_of_contents file of the
  240.            mailbox directories and larger than a list of all email addresses
  241.            which are stored in news.\n
  242. -t NUMBER  MailTIFFs of a person will be deleted when he/she hasn't been
  243.            stored either in a mailbox or in a newsgroup for more than
  244.            NUMBER months (default $ZEIT).\n
  245. -x PATH    Path the directories of machines other than the one mailDBupdate.in
  246.            runs on are accessable by on your network (default '$NET').
  247.            If the hostname of the corresponding machine is included in the
  248.            pathname, you can enter it here using the variable \$H. In this case
  249.            the path must be enclosed in single quotes ('...')! The path can
  250.            also be empty (Attention! ONLY the notation -x<SPACE>'' is allowed
  251.            for this!); however, the option -o won't work in that case because
  252.            it can't tell local from remote directories anymore.\n
  253. MACHINE    After the options any number of MACHINE hostnames of computers
  254.            in the local network may be listed as parameters. mailDBupdate.in
  255.            will then take into account the local users of these computers,
  256.            too.\n\n"
  257.          
  258. AKTUALISIERE="Updating MailTIFF database"
  259. NETINFO="  Registering users from the local NetInfo network..."
  260. HOL_MT="  Getting MailTIFFs from "
  261. HOLE="    Getting "
  262. FEHLER1="Error "
  263. HOL_FEHLER=" while getting "
  264. EINTRAG_FEHLER=" while registering "
  265. INTERNET="  Registering MailTIFFs of internet users..."
  266. REGISTER="    Registering "
  267. NEU_ALIAS="  Registering new aliases..."
  268. REG_ALIAS="    Registering aliases for "
  269. LOESCH_MT="Deleting outdated MailTIFFs"
  270. REG_MAIL="  Registering addresses stored in mails..."
  271. REG_NEWS="  Registering addresses stored in news..."
  272. ABGLEICH="  Comparing addresses of the MailTIFF database with the registered addresses..."
  273. KEIN_LOESCHEN="  No MailTIFFs to delete"
  274. LOESCH1="  Deleting 1 MailTIFF..."
  275. LOESCH_1="  Deleting "
  276. LOESCH_2=" MailTIFFs..."
  277. LOESCHE="    Deleting "
  278. LOESCH_FEHLER=" while deleting "
  279.  
  280. TEXT1="# User list
  281. # This file is generated automatically by mailDBupdate.in.\n
  282. # Mail.app will display only pictures of users listed here.
  283. # The name of the picture must be exactly that of the e-mail address
  284. # of the user (plus the suffix \".tiff\").
  285. # These users will also appear as Login Names in Mail.app's Addresses panel.\n\n\n
  286. # Users from the local network:\n"
  287. TEXT2="# Aliases for the mail addresses in passwd
  288. # This file is generated automatically by mailDBupdate.in.\n
  289. # If a picture and a passwd entry are available for the address
  290. # after the colon, this picture will be diplayed also for the
  291. # address before the colon.\n\n\n
  292. # Standard aliases for users from the local network;
  293. # needed for PersonalINN & Newsreader as well as Mail.app
  294. # in case of own postings returning from mailing lists
  295. # (given the default configuration of sendmail):\n"
  296. TEXT3="\n\n\n# Special aliases for users from the local network;
  297. # needed for Mail.app with special configurations of sendmail
  298. # or other special situations in case of own postings returning from
  299. # mailing lists:\n"
  300. TEXT4="\n\n\n# Users from the internet for which mail pictures are available:
  301. # (The data behind the colon mark in which month since January 1990
  302. # a mail or a news posting of this user had been stored for the
  303. # last time, and where (NA = this user had not been stored from
  304. # the beginning).\n"
  305. TEXT5="\n\n\n# Aliases for users from the internet who have more than one
  306. # email address; according to the file $DATABASE/aliases.in:\n"
  307. TEXT6="No DNS data available!
  308.  Please set up your domain name correctly in your NetInfo 
  309.  domain (/locations/resolver) or in /etc/resolv.conf."
  310. TEXT7="DOMAIN_NOT_CONFIGURED"
  311. TEXT8="# Aliases for users from the internet who have more than one
  312. # email address. Entries in this file may also be made manually in the
  313. # format \"Alias-Address: Address\", with \"Address\" being the email
  314. # address of the user that is also used in her MailTIFF (WITHOUT
  315. # \".tiff\" at the end!).\n\n\n"
  316.  
  317. fi
  318.  
  319.  
  320.  
  321.  
  322. ########################################################################################
  323. ## Basis-Einstellungen
  324. ########################################################################################
  325.  
  326. PROGNAME=$(basename $0)
  327. SPACE=" "
  328. TAB="    "
  329. NEWLINE="
  330. "
  331. DEFAULT_IFS=$NEWLINE    ### Leerzeichen und Tabs sind in Pfadnamen erlaubt
  332. IFS=$DEFAULT_IFS
  333.  
  334. if [ -d ~/.OpenStep ]; then        ### anderer Recycler-Pfad unter OPENSTEP
  335.     RECYCLER=/.OpenStep/.NextTrash
  336. fi
  337.  
  338.  
  339.  
  340.  
  341. ########################################################################################
  342. ## Log-Funktion
  343. ########################################################################################
  344.  
  345. logge()
  346. {
  347. echo $1 1>&1    ### 1>&1 ist wegen eines Bugs von zsh 2.5.02 nötig (andernfalls stoppt das Skript an dieser Stelle, wenn von cron aufgerufen)!
  348. echo $(date | awk '{printf("%s %2s %s",$2,$3,$4)}')" $HOST $PROGNAME""[$$]: $1" >>$DATABASE/log    ### [ nicht direkt an $PROGNAME, da das sonst Array-Variable!
  349. if [[ $2 = E ]]; then echo $(date | awk '{printf("%s %2s %s",$2,$3,$4)}')" $HOST $PROGNAME""[$$]: $1" >>/dev/console; fi
  350. }
  351.  
  352.  
  353.  
  354.  
  355. ########################################################################################
  356. ## Funktion zur Auswertung von NetInfo
  357. ########################################################################################
  358.  
  359. # Die folgende Funktion ermittelt aus NetInfo alle Nutzer einer vorgegebenen lokalen NetInfo-Domain
  360. # (oder der root-Domain, falls der 3. Parameter nicht angegeben wird), die eine dreistellige User-ID
  361. # und Ihr Heimverzeichnis nicht in /usr/template haben. Falls der erste Parameter y ist, trägt sie
  362. # diese Nutzer in passwd ein. In aliases trägt sie ein Alias von dem Nutzer mit voller Internet-Adresse
  363. # (Nutzer@Hostname_für_Mail-Alias.Rechner-Domain) auf den bloßen Nutzernamen ein. Falls der erste
  364. # Parameter nicht y ist, wird das Alias dem Array ALT_ALIAS zugefügt.
  365.  
  366. # FORMAT:   update   Regulärer_Hostname?_y_oder_n  Hostname_für_Mail-Alias  Hostname_für_NetInfo_Domain 
  367.  
  368. update()
  369. {        ### filtere Nutzer mit ein- oder zweistelligen User-IDs und solche aus /usr/template aus; entferne alles nach ":" von den restlichen
  370. nidump passwd /$3 | sed -e 's/.*:.*:.:.*:.*:.*:.*//' -e 's/.*:.*:..:.*:.*:.*:.*//' -e 's/.*:.*:.*:.*:.*:\/usr\/template.*:.*//' -e 's/:.*//' -e '/^$/d' | while read U_NUTZER
  371. do
  372.     if [[ -z "$2" ]]; then U_ALIAS="$U_NUTZER@$DOMAIN"
  373.     else U_ALIAS="$U_NUTZER@$2.$DOMAIN"; fi
  374.     echo "$U_ALIAS: $U_NUTZER" >> aliases
  375.     if [[ "$1" = "y" ]]; then echo $U_NUTZER: >> passwd
  376.     else ALT_ALIASES=($ALT_ALIASES $U_ALIAS); fi
  377. done
  378. }
  379.  
  380.  
  381.  
  382.  
  383. ########################################################################################
  384. ## Initialisierung der Variablen
  385. ########################################################################################
  386.  
  387. ### Ermittle Domain des Rechners aus NetInfo oder /etc/resolv.conf
  388. if [[ -n "$(nidump -r /locations /$HOST | grep resolver;)" ]]; then
  389.     DOMAIN=$(nidump -r /locations/resolver /$HOST | grep domain | sed -e 's/domain = "*//' -e 's/"*;//')    ### " manchmal vorhanden, manchmal nicht
  390. elif [[ -n "$(nidump -r /locations / | grep resolver;)" ]]; then
  391.     DOMAIN=$(nidump -r /locations/resolver / | grep domain | sed -e 's/domain = "*//' -e 's/"*;//')
  392. elif [[ -r /etc/resolv.conf ]]; then
  393.     DOMAIN=$(grep domain /etc/resolv.conf | sed -e "s%domain[$SPACE$TAB]*%%")
  394. else
  395.     logge $TEXT6 E
  396.     DOMAIN=$TEXT7
  397. fi
  398.  
  399.  
  400.  
  401. ### Werte Optionen aus
  402. while getopts :a:d:fhl:m:n:ot:x: OPT
  403. do
  404.     case $OPT in
  405.         a)    ALT_HOST=$OPTARG; ALT=1 ;;
  406.         d)    if [[ $(echo $OPTARG | tr -d 0-9) != "" ]]; then logge ""; logge $FALSCH_ARG$OPTARG E ; logge ""; echo $ANWENDUNG ; exit 1; fi
  407.             DELTIME=$OPTARG ;;
  408.         f)    DELTA=1 ;;
  409.         h)    echo "\n$ANWENDUNG"; exit ;;
  410.         l)    if [[ $(echo $OPTARG | tr -d 0-9) != "" ]]; then logge ""; logge $FALSCH_ARG$OPTARG E ; logge ""; echo $ANWENDUNG ; exit 1; fi
  411.             LOGZ=$OPTARG ;;
  412.         m)    if [[ $OPTARG[1] != "/" && $OPTARG != "0" ]]; then logge ""; logge $FALSCH_ARG$OPTARG E ; logge ""; echo $ANWENDUNG ; exit 1; fi
  413.             EMPFAD=$OPTARG ;;
  414.         n)    if [[ $OPTARG[1] != "/" && $OPTARG != "0" ]]; then logge ""; logge $FALSCH_ARG$OPTARG E ; logge ""; echo $ANWENDUNG ; exit 1; fi
  415.             INNPFAD=$OPTARG ;;
  416.         o)    OWN=1 ;;
  417.         t)    if [[ $(echo $OPTARG | tr -d 0-9) != "" ]]; then logge ""; logge $FALSCH_ARG$OPTARG E ; logge ""; echo $ANWENDUNG ; exit 1; fi
  418.             ZEIT=$OPTARG ;;
  419.         x)    if [[ $OPTARG[1] != "/" && $OPTARG != "" ]]; then logge ""; logge $FALSCH_ARG$OPTARG E ; logge ""; echo $ANWENDUNG ; exit 1; fi
  420.             NET=$OPTARG ;;
  421.         \?)    logge ""; logge $FALSCH_OPT$OPTARG E ; logge ""; echo $ANWENDUNG        
  422.             exit 1 ;;
  423.         :)    logge ""; logge $FEHL_ARG$OPTARG E ; logge ""; echo $ANWENDUNG
  424.             exit 1 ;;
  425.     esac
  426. done
  427. shift $(expr $OPTIND - 1)
  428. for LOC_HOST
  429. do
  430.     LOC_HOSTS=($LOC_HOSTS $LOC_HOST)
  431. done
  432.  
  433.  
  434.  
  435. ### Erstelle Listen der einzelnen Rechner-Domains und aller Nutzer-Heimverzeichnisse
  436. MYHOST=(/ $HOST)    ### root-Domain und eigene lokale Domain
  437. HOSTS=($MYHOST $LOC_HOSTS)    ### root-Domain, eigene lokale Domain und andere lokale Domains
  438. for H in $MYHOST    ### Heimverzeichnisse netzweiter Nutzer und der lokalen auf dem eigenen Rechner
  439. do
  440.     HOMES=($HOMES $(nidump passwd /$H | sed -e 's/.*:.*:.:.*:.*:.*:.*//' -e 's/.*:.*:..:.*:.*:.*:.*//' -e 's/.*:.*:.*:.*:.*:\/usr\/template.*:.*//' -e '/^$/d' | awk -F: '{print $6}'))
  441. done
  442.  
  443. for H in $LOC_HOSTS    ### Heimverzeichnisse lokaler Nutzer auf anderen als dem eigenen Rechner (/Net/rechnername wird dem lokalen Pfad vorangestellt)
  444. do
  445.     IFS=$SPACE; PFAD=$(eval echo $NET); IFS=$DEFAULT_IFS
  446.     HOMES=($HOMES $(nidump passwd /$H | sed -e 's/.*:.*:.:.*:.*:.*:.*//' -e 's/.*:.*:..:.*:.*:.*:.*//' -e 's/.*:.*:.*:.*:.*:\/usr\/template.*:.*//' -e '/^$/d' | awk -F: '{print $6}' | sed "s%^%$PFAD%"))
  447. done
  448.  
  449. if [[ $OWN = 1 ]]; then        ### nur Mailboxverzeichnisse auf dem eigenen Rechner (also nur mit "/Net/eigenerHost" oder ohne "/Net")
  450.     H=$HOST
  451.     IFS=$SPACE; PFAD=$(eval echo $NET); IFS=$DEFAULT_IFS
  452.     VERZEICHNIS=$(echo $PFAD | sed "s%$H\$%%")
  453.     MYHOMES=$(print -l $HOMES | grep "^$PFAD/")
  454.     MYHOMES=($MYHOMES $(print -l $HOMES | grep -v "^$VERZEICHNIS") )
  455.     HOMES=$MYHOMES
  456. fi
  457.  
  458.  
  459.  
  460. ### Setze aktuelles Verzeichnis
  461. cd $DATABASE
  462.  
  463.  
  464.  
  465. ### Überprüfe, ob seit dem letzten passwd-Update neue Bilder in das Verzeichnis kopiert wurden
  466. if [[ . -nt passwd || ! -a passwd ]]; then
  467. DELTA=1
  468. fi
  469.  
  470.  
  471.  
  472.  
  473. ########################################################################################
  474. ## Update der MailTIFF-Datenbank
  475. ########################################################################################
  476.  
  477. logge ""; logge $AKTUALISIERE;
  478.  
  479. ### Mache Backup der Internet-Nutzer; lege passwd und aliases mit Textvorspann neu an
  480. if [[ -r passwd ]]; then
  481.     USRS_IN=$(fgrep @ passwd)
  482.     else DELTA=1
  483. fi
  484. echo $TEXT1 > passwd
  485. echo $TEXT2 > aliases
  486.  
  487.  
  488.  
  489. ### Trage Nutzer des lokalen Netzwerks ein
  490. logge $NETINFO
  491.  
  492. # Trage netzweite und lokale Nutzer des eigenen Rechners und ggf.
  493. # lokale Nutzer weiterer Rechner des lokalen Netzes ein
  494. for H in $HOSTS
  495. do
  496.     update y $HOST $H
  497. done
  498.  
  499. # Falls mit -a gestartet, trage netzweite und lokale Nutzer des eigenen
  500. # Rechners und ggf. lokale Nutzer weiterer Rechner des lokalen Netzes mit
  501. # dem zusätzlichen Alias ein
  502. if [[ $ALT = 1 ]]; then
  503.     echo $TEXT3 >> aliases
  504.     for H in $HOSTS
  505.     do
  506.         update n "$ALT_HOST" $H
  507.     done
  508. fi
  509.  
  510.  
  511.  
  512. ### Kopiere MailTIFFs aus anderen Ordnern nach LocalLibrary/Images/People
  513. if [[ $EMPFAD != 0 ]]; then
  514. print -l $HOMES | sed -e "s%$%$EMPFAD%g" | while read DIR
  515.     do
  516.         if [[ -s $DIR/aliases.tiffs ]]; then
  517.             DELTA=1
  518.             logge $HOL_MT$DIR"..."
  519.             find $DIR -name '*.tiff' -size 0c -exec rm {} \;    ### Entferne Dateien mit 0 Byte (EnhanceMail erzeugt diese, falls keine Internet-Verbindung besteht, wenn es ein MailTIFF holen will)
  520.             < $DIR/aliases.tiffs | while read MTIFF 
  521.             do
  522.                 IFS=$SPACE; TIFF=($(echo $MTIFF)); IFS=$DEFAULT_IFS    ### Datenpaare sind durch Leerzeichen getrennt
  523.                 if [[ -w $DIR/$TIFF[1] ]]; then 
  524.                     logge $HOLE$TIFF[2]
  525.                     mv -f $DIR/$TIFF[1] ./$TIFF[2].tiff
  526.                     if [[ $? != 0 ]];then FEHLER=1; logge ""; logge $FEHLER1$ERRNO$HOL_FEHLER$TIFF[2] E; logge ""; fi
  527.                 fi
  528.             done
  529.             [[ $FEHLER = 1 ]] || rm $DIR/aliases.tiffs; FEHLER=0    ### falls Fehler auftrat, aliases.tiffs nicht löschen
  530.         fi
  531.     done
  532. fi
  533.  
  534.  
  535. ### Trage alle Internet-Nutzer, von denen Mail-TIFFs vorliegen, in passwd ein
  536. echo $TEXT4 >> passwd
  537. if [[ $DELTA = 1 && -n "$(find . -name '*@*.tiff' -print)" ]]; then        ### falls es Veränderungen im People-Ordner gab und TIFFs dort vorhanden sind
  538.     logge $INTERNET
  539.     ls | egrep '.+@.+tiff$' | sed 's/.tiff$/:/' > /tmp/tmp1    ### liste Internet-Nutzer in LocalLibrary/Images/People auf
  540.     echo "$USRS_IN" | join -a2 - /tmp/tmp1 >> passwd    ### ergänze die Daten aus passwd um neue Nutzer
  541.     for LOG in $(echo "$USRS_IN" | sed 's/:.*$/:/' | comm -13 - /tmp/tmp1 | sed -e 's/:$//' -e "s/^/$REGISTER/")
  542.     do
  543.     logge $LOG
  544.     done
  545. else
  546.     echo "$USRS_IN" >> passwd
  547. fi
  548.  
  549.  
  550.  
  551. ### Trage neue Internet-Aliases ein
  552. if [[ -s aliases.in ]]; then ALIASESIN=$(fgrep @ aliases.in); fi
  553. ALIASES=($(find . -name '*.aliases' -print | sed -e 's%^./%%' -e 's/.aliases$//'))    ### filtere das führende ./ (von find) und .aliases am Schluß aus
  554.  
  555. if [[ ${#ALIASES} != 0 ]]; then
  556.     logge $NEU_ALIAS
  557.     for A in $ALIASES
  558.     do
  559.         logge $REG_ALIAS$A
  560.         if [[ -r $A.aliases ]]; then
  561.             LOKAL=0;    ### Teste, ob Stammadresse einer alternativen lokalen Adresse entspricht (nur wenn Name UND alternative Domain gleich sind, darf diese weggelassen werden!)
  562.             for AAL in $ALT_ALIASES
  563.             do
  564.                 if [[ $AAL = $A ]]; then LOKAL=1; break; fi
  565.             done
  566.             if [[ $LOKAL = 1 ]]; then    ### falls ja, hänge Nutzer an; ersetze volle Stammadresse durch Nutzername; ansonsten wie unten
  567.                 NUTZER=$(echo $A | sed "s/@.*$//")
  568.                 ALIASESIN="$ALIASESIN\n$(sed -e "s/$/: $A/" -e "s/$A: $A//" -e "s/^ *: $A//" -e "s/$A/$NUTZER/" $A.aliases)\n"
  569.             else    ### sonst hänge Nutzer an; filtere mit Nutzer identische Aliases, Leerzeichen und Leerzeilen als Aliases aus; filtere für Aliases lokaler Nutzer eigene Domain aus
  570.                 ALIASESIN="$ALIASESIN\n$(sed -e "s/$/: $A/" -e "s/$A: $A//" -e "s/^ *: $A//" -e "s/@$HOST.$DOMAIN$//" $A.aliases)\n"
  571.             fi
  572.         else FEHLER=1; logge ""; logge $FEHLER1$ERRNO$EINTRAG_FEHLER$A E; logge ""; fi
  573.     done
  574. fi
  575.  
  576. echo "$TEXT8$(echo $ALIASESIN | sort | awk -F"\n" '$1 != prev { print $1; prev = $1 }')" > aliases.in    ### sortiere, sondere Dubletten aus, hänge Vorspann an
  577. if [[ $? != 0 ]]; then FEHLER=1; fi
  578. if [[ $FEHLER != 1 ]];then find . -name '*.aliases' -exec rm {} \; ; fi        ### falls Fehler auftrat, *.aliases-Dateien nicht löschen
  579.  
  580.  
  581.  
  582. ### Hänge Internet-Aliases an
  583. echo $TEXT5 >>aliases
  584. sed -e  's/#.*//' -e '/^$/d' < aliases.in >> aliases
  585.  
  586.  
  587.  
  588. ########################################################################################
  589. ## Löschen alter Bilder
  590. ########################################################################################
  591.  
  592. ### Ermittle Datum im Format "Monate seit Januar 1990"  (alternatives "date" benutzt deutsche Monate!)
  593. IFS=$SPACE    ### Leerzeichen wird als Separator für date benötigt
  594. set $(date -u)    ### nur bei -u kein zusätzliches Feld "DST" im Sommer
  595. IFS=$DEFAULT_IFS
  596. case $2 in
  597.     Jan    )    MONTH=0        ;;
  598.     Feb    )    MONTH=1        ;;
  599.     Mar    )    MONTH=2        ;;
  600.     Mär    )    MONTH=2        ;;
  601.     Apr    )    MONTH=3        ;;
  602.     May    )    MONTH=4        ;;
  603.     Mai    )    MONTH=4        ;;
  604.     Jun    )    MONTH=5        ;;
  605.     Jul    )    MONTH=6        ;;
  606.     Aug    )    MONTH=7        ;;
  607.     Sep    )    MONTH=8        ;;
  608.     Oct    )    MONTH=9        ;;
  609.     Okt    )    MONTH=9        ;;
  610.     Nov    )    MONTH=10    ;;
  611.     Dec    )    MONTH=11    ;;
  612.     Dez    )    MONTH=11    ;;
  613. esac
  614. ((DATE=($6-1990)*12+$MONTH))
  615.  
  616. ### Ermittle taggenaues Datum und Zeit seit dem letzten Löschvorgang
  617. ((DAY=$DATE*30+$3))
  618. if [[ -r .deleteMailTIFFs ]]; then LAST_DAY=$(< .deleteMailTIFFs)
  619. else
  620.     echo $DAY > .deleteMailTIFFs
  621.     LAST_DAY=0
  622. fi
  623. ((DIFF=$DAY-LAST_DAY))
  624.  
  625. ### starte Löschfunktion, falls $DELTIME Tage vergangen sind
  626. if [[ $DELTIME -ne 0 && $DIFF -ge $DELTIME ]] ; then
  627.     logge ""; logge $LOESCH_MT
  628.     limit datasize $DATASIZE"m"    ### vergrößere maximal zulässige Datengröße
  629.     
  630.     
  631.     
  632.     
  633.     ###### Lese die Mailbox-Inhaltsverzeichnisse ein ######
  634.     logge $REG_MAIL
  635.     
  636.     ### Liste die Mailboxverzeichnisse auf
  637.     MBX_DS=($(print -l $HOMES | sed -e "s%$%$MAILBOXES%g"))
  638.  
  639.     ### Liste Inhaltsverzeichnisse der Mailboxen auf
  640.     MTOCS=($(find $MBX_DS -name '*.attach' -prune -o -name table_of_contents -print))
  641.     
  642.     ### Liste die in den Inhaltsverzeichnissen befindlichen Mailadressen in /tmp/mailadr auf und füge : ans Ende
  643.     if [[ -n $MTOCS ]]; then
  644.         cat $MTOCS | strings | tr -cs 'a-zA-Z@._0-9-+' '\012' | egrep .+@.+ | sort | uniq | sed -e 's/$/:/' > /tmp/mailadr
  645.     else
  646.         echo -n > /tmp/mailadr
  647.     fi 
  648.     
  649.     ### Liste alle Mailbox-Adressen mit angehängtem Monat und (MAIL) in /tmp/mailadr.MAIL auf
  650.     sed -e "s/\$/ $DATE (MAIL)/" /tmp/mailadr > /tmp/mailadr.MAIL
  651.     
  652.     ### Liste zu allen Mailbox-Adressen, die als Aliases in aliases.in vorkommen, die zugehörigen Stammadressen mit angehängtem Monat und (MAIL ALIAS) in /tmp/mailadr.MAILALIAS auf
  653.     grep '@.*:' aliases.in | sort > /tmp/tmp1
  654.     join -o 1.2 /tmp/tmp1 /tmp/mailadr | sort | uniq | sed -e "s/\$/: $DATE (MAIL ALIAS)/" > /tmp/mailadr.MAILALIAS
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.     ###### Lese die Overview-Datenbank von PersonalINN ein ######
  662.     if [[ -d $INNPFAD ]]; then
  663.         logge $REG_NEWS
  664.     
  665.         ### Liste die Overview-Dateien auf
  666.         cd $INNPFAD
  667.         NOV=($(find . -type f -name $OVERVIEW -print))    ### entsprechend /NextDeveloper/Headers/ansi/limits.h maximal 40960 Bytes ~= 8000 Newsgruppen als Argument für cat möglich;
  668.         
  669.         ### Liste die in den Overview-Dateien befindlichen Mailadressen in /tmp/newsadr auf und füge : ans Ende
  670.         if [[ -n $NOV ]]; then
  671.             cat $NOV | awk -F"$TAB" '$3 != prev { print $3; prev = $3 }' | sed -e 's/^.*<//' -e 's/ *(.*$//' -e 's/>//' -e 's/$/:/' | sort | uniq > /tmp/newsadr
  672.         else
  673.             echo -n > /tmp/newsadr
  674.         fi
  675.         cd $DATABASE
  676.         
  677.         ### Liste alle News-Adressen mit angehängtem Monat und (NEWS) in /tmp/mailadr.NEWS auf
  678.         sed -e "s/\$/ $DATE (NEWS)/" /tmp/newsadr > /tmp/mailadr.NEWS
  679.     
  680.         ### Liste zu allen News-Adressen, die als Aliases in aliases.in vorkommen, die zugehörigen Stammadressen mit angehängtem Monat und (NEWS ALIAS) in /tmp/mailadr.NEWSALIAS auf
  681.         grep '@.*:' aliases.in | sort > /tmp/tmp1
  682.         join -o 1.2 /tmp/tmp1 /tmp/newsadr | sort | uniq | sed -e "s/\$/: $DATE (NEWS ALIAS)/" > /tmp/mailadr.NEWSALIAS
  683.         
  684.         ### Ergänze passwd um die in den News gefundenen Markierungen
  685.         logge $ABGLEICH
  686.         fgrep @ passwd > /tmp/tmp2 
  687.         join -a2 /tmp/mailadr.NEWSALIAS /tmp/tmp2 > /tmp/tmp1
  688.         join -a2 /tmp/mailadr.NEWS /tmp/tmp1 > /tmp/tmp2
  689.                 
  690.     else
  691.         logge $ABGLEICH
  692.         fgrep @ passwd > /tmp/tmp2
  693.     fi
  694.  
  695.  
  696.     ### Ergänze passwd um die in Mail gefundenen Markierungen    
  697.     join -a2 /tmp/mailadr.MAILALIAS /tmp/tmp2 > /tmp/tmp1
  698.     join -a2 /tmp/mailadr.MAIL /tmp/tmp1 > /tmp/tmp2
  699.  
  700.  
  701.     ### hänge (NA)-Markierung an (falls neuer Eintrag); lösche dann alle Markierungen bis auf die erste und trage in passwd ein
  702.     PASSWD=$(<passwd)
  703.     echo $PASSWD | fgrep -v @ > passwd
  704.     sed -e "s/\$/ $DATE (NA)/" -e 's/\(: [0-9]* ([^)]*)\).*$/\1/' /tmp/tmp2 >> passwd
  705.     
  706.  
  707.  
  708.  
  709.  
  710.  
  711.     ###### Lösche die MailTIFFs und zugehörige Aliases von Bildern, die länger als $ZEIT Monate nicht benötigt wurden ######
  712.     
  713.     PASSWD=$(<passwd)
  714.     VERALTET=($(echo $PASSWD | fgrep @ | awk $DATE' - $2 > '$ZEIT' {print $1}' | sed 's/:$//'))    ### erstelle Liste mit abgelaufenen Einrägen aus passwd, entferne ":"
  715.     NUMMER=${#VERALTET}
  716.         
  717.     if [[ $NUMMER = 0 ]]; then logge $KEIN_LOESCHEN
  718.     else 
  719.         if [[ $NUMMER = 1 ]]; then logge $LOESCH1
  720.         else logge $LOESCH_1$NUMMER$LOESCH_2
  721.         fi
  722.         ALIASESIN=$(< aliases.in)
  723.         for WEG in $VERALTET
  724.         do
  725.             logge $LOESCHE$WEG
  726.             mv -f $WEG.tiff ~$RECYCLER    ### verschiebe Tiff in Recycler
  727.             if [[ $? = 0 ]] ; then    ### falls TIFF erfolgreich gelöscht, entferne Einträge in aliases.in und passwd
  728.                 ALIASESIN=$(echo $ALIASESIN | fgrep -v $WEG)
  729.                 PASSWD=$(echo $PASSWD | fgrep -v $WEG)
  730.             else 
  731.                 logge ""; logge $FEHLER1$ERRNO$LOESCH_FEHLER$WEG E; logge ""
  732.             fi
  733.         done
  734.         echo $ALIASESIN >aliases.in
  735.     fi
  736.     echo $PASSWD >passwd
  737.     
  738.     echo $DAY > .deleteMailTIFFs
  739. fi
  740.  
  741.  
  742.  
  743.  
  744. ########################################################################################
  745. ## Stutze Log-Datei auf LOGZ Zeilen
  746. ########################################################################################
  747.  
  748. LOG=$(tail -$LOGZ log)    ### Zwischenspeicherung in Variable erforderlich, damit sich tail nicht selbst stört
  749. echo $LOG > log
  750.  
  751. logge ""
  752.