Autor Thema: Sendmail und Milter  (Gelesen 5703 mal)

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Sendmail und Milter
« am: 25. November 2008, 15:40:45 »
Hallo,

hat einer von euch erfahrungen mit milter sammeln koennen? ich spiele mich gerade mit milter-regex und bin an einen punkt gekommen an dem ich nicht mehr weiter weiss. basis ist solaris 9, die libmilter habe ich mir von blastwave geholt und milter-regex ohne fehler uebersetzen koennen. den milter-prozess starte ich mit
 /usr/local/bin/milter-regex -u root -c /etc/mail/milter-regex.conf -p /var/milter-regex/milter-regex.sock
und die socket-datei wird erstellt. ein 'ps -ef' zeigt mir, dass der prozess laeuft.
sendmail startet ohne fehler und nimmt mails anstandslos entgegen ohne dass die filter greifen. in den syslog-datein finde ich dann aber folgendes.

Nov 25 14:02:29 s_sys@ismine sendmail[28912]: [ID 702911 mail.info] starting daemon (8.12.9+Sun): SMTP+queueing@00:15:00
Nov 25 14:02:29 s_sys@ismine sendmail[28914]: [ID 702911 mail.info] starting daemon (8.12.9+Sun): queueing@00:15:00
Nov 25 14:02:55 s_sys@ismine sendmail[28924]: [ID 801593 mail.error] mAPD2tPM028924: milter_read(milter-regex): cmd read returned 0, expecting 5
Nov 25 14:02:55 s_sys@ismine sendmail[28924]: [ID 801593 mail.info] mAPD2tPM028924: Milter (milter-regex): to error state
Nov 25 14:02:55 s_sys@ismine sendmail[28924]: [ID 801593 mail.error] mAPD2tPM028924: Milter (milter-regex): init failed to open
Nov 25 14:02:55 s_sys@ismine sendmail[28924]: [ID 801593 mail.info] mAPD2tPM028924: Milter (milter-regex): to error state
Nov 25 14:03:25 s_sys@ismine sendmail[28924]: [ID 801593 mail.info] mAPD2tPM028924: from=affe, size=30, class=0, nrcpts=1, msgid=<200811251303.mAPD2tPM028924@ismine.rz-amper.com>, proto=SMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Nov 25 14:03:26 s_sys@ismine sendmail[28929]: [ID 801593 mail.info] mAPD2tPM028924: to=root, delay=00:00:15, xdelay=00:00:01, mailer=local, pri=30327, relay=local, dsn=2.0.0, stat=Sent

google bringt mich leider nicht wirklich weiter.

ct,

sonnenblen.de - Das unabhängige Sun User Forum

Sendmail und Milter
« am: 25. November 2008, 15:40:45 »

Offline Toktar

  • Sobl Master
  • ****
  • Beiträge: 333
Re: Sendmail und Milter
« Antwort #1 am: 25. November 2008, 18:57:51 »
Ich kann mich ja irren, aber wird sendmail nicht mit den Milterdirectiven kompiliert?

Zitat
/usr/sbin/sendmail -d0.12 -bv root

Version 8.13.4
 Compiled with: DNSMAP LOG MATCHGECOS MILTER .....
http://home.rhein-zeitung.de/~wwilhelm/milter.shtml

Toktar
--
Jawoll!
Und DNS braucht's nicht, das ist was fuer Weicheier, die sich keine Zahlen merken koennen.
[Karlheinz Boehme in dcsf]

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter
« Antwort #2 am: 26. November 2008, 08:53:16 »
Guten Morgen,

du hast recht. wenn man milter einsetzen will, dann muss bei sendmail die passende api mit uebersetzt werden. so wie ich das verstehe ist das bei dem sendmail, das bei solaris 9 mit dabei ist, auch der fall.

ismine~# /usr/lib/sendmail -d0.12 -bv root
Version 8.12.9+Sun
 Compiled with: DNSMAP LDAPMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8
                MIME8TO7 NAMED_BIND NDBM NETINET NETINET6 NETUNIX NEWDB NIS
                NISPLUS PIPELINING SCANF USERDB USE_LDAP_INIT XDEBUG
    OS Defines: HASFCHOWN HASFCHMOD HASGETUSERSHELL HASINITGROUPS
                HASLSTAT HASNICE HASRANDOM HASRRESVPORT HASSETREGID HASSETREUID
                HASSETRLIMIT HASSETSID HASSETVBUF HASURANDOMDEV HASSTRERROR
                HASULIMIT HASUNAME HASWAITPID IDENTPROTO IP_SRCROUTE
                SAFENFSPATHCONF SYS5SETPGRP SYSTEM5 USE_DOUBLE_FORK
                USE_SA_SIGACTION USE_SIGLONGJMP USESETEUID
