<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>6257</bug_id>
          
          <creation_ts>2005-03-12 18:58:30 +0300</creation_ts>
          <short_desc>irattach logs bad error message on TIOCSETD failure</short_desc>
          <delta_ts>2006-12-17 23:18:07 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>irda-utils</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergey Vlasov">vsu</reporter>
          <assigned_to name="Nobody&apos;s working on this, feel free to take it">nobody</assigned_to>
          <cc>week</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>22518</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2005-03-12 18:58:30 +0300</bug_when>
    <thetext>В irda-utils-0.9.16/irattach/irattach.c есть следующий код:

	if (ioctl(ttyfd, TIOCSETD, &amp;irdadisc) &lt; 0){
		fprintf(stderr,  
			 &quot;Maybe you don&apos;t have IrDA support in your kernel?\n&quot;);
		syslog(LOG_ERR, &quot;irattach: tty: set_disc(%d): %s\n&quot;, 
			irdadisc, strerror(errno));
		clean_exit(-1);
	}

Если вызов TIOCSETD завершается с ошибкой (например, в случае проблем с
загрузкой модуля irtty_sir), сообщение об этом должно писаться в syslog - оно
туда и записывается, но с неверным кодом ошибки:

irattach: tty: set_disc(11): Bad file descriptor

Т.е., создаётся впечатление, что вызов TIOCSETD вернул в errno код ошибки EBADF,
хотя strace показывает другую ситуацию:

ioctl(3, TIOCSETD, [11])          = -1 EINVAL (Invalid argument)
write(2, &quot;Maybe you don\&apos;t have IrDA suppor&quot;..., 50) = -1 EBADF (Bad file
descriptor)

Дело в том, что ещё раньше irattach вызывает fork_now(), где в том числе
закрываются все открытые ранее файловые дескрипторы, в том числе и
stdin/stdout/stderr. Поэтому fprintf(stderr, ...) завершается с ошибкой, и этот
код ошибки затирает код, полученный ранее от TIOCSETD.

Вообще закрытие дескрипторов 0, 1, 2 чревато странными проблемами; обычно в
подобных случаях открывают /dev/null (см., например, man 3 daemon).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39483</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2006-08-10 11:06:48 +0400</bug_when>
    <thetext>А можно патчик для тупых новых майнтейнеров? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39980</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2006-09-02 23:33:56 +0400</bug_when>
    <thetext>Найти ничего готового не вышло, читать daemon() чуточку выходит за рамки
намеченного на ближайшие три месяца... попросил в sisyphus@, кому нетрудно. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39982</commentid>
    <comment_count>3</comment_count>
    <who name="Damir Shayhutdinov">damir</who>
    <bug_when>2006-09-02 23:39:09 +0400</bug_when>
    <thetext>запись в stderr наверное оставлена для тех случаев. когда сервер запускается с
отладкой, и stderr не закрывается. 
Перестановка строчек syslog и fprintf должна решить проблему.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39983</commentid>
    <comment_count>4</comment_count>
      <attachid>1615</attachid>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2006-09-02 23:55:59 +0400</bug_when>
    <thetext>Created attachment 1615
irda-utils-0.9.16-alt-irattach-daemonize.patch

- irattach: daemonize properly:
  + close fds up to sysconf(_SC_OPEN_MAX) instead of hardcoded 64;
  + redirect stdin/out/err to /dev/null instead of leaving them closed (#6257).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39992</commentid>
    <comment_count>5</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2006-09-03 15:29:56 +0400</bug_when>
    <thetext>Мужыки EBADF получился из-за fprintf(stderr), если fd=2 уже закрыт.
Переставьте syslog и fprintf местами либо сохраняйте errno.
man errno |col -b |grep -A33 ^NOTES</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39993</commentid>
    <comment_count>6</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2006-09-03 15:46:58 +0400</bug_when>
    <thetext>Кстати у syslog() есть формат %m.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39996</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2006-09-03 21:43:35 +0400</bug_when>
    <thetext>Да уже приложил приложенное.  Надо в апстрим закинуть вместе с твоей/Lost&apos;s
рекомендацией.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39997</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2006-09-03 22:15:07 +0400</bug_when>
    <thetext>Учтено в 0.9.16-alt3 и закинуто в апстрим:
http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1551560&amp;group_id=5616&amp;atid=305616

Всем спасибо :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>1615</attachid>
            <date>2006-09-02 23:55:59 +0400</date>
            <delta_ts>2006-09-02 23:55:59 +0400</delta_ts>
            <desc>irda-utils-0.9.16-alt-irattach-daemonize.patch</desc>
            <filename>irda-utils-0.9.16-alt-irattach-daemonize.patch</filename>
            <type>text/plain</type>
            <size>844</size>
            <attacher name="Sergey Vlasov">vsu</attacher>
            
              <data encoding="base64">LS0tIGlyZGEtdXRpbHMtMC45LjE2L2lyYXR0YWNoL3V0aWwuYy5hbHQtaXJhdHRhY2gtZGFlbW9u
aXplCTIwMDQtMDQtMDEgMDE6NTU6NDEgKzA0MDAKKysrIGlyZGEtdXRpbHMtMC45LjE2L2lyYXR0
YWNoL3V0aWwuYwkyMDA2LTA5LTAyIDIzOjQ3OjQwICswNDAwCkBAIC0xNTgsNiArMTU4LDcgQEAg
dm9pZCBmb3JrX25vdyhpbnQgdHR5ZmQpCiB7CiAJaW50IHJldDsKIAlpbnQgaTsKKwlpbnQgZmQ7
CiAKIAlpZiAoKHJldCA9IGZvcmsoKSkgPiAwKQogCQlleGl0KDApOwpAQCAtMTczLDEwICsxNzQs
MjMgQEAgdm9pZCBmb3JrX25vdyhpbnQgdHR5ZmQpCiAJfQogCiAJLyogQ2xvc2UgYWxsIG9wZW4g
aW5oZXJpdGVkIGZpbGVzISBFeGNlcHQgZm9yIHR0eWZkISAqLwotCWZvciAoaSA9IDA7IGkgPCA2
NDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBzeXNjb25mKF9TQ19PUEVOX01BWCk7IGkrKykKIAkJ
aWYoaSAhPSB0dHlmZCkKIAkJCWNsb3NlKGkpOwogCisJLyogUmVkaXJlY3Qgc3RhbmRhcmQgZGVz
Y3JpcHRvcnMgdG8gL2Rldi9udWxsIHRvIGF2b2lkIHRyb3VibGUgKi8KKwlmZCA9IG9wZW4oIi9k
ZXYvbnVsbCIsIE9fUkRXUik7CisJaWYgKGZkID49IDApIHsKKwkJaWYgKGZkICE9IFNURElOX0ZJ
TEVOTykKKwkJCWR1cDIoZmQsIFNURElOX0ZJTEVOTyk7CisJCWlmIChmZCAhPSBTVERPVVRfRklM
RU5PKQorCQkJZHVwMihmZCwgU1RET1VUX0ZJTEVOTyk7CisJCWlmIChmZCAhPSBTVERFUlJfRklM
RU5PKQorCQkJZHVwMihmZCwgU1RERVJSX0ZJTEVOTyk7CisJCWlmIChmZCA+IFNUREVSUl9GSUxF
Tk8pCisJCQljbG9zZShmZCk7CisJfQorCiAJd3JpdGVfcGlkKCk7CiB9IAogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>