Use strlcpy instead of strcpy in many places
authorGreg Hudson <ghudson@mit.edu>
Fri, 24 Oct 2008 20:07:00 +0000 (20:07 +0000)
committerGreg Hudson <ghudson@mit.edu>
Fri, 24 Oct 2008 20:07:00 +0000 (20:07 +0000)
ticket: 6200
status: open

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20919 dc483132-0cff-0310-8789-dd5450dbe970

39 files changed:
src/appl/bsd/krlogin.c
src/appl/bsd/krlogind.c
src/appl/bsd/krshd.c
src/appl/bsd/login.c
src/appl/bsd/v4rcp.c
src/appl/gssftp/ftp/cmds.c
src/appl/gssftp/ftp/ftp.c
src/appl/gssftp/ftp/glob.c
src/appl/gssftp/ftpd/ftpd.c
src/appl/libpty/getpty.c
src/appl/libpty/update_utmp.c
src/appl/telnet/libtelnet/kerberos5.c
src/appl/telnet/telnet/commands.c
src/kadmin/dbutil/dumpv4.c
src/kadmin/server/ipropd_svc.c
src/kadmin/server/schpw.c
src/kdc/fakeka.c
src/kdc/kdc_authdata.c
src/kdc/kerberos_v4.c
src/kdc/network.c
src/lib/crypto/cksumtype_to_string.c
src/lib/crypto/enctype_to_string.c
src/lib/kadm5/clnt/Makefile.in
src/lib/kadm5/srv/Makefile.in
src/lib/kadm5/str_conv.c
src/lib/kdb/kdb5.c
src/lib/kdb/keytab.c
src/lib/krb5/krb/conv_princ.c
src/lib/krb5/krb/gic_pwd.c
src/lib/krb5/krb/str_conv.c
src/lib/krb5/os/an_to_ln.c
src/lib/krb5/os/hst_realm.c
src/lib/krb5/os/ktdefname.c
src/lib/krb5/os/sendto_kdc.c
src/plugins/kdb/db2/kdb_db2.c
src/tests/resolve/Makefile.in
src/tests/resolve/addrinfo-test.c
src/util/et/error_message.c
src/util/support/errors.c

index 4aa3b242b5be41057829d3204abe91079044ea0e..b3272815f66200bd6427a4c43f2218b1e7fc1bc7 100644 (file)
@@ -761,7 +761,7 @@ static int confirm_death ()
     if (!confirm) return (1);  /* no confirm, just die */
     
     if (gethostname (hostname, sizeof(hostname)-1) != 0)
-      strcpy (hostname, "???");
+      strlcpy (hostname, "???", sizeof(hostname));
     else
       hostname[sizeof(hostname)-1] = '\0';
     
index 2fe4c041037f2eeac1cec7fbec833cd5cbaab868..e42da144937a1c5a800ae8f42594b7ac4f306eca 100644 (file)
@@ -1383,7 +1383,7 @@ recvauth(valid_checksum)
     }
 
 #ifdef KRB5_KRB4_COMPAT
-    strcpy(v4_instance, "*");
+    strlcpy(v4_instance, "*", sizeof(v4_instance));
 #endif
 
     if ((status = krb5_auth_con_init(bsd_context, &auth_context)))
index e780216fa9cd70219599000a267d7103347f6297..0c2c82eab42214f22fde1c366f451b736f84b253 100644 (file)
@@ -1829,7 +1829,7 @@ recvauth(netfd, peersin, valid_checksum)
 #endif
 
 #ifdef KRB5_KRB4_COMPAT
-    strcpy(v4_instance, "*");
+    strlcpy(v4_instance, "*", sizeof(v4_instance));
 #endif
 
     status = krb5_auth_con_init(bsd_context, &auth_context);
@@ -1908,7 +1908,7 @@ recvauth(netfd, peersin, valid_checksum)
          * Assume it to be the same as the first component of the
         * principal's name. 
          */
