constify
authorLove Hornquist Astrand <lha@h5l.org>
Fri, 26 Nov 2010 03:20:26 +0000 (19:20 -0800)
committerLove Hornquist Astrand <lha@h5l.org>
Fri, 26 Nov 2010 03:20:26 +0000 (19:20 -0800)
lib/gssapi/Makefile.am
lib/gssapi/gssapi/gssapi.h
lib/gssapi/gssapi/gssapi_oid.h
lib/gssapi/gssapi_mech.h
lib/gssapi/mech/gss_mech_switch.c
lib/gssapi/mech/gss_mo.c
lib/gssapi/mech/gss_oid.c
lib/gssapi/mech/gss_oid_equal.c
lib/gssapi/oid.txt

index 63348d12e96e2e2c351e807c27395eb4f92c64fe..a29dacfe9c04ae79a464f33fc1dc7bce033bd700 100644 (file)
@@ -111,7 +111,7 @@ mechsrc = \
        mech/gss_inquire_names_for_mech.c \
        mech/gss_krb5.c \
        mech/gss_mech_switch.c \
-       mech/gss_mo.o \
+       mech/gss_mo.c \
        mech/gss_names.c \
        mech/gss_oid.c \
        mech/gss_oid_equal.c \
index 2ec13615de3a44f2420225bb4505e4b1ddf8ba54..84dcf9c07e22d18d00b8ee24b5f144dd2824141f 100644 (file)
@@ -760,7 +760,7 @@ gss_set_cred_option (OM_uint32 *minor_status,
                     const gss_buffer_t value);
 
 GSSAPI_LIB_FUNCTION int GSSAPI_LIB_CALL
-gss_oid_equal(const gss_OID a, const gss_OID b);
+gss_oid_equal(gss_const_OID a, gss_const_OID b);
 
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
 gss_create_empty_buffer_set
