9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] csipinfo
@ 2006-10-18  3:10 Joel “chesky” Salomon
  2006-10-18  3:36 ` geoff
  2006-10-18 20:38 ` andrey mirtchovski
  0 siblings, 2 replies; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18  3:10 UTC (permalink / raw)
  To: 9fans

My homework assignment reads:
> Write a program to receive multiple UDP messages ...  Print to
> standard output the remote host and port from which the message
> originated (print the dotted decimal IP address and also use
> gethostbyaddr to print a textual host name), followed by the message
> itself.

I’ve got everything but the gethostbyaddr equivalent code.  From
cpu% sig csipinfo
	Ndbtuple* csipinfo(char *netroot, char *attr, char *val, char **attrs, int nattr)
it looks as if I should do something like:
	lfd = listen(adir, ldir);
	if (lfd < 0) sysfatal("listen: %r");
	dfd = accept(lfd, ldir);
	if (dfd < 0) sysfatal("can't accept: %r");
	NetConnInfo	*i = getnetconninfo(nil, lfd);
	Ndbtuple		*t = csipinfo(nil, "????", "????", ["ip", "dns"], 2);
	...
— but what’re the attr and val arguments to csipinfo?  I’ve read
ndb(2) and been thoroughly confused, and
http://www.google.com/codesearch turns up no uses of csipinfo, only
its implementation on Plan 9 and plan9ports.

Specifically, what attribute=value pair do I know about for this
remotely-initiated connection?

Thanks,
--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  3:10 [9fans] csipinfo Joel “chesky” Salomon
@ 2006-10-18  3:36 ` geoff
  2006-10-18  5:20   ` Joel “chesky” Salomon
  2006-10-18 20:38 ` andrey mirtchovski
  1 sibling, 1 reply; 23+ messages in thread
From: geoff @ 2006-10-18  3:36 UTC (permalink / raw)
  To: 9fans

It's used here:

/sys/src/cmd/ssh/util.c:241
/sys/src/cmd/ssh/ip/ppp/ppp.c:738



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  3:36 ` geoff
@ 2006-10-18  5:20   ` Joel “chesky” Salomon
  2006-10-18  5:37     ` geoff
  0 siblings, 1 reply; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18  5:20 UTC (permalink / raw)
  To: 9fans

> It's used here:
> 
> /sys/src/cmd/ssh/util.c:241
> /sys/src/cmd/ssh/ip/ppp/ppp.c:738

(Actually /sys/src/cmd/ip/ppp/ppp.c:738)

In ppp the ip address is known so csipinfo is called with (..., "ip", ip, ...); in ssh the system name is known so the pair ipattr(name), name can be used.  How can I get any of that information—but specifically the ip address and dns name—for the other end of an announce-listen-accept connection?

--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  5:20   ` Joel “chesky” Salomon
@ 2006-10-18  5:37     ` geoff
  2006-10-18  5:53       ` Joel “chesky” Salomon
  0 siblings, 1 reply; 23+ messages in thread
From: geoff @ 2006-10-18  5:37 UTC (permalink / raw)
  To: 9fans

See getnetconninfo in dial(2).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  5:37     ` geoff
@ 2006-10-18  5:53       ` Joel “chesky” Salomon
  2006-10-18 12:38         ` Joel “chesky” Salomon
  2006-10-18 15:32         ` Russ Cox
  0 siblings, 2 replies; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18  5:53 UTC (permalink / raw)
  To: 9fans

> See getnetconninfo in dial(2).

Thanks!  I was calling getnetconninfo already for the remote-end “port number” and I’d overlooked the fact that the address, in *some* form, was there too.

So should this invocation:
	NetConnInfo	*i = getnetconninfo(nil, lfd);
	Ndbtuple	*t = csipinfo(nil, ipattr(i->raddr), i->raddr, ["ip", "dns"], 2);
work, or am I working too hard?  Getnetconninfo will return either the ip address or the dns name (less likely), not both, so I still need csipinfo, right?

--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  5:53       ` Joel “chesky” Salomon
@ 2006-10-18 12:38         ` Joel “chesky” Salomon
  2006-10-18 15:32         ` Russ Cox
  1 sibling, 0 replies; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18 12:38 UTC (permalink / raw)
  To: 9fans