-       strcpy(remuser, v4_kdata->pname);
+       strlcpy(remuser, v4_kdata->pname, sizeof(remuser));
 
        status = krb5_425_conv_principal(bsd_context, v4_kdata->pname,
                                         v4_kdata->pinst, v4_kdata->prealm,
index f54511e48c01c7f1f9c4ee8a04d5020558aaa488..a0348c273f5ac08142b1464668c2934e88659aa5 100644 (file)
@@ -2258,7 +2258,7 @@ int do_krb_login(host, strict)
     kdata = (AUTH_DAT *)malloc( sizeof(AUTH_DAT) );
     ticket = (KTEXT) malloc(sizeof(KTEXT_ST));
 
-    (void) strcpy(instance, "*");
+    (void) strlcpy(instance, "*", sizeof(instance));
     if ((rc=krb_recvauth(authoptions, 0, ticket, "rcmd",
                         instance, &sin,
                         (struct sockaddr_in *)0,
index 3cb7b3f97d7d3007db3448afac859992f7adce50..6baadf891877da9d16ed9c151814d8996e4137b7 100644 (file)
@@ -1071,7 +1071,7 @@ answer_auth()
        }
 
 #endif
-       strcpy(instance, "*");
+       strlcpy(instance, "*", sizeof(instance));
 
        /* If rshd was invoked with the -s argument, it will set the
            environment variable KRB_SRVTAB.  We use that to get the
index 2f7c8310a621be66d2632f3dca3d9c8e63c4056c..ac7a8039f8403adbdb84f3c85fccb5dc949ee77c 100644 (file)
@@ -184,7 +184,7 @@ void setpeer(argc, argv)
                form = FORM_N;
                mode = MODE_S;
                stru = STRU_F;
-               (void) strcpy(bytename, "8"), bytesize = 8;
+               (void) strlcpy(bytename, "8", sizeof(bytename)), bytesize = 8;
                if (autoauth) {
                        if (do_auth() && autoencrypt) {
                                clevel = PROT_P;
index 227ca5efc7eb7d6b038550769b009c9aba8d7628..1e4a0dcb4af6a9a37737a6cd39cedee0cabee3a8 100644 (file)
@@ -124,6 +124,8 @@ int gettimeofday(struct timeval *tv, void *tz);
 #define L_INCR 1
 #endif
 
+#include <k5-platform.h>
+
 #ifdef KRB5_KRB4_COMPAT
 #include <krb.h>
 
@@ -411,7 +413,7 @@ int login(char *host)
                return(1);
        for (n = 0; n < macnum; ++n) {
                if (!strcmp("init", macros[n].mac_name)) {
-                       (void) strcpy(line, "$init");
+                       (void) strlcpy(line, "$init", sizeof(line));
                        makeargv();
                        domacro(margc, margv);
                        break;
index 6134798ef41f93c7d858a7a9667367e9796b9f9d..2b7839205ba60b5c38debcddbb9b00583cb905af 100644 (file)
@@ -772,10 +772,12 @@ static int gethdir(mhome)
        char *mhome;
 {
        register struct passwd *pp = getpwnam(mhome);
+       size_t bufsize = lastgpathp - mhome;
 
-       if (!pp || ((mhome + strlen(pp->pw_dir)) >= lastgpathp))
+       if (!pp)
+               return (1);
+       if (strlcpy(mhome, pp->pw_dir, bufsize) >= bufsize)
                return (1);
-       (void) strcpy(mhome, pp->pw_dir);
        return (0);
 }
 #endif
index 4405e9b17fbcb2ac4347e60a21b56f40efa4b62f..30fe19a81a5a3e58c664cd65697414ef48ac765d 100644 (file)
@@ -1403,7 +1403,7 @@ dataconn(name, size, fmode)
                /* cast size to long in case sizeof(off_t) > sizeof(long) */
                (void) sprintf (sizebuf, " (%ld bytes)", (long)size);
        else
-               (void) strcpy(sizebuf, "");
+               sizebuf[0] = '\0';
        if (pdata >= 0) {
                int s, fromlen = sizeof(data_dest);
 
@@ -1748,9 +1748,9 @@ statcmd()
            strunames[stru], modenames[mode]);
        reply(0, "%s", str);
        if (data != -1)
-               strcpy(str, "     Data connection open");
+               strlcpy(str, "     Data connection open", sizeof(str));
        else if (pdata != -1) {
-               strcpy(str, "     in Passive mode");
+               strlcpy(str, "     in Passive mode", sizeof(str));
                sin4 = &pasv_addr;
                goto printaddr;
        } else if (usedefault == 0) {
@@ -1764,7 +1764,7 @@ printaddr:
                         UC(p[1]));
 #undef UC
        } else
-               strcpy(str, "     No data connection");
+               strlcpy(str, "     No data connection", sizeof(str));
        reply(0, "%s", str);
        reply(211, "End of status");
 }
@@ -2321,7 +2321,7 @@ char *adata;
                        return(0);
                }
                (void) memcpy((char *)ticket.dat, (char *)out_buf, ticket.length = length);
-               strcpy(instance, "*");
+               strlcpy(instance, "*", sizeof(instance));
 
                kerror = 255;
                for (service = krb4_services; *service; service++) {
index 610a471e610a585d715a35c2fba7a49ea6b623b1..995b2277053f3b49e61c7e6d113a89cfd470c94d 100644 (file)
@@ -23,6 +23,7 @@
 #include "com_err.h"
 #include "libpty.h"
 #include "pty-int.h"
+#include "k5-platform.h"
 
 long
 ptyint_getpty_ext(int *fd, char *slave, int slavelength, int do_grantpt)
@@ -59,12 +60,11 @@ ptyint_getpty_ext(int *fd, char *slave, int slavelength, int do_grantpt)
        *fd = -1;
        return PTY_GETPTY_NOPTY;
     }