@@ -938,16 +938,17 @@ gss_import_cred(OM_uint32 * /* minor_status */,
  */
 
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
-gss_mo_set(gss_OID mech, gss_OID option, int enable, gss_buffer_t value);
+gss_mo_set(gss_const_OID mech, gss_const_OID option,
+          int enable, gss_buffer_t value);
 
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
-gss_mo_get(gss_OID mech, gss_OID option, gss_buffer_t value);
+gss_mo_get(gss_const_OID mech, gss_const_OID option, gss_buffer_t value);
 
 GSSAPI_LIB_FUNCTION void GSSAPI_LIB_CALL
-gss_mo_list(gss_OID mech, gss_OID_set *options);
+gss_mo_list(gss_const_OID mech, gss_OID_set *options);
 
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
-gss_mo_name(gss_OID mech, gss_OID options, gss_buffer_t name);
+gss_mo_name(gss_const_OID mech, gss_const_OID options, gss_buffer_t name);
 
 /*
  * SASL glue functions and mech inquire
index 9c4f2b7cfb1dd97de7574cbbd24ff50c394651d7..cf85b967f5299d73cced977b032149a405474d69 100644 (file)
@@ -102,6 +102,22 @@ extern gss_OID_desc __gss_krb5_import_cred_x_oid_desc;
 extern gss_OID_desc __gss_ma_sasl_mech_name_oid_desc;
 #define GSS_MA_SASL_MECH_NAME (&__gss_ma_sasl_mech_name_oid_desc)
 
+extern gss_OID_desc __gss_ma_mech_name_oid_desc;
+#define GSS_MA_MECH_NAME (&__gss_ma_mech_name_oid_desc)
+
+extern gss_OID_desc __gss_ma_mech_description_oid_desc;
+#define GSS_MA_MECH_DESCRIPTION (&__gss_ma_mech_description_oid_desc)
+
+ /* glue for gss_display_mech_attr */
+extern gss_OID_desc __gss_ma_attr_name_oid_desc;
+#define GSS_MA_ATTR_NAME (&__gss_ma_attr_name_oid_desc)
+
+extern gss_OID_desc __gss_ma_attr_short_desc_oid_desc;
+#define GSS_MA_ATTR_SHORT_DESC (&__gss_ma_attr_short_desc_oid_desc)
+
+extern gss_OID_desc __gss_ma_attr_long_desc_oid_desc;
+#define GSS_MA_ATTR_LONG_DESC (&__gss_ma_attr_long_desc_oid_desc)
+
 /*
  * Digest mechanisms - 1.2.752.43.14
  */
index 93d883e275ebfd2d82c36201673b032e7a82ed67..36af693f2e5d52322af043a5181560130f387d50 100644 (file)
@@ -399,12 +399,8 @@ struct gss_mo_desc_struct {
     gss_OID option;
     const char *name;
     void *ctx;
-    int (*get)(gss_OID, gss_mo_desc *, gss_buffer_t);
-    int (*set)(gss_OID, gss_mo_desc *, int, gss_buffer_t);
-    OM_uint32 flags;
-#define GSS_MO_IS_MA           1
-#define GSS_MO_MA_CRITIAL      2
-    const char *description;
+    int (*get)(gss_const_OID, gss_mo_desc *, gss_buffer_t);
+    int (*set)(gss_const_OID, gss_mo_desc *, int, gss_buffer_t);
 };
 
 
@@ -471,7 +467,7 @@ typedef struct gssapi_mech_interface_desc {
 } gssapi_mech_interface_desc, *gssapi_mech_interface;
 
 gssapi_mech_interface
-__gss_get_mechanism(gss_OID /* oid */);
+__gss_get_mechanism(gss_const_OID /* oid */);
 
 gssapi_mech_interface __gss_spnego_initialize(void);
 gssapi_mech_interface __gss_krb5_initialize(void);
@@ -479,4 +475,7 @@ gssapi_mech_interface __gss_ntlm_initialize(void);
 
 void           gss_mg_collect_error(gss_OID, OM_uint32, OM_uint32);
 
+int _gss_mo_get_option_1(gss_const_OID, gss_mo_desc *, gss_buffer_t);
+int _gss_mo_get_option_0(gss_const_OID, gss_mo_desc *, gss_buffer_t);
+
 #endif /* GSSAPI_MECH_H */
index 5fc41d9954cd201db93cc0c065579cdf1f42b373..b1368db91ca25d7170f2c7544467343d938c77b9 100644 (file)
@@ -353,7 +353,7 @@ _gss_load_mech(void)
 }
 
 gssapi_mech_interface