>	Ndbtuple *t = csipinfo(nil, ipattr(i->raddr), i->raddr, ["ip", "dns"], 2);

... has two problems.  One, it should be i->rsys rather than ->raddr (—I think; does it really matter?); and two, the inline creation of the array doesn’t complie; the line now reads:
	char *attr[2] = {"ip", "dns"};
	t = csipinfo(nil, ipattr(i->rsys), i->rsys, attr, 2);
which sort of works.  In testing I’ve gotten two different ip addresses referring to my system in the list; I’m guessing I need to walk the Ndbtuple list until I find the element referring to "dns"?  After the code above, is
	for(dt = t; dt != nil; dt = dt->entry)
		if(strstr(dt->attr, "dns"))
			break;
guaranteed to find an Ndbtuple with attr == "dns" or can that fail?

--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  5:53       ` Joel “chesky” Salomon
  2006-10-18 12:38         ` Joel “chesky” Salomon
@ 2006-10-18 15:32         ` Russ Cox
  2006-10-18 16:43           ` Joel Salomon
  1 sibling, 1 reply; 23+ messages in thread
From: Russ Cox @ 2006-10-18 15:32 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

Getnetconninfo will return an IP address.

Russ


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 15:32         ` Russ Cox
@ 2006-10-18 16:43           ` Joel Salomon
  2006-10-18 16:59             ` rog
  0 siblings, 1 reply; 23+ messages in thread
From: Joel Salomon @ 2006-10-18 16:43 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

> Getnetconninfo will return an IP address.

Seems I need getnetconninfo, but maybe not csipinfo, just a reverse dns lookup;
       Ndbtuple* t = dnsquery("/net" (or nil, or ?), i->rsys, "ptr")
ought to do the trick.  I just need to check which of t->attr and
t->line->attr is "ptr" and which is "dom" (Is it guaranteed which is
first?  I guess I could check and ndbreorder(t, t->line) if needed.)
and then build the "machine.dom" form of the name with something like
       print("%s.%s", t->val, t->list->val);
I'll try this when I get back to my laptop, but if I'm
misunderstanding something could somebody please warn me?

--Joel


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 16:43           ` Joel Salomon
@ 2006-10-18 16:59             ` rog
  0 siblings, 0 replies; 23+ messages in thread
From: rog @ 2006-10-18 16:59 UTC (permalink / raw)
  To: 9fans

i don't know if it's any help, but here's some code that
i have used in the past to do a reverse dns lookup. it was under inferno and
the code's in limbo, but i think that /net/dns probably works
the same in both inferno and plan 9, so it should be cross-applicable.

it expects a host address of the form "123.45.67.89!9999" (as found in the
remote file) and returns the dns name.

hostname(addr: string): string
{
	(nil, toks) := sys->tokenize(addr, "!");
	if(len toks != 2)
		return addr;
	addr = hd toks;
	if(NoDNS)
		return addr;
	a := addr2arpa(addr);
	if(a == nil)
		return addr;
	fd := sys->open("/net/dns", Sys->ORDWR);
	if(fd == nil)
		return addr;
	if(sys->fprint(fd, "%s ptr", a) < 0){
		err := sys->sprint("%r");
		log(sys->sprint("dnslookup failed %q %q", addr, err));
		return addr;
	}
	buf := array[1024] of byte;
	sys->seek(fd, big 0, 0);
	n := sys->read(fd, buf, len buf);
	if(n <= 0)
		return addr;
	a = string buf[0:n];
	for(i := 0; i < len a; i++)
		if(a[i] == '\t')
			break;
	if(i == len a)
		return addr;
	i++;
	# return address of the form:
	# 68.1.1.200.in-addr.arpa ptr	presto.vitanuova.com(0)
	for(j := len a - 1; j > i; j--)
		if(a[j] == '(')
			return a[i:j];
	return a[i:];
}

addr2arpa(a: string): string
{
	addr := "in-addr.arpa";
	for(toks := sys->tokenize(a, ".").t1; toks != nil; toks = tl toks)
		addr = hd toks + "." + addr;
	return addr;
}



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18  3:10 [9fans] csipinfo Joel “chesky” Salomon
  2006-10-18  3:36 ` geoff