Kernel symbols: /dev/ksyms
     Conf file: /etc/mail/submit.cf (default for MSP)
     Conf file: /etc/mail/sendmail.cf (default for MTA)
      Pid file: /var/run/sendmail.pid (default)
 libsm Defines: SM_CONF_GETOPT SM_CONF_LONGLONG SM_CONF_MEMCHR
                SM_CONF_MSG SM_CONF_SEM SM_CONF_SETITIMER SM_CONF_SIGSETJMP
                SM_CONF_SHM SM_CONF_SSIZE_T SM_CONF_STDDEF_H SM_CONF_UID_GID
                SM_HEAP_CHECK SM_OS=sm_os_sunos SM_VA_STD
Canonical name: ismine.rz-amper.com
        a.k.a.: ismine
 UUCP nodename: ismine
        a.k.a.: ismine
        a.k.a.: loghost
        a.k.a.: [192.168.2.12]
        a.k.a.: [127.0.0.1]
     Conf file: /etc/mail/sendmail.cf (selected)
      Pid file: /var/run/sendmail.pid (selected)

============ SYSTEM IDENTITY (after readcf) ============
      (short domain name) $w = ismine
  (canonical domain name) $j = ismine.rz-amper.com
         (subdomain name) $m = rz-amper.com
              (node name) $k = ismine
========================================================

root... deliverable: mailer local, user root
ismine~#

Sendmail bietet dann aber nur die api fuer verschiedene milter. einer davon ist 'milter-regex': http://www.benzedrine.cx/milter-regex.html. nur, dass bei mir die beiden mittels der socket-datei nicht mit einander reden wollen.
[ID 801593 mail.error] mAPD2tPM028924: milter_read(milter-regex): cmd read returned 0, expecting 5
[ID 801593 mail.info] mAPD2tPM028924: Milter (milter-regex): to error state
[ID 801593 mail.error] mAPD2tPM028924: Milter (milter-regex): init failed to open
[ID 801593 mail.info] mAPD2tPM028924: Milter (milter-regex): to error state

ct,

Offline Toktar

  • Sobl Master
  • ****
  • Beiträge: 333