-    if (strlen(slaveret) > slavelength - 1) {
+    if (strlcpy(slave, slaveret, slavelength) >= slavelength) {
        close(*fd);
        *fd = -1;
        return PTY_GETPTY_SLAVE_TOOLONG;
     }
-    else strcpy(slave, slaveret);
     return 0;
 #else /*HAVE__GETPTY*/
     
@@ -92,12 +92,11 @@ ptyint_getpty_ext(int *fd, char *slave, int slavelength, int do_grantpt)
 #endif
 #endif
        if (p) {
-           if (strlen(p) > slavelength - 1) {
+           if (strlcpy(slave, p, slavelength) >= slavelength) {
                    close (*fd);
                    *fd = -1;
                    return PTY_GETPTY_SLAVE_TOOLONG;
            }
-           strcpy(slave, p);
            return 0;
        }
 
index 8f3d6a66ca5f5831f54f5c60f237c76825fc0b35..292a1675b8124e0f34f55ae0bd3bc134d5a12272 100644 (file)
 #include "com_err.h"
 #include "libpty.h"
 #include "pty-int.h"
+#include "k5-platform.h"
 
 #if !defined(UTMP_FILE) && defined(_PATH_UTMP)
 #define UTMP_FILE _PATH_UTMP
@@ -547,7 +548,7 @@ pty_update_utmp(int process_type, int pid, const char *username,
      * pain, and would eit cross-compiling.
      */
 #ifdef __hpux
-    strcpy(utmp_id, cp);
+    strlcpy(utmp_id, cp, sizeof(utmp_id));
 #else
     if (len > 2 && *(cp - 1) != '/')
        snprintf(utmp_id, sizeof(utmp_id), "k%s", cp - 1);
index aec975670e31b448911d0bda6ada2790e81b5645..06c6e98477717d479d9b54ea2c7b4b59ef116cf4 100644 (file)
@@ -452,7 +452,8 @@ kerberos5_is(ap, data, cnt)
                 * the default is of length 4.
                 */
                if (krb5_princ_size(telnet_context,ticket->server) < 1) {
-                   (void) strcpy(errbuf, "malformed service name");
+                   (void) strlcpy(errbuf, "malformed service name",
+                                  sizeof(errbuf));
                    goto errout;
                }
                if (krb5_princ_component(telnet_context,ticket->server,0)->length < 256) {
@@ -472,7 +473,8 @@ kerberos5_is(ap, data, cnt)
                        goto errout;
                    }
                } else {
-                   (void) strcpy(errbuf, "service name too long");
+                   (void) strlcpy(errbuf, "service name too long",
+                                  sizeof(errbuf));
                    goto errout;
                }
 
@@ -487,8 +489,9 @@ kerberos5_is(ap, data, cnt)
                }
                if ((ap->way & AUTH_ENCRYPT_MASK) == AUTH_ENCRYPT_ON &&
                    !authenticator->checksum) {
-                       (void) strcpy(errbuf,
-                               "authenticator is missing required checksum");
+                       (void) strlcpy(errbuf,
+                               "authenticator is missing required checksum",
+                                      sizeof(errbuf));
                        goto errout;
                }
                if (authenticator->checksum) {
index 57106de7fbd8ac1140077cf6847a2d61e016bd35..92418dbed176f3ca998a6b45c7bf2c1ad409cfac 100644 (file)
@@ -117,6 +117,8 @@ static      unsigned long sourceroute(char *, char **, int *);
 
 #include "fake-addrinfo.h"
 
+#include <k5-platform.h>
+
 char   *hostname;
 static char _hostname[MAXDNAME];
 static char hostaddrstring[NI_MAXHOST];
@@ -2431,7 +2433,7 @@ tn(argc, argv)
        return 0;
     }
     if (argc < 2) {
-       (void) strcpy(line, "open ");
+       (void) strlcpy(line, "open ", sizeof(line));
        printf("(to) ");
        (void) fgets(&line[strlen(line)], (int) (sizeof(line) - strlen(line)),
                     stdin);
@@ -2580,7 +2582,8 @@ tn(argc, argv)
        if (error) {
            fprintf (stderr, "getnameinfo() error printing address: %s\n",
                     gai_strerror (error));
-           strcpy (hostaddrstring, "[address unprintable]");
+           strlcpy (hostaddrstring, "[address unprintable]",
+                    sizeof(hostaddrstring));
        }
        printf("Trying %s...\r\n", hostaddrstring);
 #if    defined(IP_OPTIONS) && defined(IPPROTO_IP)
index e6bd1f407471759a555e103c2134ddcf493e3bff..065206ab3b0fb6edc10cd1f7bfa064c4beca83bc 100644 (file)
@@ -183,7 +183,7 @@ dump_v4_iterator(ptr, entry)
     if (! principal->name[0])
        return 0;
     if (! principal->instance[0])
-       strcpy(principal->instance, "*");
+       strlcpy(principal->instance, "*", sizeof(principal->instance));
 
     /* Now move to mod princ */
     if ((retval = krb5_dbe_lookup_mod_princ_data(util_context,entry,
@@ -202,9 +202,9 @@ dump_v4_iterator(ptr, entry)
     }
 
     if (! principal->mod_name[0])
-       strcpy(principal->mod_name, "*");
+       strlcpy(principal->mod_name, "*", sizeof(principal->mod_name));
     if (! principal->mod_instance[0])
-       strcpy(principal->mod_instance, "*");
+       strlcpy(principal->mod_instance, "*", sizeof(principal->mod_instance));
     
     /* OK deal with the key now. */
     for (max_kvno = i = 0; i < entry->n_key_data; i++) {
index 673d2a9af0e857a5eeeb086c656909d046924643..b834425b388ff49cf440e4976b3de49e4b3c671c 100644 (file)
@@ -229,9 +229,8 @@ getclhoststr(char *clprinc, char *cl, int len)
        /* XXX "!++s"?  */
        if (!++s)
            return NULL;
-       if (strlen(s) >= len)
+       if (strlcpy(cl, s, len) >= len)
            return NULL;
-       strcpy(cl, s);
        /* XXX Copy with @REALM first, with bounds check, then
           chop off the realm??  */
        if ((s = strchr(cl, '@')) != NULL) {
index 76aa2ca8525643f0e71f40d54a5241178bc2e9fa..e8a6896e7a3ec3cd179f36d3a068f22b69620c80 100644 (file)
@@ -58,7 +58,7 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
           or the caller passed in garbage */
        ret = KRB5KRB_AP_ERR_MODIFIED;
        numresult = KRB5_KPASSWD_MALFORMED;
-       strcpy(strresult, "Request was truncated");
+       strlcpy(strresult, "Request was truncated", sizeof(strresult));
        goto chpwfail;
     }
 
@@ -93,7 +93,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     if (ptr + ap_req.length >= req->data + req->length) {
        ret = KRB5KRB_AP_ERR_MODIFIED;
        numresult = KRB5_KPASSWD_MALFORMED;
-       strcpy(strresult, "Request was truncated in AP-REQ");
+       strlcpy(strresult, "Request was truncated in AP-REQ",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -105,7 +106,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     ret = krb5_auth_con_init(context, &auth_context);
     if (ret) {
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed initializing auth context");
+       strlcpy(strresult, "Failed initializing auth context",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -113,7 +115,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
                                 KRB5_AUTH_CONTEXT_DO_SEQUENCE);
     if (ret) {
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed initializing auth context");
+       strlcpy(strresult, "Failed initializing auth context",
+               sizeof(strresult));
        goto chpwfail;
     }
        
@@ -121,7 +124,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
                               "kadmin", "changepw", NULL);
     if (ret) {
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed building kadmin/changepw principal");
+       strlcpy(strresult, "Failed building kadmin/changepw principal",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -130,7 +134,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
 
     if (ret) {
        numresult = KRB5_KPASSWD_AUTHERROR;
-       strcpy(strresult, "Failed reading application request");
+       strlcpy(strresult, "Failed reading application request",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -141,7 +146,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     if (getsockname(s, &local_addr, &addrlen) < 0) {
        ret = errno;
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed getting server internet address");
+       strlcpy(strresult, "Failed getting server internet address",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -173,7 +179,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     if (getpeername(s, &remote_addr, &addrlen) < 0) {
        ret = errno;
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed getting client internet address");
+       strlcpy(strresult, "Failed getting client internet address",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -205,7 +212,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
                             &remote_kaddr);
     if (ret) {
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed storing client internet address");
+       strlcpy(strresult, "Failed storing client internet address",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -213,7 +221,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
 
     if (!(ticket->enc_part2->flags & TKT_FLG_INITIAL)) {
        numresult = KRB5_KPASSWD_AUTHERROR;
-       strcpy(strresult, "Ticket must be derived from a password");
+       strlcpy(strresult, "Ticket must be derived from a password",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -222,7 +231,8 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     ret = krb5_mk_rep(context, auth_context, &ap_rep);
     if (ret) {
        numresult = KRB5_KPASSWD_AUTHERROR;
-       strcpy(strresult, "Failed replying to application request");
+       strlcpy(strresult, "Failed replying to application request",
+               sizeof(strresult));
        goto chpwfail;
     }
 
@@ -234,14 +244,15 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     ret = krb5_rd_priv(context, auth_context, &cipher, &clear, &replay);
     if (ret) {
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed decrypting request");
+       strlcpy(strresult, "Failed decrypting request", sizeof(strresult));
        goto chpwfail;
     }
 
     ret = krb5_unparse_name(context, ticket->enc_part2->client, &clientstr);
     if (ret) {
        numresult = KRB5_KPASSWD_HARDERROR;
-       strcpy(strresult, "Failed unparsing client name for log");
+       strlcpy(strresult, "Failed unparsing client name for log",
+               sizeof(strresult));
        goto chpwfail;
     }
     /* change the password */
@@ -282,7 +293,7 @@ process_chpw_request(context, server_handle, realm, s, keytab, sockin,
     /* success! */
 
     numresult = KRB5_KPASSWD_SUCCESS;
-    strcpy(strresult, "");
+    strlcpy(strresult, "", sizeof(strresult));
 
 chpwfail:
 
@@ -303,14 +314,16 @@ chpwfail:
                                     NULL);
        if (ret) {
            numresult = KRB5_KPASSWD_HARDERROR;
-           strcpy(strresult,
-                  "Failed storing client and server internet addresses");
+           strlcpy(strresult,
+                   "Failed storing client and server internet addresses",
+                   sizeof(strresult));
        } else {
            ret = krb5_mk_priv(context, auth_context, &clear, &cipher,
                               &replay);
            if (ret) {
                numresult = KRB5_KPASSWD_HARDERROR;
-               strcpy(strresult, "Failed encrypting reply");
+               strlcpy(strresult, "Failed encrypting reply",
+                       sizeof(strresult));
            }
        }
     }
index 21344596e4619d20e8428ded412fd234c06d1a59..f861d48ed0e82164ac906bfdaffbec9f4bbefaba 100644 (file)
@@ -51,6 +51,7 @@
 #include <com_err.h>
 #include <kerberosIV/krb.h>
 #include <kerberosIV/des.h>
+#include <k5-platform.h>
 
 #ifndef LINT
 static char rcsid[]=
@@ -778,14 +779,14 @@ packet_t req, reply;
      * Initialize these so we don't crash trying to print them in
      * case they don't get filled in.
      */
-    strcpy(rname, "Unknown");
-    strcpy(rinst, "Unknown");
-    strcpy(sname, "Unknown");
-    strcpy(sinst, "Unknown");
-    strcpy(cname, "Unknown");
-    strcpy(cinst, "Unknown");
-    strcpy(cell, "Unknown");
-    strcpy(realm, "Unknown");
+    strlcpy(rname, "Unknown", sizeof(rname));
+    strlcpy(rinst, "Unknown", sizeof(rinst));
+    strlcpy(sname, "Unknown", sizeof(sname));
+    strlcpy(sinst, "Unknown", sizeof(sinst));
+    strlcpy(cname, "Unknown", sizeof(cname));
+    strlcpy(cinst, "Unknown", sizeof(cinst));
+    strlcpy(cell, "Unknown", sizeof(cell));
+    strlcpy(realm, "Unknown", sizeof(realm));
     
     p = req->base;
     maxn = req->len;
@@ -797,7 +798,7 @@ packet_t req, reply;
 
     GET_PSTR(cell);
     if (!cell[0])
-       strcpy(cell, localcell);
+      strlcpy(cell, localcell, sizeof(cell));
 
     if (debug)
        fprintf(stderr, "Cell is %s\n", cell);
@@ -963,7 +964,7 @@ packet_t req, reply;
        (strcasecmp(cell, localcell) == 0)) {
        char *c;
 
-       strcpy(rinst, localcell);
+       strlcpy(rinst, localcell, sizeof(rinst));
 
        for (c = rinst; *c != NULL; c++)
            *c = (char) tolower( (int) *c);
index a1acdfd1a0d8ae8b118c89238c8fd0dceba36dbf..a8f9241ea8aa7755f8bb693456b7c7f4ae5f9e36 100644 (file)
@@ -101,7 +101,7 @@ greet_authdata(krb5_context ctx, krb5_db_entry *client,
        free(a);
        return ENOMEM;
     }
-    strcpy(p, "hello");
+    strlcpy(p, "hello", GREET_SIZE);
     a->magic = KV5M_AUTHDATA;
     a->ad_type = -42;
     a->length = GREET_SIZE;
index b2bfa4b54ac6378121b653dc8061a771692e1845..8ac015b7f323dcf5fc5f9e029a716270261a6f93 100644 (file)
@@ -288,7 +288,7 @@ static char * v4_klog( int type, const char *format, ...)
     case L_NTGT_INTK:
     case L_TKT_REQ:
     case L_APPL_REQ:
-       strcpy(log_text, "PROCESS_V4:");
+       strlcpy(log_text, "PROCESS_V4:", sizeof(log_text));
        vsnprintf(log_text+strlen(log_text),
                  sizeof(log_text) - strlen(log_text),
                  format, pvar);
index 3bad9650c423abaae9fa62239e3668da6df92858..61504996492aede2f7b743a64dde625191fc8638 100644 (file)
@@ -160,7 +160,7 @@ static const char *paddr (struct sockaddr *sa)
     if (getnameinfo(sa, socklen(sa),
                    buf, sizeof(buf), portbuf, sizeof(portbuf),
                    NI_NUMERICHOST|NI_NUMERICSERV))
-       strcpy(buf, "<unprintable>");
+       strlcpy(buf, "<unprintable>", sizeof(buf));
     else {
        unsigned int len = sizeof(buf) - strlen(buf);
        char *p = buf + strlen(buf);
@@ -695,7 +695,7 @@ setup_udp_port(void *P_data, struct sockaddr *addr)
     err = getnameinfo(addr, socklen(addr), haddrbuf, sizeof(haddrbuf),
                      0, 0, NI_NUMERICHOST);
     if (err)
-       strcpy(haddrbuf, "<unprintable>");
+       strlcpy(haddrbuf, "<unprintable>", sizeof(haddrbuf));
 
     switch (addr->sa_family) {
     case AF_INET:
@@ -1192,7 +1192,7 @@ static void process_packet(struct connection *conn, const char *prog,
        char addrbuf[100];
        if (getnameinfo(ss2sa(&daddr), daddr_len, addrbuf, sizeof(addrbuf),
                        0, 0, NI_NUMERICHOST))
-           strcpy(addrbuf, "?");
+           strlcpy(addrbuf, "?", sizeof(addrbuf));
        com_err(prog, 0, "pktinfo says local addr is %s", addrbuf);
     }
 #endif
@@ -1216,7 +1216,7 @@ static void process_packet(struct connection *conn, const char *prog,
         krb5_free_data(kdc_context, response);
        if (inet_ntop(((struct sockaddr *)&saddr)->sa_family,
                      addr.contents, addrbuf, sizeof(addrbuf)) == 0) {
-           strcpy(addrbuf, "?");
+           strlcpy(addrbuf, "?", sizeof(addrbuf));
        }
        com_err(prog, errno, "while sending reply to %s/%d",
                addrbuf, faddr.port);
@@ -1269,7 +1269,7 @@ static void accept_tcp_connection(struct connection *conn, const char *prog,
                    newconn->u.tcp.addrbuf, sizeof(newconn->u.tcp.addrbuf),
                    tmpbuf, sizeof(tmpbuf),
                    NI_NUMERICHOST | NI_NUMERICSERV))
-       strcpy(newconn->u.tcp.addrbuf, "???");
+       strlcpy(newconn->u.tcp.addrbuf, "???", sizeof(newconn->u.tcp.addrbuf));
     else {
        char *p, *end;
        p = newconn->u.tcp.addrbuf;
@@ -1277,7 +1277,7 @@ static void accept_tcp_connection(struct connection *conn, const char *prog,
        p += strlen(p);
        if (end - p > 2 + strlen(tmpbuf)) {
            *p++ = '.';
-           strcpy(p, tmpbuf);
+           strlcpy(p, tmpbuf, end - p);
        }
     }
 #if 0
index 54a0f3aec519f9f63c57760294103958a92efbe4..ee1d50ba5be43b2cd5b086e908345cd0c98ee471 100644 (file)
@@ -34,10 +34,9 @@ krb5_cksumtype_to_string(krb5_cksumtype cksumtype, char *buffer, size_t buflen)
 
     for (i=0; i<krb5_cksumtypes_length; i++) {
        if (krb5_cksumtypes_list[i].ctype == cksumtype) {
-           if ((strlen(krb5_cksumtypes_list[i].out_string)+1) > buflen)
+           if (strlcpy(buffer, krb5_cksumtypes_list[i].out_string,
+                       buflen) >= buflen)
                return(ENOMEM);
-
-           strcpy(buffer, krb5_cksumtypes_list[i].out_string);
            return(0);
        }
     }
index f77dbff1cdca516eb2e8b4c4f62c8d6a6a064b60..28fa63ee159e57e6a51700e8c299f8f4614fb934 100644 (file)
@@ -34,10 +34,9 @@ krb5_enctype_to_string(krb5_enctype enctype, char *buffer, size_t buflen)
 
     for (i=0; i<krb5_enctypes_length; i++) {
        if (krb5_enctypes_list[i].etype == enctype) {
-           if ((strlen(krb5_enctypes_list[i].out_string)+1) > buflen)
+           if (strlcpy(buffer, krb5_enctypes_list[i].out_string,
+                       buflen) >= buflen)
                return(ENOMEM);
-
-           strcpy(buffer, krb5_enctypes_list[i].out_string);
            return(0);
        }
     }
index 36c663f43f3335ee85f8bfb48abe8f7ec3b8c5f6..3fb46e09ba21ca27ab851027f8730d5e5af8694c 100644 (file)
@@ -14,8 +14,8 @@ SHLIB_EXPDEPS=\
        $(TOPLIBD)/libgssapi_krb5$(SHLIBEXT) \
        $(TOPLIBD)/libkrb5$(SHLIBEXT) \
        $(TOPLIBD)/libk5crypto$(SHLIBEXT) \
-       $(COM_ERR_DEPLIB)
-SHLIB_EXPLIBS=-lgssrpc -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err
+       $(COM_ERR_DEPLIB) $(SUPPORT_LIBDEP)
+SHLIB_EXPLIBS=-lgssrpc -lgssapi_krb5 -lkrb5 -lk5crypto $(SUPPORT_LIB) -lcom_err
 SHLIB_DIRS=-L$(TOPLIBD)
 SHLIB_RDIRS=$(KRB5_LIBDIR)
 RELDIR=kadm5/clnt
index e6410f2bf99ed1e209d1044eb9488688911d9e7d..33d8af788f589a8de86c0f1fadf267f9abcbe5cb 100644 (file)
@@ -22,9 +22,9 @@ SHLIB_EXPDEPS=\
        $(TOPLIBD)/libkdb5$(SHLIBEXT) \
        $(TOPLIBD)/libkrb5$(SHLIBEXT) \
        $(TOPLIBD)/libk5crypto$(SHLIBEXT) \
-       $(COM_ERR_DEPLIB)
+       $(COM_ERR_DEPLIB) $(SUPPORT_LIBDEP)
 SHLIB_EXPLIBS =        -lgssrpc -lgssapi_krb5 -lkdb5 $(KDB5_DB_LIB) \
-               -lkrb5 -lk5crypto -lcom_err @GEN_LIB@
+               -lkrb5 -lk5crypto $(SUPPORT_LIB) -lcom_err @GEN_LIB@
 SHLIB_DIRS=-L$(TOPLIBD)
 SHLIB_RDIRS=$(KRB5_LIBDIR)
 RELDIR=kadm5/srv
index 0d142d6de4d4877d337dda2208258bf3f66021cc..b9e58aac62163e7e4207a4bae9859ff33205d847 100644 (file)
@@ -221,8 +221,8 @@ krb5_input_flag_to_string(flag, buffer, buflen)
     size_t     buflen;
 {
     if(flag < 0 || flag >= flags_table_nents) return ENOENT; /* End of list */
-    if(strlen(flags_table[flag].fl_specifier) > buflen) return ENOMEM;
-    strcpy(buffer, flags_table[flag].fl_specifier);
+    if(strlcpy(buffer, flags_table[flag].fl_specifier, buflen) >= buflen)
+       return ENOMEM;
     return  0;
 }
 
index eb68f22fd94631ad86bb06cb8dd1068167394b3e..9c18e5dd84e7b87e4188b400249375dbd966c013 100644 (file)
@@ -251,7 +251,7 @@ kdb_load_library(krb5_context kcontext, char *lib_name, db_library * lib)
        goto clean_n_exit;
     }
 
-    strcpy((*lib)->name, lib_name);
+    strlcpy((*lib)->name, lib_name, sizeof((*lib)->name));
 
 #if !defined(KDB5_USE_LIB_KDB_DB2) && !defined(KDB5_USE_LIB_TEST)
 #error No database module defined
@@ -341,7 +341,7 @@ kdb_load_library(krb5_context kcontext, char *lib_name, db_library * lib)
        goto clean_n_exit;
     }
 
-    strcpy((*lib)->name, lib_name);
+    strlcpy((*lib)->name, lib_name, sizeof((*lib)->name));
 
     /* Fetch the list of directories specified in the config
        file(s) first.  */
index 227a42e086f46b8fb22b8259e8b466fadab0fbcf..fa95e48515e1630a2a1b8e2fe7832fe2947b9745 100644 (file)
@@ -41,9 +41,8 @@ static krb5_error_code
 krb5_ktkdb_get_name(krb5_context context, krb5_keytab keytab,
                    char *name, unsigned int namelen)
 {
-    if (namelen < sizeof("KDB:"))
+    if (strlcpy(name, "KDB:", namelen) >= namelen);
        return KRB5_KT_NAME_TOOLONG;
-    strcpy(name, "KDB:");
     return 0;
 }
 
index 3a1ca63b9249b770a3e7358c83525f1c8f29bc11..60c81151332fa83c70c4876910124c082927ee90 100644 (file)
@@ -169,9 +169,8 @@ krb5_524_conv_principal(krb5_context context, krb5_const_principal princ,
                    * It is, so set the new name now, and chop off
                    * instance's domain name if requested.
                    */
-                  if (strlen (p->v4_str) > ANAME_SZ - 1)
+                  if (strlcpy(name, p->v4_str, ANAME_SZ) >= ANAME_SZ)
                       return KRB5_INVALID_PRINCIPAL;
-                  strcpy(name, p->v4_str);
                   if (p->flags & DO_REALM_CONVERSION) {
                       compo = krb5_princ_component(context, princ, 1);
                       c = strnchr(compo->data, '.', compo->length);
index ab491105e3449121872e95738c1b33fe0cc5bc0b..716d3cc43405cb6d506ab7b4a4879ad63dafc518 100644 (file)
@@ -112,11 +112,11 @@ krb5_get_init_creds_password(krb5_context context,
    pw0.data = pw0array;
 
    if (password && password[0]) {
-      if ((pw0.length = strlen(password)) > sizeof(pw0array)) {
-        ret = EINVAL;
-        goto cleanup;
+      if (strlcpy(pw0.data, password, sizeof(pw0array)) >= sizeof(pw0array)) {
+         ret = EINVAL;
+         goto cleanup;
       }
-      strcpy(pw0.data, password);
+      pw0.length = strlen(password);
    } else {
       pw0.data[0] = '\0';
       pw0.length = sizeof(pw0array);
@@ -238,7 +238,8 @@ krb5_get_init_creds_password(krb5_context context,
    prompt[1].reply = &pw1;
    prompt_types[1] = KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN;
 
-   strcpy(banner, "Password expired.  You must change it now.");
+   strlcpy(banner, "Password expired.  You must change it now.",
+          sizeof(banner));
 
    for (tries = 3; tries; tries--) {
       pw0.length = sizeof(pw0array);
index 986274d40b6fa180146b2e128507afbb24faa374..2413cebcdfd77ea3c76b529c491f3df762eb279b 100644 (file)
@@ -118,11 +118,9 @@ krb5_salttype_to_string(krb5_int32 salttype, char *buffer, size_t buflen)
        }
     }
     if (out) {
-       if (buflen > strlen(out))
-           strcpy(buffer, out);
-       else
-           out = (char *) NULL;
-       return((out) ? 0 : ENOMEM);
+       if (strlcpy(buffer, out, buflen) >= buflen)
+           return(ENOMEM);
+       return(0);
     }
     else
        return(EINVAL);
index 6e6dadc570271df7e25797e017043e8cdf52da71..83bce2bab59c1a1b6301a2716037266be6cc21c6 100644 (file)
@@ -600,9 +600,7 @@ rule_an_to_ln(krb5_context context, char *rule, krb5_const_principal aname, cons
            kret = aname_replacer(selstring, &current, &outstring);
            if (outstring) {
                /* Copy out the value if there's enough room */
-               if (strlen(outstring)+1 <= (size_t) lnsize)
-                   strcpy(lname, outstring);
-               else
+               if (strlcpy(lname, outstring, lnsize) >= lnsize)
                    kret = KRB5_CONFIG_NOTENUFSPACE;
                free(outstring);
            }
@@ -728,9 +726,8 @@ krb5_aname_to_localname(krb5_context context, krb5_const_principal aname, int ln
                    }
 
                    /* Copy out the value if there's enough room */
-                   if (strlen(mapping_values[nvalid-1])+1 <= (size_t) lnsize)
-                       strcpy(lname, mapping_values[nvalid-1]);
-                   else
+                   if (strlcpy(lname, mapping_values[nvalid-1],
+                               lnsize) >= lnsize)
                        kret = KRB5_CONFIG_NOTENUFSPACE;
 
                    /* Free residue */
index 258288d93c0fd2759c0691c0ae831018272ea214..27641f73ad6f219112c03b195fa2b342ae3f1bb3 100644 (file)
@@ -99,9 +99,8 @@ krb5_try_realm_txt_rr(const char *prefix, const char *name, char **realm)
      */
 
     if (name == NULL || name[0] == '\0') {
-       if (strlen (prefix) >= sizeof(host)-1)
+        if (strlcpy(host, prefix, sizeof(host)) >= sizeof(host))
            return KRB5_ERR_HOST_REALM_UNKNOWN;
-        strcpy(host,prefix);
     } else {
         if ( strlen(prefix) + strlen(name) + 3 > MAXDNAME )
             return KRB5_ERR_HOST_REALM_UNKNOWN;
index 022d93cc56a93d44304b41345e0525b0308ef5b7..89bb35fcfb806d04aa65ec5136223a20bb4003e3 100644 (file)
@@ -44,22 +44,19 @@ krb5_kt_default_name(krb5_context context, char *name, int name_size)
     unsigned int namesize = (name_size < 0 ? 0 : name_size);
 
     if (krb5_overridekeyname) {
-       if (namesize < (strlen(krb5_overridekeyname)+1))
+       if (strlcpy(name, krb5_overridekeyname, namesize) >= namesize)
            return KRB5_CONFIG_NOTENUFSPACE;
-       strcpy(name, krb5_overridekeyname);
     } else if ((context->profile_secure == FALSE) &&
        (cp = getenv("KRB5_KTNAME"))) {
-       if (namesize < (strlen(cp)+1))
+       if (strlcpy(name, cp, namesize) >= namesize)
            return KRB5_CONFIG_NOTENUFSPACE;
-       strcpy(name, cp);
     } else if ((profile_get_string(context->profile,
                                   "libdefaults",
                                   "default_keytab_name", NULL, 
                                   NULL, &retval) == 0) &&
               retval) {
-       if (namesize < (strlen(retval)+1))
+       if (strlcpy(name, retval, namesize) >= namesize)
            return KRB5_CONFIG_NOTENUFSPACE;
-       strcpy(name, retval);
        profile_release_string(retval);
     } else {
 #if defined(_WIN32)
@@ -74,9 +71,8 @@ krb5_kt_default_name(krb5_context context, char *name, int name_size)
            snprintf(name, namesize, krb5_defkeyname, defname);
        }
 #else
-       if (namesize < (strlen(krb5_defkeyname)+1))
+       if (strlcpy(name, krb5_defkeyname, namesize) >= namesize)
            return KRB5_CONFIG_NOTENUFSPACE;
-       strcpy(name, krb5_defkeyname);
 #endif
     }
     return 0;
index 218748273e8b27828470a2fd97d1515f9b2360b5..e95be3af04a36c9d68222a55378b9af5ee075980 100644 (file)
@@ -222,9 +222,9 @@ krb5int_debug_fprint (const char *fmt, ...)
            /* %A => addrinfo */
            ai = va_arg(args, struct addrinfo *);
            if (ai->ai_socktype == SOCK_DGRAM)
-               strcpy(tmpbuf, "dgram");
+               strlcpy(tmpbuf, "dgram", sizeof(tmpbuf));
            else if (ai->ai_socktype == SOCK_STREAM)
-               strcpy(tmpbuf, "stream");
+               strlcpy(tmpbuf, "stream", sizeof(tmpbuf));
            else
                snprintf(tmpbuf, sizeof(tmpbuf), "socktype%d", ai->ai_socktype);
            if (0 != getnameinfo (ai->ai_addr, ai->ai_addrlen,
index 1e67ea03478205eb101be358abc8aec222bb7dd5..704e47d6b2582854bd6fb1ec1ca3ea532dc6518f 100644 (file)
@@ -1735,7 +1735,7 @@ krb5_db2_db_rename(context, from, to)
            retval = errno;
            goto errout;
        }
-       strcat(new_policy, ".lock");
+       strlcat(new_policy, ".lock",sizeof(new_policy));
        (void) unlink(new_policy);
     }
 
index 2f0815607f29b43a9c87b2c29fb48e864cf01bf0..f999772b7fb42ff81c19e0e7025d5ac2caeebf2d 100644 (file)
@@ -16,7 +16,7 @@ resolve: resolve.o
        $(CC_LINK) -o $@ resolve.o $(LIBS)
 
 addrinfo-test: addrinfo-test.o
-       $(CC_LINK) -o $@ addrinfo-test.o $(LIBS)
+       $(CC_LINK) -o $@ addrinfo-test.o $(SUPPORT_LIB) $(LIBS)
 
 fake-addrinfo-test: fake-addrinfo-test.o
        $(CC_LINK) -o $@ fake-addrinfo-test.o $(SUPPORT_LIB) $(LIBS)
index 35fb0731d1f1c60b6d270297a205506ce0586ae3..42e4dd62a4c0a1c2f1b2cdab420850a9c467e32a 100644 (file)
@@ -44,6 +44,7 @@
 #include <sys/socket.h>
 #include <netdb.h>
 #include <netinet/in.h> /* needed for IPPROTO_* on NetBSD */
+#include <k5-platform.h>
 #ifdef USE_FAKE_ADDRINFO
 #include "fake-addrinfo.h"
 #endif
@@ -284,8 +285,10 @@ int main (int argc, char *argv[])
            ap2->ai_addr->sa_family = ap2->ai_family;
        }
        if (getnameinfo(ap2->ai_addr, ap2->ai_addrlen, hbuf, sizeof(hbuf),
-                       pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV))
-           strcpy(hbuf, "..."), strcpy(pbuf, "...");
+                       pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV)) {
+           strlcpy(hbuf, "...", sizeof(hbuf));
+           strlcpy(pbuf, "...", sizeof(pbuf));
+       }
        printf("%p:\n"
               "\tfamily = %s\tproto = %-4s\tsocktype = %s\n",
               ap2, familyname(ap2->ai_family),
index d9485cdd7582151ca047591af058d79b2909a2ba..e9d681b6ce338ec57cb59105f8582c8cd1539872 100644 (file)
@@ -260,7 +260,7 @@ oops:
        if (cp == NULL)
            return "Unknown error code";
        cp1 = cp;
-       strcpy(cp, "Unknown code ");
+       strlcpy(cp, "Unknown code ", ET_EBUFSIZ);
        cp += sizeof("Unknown code ") - 1;
        if (table_num != 0L) {
                (void) error_table_name_r(table_num, cp);
index cec10337f5ad649d07013a70430977779f3f3e82..b0c2ae0133c32907947040f76c3e0f99bdaedafa 100644 (file)
@@ -132,7 +132,8 @@ krb5int_get_error (struct errinfo *ep, long code)
     if (code == ep->code && ep->msg) {
        r = strdup(ep->msg);
        if (r == NULL) {
-           strcpy(ep->scratch_buf, _("Out of memory"));
+           strlcpy(ep->scratch_buf, _("Out of memory"),
+                   sizeof(ep->scratch_buf));
            r = ep->scratch_buf;
        }
        return r;