From af8272f96c7653dcb2779601e8efd89daf401ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Sat, 22 Oct 2005 17:09:06 +0000 Subject: [PATCH] =?UTF-8?q?Check=20return=20value=20from=20asprintf=20inst?= =?UTF-8?q?ead=20of=20string=20!=3D=20NULL=20since=20it=20undefined=20beha?= =?UTF-8?q?vior=20on=20Linux.=20From=20Bj=C3=B6rn=20Sandell?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16223 ec53bebd-3082-4978-b11e-865c3cabbd6b --- appl/telnet/libtelnet/kerberos5.c | 71 ++++++++++++++++++------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/appl/telnet/libtelnet/kerberos5.c b/appl/telnet/libtelnet/kerberos5.c index b2ac3065e..5f984eb3b 100644 --- a/appl/telnet/libtelnet/kerberos5.c +++ b/appl/telnet/libtelnet/kerberos5.c @@ -115,17 +115,17 @@ static krb5_context context; static krb5_auth_context auth_context; static int -Data(Authenticator *ap, int type, void *d, int c) +Data(Authenticator *ap, int type, const void *d, int c) { - unsigned char *cd = (unsigned char *)d; + const unsigned char *cp, *cd = d; unsigned char *p0, *p; size_t len = sizeof(str_data) + 3 + 2; int ret; if (c == -1) - c = strlen((char*)cd); + c = strlen((const char*)cd); - for (p = cd; p - cd < c; p++, len++) + for (cp = cd; cp - cd < c; p++, len++) if (*p == IAC) len++; @@ -391,15 +391,20 @@ kerberos5_is(Authenticator *ap, unsigned char *data, int cnt) krb5_free_principal (context, server); if (ret) { + const char *errbuf2 = "Read req failed"; char *errbuf; + int ret2; - asprintf(&errbuf, - "Read req failed: %s", - krb5_get_err_text(context, ret)); - Data(ap, KRB_REJECT, errbuf, -1); + ret2 = asprintf(&errbuf, + "Read req failed: %s", + krb5_get_err_text(context, ret)); + if (ret2 != -1) + errbuf2 = errbuf; + Data(ap, KRB_REJECT, errbuf2, -1); if (auth_debug_mode) - printf("%s\r\n", errbuf); - free (errbuf); + printf("%s\r\n", errbuf2); + if (ret2 != -1) + free (errbuf); return; } @@ -415,13 +420,19 @@ kerberos5_is(Authenticator *ap, unsigned char *data, int cnt) sizeof(foo)); if (ret) { + const char *errbuf2 = "Bad checksum"; char *errbuf; - asprintf(&errbuf, "Bad checksum: %s", - krb5_get_err_text(context, ret)); - Data(ap, KRB_REJECT, errbuf, -1); + int ret2; + + ret2 = asprintf(&errbuf, "Bad checksum: %s", + krb5_get_err_text(context, ret)); + if (ret2 != -1) + errbuf2 = errbuf; + Data(ap, KRB_REJECT, errbuf2, -1); if (auth_debug_mode) - printf ("%s\r\n", errbuf); - free(errbuf); + printf ("%s\r\n", errbuf2); + if (ret2 != -1) + free(errbuf); return; } } @@ -500,18 +511,18 @@ kerberos5_is(Authenticator *ap, unsigned char *data, int cnt) } } else { + const char *msg2 = "user is not authorized to login"; char *msg; - asprintf (&msg, "user `%s' is not authorized to " + ret = asprintf (&msg, "user `%s' is not authorized to " "login as `%s'", name ? name : "", UserNameRequested ? UserNameRequested : ""); - if (msg == NULL) - Data(ap, KRB_REJECT, NULL, 0); - else { - Data(ap, KRB_REJECT, (void *)msg, -1); + if (ret != -1) + msg2 = msg; + Data(ap, KRB_REJECT, (void *)msg2, -1); + if (ret != -1) free(msg); - } auth_finished (ap, AUTH_REJECT); krb5_free_keyblock_contents(context, key_block); break; @@ -561,19 +572,21 @@ kerberos5_is(Authenticator *ap, unsigned char *data, int cnt) ccache, &inbuf); if(ret) { + const char *errbuf2 = "Read forwarded creds failed"; char *errbuf; + int ret2; - asprintf (&errbuf, - "Read forwarded creds failed: %s", - krb5_get_err_text (context, ret)); - if(errbuf == NULL) - Data(ap, KRB_FORWARD_REJECT, NULL, 0); - else - Data(ap, KRB_FORWARD_REJECT, errbuf, -1); + ret2 = asprintf (&errbuf, + "Read forwarded creds failed: %s", + krb5_get_err_text (context, ret)); + if (ret2 != -1) + errbuf2 = errbuf; + Data(ap, KRB_FORWARD_REJECT, errbuf, -1); if (auth_debug_mode) printf("Could not read forwarded credentials: %s\r\n", errbuf); - free (errbuf); + if (ret2 != -1) + free (errbuf); } else { Data(ap, KRB_FORWARD_ACCEPT, 0, 0); #if defined(DCE)