svn commit: lorikeet r53 - in trunk/heimdal/lib: hdb roken
abartlet at samba.org
abartlet at samba.org
Mon Sep 6 12:14:11 GMT 2004
Author: abartlet
Date: 2004-09-06 12:14:10 +0000 (Mon, 06 Sep 2004)
New Revision: 53
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=lorikeet&path=/trunk/heimdal/lib&rev=53&nolog=1
Log:
Another attempt at the memory leak and correctness fixes in the
string2key code.
Thanks to lha for his feedback!
Andrew Bartlett
Added:
trunk/heimdal/lib/roken/memdup.c
Modified:
trunk/heimdal/lib/hdb/keys.c
trunk/heimdal/lib/roken/Makefile.am
trunk/heimdal/lib/roken/roken.h.in
Changeset:
Modified: trunk/heimdal/lib/hdb/keys.c
===================================================================
--- trunk/heimdal/lib/hdb/keys.c 2004-09-06 07:29:38 UTC (rev 52)
+++ trunk/heimdal/lib/hdb/keys.c 2004-09-06 12:14:10 UTC (rev 53)
@@ -81,7 +81,7 @@
krb5_error_code ret;
/* the 3 DES types must be first */
- krb5_enctype all_etypes[] = {
+ static const krb5_enctype all_etypes[] = {
ETYPE_DES_CBC_MD5,
ETYPE_DES_CBC_MD4,
ETYPE_DES_CBC_CRC,
@@ -111,12 +111,11 @@
/* XXX there should be a string_to_etypes handling
special cases like `des' and `all' */
if(strcmp(buf[i], "des") == 0) {
- *enctypes = malloc(sizeof(all_etypes[0])*3);
- memcpy(*enctypes, all_etypes, sizeof(all_etypes[0])*3);
+ *enctypes = memdup(all_etypes, sizeof(all_etypes[0])*3);
*num_enctypes = 3;
continue;
} else if(strcmp(buf[i], "des3") == 0) {
- *enctypes = malloc(sizeof(**enctypes));
+ *enctypes = memdup(all_etypes, sizeof(**enctypes));
*enctypes[0] = ETYPE_DES3_CBC_SHA1;
*num_enctypes = 1;
continue;
@@ -124,8 +123,7 @@
krb5_enctype e;
ret = krb5_string_to_enctype(context, buf[i], &e);
if (ret == 0) {
- *enctypes = malloc(sizeof(**enctypes));
- *enctypes[0] = e;
+ *enctypes = memdup(&e, sizeof(*enctypes[0]));
*num_enctypes = 1;
continue;
}
@@ -139,15 +137,13 @@
interface sucks */
if(strcmp(buf[i], "pw-salt") == 0) {
if(*enctypes == NULL) {
- *enctypes = malloc(sizeof(all_etypes));
- memcpy(*enctypes, all_etypes, sizeof(all_etypes));
+ *enctypes = memdup(all_etypes, sizeof(all_etypes));
*num_enctypes = sizeof(all_etypes)/sizeof(all_etypes[0]);
}
salt->salttype = KRB5_PW_SALT;
} else if(strcmp(buf[i], "afs3-salt") == 0) {
if(*enctypes == NULL) {
- *enctypes = malloc(sizeof(all_etypes[0])*3);
- memcpy(*enctypes, all_etypes, sizeof(all_etypes[0])*3);
+ *enctypes = memdup(all_etypes, sizeof(all_etypes[0])*3);
*num_enctypes = 3;
}
salt->salttype = KRB5_AFS3_SALT;
@@ -158,6 +154,11 @@
v4 compat, and a cell name for afs compat */
salt->saltvalue.data = strdup(buf[i]);
salt->saltvalue.length = strlen(buf[i]);
+ if (!salt->saltvalue.data) {
+ krb5_set_error_string(context, "out of memory while "
+ "parsing salt specifiers");
+ return ENOMEM;
+ }
}
}
@@ -319,6 +320,7 @@
ret = add_enctype_to_key_set(&key_set, nkeyset, enctypes[i],
no_salt ? NULL : &salt);
if (ret) {
+ krb5_free_salt(context, salt);
free(enctypes);
goto out;
}
Modified: trunk/heimdal/lib/roken/Makefile.am
===================================================================
--- trunk/heimdal/lib/roken/Makefile.am 2004-09-06 07:29:38 UTC (rev 52)
+++ trunk/heimdal/lib/roken/Makefile.am 2004-09-06 12:14:10 UTC (rev 53)
@@ -59,6 +59,7 @@
k_getpwnam.c \
k_getpwuid.c \
mini_inetd.c \
+ memdup.c \
net_read.c \
net_write.c \
parse_bytes.c \
Added: trunk/heimdal/lib/roken/memdup.c
===================================================================
--- trunk/heimdal/lib/roken/memdup.c 2004-09-06 07:29:38 UTC (rev 52)
+++ trunk/heimdal/lib/roken/memdup.c 2004-09-06 12:14:10 UTC (rev 53)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) Andrew Barltett <abarlet at samba.org> 2004
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+RCSID("$Id: memdup.h $");
+#endif
+
+#include "roken.h"
+
+/*
+ * memdup for systems that doesn't have it
+ */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+void *memdup(const void *s2, size_t n)
+{
+ void *ret = malloc(n);
+ if (ret)
+ memcpy(ret, s2, n);
+
+ return ret;
+}
Modified: trunk/heimdal/lib/roken/roken.h.in
===================================================================
--- trunk/heimdal/lib/roken/roken.h.in 2004-09-06 07:29:38 UTC (rev 52)
+++ trunk/heimdal/lib/roken/roken.h.in 2004-09-06 12:14:10 UTC (rev 53)
@@ -414,6 +414,8 @@
int issuid(void);
+void *memdup(const void *ptr, size_t bytes);
+
#ifndef HAVE_STRUCT_WINSIZE
struct winsize {
unsigned short ws_row, ws_col;
More information about the samba-cvs
mailing list