-__gss_get_mechanism(gss_OID mech)
+__gss_get_mechanism(gss_const_OID mech)
 {
         struct _gss_mech_switch        *m;
 
index 697a0f2506788b682d9c555490cfd47f65e6aa9a..e82b88c9bff34ef4a0db1e36b8fb2c6cd74d3320 100644 (file)
 #include "mech_locl.h"
 
 static int
-get_option_def(int def, gss_OID mech, gss_mo_desc *mo, gss_buffer_t value)
+get_option_def(int def, gss_const_OID mech, gss_mo_desc *mo, gss_buffer_t value)
 {
     return def;
 }
 
 
 int
-_gss_mo_get_option_1(gss_OID mech, gss_mo_desc *mo, gss_buffer_t value)
+_gss_mo_get_option_1(gss_const_OID mech, gss_mo_desc *mo, gss_buffer_t value)
 {
     return get_option_def(1, mech, mo, value);
 }
 
 int
-_gss_mo_get_option_0(gss_OID mech, gss_mo_desc *mo, gss_buffer_t value)
+_gss_mo_get_option_0(gss_const_OID mech, gss_mo_desc *mo, gss_buffer_t value)
 {
     return get_option_def(0, mech, mo, value);
 }
 
-int
-gss_mo_set(gss_OID mech, gss_OID option, int enable, gss_buffer_t value)
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
+gss_mo_set(gss_const_OID mech, gss_const_OID option,
+          int enable, gss_buffer_t value)
 {
     gssapi_mech_interface m;
     size_t n;
@@ -69,14 +70,13 @@ gss_mo_set(gss_OID mech, gss_OID option, int enable, gss_buffer_t value)
     return 0;
 }
 
-OM_uint32
-gss_mo_get(gss_OID mech, gss_OID option, gss_buffer_t value)
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
+gss_mo_get(gss_const_OID mech, gss_const_OID option, gss_buffer_t value)
 {
     gssapi_mech_interface m;
     size_t n;
 
-    if (value)
-       _mg_buffer_zero(value);
+    _mg_buffer_zero(value);
 
     if ((m = __gss_get_mechanism(mech)) == NULL)
        return 0;
@@ -89,16 +89,17 @@ gss_mo_get(gss_OID mech, gss_OID option, gss_buffer_t value)
 }
 
 static void
-add_oid_set(gssapi_mech_interface m, gss_OID_set options)
+add_all_mo(gssapi_mech_interface m, gss_OID_set *options)
 {
+    OM_uint32 minor;
     size_t n;
 
     for (n = 0; n < m->gm_mo_num; n++)
        gss_add_oid_set_member(&minor, m->gm_mo[n].option, options);
 }
 
-void
-gss_mo_list(gss_OID mech, gss_OID_set *options)
+GSSAPI_LIB_FUNCTION void GSSAPI_LIB_CALL
+gss_mo_list(gss_const_OID mech, gss_OID_set *options)
 {
     gssapi_mech_interface m;
     OM_uint32 major, minor;
@@ -115,11 +116,11 @@ gss_mo_list(gss_OID mech, gss_OID_set *options)
     if (major != GSS_S_COMPLETE)
        return;
 
-    add_oid_set(m, options);
+    add_all_mo(m, options);
 }
 
-OM_uint32
-gss_mo_name(gss_OID mech, gss_OID option, gss_buffer_t name)
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
+gss_mo_name(gss_const_OID mech, gss_const_OID option, gss_buffer_t name)
 {
     gssapi_mech_interface m;
     size_t n;
@@ -142,9 +143,23 @@ gss_mo_name(gss_OID mech, gss_OID option, gss_buffer_t name)
     return GSS_S_BAD_NAME;
 }
 
+/*
+ * Helper function to allow NULL name
+ */
+
+static OM_uint32
+mo_name(const gss_const_OID mech, gss_const_OID option, gss_buffer_t name)
+{
+    if (name == NULL)
+       return GSS_S_COMPLETE;
+
+    return gss_mo_name(mech, option, name);
+}
+
 /**
  * Returns differnt protocol names and description of the mechanism.
  *
+ * @param minor_status minor status code
  * @param desired_mech mech list query
  * @param sasl_mech_name SASL GS2 protocol name
  * @param mech_name gssapi protocol name
@@ -174,34 +189,69 @@ gss_inquire_saslname_for_mech(OM_uint32 *minor_status,
     if (desired_mech)
        return GSS_S_BAD_MECH;
 
-    if (sasl_mech_name) {
-       major = gss_mo_get(desired_mech, GSS_MA_SASL_MECH_NAME, sasl_mech_name);
-       if (major)
-           return major;
-    }
-    if (mech_name) {
-       major = gss_mo_get(desired_mech, GSS_MA_MECH_NAME, mech_name);
-       if (major)
-           return major;
-    }
-    if (mech_description) {
-       major = gss_mo_get(desired_mech, GSS_MA_MECH_DESCRIPTION, mech_description);
-       if (major)
-           return major;
-    }
+    major = mo_name(desired_mech, GSS_MA_SASL_MECH_NAME, sasl_mech_name);
+    if (major) return major;
+
+    major = mo_name(desired_mech, GSS_MA_MECH_NAME, mech_name);
+    if (major) return major;
+
+    major = mo_name(desired_mech, GSS_MA_MECH_DESCRIPTION, mech_description);
+    if (major) return major;
 
     return GSS_S_COMPLETE;
 }
 
+/**
+ * Find a mech for a sasl name
+ *
+ * @param minor_status minor status code
+ * @param sasl_mech_name
+ * @param mech_type
+ *
+ * @return returns GSS_S_COMPLETE or an error code.
+ */
+
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
 gss_inquire_mech_for_saslname(OM_uint32 *minor_status,
                              const gss_buffer_t sasl_mech_name,
                              gss_OID *mech_type)
 {
+    struct _gss_mech_switch *m;
+    gss_buffer_desc name;
+    OM_uint32 major;
+
+    _gss_load_mech();
+
     *mech_type = NULL;
-    return GSS_S_COMPLETE;
+
+    SLIST_FOREACH(m, &_gss_mechs, gm_link) {
+       major = gss_mo_name(&m->gm_mech_oid, GSS_MA_SASL_MECH_NAME, &name);
+       if (major)
+           continue;
+       if (name.length == sasl_mech_name->length &&
+           memcmp(name.value, sasl_mech_name->value, name.length) == 0) {
+           gss_release_buffer(&major, &name);
+           *mech_type = &m->gm_mech_oid;
+           return 0;
+       }
+       gss_release_buffer(&major, &name);
+    }
+
+    return GSS_S_BAD_MECH;
 }
 
+/**
+ * Return set of mechanism that fullfill the criteria
+ *
+ * @param minor_status minor status code
+ * @param desired_mech_attrs
+ * @param except_mech_attrs
+ * @param critical_mech_attrs
+ * @param mechs returned mechs, free with gss_release_oid_set().
+ *
+ * @return returns GSS_S_COMPLETE or an error code.
+ */
+
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
 gss_indicate_mechs_by_attrs(OM_uint32 * minor_status,
                            gss_const_OID_set desired_mech_attrs,
@@ -217,6 +267,7 @@ gss_indicate_mechs_by_attrs(OM_uint32 * minor_status,
 /**
  * List support attributes for a mech and/or all mechanisms.
  *
+ * @param minor_status minor status code
  * @param mech given together with mech_attr will return the list of
  *        attributes for mechanism, can optionally be GSS_C_NO_OID.
  * @param mech_attr see mech parameter, can optionally be NULL,
@@ -234,7 +285,6 @@ gss_inquire_attrs_for_mech(OM_uint32 * minor_status,
                           gss_OID_set *known_mech_attrs)
 {
     OM_uint32 major, junk;
-    gssapi_mech_interface m;
 
     if (mech_attr) {
        if (mech)
@@ -244,6 +294,8 @@ gss_inquire_attrs_for_mech(OM_uint32 * minor_status,
     }    
 
     if (known_mech_attrs) {
+       struct _gss_mech_switch *m;
+
        major = gss_create_empty_oid_set(minor_status, known_mech_attrs);
        if (major) {
            gss_release_oid_set(&junk, mech_attr);
@@ -253,13 +305,25 @@ gss_inquire_attrs_for_mech(OM_uint32 * minor_status,
        _gss_load_mech();
 
        SLIST_FOREACH(m, &_gss_mechs, gm_link)
-           add_oid_set(m, known_mech_attrs);
+           add_all_mo(&m->gm_mech, known_mech_attrs);
     }
 
 
     return GSS_S_COMPLETE;
 }
 
+/**
+ * Return names and descriptions of mech attributes
+ *
+ * @param minor_status minor status code
+ * @param mech_attr
+ * @param name
+ * @param short_desc
+ * @param long_desc
+ *
+ * @return returns GSS_S_COMPLETE or an error code.
+ */
+
 GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
 gss_display_mech_attr(OM_uint32 * minor_status,
                      gss_const_OID mech_attr,
@@ -267,9 +331,25 @@ gss_display_mech_attr(OM_uint32 * minor_status,
                      gss_buffer_t short_desc,
                      gss_buffer_t long_desc)
 {
+    OM_uint32 major;
+
     _mg_buffer_zero(name);
     _mg_buffer_zero(short_desc);
     _mg_buffer_zero(long_desc);
 
+    if (minor_status)
+       *minor_status = 0;
+
+#if 0
+    major = mo_name(mech_attr, GSS_MA_ATTR_NAME, name);
+    if (major) return major;
+
+    major = mo_name(mech_attr, GSS_MA_ATTR_SHORT_DESC, short_desc);
+    if (major) return major;
+
+    major = mo_name(mech_attr, GSS_MA_ATTR_LONG_DESC, long_desc);
+    if (major) return major;
+#endif
+
     return GSS_S_FAILURE;
 }
index 381f78ff8ff05b2286e507c1b1a78246323c8f45..a2354d967fe1c0281f9dd4a2267bb0c6bc20cb2f 100644 (file)
@@ -93,8 +93,23 @@ gss_OID_desc __gss_krb5_cred_no_ci_flags_x_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d
 /* GSS_KRB5_IMPORT_CRED_X - 1.2.752.43.13.30 */
 gss_OID_desc __gss_krb5_import_cred_x_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x1e" };
 
-/* GSS_MA_SASL_MECH_NAME - 1.2.752.43.13.28 */
-gss_OID_desc __gss_ma_sasl_mech_name_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x1c" };
+/* GSS_MA_SASL_MECH_NAME - 1.2.752.43.13.100 */
+gss_OID_desc __gss_ma_sasl_mech_name_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x64" };
+
+/* GSS_MA_MECH_NAME - 1.2.752.43.13.101 */
+gss_OID_desc __gss_ma_mech_name_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x65" };
+
+/* GSS_MA_MECH_DESCRIPTION - 1.2.752.43.13.102 */
+gss_OID_desc __gss_ma_mech_description_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x66" };
+
+/* GSS_MA_ATTR_NAME - 1.2.752.43.13.103 */
+gss_OID_desc __gss_ma_attr_name_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x67" };
+
+/* GSS_MA_ATTR_SHORT_DESC - 1.2.752.43.13.104 */
+gss_OID_desc __gss_ma_attr_short_desc_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x68" };
+
+/* GSS_MA_ATTR_LONG_DESC - 1.2.752.43.13.104 */
+gss_OID_desc __gss_ma_attr_long_desc_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0d\x68" };
 
 /* GSS_SASL_DIGEST_MD5_MECHANISM - 1.2.752.43.14.1 */
 gss_OID_desc __gss_sasl_digest_md5_mechanism_oid_desc = { 6, "\x2a\xf0\x05\x2b\x0e\x01" };
index 3e641350892a162800cec577a3aea5c63343ac1f..7d6ded39e479744226c0beab0cb8defdd3ddf530 100644 (file)
@@ -48,7 +48,7 @@
  */
 
 GSSAPI_LIB_FUNCTION int GSSAPI_LIB_CALL
-gss_oid_equal(const gss_OID a, const gss_OID b)
+gss_oid_equal(gss_const_OID a, gss_const_OID b)
 {
     if (a == b && a != GSS_C_NO_OID)
        return 1;
index aee9c0eb8edafe63cc1697818cf3a11666abae32..837762d1c91720ad62968dd9e4a124879289fb2f 100644 (file)
@@ -37,7 +37,13 @@ oid  base    GSS_KRB5_CRED_NO_CI_FLAGS_X             1.2.752.43.13.29
 oid    base    GSS_KRB5_IMPORT_CRED_X                  1.2.752.43.13.30
 
 # /* glue for gss_inquire_saslname_for_mech */
-oid    base    GSS_MA_SASL_MECH_NAME                   1.2.752.43.13.28
+oid    base    GSS_MA_SASL_MECH_NAME                   1.2.752.43.13.100
+oid    base    GSS_MA_MECH_NAME                        1.2.752.43.13.101
+oid    base    GSS_MA_MECH_DESCRIPTION                 1.2.752.43.13.102
+# /* glue for gss_display_mech_attr */
+oid    base    GSS_MA_ATTR_NAME                        1.2.752.43.13.103
+oid    base    GSS_MA_ATTR_SHORT_DESC                  1.2.752.43.13.104
+oid    base    GSS_MA_ATTR_LONG_DESC                   1.2.752.43.13.104
 
 #/*
 # * Digest mechanisms - 1.2.752.43.14