Bug 27724 - Filedescriptor für /etc/cyrus-ldap.secret wird in imapd nicht wieder geschlossen
Filedescriptor für /etc/cyrus-ldap.secret wird in imapd nicht wieder geschlossen
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Mail
UCS 3.0
Other Linux
: P1 normal (vote)
: UCS 3.0-1-errata
Assigned To: Sönke Schwardt-Krummrich
Felix Botner
:
Depends on: 27723
Blocks:
  Show dependency treegraph
 
Reported: 2012-06-22 13:50 CEST by Sönke Schwardt-Krummrich
Modified: 2012-11-09 16:14 CET (History)
1 user (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sönke Schwardt-Krummrich univentionstaff 2012-06-22 13:50:08 CEST
Der gleiche Codeabschnitt wie in Bug 27723 findet sich auch im Patch
05_ldap_group.patch für den imapd. Die imapd-Prozesse werden aktuell nach der 
30. Verwendung automatisch beendet und durch einen neuen Prozess ausgetauscht, so dass das Standard-Filehandle-Limit von 1024 zunächst keine Probleme bereitet.

+++ This bug was initially created as a clone of Bug #27723 +++

Der Filedescriptor für /etc/machine.secret wird in pam_univentionmailcyrus.so
nicht wieder geschlossen, was dann im saslauthd nach einiger Zeit zu zu vielen
offenen Filehandles führt und der saslauthd damit nicht mehr benutzbar ist:

   /* read password from file */
   if ((fp = fopen(pwfile, "r")) != NULL) {
     if (fgets(bindpw, 1024, fp) == NULL) {
       len = strlen(bindpw);
       if (bindpw[len-1] == '\n')
         bindpw[len-1] = '\0';
     }
   }
   return ctrl;
Comment 1 Sönke Schwardt-Krummrich univentionstaff 2012-06-22 15:43:08 CEST
Das scheint auch die Ursache für die korrupten Index-Dateien zu sein. Dem ltmpd gehen hier ebenfalls die Dateihandles aus:

Jun 22 11:00:51 hostname cyrus/lmtp[4352]: duplicate_mark: <xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> example.com!user.some.username 1340355651 134806788
Jun 22 11:00:51 hostname cyrus/lmtp[4352]: IOERROR: creating quota file /var/lib/cyrus/domain/e/example.com/quota/s/user.some.username.NEW: Too many open files
Jun 22 11:00:51 hostname cyrus/lmtp[4352]: DBERROR: error storing example.com!user.some.username: cyrusdb error
Jun 22 11:00:51 hostname cyrus/lmtp[4352]: LOSTQUOTA: unable to record use of 0 bytes in quota file example.com!user.some.username
Jun 22 11:00:51 hostname cyrus/lmtp[4352]: Delivered: <xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> to mailbox: example.com!user.some.username
Jun 22 11:00:51 hostname cyrus/lmtp[4352]: mystore: starting txn 2147506193
Comment 2 Sönke Schwardt-Krummrich univentionstaff 2012-06-22 16:31:21 CEST
fclose(fp) wurde analog zu Bug 27723 eingebaut.
cyrus-imapd-2.2 und cyrus-imapd-2.4 wurden im errata3.0-1 Scope neu gebaut.

2012-06-22-cyrus-imapd-2.2.yaml
src: cyrus-imapd-2.2
fix: 2.2.13-19.120.201206221605

2012-06-22-cyrus-imapd-2.4.yaml
src: cyrus-imapd-2.4
fix: 2.4.9-1.24.201206221615

Changelogeintrag wurde erstellt.

Next step:
https://hutten.knut.univention.de/mediawiki/index.php/Errata-Updates#QA_-_Funktionale_QA_des_Errata-Updates
Comment 3 Felix Botner univentionstaff 2012-06-22 16:48:47 CEST
Mit 3.0-1 konnte das Problem nachvollzogen werden

-> cyradm --user oxuser1 10.200.7.90
-> cyradm --user oxuser1 10.200.7.90
-> cyradm --user oxuser1 10.200.7.90
-> cyradm --user oxuser1 10.200.7.90

-> lsof | grep cyrus-ldap.secret|wc -l
9

IMAP 2.2 (i386) IMAP 2.4 (i386, amd64)
cyrus-imapd-2.2 2.2.13-19.120.201206221605
cyrus-imapd-2.4 2.4.9-1.24.201206221615

-> cyradm --user oxuser1 10.200.7.90
-> cyradm --user oxuser1 10.200.7.90
-> cyradm --user oxuser1 10.200.7.90
-> cyradm --user oxuser1 10.200.7.90
-> echo "test"|sendmail oxuser1@test.de
-> echo "test"|sendmail oxuser1@test.de
-> echo "test"|sendmail oxuser1@test.de

-> lsof | grep cyrus-ldap.secret|wc -l
0

2.2 YAML OK
2.4 YAML OK