@ 2006-10-18 20:38 ` andrey mirtchovski
  1 sibling, 0 replies; 23+ messages in thread
From: andrey mirtchovski @ 2006-10-18 20:38 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

On 10/17/06, Joel "chesky" Salomon <chesky@plan9.jp> wrote:
> My homework assignment reads:
> > Write a program to receive multiple UDP messages ...  Print to
> > standard output the remote host and port from which the message
> > originated (print the dotted decimal IP address and also use
> > gethostbyaddr to print a textual host name), followed by the message
> > itself.

"make sure you cite all your sources and collaborators in your submission" ;)


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 23:51         ` Charles Forsyth
@ 2006-10-19  8:29           ` Charles Forsyth
  0 siblings, 0 replies; 23+ messages in thread
From: Charles Forsyth @ 2006-10-19  8:29 UTC (permalink / raw)
  To: 9fans

>sorry, i meant: see getfields, tokenize, etc. instead of strtok

i ought to have included an explanation, but i was short of time.
the biggest problem is that strtok keeps some hidden
state between calls, so it's a nuisance in concurrent programming.
i usually find having the result as an array of strings more
helpful than having to make several calls, as well.

probably POSIX has fixed the concurrency problem by implying thread-local
storage for strtok's state (thus creating a different problem elsewhere)

tokenize is often useful because it handles quoting,
which is useful for space-separated fields that need to be able to contain white space.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:57       ` C H Forsyth
@ 2006-10-18 23:51         ` Charles Forsyth
  2006-10-19  8:29           ` Charles Forsyth
  0 siblings, 1 reply; 23+ messages in thread
From: Charles Forsyth @ 2006-10-18 23:51 UTC (permalink / raw)
  To: 9fans

>see getfields etc. instead of tokenize.

sorry, i meant: see getfields, tokenize, etc. instead of strtok

obviously i was following my own advice


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:38     ` Joel “chesky” Salomon
  2006-10-18 19:57       ` C H Forsyth
  2006-10-18 20:17       ` Joel “chesky” Salomon
@ 2006-10-18 21:29       ` geoff
  2 siblings, 0 replies; 23+ messages in thread
From: geoff @ 2006-10-18 21:29 UTC (permalink / raw)
  To: 9fans

smtpd does a lot of this sort of DNS lookup.  If all you want is to
map an IP address back to a domainname, this one line from
/sys/src/cmd/upas/smtp/greylist.c:265 should suffice:

	fqdn = csgetvalue(nil, "ip", nci->rsys, "dom", nil);

where nci->rsys is a string containing a dotted-quad address like
"135.104.9.82" for IPv4.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:38     ` Joel “chesky” Salomon
  2006-10-18 19:57       ` C H Forsyth
@ 2006-10-18 20:17       ` Joel “chesky” Salomon
  2006-10-18 21:29       ` geoff
  2 siblings, 0 replies; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18 20:17 UTC (permalink / raw)
  To: 9fans

I think I have a working gethostbyaddr:

char*
gethostbyaddr(char *net, char *addr)
{
	// Thanks to erik and rog for their help with this code
	char buf[1024], errbuf[ERRMAX], *dq[4], *host;
	int fd, l;

	if(net == nil)
		net = "/net";
	snprint(buf, sizeof buf, "%s/dns", net);
	if((fd = open(buf, ORDWR)) < 0){
		l = snprint(errbuf, ERRMAX, "gethostbyaddr: can't open %s: %r", buf);
		errstr(errbuf, l);
		return nil;
	}
	if(getfields(addr, dq, 4, 1, ".") != 4){
		close(fd);
		werrstr("gethostbyaddr: malformed address");
		return nil;
	}
	l = snprint(buf, sizeof buf, "%s.%s.%s.%s.in-addr.arpa ptr",
		dq[3], dq[2], dq[1], dq[0]);
	if(write(fd, buf, l) != l){
		l = snprint(errbuf, ERRMAX,
			"gethostbyaddr: write error resolving %s.%s.%s.%s: %s/dns: %r",
			dq[0], dq[1], dq[2], dq[3], net);
		close(fd);
		errstr(errbuf, l);
		return nil;
	}
	if(read(fd, buf, sizeof buf) <= 0){
		l = snprint(errbuf, ERRMAX,
			"gethostbyaddr: read error resolving %s.%s.%s.%s: %s/dns: %r",
			dq[0], dq[1], dq[2], dq[3], net);
		close(fd);
		errstr(errbuf, l);
		return nil;
	}
	close(fd);
	host = strstr(buf, " ptr ");
	if(host == nil){
		werrstr("gethostbyaddr: dns lookup failed");
		return nil;
	}
	return strdup(host);
}

--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:56     ` Charles Forsyth
  2006-10-18 19:59       ` erik quanstrom
@ 2006-10-18 20:15       ` rog
  1 sibling, 0 replies; 23+ messages in thread
From: rog @ 2006-10-18 20:15 UTC (permalink / raw)
  To: 9fans

> it catches cases where client programs
> are confused (or have been confused) between domain names and IP addresses.

isn't the "ptr" query type clue enough?

is there ever a case where one would use that that type
and not do the in-addr.arpa thing?



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:56     ` Charles Forsyth
@ 2006-10-18 19:59       ` erik quanstrom
  2006-10-18 20:15       ` rog
  1 sibling, 0 replies; 23+ messages in thread
From: erik quanstrom @ 2006-10-18 19:59 UTC (permalink / raw)
  To: 9fans

why should a program in general care what the difference between a domain and an ip address is?
it's pretty easy to tell if you really need to know, which isn't often.

- erik

On Wed Oct 18 15:57:11 EDT 2006, forsyth@terzarima.net wrote:
> >if one knew more about DNS, maybe the .in-addr.arpa thing
> >would be obvious...
> 
> that's what's the subject of DNS lookups to do a `reverse lookup'.
> it's really an ordinary lookup of specially-constructed names in
> a domain reserved for them.  that's the DNS itself, nothing to do with Plan 9.
> dnsquery is mainly used interactively.  i'm not sure you really want to do it
> inside ndb/dns itself, because it catches cases where client programs
> are confused (or have been confused) between domain names and IP addresses.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:38     ` Joel “chesky” Salomon
@ 2006-10-18 19:57       ` C H Forsyth
  2006-10-18 23:51         ` Charles Forsyth
  2006-10-18 20:17       ` Joel “chesky” Salomon
  2006-10-18 21:29       ` geoff
  2 siblings, 1 reply; 23+ messages in thread
From: C H Forsyth @ 2006-10-18 19:57 UTC (permalink / raw)
  To: 9fans

>	dq[0] = strtok(addr, ".");	// neglecting error checking
>	dq[1] = strtok(0, "."); dq[2] = strtok(0, "."); dq[3] = strtok(0, ".");

see getfields etc. instead of tokenize.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:14   ` rog
  2006-10-18 19:26     ` erik quanstrom
  2006-10-18 19:38     ` Joel “chesky” Salomon
@ 2006-10-18 19:56     ` Charles Forsyth
  2006-10-18 19:59       ` erik quanstrom
  2006-10-18 20:15       ` rog
  2 siblings, 2 replies; 23+ messages in thread
From: Charles Forsyth @ 2006-10-18 19:56 UTC (permalink / raw)
  To: 9fans