Re: Sendmail und Milter
« Antwort #3 am: 26. November 2008, 11:59:53 »
Zitat
SENDMAIL CONFIGURATION
     The plugin needs to be registered in the sendmail(8) configuration, by
     adding the following lines to the .mc file

      INPUT_MAIL_FILTER(`milter-regex',
         `S=unix:/var/spool/milter-regex/sock, T=S:30s;R:2m')

     rebuilding /etc/mail/sendmail.cf from the .mc file using m4(1), and
     restarting sendmail(8).

Wurde die sendmail.cf wieder neu kompiliert?
Toktar
--
Jawoll!
Und DNS braucht's nicht, das ist was fuer Weicheier, die sich keine Zahlen merken koennen.
[Karlheinz Boehme in dcsf]

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter
« Antwort #4 am: 26. November 2008, 20:12:16 »
ja klar. meine .mc datei hatte ich angepasst und die sendmail.cf mittels m4 neu schreiben lassen. wenn ich den eintrag entferne und sendmail neu starte bekomme ich auch keine fehlermeldungen mehr. ich denke somit, dass sendmail die api benutzen kann aber irgendwas mit der socket-datei nicht passt.

ct,

sonnenblen.de - Das unabhängige Sun User Forum

Re: Sendmail und Milter
« Antwort #4 am: 26. November 2008, 20:12:16 »

Offline Toktar

  • Sobl Master
  • ****
  • Beiträge: 333
Re: Sendmail und Milter
« Antwort #5 am: 27. November 2008, 10:00:39 »
Hast Du die Möglichkeit tiefer zu debuggen? Sendmail bringt jede Menge Debug-Optionen mit, Milter ebenso (milter-regex-debuginfo: Debug information for package milter-regex).

Was mir noch aufgefallen ist, die Pipe in Deinem Startbefehl ist irgendwie unvollständig.

-p /var/milter-regex/milter-regex.sock
-p pipe' Use the specified pipe to interface sendmail(8). Default is unix:/var/spool/milter-regex/sock.
In anderen Startscripten hab ich auch schon soetwas gesehen.

# configuration file
CONF=/etc/mail/milter-regex.conf
SOCKET=local:/var/milter/milter-regex.sock
...
${MILTERDIR}/sbin/milter-regex -c $CONF $OPT -p ${SOCKET}

Toktar
--
Jawoll!
Und DNS braucht's nicht, das ist was fuer Weicheier, die sich keine Zahlen merken koennen.
[Karlheinz Boehme in dcsf]

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter
« Antwort #6 am: 27. November 2008, 11:31:23 »
Hallo Toktar,

danke fuer deine hilfe und dein wachsames auge.-) so wie's aussieht hat's am fehlenden "local:/var..." vor der pfadangabe fuer die socketdatei gelegen. ich habe das log_level fuer sendmail und milter-regex immer noch auf 15 und bekomme nun folgendes ins syslog:
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] NOQUEUE: connect from ismine.rz-amper.com [192.168.2.12]
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.error] mARAGvoQ027102: milter_read(milter-regex): cmd read returned 0, expecting 5
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: Milter (milter-regex): to error state
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.error] mARAGvoQ027102: Milter (milter-regex): init failed to open
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: Milter (milter-regex): to error state
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: Milter: connect to filters
Nov 27 11:16:57 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: --- 220 rz-amper.homeunix.net ESMTP Commodore Int. ESMTP Service believe that youre a stupid Fuck'
Nov 27 11:17:01 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: <-- helo affe
Nov 27 11:17:01 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: --- 250 ismine.rz-amper.com Hello ismine.rz-amper.com [192.168.2.12], pleased to meet you
Nov 27 11:17:07 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: <-- mail from:affe
Nov 27 11:17:07 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: Milter: senders: affe
Nov 27 11:17:07 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: --- 250 2.1.0 affe... Sender ok
Nov 27 11:17:11 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: <-- rcpt to:root
Nov 27 11:17:11 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: Milter: rcpts: root
Nov 27 11:17:11 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: --- 250 2.1.5 root... Recipient ok
Nov 27 11:17:14 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: <-- data
Nov 27 11:17:14 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: --- 354 Enter mail, end with "." on a line by itself
Nov 27 11:17:36 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: from=affe, size=51, class=0, nrcpts=1, msgid=<200811271017.mARAGvoQ027102@ismine.rz-amper.com>, proto=SMTP, daemon=MTA-v4, relay=ismine.rz-amper.com [192.168.2.12]
Nov 27 11:17:36 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: Milter accept: message
Nov 27 11:17:36 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoQ027102: --- 250 2.0.0 mARAGvoQ027102 Message accepted for delivery
Nov 27 11:17:36 s_sys@ismine sendmail[27106]: [ID 801593 mail.info] mARAGvoQ027102: to=root, delay=00:00:25, xdelay=00:00:00, mailer=local, pri=30361, relay=local, dsn=2.0.0, stat=Sent
Nov 27 11:17:36 s_sys@ismine sendmail[27106]: [ID 801593 mail.info] mARAGvoQ027102: done; delay=00:00:25, ntries=1
Nov 27 11:17:38 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoR027102: <-- quit
Nov 27 11:17:38 s_sys@ismine sendmail[27102]: [ID 801593 mail.info] mARAGvoR027102: --- 221 2.0.0 ismine.rz-amper.com closing connection

das lustige ist, dass ich mein init-skript von dem init-skript, welches bei milter-regex mit als beispiel dabei war, abgeschrieben habe.
...
...
configfile="/etc/mail/milter-regex.conf"
basedir="/var/milter-regex"
# pidfile="$basedir/milter-regex.pid"
socket="$basedir/milter-regex.sock"
user="mailregx"
OPTIONS="-c $configfile -u $user -p $socket"
...
...
/usr/bin/milter-regex $OPTIONS
so wie ich das lese kommt am ende ein "-p /var..." heraus.

ct,

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Sendmail und Milter - die 2te
« Antwort #7 am: 27. November 2008, 13:45:28 »
und wieder mal das leidige thema mit dem ubersetzen von quellen unter solaris.
folgenden milter versuche ich zu uebersetzen: http://alexey-pushkin.narod.ru/

