lpd¿¡ ÃÖ¼ÒÇÑÀÇ ¼³Á¤À» ÅëÇؼ ½Ã½ºÅÛÀº ÈÀÏÀ» ÇÁ¸°Æ® Å¥·Î º¸³»¾î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ÀÌ °úÁ¤Àº ÇØ´ç ÆÄÀÏÀ» ÇÁ¸°ÅÍ°¡ ÀÌÇØÇÒ ¼ö ÀÖ´ÂÁöÀÇ ¿©ºÎ, Ãâ·Â ¹°ÀÌ º¸±âÁÁ°Ô ³ª¿Ã ¼ö Àִ°¡¿¡ ´ëÇؼ´Â ÀüÇô °í·ÁÇÏÁö ¾Ê¾Ò´Ù. ±×·¸Áö¸¸, °¡Àå ±âº»ÀûÀÎ ´Ü°èÀÌ´Ù. °è¼Ó ÀÐ¾î º¸µµ·Ï! ±âº»ÀûÀ¸·Î, lpd¿¡ ÇÁ¸°Æ® Å¥¸¦ Ãß°¡ÇÏ·Á¸é /etc/printcapÀÇ ¸ñ·ÏÀ» ÆíÁý ÇØ¾ß Çϸç, /var/spool/lpd¿¡ »õ·Î¿î ½ºÇ® µð·ºÅ丮¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.
/etc/printcapÀÇ ¸ñ·ÏÀº ´ÙÀ½ÀÇ Çü½ÄÀ» °¡Áø´Ù. # LOCAL djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :sh:À§ÀÇ ³»¿ëÀº lp, dj, deskjetÀ̶ó´Â (°¡»óÀÇ) ÇÁ¸°Å͸¦ Á¤ÀÇÇϸç, /var/spool/lpd/dj µð·ºÅ丮¿¡ ÀڷḦ ÀÓ½ÃÀúÀåÇÏ°í, ÆÄÀÏ(ÀÛ¾÷)´ç ÃÖ´ë Å©±âÀÇ ÇÑ°è°¡ ¾øÀ¸¸ç, µð¹ÙÀ̽º /dev/lp0À¸·Î ÀڷḦ Ãâ·ÂÇÑ´Ù. ±×¸®°í, ÇØ´ç ÀÛ¾÷ÀÇ ¾ÕÂÊ¿¡ Ãß°¡µÇ´Â banner page - Ãâ·Â ÀÛ¾÷À» ¸í·ÉÇÑ »ç¶÷°ú ±âŸ Á¤º¸¸¦ Æ÷½ÃÇÑ´Ù. - °¡ ¾ø´Ù. printcapÀÇ ¸ÇÆäÀÌÁö¸¦ ÀÚ¼¼È÷ ÀÐ¾î º¸±æ ±ÇÀåÇÑ´Ù. À§ÀÇ ³»¿ëÀº ¾ÆÁÖ °£´ÜÇØ º¸ÀÌÁö¸¸, ÇÔÁ¤(catch)ÀÌ ÀÖ´Ù - DeskJet 500ÀÌ ÀÌÇØÇÒ ¼ö ¾ø´Â ³»¿ëÀÇ ÆÄÀÏÀ» º¸³½´Ù¸é, ÇÁ¸°ÅÍ´Â ÀÌ»óÇÑ(?) °á°ú¹°À» Ãâ·ÂÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î º¸ÅëÀÇ unix ¹®¼ ÆÄÀÏÀ» DeskJet ÇÁ¸°ÅÍ·Î º¸ ³»¸é newlineÀ» ±×´ë·Î Àоîµé¿© ´ÙÀ½°ú °°ÀÌ Ãâ·ÂÇÑ´Ù.(°è´ÜÇö»óÀÇ ¿¹)
This is line one. This is line two. This is line three.PS(PostScript ÀÌÇÏ PS) ÆÄÀÏÀ» ÀÌ·¸°Ô ½ºÇ®·Î º¸³»¾î Ãâ·ÂÇϸé ÀÌ»Ú°Ô ³ª¿µÈ PS¸í·É¾î¸¸ ÀÜ¶à ¸¸³ª°Ô µÉ °ÍÀÌ´Ù.8^) ¹°·Ð À§¿¡¼ ¾ð±ÞµÈ °è´ÜÇö»ó(staircase effect)µµ ÇÔ²²... ºÐ¸íÈ÷ º°µµÀÇ ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù. À̸¦ À§Çؼ ÇÊÅÍ(filter)°¡ »ç¿ëµÈ´Ù. printcapÀÇ ¸ÇÆäÀÌÁö¸¦ ¿½ÉÈ÷ ÀÐÀº »ç¶÷À̶ó¸é spoolÀÇ Æ¯Â¡À¸·Î ``if''¿Í ``of''¸¦ ÁÖ¸ñÇÒ °ÍÀÌ´Ù. ¿©±â¼ if - input filter - °¡ ¿ì¸®¿¡ °Ô ÇÊ¿äÇÑ ºÎºÐÀÌ´Ù.
newline ÀÌÀü¿¡ CR(Carriage Returen)À» »ðÀÔÇÏ´Â ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ´Ù¸é °è´ÜÇö»óÀ» ÇØ°áÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î, À§ÀÇ printcapÀÇ ³»¿ë¿¡ if·Î ½ÃÀÛ ÇÏ´Â ÁÙÀ» Ãß°¡ÇØ¾ß ÇÑ´Ù.
lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :if=/var/spool/lpd/dj/filter:\ :sh:°£´ÜÇÑ ÇÊÅÍ ½ºÅ©¸³Æ®´Â ´ÙÀ½ÀÇ ³»¿ëó·³ ÀÛ¼ºÇÏ¸é µÈ´Ù. (¾Æ·¡ÀÇ ½ºÅ©¸³Æ®´Â perlÀ» ÀÌ¿ëÇß´Ù.) #!perl while(<STDIN>){chop $_; print "$_\r\n";}; À§ÀÇ Áö½Ã´ë·Î ÇÑ´Ù¸é, ÀϹÝÀûÀÎ À¯´Ð½º ÅؽºÆ® ÆÄÀÏÀ» Ãâ·ÂÇÒ ¼ö ÀÖ´Â ½ºÇ® ȯ°æÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù. (¹°·Ð À§ÀÇ ÇÊÅ͸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀº ¼ö¹é¸¸ °¡Áö°¡ ÀÖÁö¸¸, ¿¹Á¦·Î »ï±â¿¡ Àû´çÇÑ °ÍÀº ÀûÀº ÆíÀÌ´Ù. À§ÀÇ ÀÛ¾÷ÀÌ Á» ´õ È¿À²ÀûÀ¸·Î ¼öÇàµÉ ¼ö ÀÖµµ·Ï »ý°¢ÇØ º¸¶ó) ÀÌÁ¦´Â ÀÏ¹Ý ÅؽºÆ® ÆÄÀÏÀÇ Ãâ·ÂÀÌ ³Î¸® ¾Ö¿ëµÇ´Â ¹æ¹ýÀÌ ¾Æ´Ï¶ó´Â ¹®Á¦°¡ ³²¾ÆÀÖ´Ù. - ¾Æ¸¶µµ PS³ª ´Ù¸¥ Á¾·ùÀÇ ¹®¼¾ç½Ä(dviµî)À̳ª ±×·¡ÇÈ ÆÄÀϵéÀ» Ãâ·ÂÇÒ ¼ö ÀÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. Áß¿äÇÑ ¹®Á¦À̸ç, ½ÇÁ¦·Î ȯ°æ¼³Á¤µµ ½±´Ù. À§¿¡¼ »ç¿ëµÈ line-feed ÇÊÅÍÀÇ È®ÀåµÈ ÇüŸ¦ »ç¿ëÇÏ¸é µÈ´Ù.
Ãâ·Â½Ã ÀÔ·ÂµÈ ÀÓÀÇÀÇ ÆÄÀÏÇüŸ¦ ÀÌÇØÇÏ¿© DeskJetÀÌ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â Çü½ÄÀ¸·Î º¯È¯ÇØ ÁÖ´Â ÇÊÅ͸¦ ÀÛ¼ºÇÑ´Ù¸é, ¾ÆÁÖ ÈǸ¢ÇÑ Ãâ·Â ȯ°æÀ» °®Ãá °ÍÀÌ´Ù. ÀϹÝÀûÀÎ °æ¿ì, Àڱ⸸ÀÇ ÇÊÅ͸¦ ÀÛ¼ºÇÏ·Á°í ¾Ö¾²Áö ¸»¶ó. ÀÎÅͳݿ¡´Â À¯¿ëÇÑ ÇÊÅÍ°¡ ³Î·Á Àֱ⠶§¹®ÀÌ´Ù.
´Ù¸¥ »ç¶÷µéÀÇ ºÎŹ¶§¹®¿¡ ³» ¸®´ª½º ¹Ú½ºÀÇ ÆÄÀÏ ±ÇÇÑ¿¡ ´ëÇÑ ¼³¸íÀ» Ãß°¡Çß´Ù. ±ÇÇÑ ¼³Á¤¿¡ ´ëÇÑ ¹æ¹ýÀº ¸Å¿ì ¸¹´Ù. SGID ¼³Á¤µÈ ¹ÙÀ̳ʸ®¸¸À» »ç¿ëÇÏ°í °ü·ÃµÈ ¸ðµç °ÍµéÀ» SUID root·Î ¼³Á¤ÇÏÁö ¾Ê´Â °ÍÀÌ °¡Àå ÀÌ»óÀûÀÌ´Ù. ´ÙÀ½Àº ³» ¸®´ª½º ¹Ú½ºÀÇ ³»¿ëÀ̸ç, ³» °æ¿ì Àß µ¹¾Æ°£´Ù.
-r-sr-sr-x 1 root lp /usr/bin/lpr* -r-sr-sr-x 1 root lp /usr/bin/lprm* -rwxr--r-- 1 root root /usr/sbin/lpd* -r-xr-sr-x 1 root lp /usr/sbin/lpc* drwxrwxr-x 4 root lp /var/spool/lpd/ drwxr-xr-x 2 root lp /var/spool/lpd/lp/ÇöÀç lpd´Â lp ¼ºñ½º Æ÷Æ®¸¦ ¹ÙÀεå(bind)Çϱâ À§Çؼ root·Î ½ÇÇà µÇ¾î¾ß ÇÑ´Ù. bindÀÌÈÄ UID°¡ lp³ª ´Ù¸¥ °ÍÀ¸·Î µÇ¾î¾ß ÇÏ°ÚÁö¸¸, ±×·² ÇÊ¿ä´Â ¾øÀ» °Í °°´Ù. Bummer....