>if one knew more about DNS, maybe the .in-addr.arpa thing
>would be obvious...

that's what's the subject of DNS lookups to do a `reverse lookup'.
it's really an ordinary lookup of specially-constructed names in
a domain reserved for them.  that's the DNS itself, nothing to do with Plan 9.
dnsquery is mainly used interactively.  i'm not sure you really want to do it
inside ndb/dns itself, because it catches cases where client programs
are confused (or have been confused) between domain names and IP addresses.


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:14   ` rog
  2006-10-18 19:26     ` erik quanstrom
@ 2006-10-18 19:38     ` Joel “chesky” Salomon
  2006-10-18 19:57       ` C H Forsyth
                         ` (2 more replies)
  2006-10-18 19:56     ` Charles Forsyth
  2 siblings, 3 replies; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18 19:38 UTC (permalink / raw)
  To: 9fans

> > Thanks, this finally looks like what I need.
> 
> it won't work. something like the code i posted is needed.

I’m trying to read the limbo code and translate it to my needs; bear with me as I translate this to c-ish pseudocode:

char*
gethostbyaddr(char *net, char *addr)
{
	char buf[1024], *dq[4], s;
	int fd, l;

	if(net == nil)
		net = "/net";
	snprint(buf, sizeof buf, "%s/dns", net);
	if((fd = open(buf, ORDWR)) < 0)
		return nil;		// set errstr "gethostbyaddr failed: can't open %s: %r", buf)
	dq[0] = strtok(addr, ".");	// neglecting error checking
	dq[1] = strtok(0, "."); dq[2] = strtok(0, "."); dq[3] = strtok(0, ".");
	snprint(buf, sizeof buf, "%s.%s.%s.%s.in-addr.arpa ptr",
		dq[3], dq[2], dq[1], dq[0]);
	if(write(fd, buf, l) != l)
		return nil;		// close fd & set errstr
	if(read(fd, buf, sizeof buf) < 0)
		return nil;
	s = strstr(buf, " ptr ");
	return(strdup(s+5));
}

Well, it’s less pseudocode than a rough draft.  If it passes rog’s sanity check I’ll add better error checking and submit it for inclusion somewhere—someone, somewhere, has got to want this.

--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 18:44 ` Joel “chesky” Salomon
  2006-10-18 19:14   ` rog
@ 2006-10-18 19:30   ` erik quanstrom
  1 sibling, 0 replies; 23+ messages in thread
From: erik quanstrom @ 2006-10-18 19:30 UTC (permalink / raw)
  To: 9fans

> Thanks, this finally looks like what I need.  Two points though:
> 1.  Is 64 bytes sufficient for the domain name?  Searching the ’net
> I’ve found other numbers — according to <http://tinyurl.com/ykyths> it
> should be 1005; <http://tinyurl.com/xdp4> links to a name about 140
> bytes long and firefox handles it just fine.

this was throwaway code.  i didn't think very hard about that number.
ndb does have a maximum value length of 64 bytes.

; g -i max /sys/src/cmd/ndb/dns.h:
dns.h:68: 	Domlen=		256,	/* max domain name length (with NULL) */

> 2. Why the second part of “if(l < 0 || l == sizeof buf)”?

room for the terminating null.

as pointed out, this doesn't quite work. you have to reverse the dots yourself and add in-addr.arpa.
the code is in /sys/src/cmd/ndb/dnsquery.c

- erik



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 19:14   ` rog
@ 2006-10-18 19:26     ` erik quanstrom
  2006-10-18 19:38     ` Joel “chesky” Salomon
  2006-10-18 19:56     ` Charles Forsyth
  2 siblings, 0 replies; 23+ messages in thread
From: erik quanstrom @ 2006-10-18 19:26 UTC (permalink / raw)
  To: 9fans

ah,

you're right.  i didn't remember that dnsquery supplies that magic.  i think it would
be a good think if /net/dns did the translation itself.  

