flags |= SC_LOCAL_SUBKEY;
if (ac->remote_subkey)
flags |= SC_REMOTE_SUBKEY;
+ if (ctx->source)
+ flags |= SC_SOURCE_NAME;
+ if (ctx->target)
+ flags |= SC_TARGET_NAME;
kret = krb5_store_int32 (sp, flags);
if (kret) {
}
/* names */
+ if (ctx->source) {
+ ret = _gsskrb5_export_name (minor_status,
+ (gss_name_t)ctx->source, &buffer);
+ if (ret)
+ goto failure;
+ data.data = buffer.value;
+ data.length = buffer.length;
+ kret = krb5_store_data (sp, data);
+ _gsskrb5_release_buffer (&minor, &buffer);
- ret = _gsskrb5_export_name (minor_status,
- (gss_name_t)ctx->source, &buffer);
- if (ret)
- goto failure;
- data.data = buffer.value;
- data.length = buffer.length;
- kret = krb5_store_data (sp, data);
- _gsskrb5_release_buffer (&minor, &buffer);
- if (kret) {
- *minor_status = kret;
- goto failure;
+ ret = GSS_S_FAILURE;
+ if (kret) {
+ *minor_status = kret;
+ goto failure;
+ }
}
- ret = _gsskrb5_export_name (minor_status,
- (gss_name_t)ctx->target, &buffer);
- if (ret)
- goto failure;
- data.data = buffer.value;
- data.length = buffer.length;
-
- ret = GSS_S_FAILURE;
+ if (ctx->target) {
+ ret = _gsskrb5_export_name (minor_status,
+ (gss_name_t)ctx->target, &buffer);
+ if (ret)
+ goto failure;
+ data.data = buffer.value;
+ data.length = buffer.length;
+ kret = krb5_store_data (sp, data);
+ _gsskrb5_release_buffer (&minor, &buffer);
- kret = krb5_store_data (sp, data);
- _gsskrb5_release_buffer (&minor, &buffer);
- if (kret) {
- *minor_status = kret;
- goto failure;
+ ret = GSS_S_FAILURE;
+ if (kret) {
+ *minor_status = kret;
+ goto failure;
+ }
}
kret = krb5_store_int32 (sp, ctx->flags);
ac->cksumtype = tmp;
/* names */
+ if (flags & SC_SOURCE_NAME) {
+ if (krb5_ret_data (sp, &data))
+ goto failure;
+ buffer.value = data.data;
+ buffer.length = data.length;
- if (krb5_ret_data (sp, &data))
- goto failure;
- buffer.value = data.data;
- buffer.length = data.length;
-
- ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NT_EXPORT_NAME,
- &name);
- if (ret) {
- ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NO_OID,
+ ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NT_EXPORT_NAME,
&name);
if (ret) {
- krb5_data_free (&data);
- goto failure;
+ ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NO_OID,
+ &name);
+ if (ret) {
+ krb5_data_free (&data);
+ goto failure;
+ }
}
+ ctx->source = (krb5_principal)name;
+ krb5_data_free (&data);
}
- ctx->source = (krb5_principal)name;
- krb5_data_free (&data);
- if (krb5_ret_data (sp, &data) != 0)
- goto failure;
- buffer.value = data.data;
- buffer.length = data.length;
+ if (flags & SC_TARGET_NAME) {
+ if (krb5_ret_data (sp, &data) != 0)
+ goto failure;
+ buffer.value = data.data;
+ buffer.length = data.length;
- ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NT_EXPORT_NAME,
- &name);
- if (ret) {
- ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NO_OID,
+ ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NT_EXPORT_NAME,
&name);
if (ret) {
- krb5_data_free (&data);
- goto failure;
+ ret = _gsskrb5_import_name (minor_status, &buffer, GSS_C_NO_OID,
+ &name);
+ if (ret) {
+ krb5_data_free (&data);
+ goto failure;
+ }
}
+ ctx->target = (krb5_principal)name;
+ krb5_data_free (&data);
}
- ctx->target = (krb5_principal)name;
- krb5_data_free (&data);
if (krb5_ret_int32 (sp, &tmp))
goto failure;