aboutsummaryrefslogtreecommitdiff
path: root/nis/nss_nis
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nss_nis')
-rw-r--r--nis/nss_nis/nis-alias.c28
-rw-r--r--nis/nss_nis/nis-publickey.c31
2 files changed, 29 insertions, 30 deletions
diff --git a/nis/nss_nis/nis-alias.c b/nis/nss_nis/nis-alias.c
index 3b0887be04..1da999be2f 100644
--- a/nis/nss_nis/nis-alias.c
+++ b/nis/nss_nis/nis-alias.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@@ -206,32 +206,29 @@ enum nss_status
_nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
char *buffer, size_t buflen, int *errnop)
{
- enum nss_status retval;
- int parse_res;
- char *domain;
- char *result;
- int len;
- char *p;
- size_t namlen = strlen (name);
- char name2[namlen + 1];
- size_t i;
-
if (name == NULL)
{
*errnop = EINVAL;
return NSS_STATUS_UNAVAIL;
}
+ size_t namlen = strlen (name);
+ char name2[namlen + 1];
+
+ char *domain;
if (yp_get_default_domain (&domain))
return NSS_STATUS_UNAVAIL;
/* Convert name to lowercase. */
+ size_t i;
for (i = 0; i < namlen; ++i)
name2[i] = _tolower (name[i]);
name2[i] = '\0';
- retval = yperr2nss (yp_match (domain, "mail.aliases", name2, namlen,
- &result, &len));
+ char *result;
+ int len;
+ enum nss_status retval = yperr2nss (yp_match (domain, "mail.aliases", name2,
+ namlen, &result, &len));
if (retval != NSS_STATUS_SUCCESS)
{
@@ -247,14 +244,15 @@ _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
return NSS_STATUS_TRYAGAIN;
}
- p = strncpy (buffer, result, len);
+ char *p = strncpy (buffer, result, len);
buffer[len] = '\0';
while (isspace (*p))
++p;
free (result);
alias->alias_local = 0;
- parse_res = _nss_nis_parse_aliasent (name, p, alias, buffer, buflen, errnop);
+ int parse_res = _nss_nis_parse_aliasent (name, p, alias, buffer, buflen,
+ errnop);
if (parse_res < 1)
{
if (parse_res == -1)
diff --git a/nis/nss_nis/nis-publickey.c b/nis/nss_nis/nis-publickey.c
index 5aa41b8c17..f82db192a6 100644
--- a/nis/nss_nis/nis-publickey.c
+++ b/nis/nss_nis/nis-publickey.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999,2001,2002,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001,2002,2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@@ -73,6 +73,7 @@ _nss_nis_getpublickey (const char *netname, char *pkey, int *errnop)
*p = 0;
strncpy (pkey, result, HEXKEYBYTES + 1);
pkey[HEXKEYBYTES] = '\0';
+ free (result);
}
return NSS_STATUS_SUCCESS;
}
@@ -115,20 +116,20 @@ _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd,
if (result != NULL)
{
char *p = strchr (result, ':');
- if (p == NULL)
- return NSS_STATUS_SUCCESS;
-
- ++p;
- strncpy (buf, p, 2 * (HEXKEYBYTES + 1));
- buf[2 * HEXKEYBYTES + 1] = '\0';
- if (!xdecrypt (buf, passwd))
- return NSS_STATUS_SUCCESS;
-
- if (memcmp (buf, &(buf[HEXKEYBYTES]), KEYCHECKSUMSIZE) != 0)
- return NSS_STATUS_SUCCESS;
-
- buf[HEXKEYBYTES] = '\0';
- strcpy (skey, buf);
+ if (p != NULL)
+ {
+ ++p;
+ strncpy (buf, p, 2 * (HEXKEYBYTES + 1));
+ buf[2 * HEXKEYBYTES + 1] = '\0';
+ if (xdecrypt (buf, passwd)
+ && memcmp (buf, &(buf[HEXKEYBYTES]), KEYCHECKSUMSIZE) == 0)
+ {
+ buf[HEXKEYBYTES] = '\0';
+ strcpy (skey, buf);
+ }
+ }
+
+ free (result);
}
return NSS_STATUS_SUCCESS;
}