Re: [Dovecot] Dovecot 2.1.16
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 On Mon, 25 Nov 2013, paolo.brocchi wrote: I would like to have in INBOX folder some emails (e.g email with a header key). The same emails i would like to have into the folders, under INBOX, create by users. Could you be more verbose please, perhaps with an example. I suppose you need a Sieve script like if header XYZ ABC { fileinto ...; } ... But I possibly misunderstand you. - -- Steffen Kaiser -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.11 (GNU/Linux) iQEVAwUBUpRi0V3r2wJMiz2NAQJj4ggAqu78SksjqPdJl6Dqwk4Bo5PjG+s+g736 oQPLeuIsrTjcrnaxIAiLEMaqs4hDgCsvdiFm9RgJAoWG5VbeRuAkjXJb0kPGCh7M Fg49uduUe6FDqLSfdHTKf3rTe0K29pzIuVeKLJViE24cEZeduNKVqT0PiwSmEcXH Nao+Gk9n4RGlJsBxyVl1xHyACEyaZYl2h8E7nwxbZEvyVpGyUkyjjg/qKn+y4iuT soz4ZI4I0leVwm06CsjJcvDCQou7PMZWPjYkzjs79UH7Qkvqp1REwkt8peEOma55 2IJWROC88k6bWQI1e1wVEef67uOireMNk/OvMhf1zeTgSq0kuswAWw== =wGao -END PGP SIGNATURE-
[Dovecot] Replication master/master
Hello, i need help for this error: dovecot: replicator: Error: Invalid replicator db record: my config http://pastebin.com/jVnvyWZM -- Best Regards, Evgeny Senior System Administrator OOO Vaz Service Hurley
Re: [Dovecot] Dovecot 2.1.16
Hi,for example in INBOX i would like to have only email with header = , but if a user create a or more folders under INBOX i woluld like to have the same email that i show into INBOX.Thanks Paolo Da: dovecot-boun...@dovecot.org A: paolo.brocchi paolo.broc...@staff.aruba.it Cc: dovecot@dovecot.org Data: Tue, 26 Nov 2013 09:58:56 +0100 (CET) Oggetto: Re: [Dovecot] Dovecot 2.1.16 -BEGIN PGP SIGNED MESSAGE- Hash: SHA1 On Mon, 25 Nov 2013, paolo.brocchi wrote: I would like to have in INBOX folder some emails (e.g email with a header key). The same emails i would like to have into the folders, under INBOX, create by users. Could you be more verbose please, perhaps with an example. I suppose you need a Sieve script like if header XYZ ABC { fileinto ...; } ... But I possibly misunderstand you. - -- Steffen Kaiser -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.11 (GNU/Linux) iQEVAwUBUpRi0V3r2wJMiz2NAQJj4ggAqu78SksjqPdJl6Dqwk4Bo5PjG+s+g736 oQPLeuIsrTjcrnaxIAiLEMaqs4hDgCsvdiFm9RgJAoWG5VbeRuAkjXJb0kPGCh7M Fg49uduUe6FDqLSfdHTKf3rTe0K29pzIuVeKLJViE24cEZeduNKVqT0PiwSmEcXH Nao+Gk9n4RGlJsBxyVl1xHyACEyaZYl2h8E7nwxbZEvyVpGyUkyjjg/qKn+y4iuT soz4ZI4I0leVwm06CsjJcvDCQou7PMZWPjYkzjs79UH7Qkvqp1REwkt8peEOma55 2IJWROC88k6bWQI1e1wVEef67uOireMNk/OvMhf1zeTgSq0kuswAWw== =wGao -END PGP SIGNATURE-
[Dovecot] Failute to compile of pigeonhole-0.4.2 with Dovecot 2.2.7
On trying to compile pigeonhole-0.4.2 on Dovecot 2.2.7 on a CentOS 6.4 machine Linux xxx.xxx 2.6.32-358.14.1.el6.x86_64 #1 SMP Tue Jul 16 23:51:20 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux with ./configure --with-dovecot=/usr/local/lib/dovecot I get the following error: /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/include/dovecot -I../.. -I../../src/lib-sieve -std=gnu99 -g -O2 -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -fno-builtin-strftime -Wstrict-aliasing=2 -MT sieve-storage.lo -MD -MP -MF .deps/sieve-storage.Tpo -c -o sieve-storage.lo sieve-storage.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/include/dovecot -I../.. -I../../src/lib-sieve -std=gnu99 -g -O2 -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -fno-builtin-strftime -Wstrict-aliasing=2 -MT sieve-storage.lo -MD -MP -MF .deps/sieve-storage.Tpo -c sieve-storage.c -fPIC -DPIC -o .libs/sieve-storage.o sieve-storage.c: In function 'sieve_storage_inbox_script_attribute_set': sieve-storage.c:702: error: 'MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER' undeclared (first use in this function) sieve-storage.c:702: error: (Each undeclared identifier is reported only once sieve-storage.c:702: error: for each function it appears in.) sieve-storage.c:702: error: expected ')' before string constant sieve-storage.c:693: warning: unused parameter 'name' sieve-storage.c: In function 'sieve_storage_inbox_script_attribute_rename': sieve-storage.c:718: error: 'MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER' undeclared (first use in this function) sieve-storage.c:718: error: expected ')' before string constant sieve-storage.c:720: error: expected ')' before string constant sieve-storage.c:709: warning: unused parameter 'oldname' sieve-storage.c:709: warning: unused parameter 'newname' sieve-storage.c: In function 'sieve_storage_inbox_script_attribute_unset': sieve-storage.c:738: error: 'MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER' undeclared (first use in this function) sieve-storage.c:738: error: expected ')' before string constant sieve-storage.c:729: warning: unused parameter 'name' make[3]: *** [sieve-storage.lo] Error 1 make[3]: Leaving directory `/root/dovecot-2.2-pigeonhole-0.4.2/src/lib-sievestorage' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/root/dovecot-2.2-pigeonhole-0.4.2/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/dovecot-2.2-pigeonhole-0.4.2' make: *** [all] Error 2 Dovecot 2.2.7 compiles and runs fine. Any help appreciated. Andreas
[Dovecot] Dovecot software testing and release practice
Since this, it seems, was lost in, the now infamous, 2.2.9 thread I would like to resubmit the following proposal for Timo's consideration. Thanks Timo for doing an excellent job. I believe that the following will add further value to Dovecot in the long run. Thankx Andreas On 23-11-2013 3:47, Noel Butler wrote: On Fri, 2013-11-22 at 10:14 +0100, Ralf Hildebrandt wrote: * Thomas Leuxner t...@leuxner.net: * Ralf Hildebrandt ralf.hildebra...@charite.de 2013.11.22 09:44: Which patch? http://www.dovecot.org/list/dovecot/2013-November/093654.html Pigeonhole related patches. Damn. Those are biting me as well :/ These would be found if Timo reverted back to issuing RC's before any official release, to iron out the niggly off-putting bugs, like most software does, or gets his devs and a community of official testerseach with wildly different configurations and set ups, ASF have an excellent model that could be followed, bunch of devs and testers who each report on different distros and configs, why? because no single dev can imagine and test every possible configuration. it might just save dovecot's good name, I recall a lot of damage was done to that in the circles I'm in when 2.0 was released with patches nearly every few days and weeks, I know a few ISP's and businesses that went back to courier or Wu's because major bugs were getting in often, though it has been a lot better since 2.1 series, until this release that is :) I second this and offer my services for two, three different system configs from Dovecot's plain old simple config with MAILDIR to slightly more complicated configurations with proxying/LDAP/dsync/mySQL etc based on virtualization with KVM. I also propose that upon employing above strategy that Timo should come up with a release cycles (long term, short term) with announced targets. Patches should be released as patches strictly as needed, not releases, and should be announced on a low traffic list like he is already doing with releases. OR something along these lines. I know these are growing pains but essential. Email systems are CRITICAL for most of us. Andreas
Re: [Dovecot] Failute to compile of pigeonhole-0.4.2 with Dovecot 2.2.7
On 11/26/2013 3:27 PM, Andreas Kasenides wrote: On trying to compile pigeonhole-0.4.2 on Dovecot 2.2.7 on a CentOS 6.4 machine Linux xxx.xxx 2.6.32-358.14.1.el6.x86_64 #1 SMP Tue Jul 16 23:51:20 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux with ./configure --with-dovecot=/usr/local/lib/dovecot I get the following error: /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/include/dovecot -I../.. -I../../src/lib-sieve -std=gnu99 -g -O2 -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -fno-builtin-strftime -Wstrict-aliasing=2 -MT sieve-storage.lo -MD -MP -MF .deps/sieve-storage.Tpo -c -o sieve-storage.lo sieve-storage.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/include/dovecot -I../.. -I../../src/lib-sieve -std=gnu99 -g -O2 -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -fno-builtin-strftime -Wstrict-aliasing=2 -MT sieve-storage.lo -MD -MP -MF .deps/sieve-storage.Tpo -c sieve-storage.c -fPIC -DPIC -o .libs/sieve-storage.o sieve-storage.c: In function 'sieve_storage_inbox_script_attribute_set': sieve-storage.c:702: error: 'MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER' undeclared (first use in this function) sieve-storage.c:702: error: (Each undeclared identifier is reported only once sieve-storage.c:702: error: for each function it appears in.) sieve-storage.c:702: error: expected ')' before string constant sieve-storage.c:693: warning: unused parameter 'name' sieve-storage.c: In function 'sieve_storage_inbox_script_attribute_rename': sieve-storage.c:718: error: 'MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER' undeclared (first use in this function) sieve-storage.c:718: error: expected ')' before string constant sieve-storage.c:720: error: expected ')' before string constant sieve-storage.c:709: warning: unused parameter 'oldname' sieve-storage.c:709: warning: unused parameter 'newname' sieve-storage.c: In function 'sieve_storage_inbox_script_attribute_unset': sieve-storage.c:738: error: 'MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT_SERVER' undeclared (first use in this function) sieve-storage.c:738: error: expected ')' before string constant sieve-storage.c:729: warning: unused parameter 'name' make[3]: *** [sieve-storage.lo] Error 1 make[3]: Leaving directory `/root/dovecot-2.2-pigeonhole-0.4.2/src/lib-sievestorage' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/root/dovecot-2.2-pigeonhole-0.4.2/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/dovecot-2.2-pigeonhole-0.4.2' make: *** [all] Error 2 I tried this here and I cannot reproduce this problem. It looks as though your installed dovecot at /usr/local/lib/dovecot is older than 2.2.7. Can you verify? What happens if you point it directly at your compiled Dovecot source tree? Regards, Stephan.
[Dovecot] Dovecot 2.1 Panic
Hi, Dovecot 2.1.12 sends panic message when it tries to authenticate some users. Apparently because they use different authentication mechanisms on different email clients at the same time. For example, in debug logs this user uses CRAM-MD5, NTLM and PLAIN in account settings of his email clients. All passwords are stored in plain text (base64) in LDAP. Please advise me what I can tweak to fix this issue ? Nov 27 06:38:36 dovecot-1 auth: Error: ldap(g...@in.com.au,201.45.21.151,qZlhoBnsvQDLLRuX): Multiple password values not supported Nov 27 06:38:36 dovecot-1 auth: Panic: file passdb-ldap.c: line 95 (ldap_lookup_finish): assertion failed: (password == NULL || scheme != NULL) Nov 27 06:38:36 dovecot-1 auth: Error: ldap(g...@in.com.au,201.45.21.151,qZlhoBnsvQDLLRuX): Multiple password values not supported Nov 27 06:38:36 dovecot-1 auth: Error: Raw backtrace: /usr/local/dovecot/lib/dovecot/libdovecot.so.0(+0x485ca) [0x7f90ed51b5ca] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(+0x48616) [0x7f90ed51b616] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(i_error+0) [0x7f90ed4f] - dovecot-proxy/auth() [0x42967c] - dovecot-proxy/auth() [0x428da1] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(io_loop_call_io+0x36) [0x7f90ed5277a6] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(io_loop_handler_run+0x9f) [0x7f90ed5287df] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(io_loop_run+0x28) [0x7f90ed527748] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(master_service_run+0x13) [0x7f90ed513123] - dovecot-proxy/auth(main+0x376) [0x41bd26] - /lib/libc.so.6(__libc_start_main+0xfd) [0x7f90ec2d8c8d] - dovecot-proxy/auth() [0x40d0f9] Nov 27 06:38:36 dovecot-1 auth: Error: Raw backtrace: /usr/local/dovecot/lib/dovecot/libdovecot.so.0(+0x485ca) [0x7f90ed51b5ca] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(+0x48616) [0x7f90ed51b616] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(i_error+0) [0x7f90ed4f] - dovecot-proxy/auth() [0x42967c] - dovecot-proxy/auth() [0x428da1] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(io_loop_call_io+0x36) [0x7f90ed5277a6] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(io_loop_handler_run+0x9f) [0x7f90ed5287df] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(io_loop_run+0x28) [0x7f90ed527748] - /usr/local/dovecot/lib/dovecot/libdovecot.so.0(master_service_run+0x13) [0x7f90ed513123] - dovecot- proxy/auth(main+0x376) [0x41bd26] - /lib/libc.so.6(__libc_start_main+0xfd) [0x7f90ec2d8c8d] - dovecot-proxy/auth() [0x40d0f9] Nov 27 06:38:36 dovecot-1 director: Error: Auth server disconnected unexpectedly Nov 27 06:38:36 dovecot-1 auth: Fatal: master: service(auth): child 26841 killed with signal 6 (core dumps disabled) This is LDAP configuration on one of director servers where clients are authenticated. uris = ldap://ldap-node-2.mynetwork.net, ldap://ldap-node-3.mynetwork.net debug_level = 0 base = ou=email, dc=netregistry, dc=net user_attrs = homeDirectory=home, uidNumber=uid, gidNumber=gid, mailQuotaSize=quota_rule=*:storage=%$ user_filter = ((objectClass=nrPOPAccount)(uid=%u)) pass_attrs = uid=user, userPassword=password, =proxy=y, =destuser=%u, =pass=Secret456 pass_filter = ((objectClass=nrPOPAccount)(uid=%u)) default_pass_scheme = PLAIN Regards, Alexandr Sabitov System Administrator
[Dovecot] proxy_maybe director incompatibility
inline: image001.jpg
Re: [Dovecot] Dovecot 2.1.16
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 On Tue, 26 Nov 2013, paolo.brocchi wrote: Hi,for example in INBOX i would like to have only email with header = , but if a user create a or more folders under INBOX i woluld like to have the same email that i show into INBOX.Thanks Paolo Hmm. What about an example? 1) on delivery: you want all emails, that do _not_ have a specific header, deleted, aka not filed into any mailbox and 2) if someone has created any sub-mailboxes under the INBOX, say INBOX.folder1 and INBOX.folder2, you want to show up all these messages in your INBOX as well? On Mon, 25 Nov 2013, paolo.brocchi wrote: I would like to have in INBOX folder some emails (e.g email with a header key). The same emails i would like to have into the folders, under INBOX, create by users. Could you be more verbose please, perhaps with an example. I suppose you need a Sieve script like if header XYZ ABC { fileinto ...; } ... But I possibly misunderstand you. - -- Steffen Kaiser -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.11 (GNU/Linux) iQEVAwUBUpWbyF3r2wJMiz2NAQIUYgf8DY1g1fkTIHTNbZ/K358LUYVQyl1o5KdN 4y8rZV+nuW4jD02+0+JH5WtQphcFfJB0dkLQ2J4hZGaRYNR3m897swsL+qe2Uwwm nph5KDZ+rWHaGzGqEjkngrHqb0CoJ1hs0+7ntJB2u6x9ZWorN4hDDGQ5rQpHEWYH pXxCjkKh1WMAJEhu2STfTKWS08Ac+eoHl8SolHWK3qk4+CQIHDXd5eYjm6OmfdSW jlElEaXGOy6zOyCFbkcwT7WUHxzzQ2H3FWoW7OzzXrtYyHwkOAmqVZ9YLKCECjrb 7pu3OJ3Ka3jTEmbpqUYy45d17SYYx0x4xcDM9MVG0DqG4LRkBWMFgQ== =2SAL -END PGP SIGNATURE-
[Dovecot] Permissions problems
Hi, I have dovecot 2.0.20 running (its an old version, I know, it came from the stable archive at OpenCSW) with Solaris SMF integration working fine. It enables and disables okay. However, I cantt connect to it, it is allowing the connection, but spewing on permissions: Nov 24 17:34:20 proliant-1 dovecot: [ID 583609 mail.info] master: Dovecot v2.0.20 starting up Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.info] imap-login: Login: user=mark, method=PLAIN, rip=192.168.1.69, lip=192.168.1.72, mpid=18816 Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.info] imap-login: Login: user=mark, method=PLAIN, rip=192.168.1.69, lip=192.168.1.72, mpid=18818 Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.info] imap-login: Login: user=mark, method=PLAIN, rip=192.168.1.69, lip=192.168.1.72, mpid=18820 Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.info] imap(mark): Connection closed bytes=17/340 Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.info] imap-login: Login: user=mark, method=PLAIN, rip=192.168.1.69, lip=192.168.1.72, mpid=18822 Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: rename(/mpool/mail/mark/dovecot.index.log.newlock, /mpool/mail/mark/dovecot.index.log) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: rename(/mpool/mail/mark/dovecot-uidlist.tmp, /mpool/mail/mark/dovecot-uidlist) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: unlink(/mpool/mail/mark/dovecot-uidlist.tmp) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: rename(/mpool/mail/mark/dovecot-uidlist.tmp, /mpool/mail/mark/dovecot-uidlist) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: unlink(/mpool/mail/mark/dovecot-uidlist.tmp) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: rename(/mpool/mail/mark/dovecot-uidlist.tmp, /mpool/mail/mark/dovecot-uidlist) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: unlink(/mpool/mail/mark/dovecot-uidlist.tmp) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: rename(/mpool/mail/mark/dovecot-uidlist.tmp, /mpool/mail/mark/dovecot-uidlist) failed: Permission denied Nov 24 17:34:27 proliant-1 dovecot: [ID 583609 mail.error] imap(mark): Error: unlink(/mpool/mail/mark/dovecot-uidlist.tmp) failed: Permission denied If I actually try to copy mail to the inbox of the account it core-dumps and does, and the SMF service drops into maintenance mode which requires re-enabling. The output from doveconf -n (this is changes from the default settings I think?) is: root@proliant-1:~# doveconf -n # 2.0.20: /etc/opt/csw/dovecot/dovecot.conf # OS: SunOS 5.11 i86pc zfs auth_first_valid_uid = 101 disable_plaintext_auth = no first_valid_uid = 101 mail_location = maildir:/mpool/mail/%u passdb { driver = pam } ssl_cert = /opt/csw/ssl/certs/dovecot.pem ssl_key = /opt/csw/ssl/private/dovecot.pem userdb { driver = passwd } The mail_location is in a ZFS filesystem on my RAIDz array. I couldnt think of any other way of creating user-specific folders in the location. As the value suggests, each user gets their own directory on the filesystem for mail. Is this still a ‘safe’ way to do things or would I be better off relocating each user’s ‘home’ directory to the pool somehow? This is what the directory currently looks like: mark@proliant-1:~$ ls -la /mpool/mail total 6 drwxrwxrwx+ 3 root root 3 2013-11-24 17:17 . drwxr-xr-x+ 5 root root 5 2013-11-24 13:50 .. drwxrwxrwx+ 5 mark staff 9 2013-11-24 22:20 mark mark@proliant-1:~$ ls -la /mpool/mail/mark/ total 14 drwxrwxrwx+ 5 mark staff 9 2013-11-24 22:20 . drwxrwxrwx+ 3 root root 3 2013-11-24 17:17 .. drwxrwxrwx+ 2 mark staff 2 2013-11-24 17:17 cur -rwxrwxrwx+ 1 mark staff 51 2013-11-24 22:20 dovecot-uidlist.tmp -rwxrwxrwx+ 1 mark staff 8 2013-11-24 22:20 dovecot-uidvalidity -rwxrwxrwx+ 1 mark staff 0 2013-11-24 17:17 dovecot-uidvalidity.529234ad -rwxrwxrwx+ 1 mark staff 40 2013-11-24 22:20 dovecot.index.log.newlock drwxrwxrwx+ 2 mark staff 2 2013-11-24 17:17 new drwxrwxrwx+ 2 mark staff 3 2013-11-24 17:21 tmp Any ideas? -- Mark Benson http://DECtec.info Twitter: @DECtecInfo HECnet: STAR69::MARK Online Resource Mailing List for DEC Enthusiasts.