summaryrefslogtreecommitdiff
path: root/security/krb5-17/files/patch-ai
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2002-01-16 03:17:24 +0000
committerCy Schubert <cy@FreeBSD.org>2002-01-16 03:17:24 +0000
commitc0f94d44f3a5fe701d2373a0a04b850e3725b784 (patch)
treeb5d9ce88c28eff7c9298e9be0bc32885e216dd57 /security/krb5-17/files/patch-ai
parentNeedn't depend mkfontdir. (diff)
Update 1.2.2 -> 1.2.3
Notes
Notes: svn path=/head/; revision=53145
Diffstat (limited to 'security/krb5-17/files/patch-ai')
-rw-r--r--security/krb5-17/files/patch-ai279
1 files changed, 10 insertions, 269 deletions
diff --git a/security/krb5-17/files/patch-ai b/security/krb5-17/files/patch-ai
index 634db6cdec73..f5b733194344 100644
--- a/security/krb5-17/files/patch-ai
+++ b/security/krb5-17/files/patch-ai
@@ -1,6 +1,6 @@
---- appl/gssftp/ftpd/ftpd.c.orig Wed Feb 28 16:06:45 2001
-+++ appl/gssftp/ftpd/ftpd.c Fri Apr 27 10:18:01 2001
-@@ -485,7 +485,13 @@
+--- appl/gssftp/ftpd/ftpd.c.orig Wed Jan 9 14:26:51 2002
++++ appl/gssftp/ftpd/ftpd.c Thu Jan 10 19:00:13 2002
+@@ -487,7 +487,13 @@
#ifndef LOG_DAEMON
#define LOG_DAEMON 0
#endif
@@ -15,273 +15,14 @@
addrlen = sizeof (his_addr);
if (getpeername(0, (struct sockaddr *)&his_addr, &addrlen) < 0) {
-@@ -761,7 +767,16 @@
- int result;
- #ifdef GSSAPI
- if (auth_type && strcmp(auth_type, "GSSAPI") == 0) {
-+ int len;
- authorized = ftpd_gss_userok(&client_name, name) == 0;
-+ len = sizeof("GSSAPI user is not authorized as "
-+ "; Password required.")
-+ + strlen(client_name.value)
-+ + strlen(name);
-+ if (len >= sizeof(buf)) {
-+ syslog(LOG_ERR, "user: username too long");
-+ name = "[username too long]";
-+ }
- sprintf(buf, "GSSAPI user %s is%s authorized as %s",
- client_name.value, authorized ? "" : " not",
- name);
-@@ -772,7 +787,18 @@
- #endif /* GSSAPI */
- #ifdef KRB5_KRB4_COMPAT
- if (auth_type && strcmp(auth_type, "KERBEROS_V4") == 0) {
-+ int len;
- authorized = kuserok(&kdata,name) == 0;
-+ len = sizeof("Kerberos user .@ is not authorized as "
-+ "; Password required.")
-+ + strlen(kdata.pname)
-+ + strlen(kdata.pinst)
-+ + strlen(kdata.prealm)
-+ + strlen(name);
-+ if (len >= sizeof(buf)) {
-+ syslog(LOG_ERR, "user: username too long");
-+ name = "[username too long]";
-+ }
- sprintf(buf, "Kerberos user %s%s%s@%s is%s authorized as %s",
- kdata.pname, *kdata.pinst ? "." : "",
- kdata.pinst, kdata.prealm,
-@@ -1179,6 +1205,11 @@
- } else {
- char line[FTP_BUFSIZ];
-
-+ if (strlen(cmd) + strlen(name) + 1 >= sizeof(line)) {
-+ syslog(LOG_ERR, "retrieve: filename too long");
-+ reply(501, "filename too long");
-+ return;
-+ }
- (void) sprintf(line, cmd, name), name = line;
- fin = ftpd_popen(line, "r"), closefunc = ftpd_pclose;
- st.st_size = -1;
-@@ -1417,6 +1448,10 @@
- return (file);
- }
-
-+/*
-+ * XXX callers need to limit total length of output string to
-+ * FTP_BUFSIZ
-+ */
- #ifdef STDARG
- secure_error(char *fmt, ...)
- #else
-@@ -1616,13 +1651,19 @@
- {
- char line[FTP_BUFSIZ];
- FILE *fin;
-- int c;
-+ int c, n;
- char str[FTP_BUFSIZ], *p;
-
-+ if (strlen(filename) + sizeof("/bin/ls -lgA ")
-+ >= sizeof(line)) {
-+ reply(501, "filename too long");
-+ return;
-+ }
- (void) sprintf(line, "/bin/ls -lgA %s", filename);
- fin = ftpd_popen(line, "r");
- lreply(211, "status of %s:", filename);
- p = str;
-+ n = 0;
- while ((c = getc(fin)) != EOF) {
- if (c == '\n') {
- if (ferror(stdout)){
-@@ -1639,7 +1680,16 @@
- *p = '\0';
- reply(0, "%s", str);
- p = str;
-- } else *p++ = c;
-+ n = 0;
-+ } else {
-+ *p++ = c;
-+ n++;
-+ if (n >= sizeof(str)) {
-+ reply(551, "output line too long");
-+ (void) ftpd_pclose(fin);
-+ return;
-+ }
-+ }
- }
- if (p != str) {
- *p = '\0';
-@@ -1723,6 +1773,10 @@
-
- char cont_char = ' ';
-
-+/*
-+ * XXX callers need to limit total length of output string to
-+ * FTP_BUFSIZ bytes for now.
-+ */
- #ifdef STDARG
- reply(int n, char *fmt, ...)
- #else
-@@ -1744,22 +1798,32 @@
- #endif
-
- if (auth_type) {
-- char in[FTP_BUFSIZ], out[FTP_BUFSIZ];
-+ /*
-+ * Deal with expansion in mk_{safe,priv},
-+ * radix_encode, gss_seal, plus slop.
-+ */
-+ char in[FTP_BUFSIZ*3/2], out[FTP_BUFSIZ*3/2];
- int length, kerror;
- if (n) sprintf(in, "%d%c", n, cont_char);
- else in[0] = '\0';
- strncat(in, buf, sizeof (in) - strlen(in) - 1);
- #ifdef KRB5_KRB4_COMPAT
- if (strcmp(auth_type, "KERBEROS_V4") == 0) {
-- if ((length = clevel == PROT_P ?
-- krb_mk_priv((unsigned char *)in,
-- (unsigned char *)out,
-- strlen(in), schedule, &kdata.session,
-- &ctrl_addr, &his_addr)
-- : krb_mk_safe((unsigned char *)in,
-- (unsigned char *)out,
-- strlen(in), &kdata.session,
-- &ctrl_addr, &his_addr)) == -1) {
-+ if (clevel == PROT_P)
-+ length = krb_mk_priv((unsigned char *)in,
-+ (unsigned char *)out,
-+ strlen(in),
-+ schedule, &kdata.session,
-+ &ctrl_addr,
-+ &his_addr);
-+ else
-+ length = krb_mk_safe((unsigned char *)in,
-+ (unsigned char *)out,
-+ strlen(in),
-+ &kdata.session,
-+ &ctrl_addr,
-+ &his_addr);
-+ if (length == -1) {
- syslog(LOG_ERR,
- "krb_mk_%s failed for KERBEROS_V4",
- clevel == PROT_P ? "priv" : "safe");
-@@ -1803,13 +1867,16 @@
- }
- #endif /* GSSAPI */
- /* Other auth types go here ... */
-- if (kerror = radix_encode(out, in, &length, 0)) {
-+ if (length >= sizeof(in) / 4 * 3) {
-+ syslog(LOG_ERR, "input to radix_encode too long");
-+ fputs(in, stdout);
-+ } else if (kerror = radix_encode(out, in, &length, 0)) {
- syslog(LOG_ERR, "Couldn't encode reply (%s)",
- radix_error(kerror));
- fputs(in,stdout);
- } else
-- printf("%s%c%s", clevel == PROT_P ? "632" : "631",
-- n ? cont_char : '-', in);
-+ printf("%s%c%s", clevel == PROT_P ? "632" : "631",
-+ n ? cont_char : '-', in);
- } else {
- if (n) printf("%d%c", n, cont_char);
- fputs(buf, stdout);
-@@ -1822,6 +1889,10 @@
- }
- }
-
-+/*
-+ * XXX callers need to limit total length of output string to
-+ * FTP_BUFSIZ
-+ */
- #ifdef STDARG
- lreply(int n, char *fmt, ...)
- #else
-@@ -1866,7 +1937,8 @@
-
- if (cp = strchr(cbuf,'\n'))
- *cp = '\0';
-- reply(500, "'%s': command not understood.", cbuf);
-+ reply(500, "'%.*s': command not understood.",
-+ FTP_BUFSIZ - sizeof("'': command not understood."), cbuf);
- }
-
- delete_file(name)
-@@ -2143,7 +2215,21 @@
- int code;
- char *string;
- {
-- reply(code, "%s: %s.", string, strerror(errno));
-+ char *err_string;
-+ size_t extra_len;
-+ err_string = strerror(errno);
-+ if (err_string == NULL)
-+ err_string = "(unknown error)";
-+ extra_len = strlen(err_string) + sizeof("(truncated): .");
-+ /*
-+ * XXX knows about FTP_BUFSIZ in reply()
-+ */
-+ if (strlen(string) + extra_len > FTP_BUFSIZ) {
-+ reply(code, "(truncated)%.*s: %s.",
-+ FTP_BUFSIZ - extra_len, string, err_string);
-+ } else {
-+ reply(code, "%s: %s.", string, err_string);
-+ }
- }
-
- auth(type)
-@@ -2226,6 +2312,10 @@
+@@ -2312,6 +2318,10 @@
+ if ((length = krb_mk_safe((u_char *)&cksum, out_buf, sizeof(cksum),
+ &kdata.session,&ctrl_addr, &his_addr)) == -1) {
secure_error("ADAT: krb_mk_safe failed");
- return(0);
- }
-+ if (length >= (FTP_BUFSIZ - sizeof("ADAT=")) / 4 * 3) {
-+ secure_error("ADAT: reply too long");
+ return(0);
+ }
- if (kerror = radix_encode(out_buf, buf, &length, 0)) {
- secure_error("Couldn't encode ADAT reply (%s)",
- radix_error(kerror));
-@@ -2360,6 +2450,16 @@
++ if (length >= (FTP_BUFSIZ - sizeof("ADAT=")) / 4 * 3) {
++ secure_error("ADAT: reply too long");
+ return(0);
}
-
- if (out_tok.length) {
-+ if (out_tok.length >= ((FTP_BUFSIZ - sizeof("ADAT="))
-+ / 4 * 3)) {
-+ secure_error("ADAT: reply too long");
-+ syslog(LOG_ERR, "ADAT: reply too long");
-+ (void) gss_release_cred(&stat_min, &server_creds);
-+ if (ret_flags & GSS_C_DELEG_FLAG)
-+ (void) gss_release_cred(&stat_min,
-+ &deleg_creds);
-+ return(0);
-+ }
- if (kerror = radix_encode(out_tok.value, gbuf, &out_tok.length, 0)) {
- secure_error("Couldn't encode ADAT reply (%s)",
- radix_error(kerror));
-@@ -2458,6 +2558,9 @@
- * n>=0 on success
- * -1 on error
- * -2 on security error
-+ *
-+ * XXX callers need to limit total length of output string to
-+ * FTP_BUFSIZ
- */
- #ifdef STDARG
- secure_fprintf(FILE *stream, char *fmt, ...)
-@@ -2575,6 +2678,15 @@
- dir->d_name[2] == '\0')
- continue;
-
-+ if (strlen(dirname) + strlen(dir->d_name)
-+ + 1 /* slash */
-+ + 2 /* CRLF */
-+ + 1 > sizeof(nbuf)) {
-+ syslog(LOG_ERR,
-+ "send_file_list: pathname too long");
-+ ret = -2; /* XXX */
-+ goto data_err;
-+ }
- sprintf(nbuf, "%s/%s", dirname, dir->d_name);
-
- /*
+ if (length >= (FTP_BUFSIZ - sizeof("ADAT=")) / 4 * 3) {