cdp@hertz.njit.edu (Chris Peckham) (06/08/90)
I am attempting to connect to the printer daemon which is on tcp port 515 using sockets. The system we are running is Ultrix-32 V3.1 (Rev. 9) System #7. The problem is the same even when I vary the $them variable below. The message that comes back to me is: 'Malformed from address' If I use the same structure to address the ftp port or telnet port, I get the header info of that process back. The lpd should respond with a 0 or something telling me ok (or is that my misunderstanding :-) ). Any help would be greatly appreciated. Chris Peckham, Systems Programmer New Jersey Institute of Technology cdp@hertz.njit.edu ***************************************************************************** #!/usr/bin/perl do 'socket.pl' || die "socket.pl"; # Get sockets info chop($hostname = `hostname`); $them=$hostname; # Can change later $sockaddr = 'S n a4 x8'; # Set TEMPLATE for pack # Get names and such ($name, $aliases, $proto) = getprotobyname('tcp'); ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname); ($name, $aliases, $port) = getservbyname('printer','tcp'); ($name, $aliases, $type, $len, $thataddr) = gethostbyname($them); $client=pack($sockaddr,&AF_INET,0,$thisaddr); $server=pack($sockaddr,&AF_INET,$port,$thataddr); socket(S,&AF_INET,&SOCK_STREAM, $proto) || die "socket: $!"; bind(S, $client) || die "bind: $!"; connect(S, $server) || die "connect: $!"; select(S); $| = 1 ; select(STDOUT); print S '\002lp\n'; read(S,$line,255); # Here is the trouble maker print $line; close S;
lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (06/09/90)
In article <1990Jun7.225250.29252@uvaarpa.Virginia.EDU> cdp@hertz.njit.edu writes:
:
: I am attempting to connect to the printer daemon which is on tcp port
: 515 using sockets. The system we are running is Ultrix-32 V3.1 (Rev. 9)
: System #7. The problem is the same even when I vary the $them
: variable below.
:
: The message that comes back to me is: 'Malformed from address'
: If I use the same structure to address the ftp port or telnet
: port, I get the header info of that process back. The lpd should
: respond with a 0 or something telling me ok (or is that my
: misunderstanding :-) ).
My guess (without access to the lpd source) is that lpd is requiring the
port to be a privileged port, since lpq is setuid root. Running your
script as root, it just sits there forever rather than returning the
error, so I think that's what's going on.
Larry