On 4.12.2013, at 13.47, Christian Rößner <c...@sys4.de> wrote:

>> Dec  4 08:53:37 mx dovecot: auth: Error: close failed in file object 
>> destructor:
>> Dec  4 08:53:37 mx dovecot: auth: Error: IOError: [Errno 9] Bad file 
>> descriptor
> 
> I found the problem, but do not know, if my solution is okay. It is the 
> checkpassword script that I wrote in python:
> 
> …
>       # Return data to Dovecot
>       try:
>               fd = os.fdopen(dovecot_out, "w")
>       except:
>               sl.syslog(sl.LOG_ERR,
>                         "Can not write to FD 4")
>               sys.exit(1)
>       os.write(fd.fileno(),
>                "\tuserdb_uid=%i"
>                "\tuserdb_gid=%i"
>                % (uid, gid))
>       #os.close(fd.fileno())
> 
>       try:
>               os.putenv('USER', username)
>               os.putenv('HOME', local_part_dir)
>       except:
>               sl.syslog(sl.LOG_WARN,
>                         "Can not set environment variables“)
> …
> 
> When it comes to the os.close(fd.fileno()) call dovecot throws an error.

Dovecot doesn’t throw error, Python does. Dovecot just logs it. If os.write() 
succeeds for the fd, but os.close() immediately afterwards fails, I have no 
idea why it would be doing that.

> So for now, I leave the file descriptor open and wait for the script to 
> terminate. I thought, I would have to close the descriptor after using it, do 
> I?

Doesn’t really matter. The process dies immediately anyway.

Reply via email to