IPv6 Kerberos server address handling in SASL2 GSSAPI plugin
Xu, Qiang (FXSGSC)
Qiang.Xu at fujixerox.com
Thu Aug 6 07:14:49 EDT 2009
> -----Original Message-----
> From: Alexey Melnikov [mailto:alexey.melnikov at isode.com]
> Sent: Thursday, August 06, 2009 7:08 PM
> To: Xu, Qiang (FXSGSC)
> Cc: cyrus-sasl at lists.andrew.cmu.edu
> Subject: Re: IPv6 Kerberos server address handling in SASL2
> GSSAPI plugin
>
> Neither. I meant _sasl_ipfromstring() called from sasl_setprop() [in
> lib/common.c].
Just had quick look at the func:
=======================================================
/* This code might be useful in the future, but it isn't now, so.... */
#if 0
int _sasl_iptostring(const struct sockaddr *addr, socklen_t addrlen,
char *out, unsigned outlen) {
char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
int niflags;
if(!addr || !out) return SASL_BADPARAM;
niflags = (NI_NUMERICHOST | NI_NUMERICSERV);
#ifdef NI_WITHSCOPEID
if (addr->sa_family == AF_INET6)
niflags |= NI_WITHSCOPEID;
#endif
if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), pbuf, sizeof(pbuf),
niflags) != 0)
return SASL_BADPARAM;
if(outlen < strlen(hbuf) + strlen(pbuf) + 2)
return SASL_BUFOVER;
snprintf(out, outlen, "%s;%s", hbuf, pbuf);
return SASL_OK;
}
#endif
int _sasl_ipfromstring(const char *addr,
struct sockaddr *out, socklen_t outlen)
{
int i, j;
struct addrinfo hints, *ai = NULL;
char hbuf[NI_MAXHOST];
/* A NULL out pointer just implies we don't do a copy, just verify it */
if(!addr) return SASL_BADPARAM;
/* Parse the address */
for (i = 0; addr[i] != '\0' && addr[i] != ';'; i++) {
if (i >= NI_MAXHOST)
return SASL_BADPARAM;
hbuf[i] = addr[i];
}
hbuf[i] = '\0';
if (addr[i] == ';')
i++;
/* XXX: Do we need this check? */
for (j = i; addr[j] != '\0'; j++)
if (!isdigit((int)(addr[j])))
return SASL_BADPARAM;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
if (getaddrinfo(hbuf, &addr[i], &hints, &ai) != 0)
return SASL_BADPARAM;
if (out) {
if (outlen < (socklen_t)ai->ai_addrlen) {
freeaddrinfo(ai);
return SASL_BUFOVER;
}
memcpy(out, ai->ai_addr, ai->ai_addrlen);
}
freeaddrinfo(ai);
return SASL_OK;
}
=======================================================
So in my eyes, _sasl_ipfromstring is just a wrapper of getaddrinfo(). But I am not sure if this function is involved in locating the Kerberos server with an IPv6 address?
Thanks,
Xu Qiang
More information about the Cyrus-sasl
mailing list