- erik


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
  2006-10-18 18:44 ` Joel “chesky” Salomon
@ 2006-10-18 19:14   ` rog
  2006-10-18 19:26     ` erik quanstrom
                       ` (2 more replies)
  2006-10-18 19:30   ` erik quanstrom
  1 sibling, 3 replies; 23+ messages in thread
From: rog @ 2006-10-18 19:14 UTC (permalink / raw)
  To: 9fans

> Thanks, this finally looks like what I need.

it won't work. something like the code i posted is needed.
for ptr resolution, /net/dns requires the numeric ip address, reversed,
with ".in-addr.arpa" appended. also, the address read back
from /net/dns is not the straight domain name (but you'll find
that out soon enough).

documentation on /net/dns is not great.
if one knew more about DNS, maybe the .in-addr.arpa thing
would be obvious...



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [9fans] csipinfo
       [not found] <61d9157e8f6994d999d7f257cd2b05b4@coraid.com>
@ 2006-10-18 18:44 ` Joel “chesky” Salomon
  2006-10-18 19:14   ` rog
  2006-10-18 19:30   ` erik quanstrom
  0 siblings, 2 replies; 23+ messages in thread
From: Joel “chesky” Salomon @ 2006-10-18 18:44 UTC (permalink / raw)
  To: 9fans

> had to go around the list ... can't post from here.
> 
> i think you're making this too hard.  what you want is more
> of a dns query.  this is very easy to do.  something like
> (this might not complie -- i just typed it out.)
> 
> char*
> gethostbyaddr(char *net, char *addr)
> {
> 	char buf[64];
> 	int fd, l;
> 
> 	if(net == 0)
> 		net="/net";
> 	snprint(buf, sizeof buf, "%s/dns", net);
> 	fd = open(buf, ORDWR);
> 	if(fd < 0)
> 		return 0;
> 	snprint(buf, sizeof buf, "%s ptr", addr);
> 	if(write(fd, buf, strlen(buf)) < 0)
> 		return 0;
> 	l = read(fd, buf, sizeof buf);
> 	if(l < 0 || l == sizeof buf)
> 		return 0;
> 	return strdup(buf);
> }
> 
> - erik

Thanks, this finally looks like what I need.  Two points though:
1.  Is 64 bytes sufficient for the domain name?  Searching the ’net
I’ve found other numbers — according to <http://tinyurl.com/ykyths> it
should be 1005; <http://tinyurl.com/xdp4> links to a name about 140
bytes long and firefox handles it just fine.
2. Why the second part of “if(l < 0 || l == sizeof buf)”?

I’ll bang on this a bit and see if I can make it set errstr appropriately.

--Joel



^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2006-10-19  8:29 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-10-18  3:10 [9fans] csipinfo Joel “chesky” Salomon
2006-10-18  3:36 ` geoff
2006-10-18  5:20   ` Joel “chesky” Salomon
2006-10-18  5:37     ` geoff
2006-10-18  5:53       ` Joel “chesky” Salomon
2006-10-18 12:38         ` Joel “chesky” Salomon
2006-10-18 15:32         ` Russ Cox
2006-10-18 16:43           ` Joel Salomon
2006-10-18 16:59             ` rog
2006-10-18 20:38 ` andrey mirtchovski
     [not found] <61d9157e8f6994d999d7f257cd2b05b4@coraid.com>
2006-10-18 18:44 ` Joel “chesky” Salomon
2006-10-18 19:14   ` rog
2006-10-18 19:26     ` erik quanstrom
2006-10-18 19:38     ` Joel “chesky” Salomon
2006-10-18 19:57       ` C H Forsyth
2006-10-18 23:51         ` Charles Forsyth
2006-10-19  8:29           ` Charles Forsyth
2006-10-18 20:17       ` Joel “chesky” Salomon
2006-10-18 21:29       ` geoff
2006-10-18 19:56     ` Charles Forsyth
2006-10-18 19:59       ` erik quanstrom
2006-10-18 20:15       ` rog
2006-10-18 19:30   ` erik quanstrom

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).