&status_string);
if (GSS_ERROR(maj_stat))
break;
- strncpy(buf_maj, (char*) status_string.value, sizeof(buf_maj));
+ strfcpy(buf_maj, (char*) status_string.value, sizeof(buf_maj));
+ if (status_string.length < sizeof(buf_maj))
+ buf_maj[status_string.length] = '\0';
gss_release_buffer(&min_stat, &status_string);
maj_stat = gss_display_status (&min_stat,
&status_string);
if (!GSS_ERROR(maj_stat))
{
- strncpy(buf_min, (char*) status_string.value, sizeof(buf_min));
+ strfcpy(buf_min, (char*) status_string.value, sizeof(buf_min));
+ if (status_string.length < sizeof(buf_min))
+ buf_min[status_string.length] = '\0';
gss_release_buffer(&min_stat, &status_string);
}
} while (!GSS_ERROR(maj_stat) && msg_ctx != 0);
/* get an IMAP service ticket for the server */
snprintf (buf1, sizeof (buf1), "imap@%s", idata->conn->account.host);
request_buf.value = buf1;
- request_buf.length = strlen (buf1) + 1;
+ request_buf.length = strlen (buf1);
maj_stat = gss_import_name (&min_stat, &request_buf, gss_nt_service_name,
&target_name);
if (maj_stat != GSS_S_COMPLETE)
/* server decides if principal can log in as user */
strncpy (buf1 + 4, idata->conn->account.user, sizeof (buf1) - 4);
request_buf.value = buf1;
- request_buf.length = 4 + strlen (idata->conn->account.user) + 1;
+ request_buf.length = 4 + strlen (idata->conn->account.user);
maj_stat = gss_wrap (&min_stat, context, 0, GSS_C_QOP_DEFAULT, &request_buf,
&cflags, &send_token);
if (maj_stat != GSS_S_COMPLETE)