summaryrefslogtreecommitdiff
path: root/usr/src/lib/libgss/g_dup_name.c
diff options
context:
space:
mode:
authorPeter Shoults <Peter.Shoults@Sun.COM>2009-05-22 10:09:37 -0400
committerPeter Shoults <Peter.Shoults@Sun.COM>2009-05-22 10:09:37 -0400
commit503a2b89eaf04b96af9e457a7806f65ce3e0b723 (patch)
tree84074541784934c8ef72a0e2709bd6080710e9ee /usr/src/lib/libgss/g_dup_name.c
parent97ed649eea0490aaae8e85481e0f9c636bda74a5 (diff)
downloadillumos-gate-503a2b89eaf04b96af9e457a7806f65ce3e0b723.tar.gz
6510866 libgss(3LIB) input checking needs to be improved
Diffstat (limited to 'usr/src/lib/libgss/g_dup_name.c')
-rw-r--r--usr/src/lib/libgss/g_dup_name.c51
1 files changed, 35 insertions, 16 deletions
diff --git a/usr/src/lib/libgss/g_dup_name.c b/usr/src/lib/libgss/g_dup_name.c
index e60220581b..0ea8ea53aa 100644
--- a/usr/src/lib/libgss/g_dup_name.c
+++ b/usr/src/lib/libgss/g_dup_name.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* routine gss_duplicate_name
*
@@ -39,6 +37,36 @@
#include <string.h>
#include <errno.h>
+static OM_uint32
+val_dup_name_args(
+ OM_uint32 *minor_status,
+ const gss_name_t src_name,
+ gss_name_t *dest_name)
+{
+
+ /* Initialize outputs. */
+
+ if (minor_status != NULL)
+ *minor_status = 0;
+
+ if (dest_name != NULL)
+ *dest_name = GSS_C_NO_NAME;
+
+ /* Validate arguments. */
+
+ if (minor_status == NULL)
+ return (GSS_S_CALL_INACCESSIBLE_WRITE);
+
+ /* if output_name is NULL, simply return */
+ if (dest_name == NULL)
+ return (GSS_S_CALL_INACCESSIBLE_WRITE);
+
+ if (src_name == GSS_C_NO_NAME)
+ return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME);
+
+ return (GSS_S_COMPLETE);
+}
+
OM_uint32
gss_duplicate_name(minor_status,
src_name,
@@ -50,20 +78,11 @@ gss_name_t *dest_name;
gss_union_name_t src_union, dest_union;
OM_uint32 major_status = GSS_S_FAILURE;
+ major_status = val_dup_name_args(minor_status, src_name, dest_name);
+ if (major_status != GSS_S_COMPLETE)
+ return (major_status);
- if (!minor_status)
- return (GSS_S_CALL_INACCESSIBLE_WRITE);
-
- *minor_status = 0;
-
- /* if output_name is NULL, simply return */
- if (dest_name == NULL)
- return (GSS_S_CALL_INACCESSIBLE_WRITE | GSS_S_BAD_NAME);
-
- *dest_name = 0;
-
- if (src_name == NULL)
- return (GSS_S_CALL_INACCESSIBLE_READ);
+ major_status = GSS_S_FAILURE;
src_union = (gss_union_name_t)src_name;