und bekomme folgendes
ismine/Download/milter/20080707/src# gcc -I/usr/lib -I/usr/local/lib -I/usr/include -I/usr/local/include -o mail-dump.solaris mail-dump.c /usr/local/lib/libmilter.a libsm.a -pthread
gcc: unrecognized option `-pthread'
Undefined                       first referenced
 symbol                             in file
socket                              /usr/local/lib/libmilter.a(listener.o)
getipnodebyname                     /usr/local/lib/libmilter.a(sm_gethost.o)
accept                              /usr/local/lib/libmilter.a(listener.o)
in6addr_any                         /usr/local/lib/libmilter.a(listener.o)
bind                                /usr/local/lib/libmilter.a(listener.o)
setsockopt                          /usr/local/lib/libmilter.a(listener.o)
h_errno                             /usr/local/lib/libmilter.a(sm_gethost.o)
getservbyname                       /usr/local/lib/libmilter.a(listener.o)
inet_aton                           /usr/local/lib/libmilter.a(engine.o)
inet_pton                           /usr/local/lib/libmilter.a(sm_gethost.o)
inet_addr                           /usr/local/lib/libmilter.a(listener.o)
freehostent                         /usr/local/lib/libmilter.a(listener.o)
listen                              /usr/local/lib/libmilter.a(listener.o)
ld: fatal: Symbol referencing errors. No output written to mail-dump.solaris
collect2: ld returned 1 exit status
ismine/Download/milter/20080707/src#

ct,

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter - die 2te
« Antwort #8 am: 27. November 2008, 14:02:26 »
oops, da ist doch was nicht richtig mit den -I optionen. gut, das ganze noch mal und diesmal ein anderer fehler.

ismine/Download/milter/20080707/src# gcc -I/usr/lib -I/opt/csw/lib -I/usr/include -I/opt/csw/include -o mail-dump.solaris mail-dump.c /opt/csw/lib/libmilter.a libsm.a
mail-dump.c:16: error: redefinition of typedef 'bool'
/opt/csw/include/libmilter/mfapi.h:91: error: previous declaration of 'bool' was here
ismine/Download/milter/20080707/src#

ct,

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter - die 2te
« Antwort #9 am: 27. November 2008, 15:10:55 »
vom entwickler habe ich folgende antwort bekommen:
  Hi.
  Maybe remove line#16 from mail-dump.c.
  because really in mfapi.h have line with "typedef int bool".

das bringt mich aber wieder zu dem fehler den ich am anfang hatte.
ismine/Download/milter/20080707/src# gcc -I/usr/lib -I/opt/csw/lib -I/usr/include -I/opt/csw/include -o mail-dump.solaris mail-dump.c /opt/csw/lib/libmilter.a libsm.a
Undefined                       first referenced
 symbol                             in file
socket                              /opt/csw/lib/libmilter.a(listener.o)
getipnodebyname                     /opt/csw/lib/libmilter.a(sm_gethost.o)
accept                              /opt/csw/lib/libmilter.a(listener.o)
in6addr_any                         /opt/csw/lib/libmilter.a(listener.o)
bind                                /opt/csw/lib/libmilter.a(listener.o)
setsockopt                          /opt/csw/lib/libmilter.a(listener.o)
h_errno                             /opt/csw/lib/libmilter.a(sm_gethost.o)
getservbyname                       /opt/csw/lib/libmilter.a(listener.o)
inet_aton                           /opt/csw/lib/libmilter.a(engine.o)
inet_pton                           /opt/csw/lib/libmilter.a(sm_gethost.o)
inet_addr                           /opt/csw/lib/libmilter.a(listener.o)
freehostent                         /opt/csw/lib/libmilter.a(listener.o)
listen                              /opt/csw/lib/libmilter.a(listener.o)
ld: fatal: Symbol referencing errors. No output written to mail-dump.solaris
collect2: ld returned 1 exit status
ismine/Download/milter/20080707/src#

ct,

sonnenblen.de - Das unabhängige Sun User Forum

Re: Sendmail und Milter - die 2te
« Antwort #9 am: 27. November 2008, 15:10:55 »

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Re: Sendmail und Milter
« Antwort #10 am: 27. November 2008, 17:32:02 »
gcc ... -pthread wirft deswegen einen Fehler, weil es gcc ... -lpthread heißen müßte. Damit bindest du die POSIX-Threads-Bibliothek ein. Aber wahrscheinlich brauchst du die sowieso nicht, denn beim zweiten Aufruf hast du sie weggelassen und der GCC beschwert sich trotzdem nicht, daß irgendwelche Thread-Sachen fehlen würden.

Was du aber brauchst, sind die Bibliotheken, in denen das Netzwerkzeug drin ist. Also die ganzen Sachen, die in deinem letzten Post unter "Undefined symbol" aufgelistet sind. Ich kann im Moment nicht nachgucken, aber wenn ich mich recht erinnere, bekommst du die alle mittels -lnsl und/oder -lsocket.

EDIT: Mir fällt gerade noch auf, daß du hinter einigen deiner -I auch Verzeichnisse namens lib stehen hast. Das ist nicht sinnvoll, denn mit -I  sagst du dem GCC, wo er zusätzliche Header-Dateien finden kann. Diese befinden sich aber normalerweise in Verzeichnissen mit dem Namen include.

In lib dagegen liegen Bibliotheken, die man mit -l... einbinden kann. Um dem GCC jetzt noch zu sagen, wo er eine mittels -l... eingebundene Bibliothek finden kann, muß man -L benutzen.

Tja, alles nicht so einfach.  ;)
« Letzte Änderung: 27. November 2008, 17:38:47 von Padde »

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter
« Antwort #11 am: 27. November 2008, 20:51:37 »
@Foren-Admin/Moderator
waren das nicht zwei verschiedene Freds? ich habe den ersten geschlossen nachdem der fehler, der nichts mit dem uebersetzen von quellen zu tun hatte, gefunden und geloest wurde. den zweiten fred habe ich geoeffnet da ich probleme beim uebersetzen habe und zum anderen es sich um ein anderes programm handelt. anyway, soll mir auch recht sein.

@Padde
werde ich gleich mal ausprobieren.

ct,

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter
« Antwort #12 am: 27. November 2008, 21:03:29 »
grrr, ich werd wohl nen c-kurs an der vhs belegen muessen. oder ich lass das meine tochter machen, da ich offensichtlich zu doof fuer das ganze bin.

ismine/Download/milter/20080707/src# gcc -I/usr/include -I/opt/csw/include -o mail-dump.solaris mail-dump.c /opt/csw/lib/libmilter.a libsm.a -lpthread
Undefined                       first referenced
 symbol                             in file
socket                              /opt/csw/lib/libmilter.a(listener.o)
getipnodebyname                     /opt/csw/lib/libmilter.a(sm_gethost.o)
accept                              /opt/csw/lib/libmilter.a(listener.o)
in6addr_any                         /opt/csw/lib/libmilter.a(listener.o)
bind                                /opt/csw/lib/libmilter.a(listener.o)
setsockopt                          /opt/csw/lib/libmilter.a(listener.o)
h_errno                             /opt/csw/lib/libmilter.a(sm_gethost.o)
getservbyname                       /opt/csw/lib/libmilter.a(listener.o)
inet_aton                           /opt/csw/lib/libmilter.a(engine.o)
inet_pton                           /opt/csw/lib/libmilter.a(sm_gethost.o)
inet_addr                           /opt/csw/lib/libmilter.a(listener.o)
freehostent                         /opt/csw/lib/libmilter.a(listener.o)
listen                              /opt/csw/lib/libmilter.a(listener.o)
ld: fatal: Symbol referencing errors. No output written to mail-dump.solaris
collect2: ld returned 1 exit status

ct,

Offline Padde

  • Sobl Bachelor
  • ***
  • Beiträge: 135
  • Hier könnte Ihre Werbung stehen!
Re: Sendmail und Milter
« Antwort #13 am: 28. November 2008, 03:46:51 »
Du hast immer noch nicht die Bibliotheken für den ganzen Netzwerkkrempel (d.h. socket(), getipnodebyname(), accept() usw.) eingebunden. Du mußt also immer noch -lnsl und -lsocket einbinden.

(Vorhin war ich mir ja noch nicht ganz sicher, aber ich habe gerade in einem meiner eigenen Makefiles nachgesehen und es handelt sich tatsächlich um -lnsl und -lsocket. Das kann ich mir nie behalten.)

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Sendmail und Milter
« Antwort #14 am: 28. November 2008, 08:45:46 »
@Padde
danke fuer die info. folgendes hat mich ans ziel gefuehrt:
gcc -I/usr/include -I/opt/csw/include -o mail-dump.solaris mail-dump.c /opt/csw/lib/libmilter.a libsm.a -lpthread -lsocket -lnsl -lresolv

ct,