As Paul has just pointed out, much of my strncpy() usage was either

bogus or overly complex and really needed to be done more consistently
and sanely throughout - no question about it.  Done.

Suggested-By: Paul Traina <pst@Shockwave.COM>
This commit is contained in:
Jordan K. Hubbard 1996-12-09 08:22:19 +00:00
parent 8bc3ddf57f
commit 00b69db338
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=20247
38 changed files with 200 additions and 169 deletions

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: anonFTP.c,v 1.16 1996/09/01 08:17:12 jkh Exp $ * $Id: anonFTP.c,v 1.17 1996/09/06 05:58:27 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Coranth Gryphon. All rights reserved. * Coranth Gryphon. All rights reserved.
@ -179,7 +179,7 @@ createFtpUser(void)
tptr = msgGetInput("14", "What group name to use for gid %d ?", gid); tptr = msgGetInput("14", "What group name to use for gid %d ?", gid);
if (tptr && *tptr) { if (tptr && *tptr) {
strcpy(tconf.group, tptr); SAFE_STRCPY(tconf.group, tptr);
if ((tgrp = getgrnam(tconf.group))) { if ((tgrp = getgrnam(tconf.group))) {
gid = tgrp->gr_gid; gid = tgrp->gr_gid;
} }
@ -250,10 +250,10 @@ anonftpOpenDialog(void)
bzero(&tconf, sizeof(tconf)); bzero(&tconf, sizeof(tconf));
strcpy(tconf.group, FTP_GROUP); SAFE_STRCPY(tconf.group, FTP_GROUP);
strcpy(tconf.upload, FTP_UPLOAD); SAFE_STRCPY(tconf.upload, FTP_UPLOAD);
strcpy(tconf.comment, FTP_COMMENT); SAFE_STRCPY(tconf.comment, FTP_COMMENT);
strcpy(tconf.homedir, FTP_HOMEDIR); SAFE_STRCPY(tconf.homedir, FTP_HOMEDIR);
sprintf(tconf.uid, "%d", FTP_UID); sprintf(tconf.uid, "%d", FTP_UID);
/* Loop over the layout list, create the objects, and add them /* Loop over the layout list, create the objects, and add them
@ -389,10 +389,10 @@ configAnonFTP(dialogMenuItem *self)
sprintf(tconf.uid, "%d", FTP_UID); sprintf(tconf.uid, "%d", FTP_UID);
if (!tconf.group[0]) if (!tconf.group[0])
strcpy(tconf.group, FTP_GROUP); SAFE_STRCPY(tconf.group, FTP_GROUP);
if (!tconf.upload[0]) if (!tconf.upload[0])
strcpy(tconf.upload, FTP_UPLOAD); SAFE_STRCPY(tconf.upload, FTP_UPLOAD);
/*** If the user did not specify a directory, use default ***/ /*** If the user did not specify a directory, use default ***/
@ -400,7 +400,7 @@ configAnonFTP(dialogMenuItem *self)
tconf.homedir[strlen(tconf.homedir) - 1] = '\0'; tconf.homedir[strlen(tconf.homedir) - 1] = '\0';
if (!tconf.homedir[0]) if (!tconf.homedir[0])
strcpy(tconf.homedir, FTP_HOMEDIR); SAFE_STRCPY(tconf.homedir, FTP_HOMEDIR);
/*** If HomeDir does not exist, create it ***/ /*** If HomeDir does not exist, create it ***/

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: apache.c,v 1.27 1996/09/01 08:17:13 jkh Exp $ * $Id: apache.c,v 1.28 1996/11/04 12:56:15 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Coranth Gryphon. All rights reserved. * Coranth Gryphon. All rights reserved.
@ -232,15 +232,15 @@ apacheOpenDialog(void)
sprintf(tconf.hostname, "www.%s", tmp); sprintf(tconf.hostname, "www.%s", tmp);
} }
strcpy(tconf.defuser, DEFAULT_USER); SAFE_STRCPY(tconf.defuser, DEFAULT_USER);
strcpy(tconf.defgroup, DEFAULT_GROUP); SAFE_STRCPY(tconf.defgroup, DEFAULT_GROUP);
strcpy(tconf.userdir, USER_HOMEDIR); SAFE_STRCPY(tconf.userdir, USER_HOMEDIR);
strcpy(tconf.welcome, WELCOME_FILE); SAFE_STRCPY(tconf.welcome, WELCOME_FILE);
strcpy(tconf.logdir, LOGS_SUBDIR); SAFE_STRCPY(tconf.logdir, LOGS_SUBDIR);
strcpy(tconf.accesslog, ACCESS_LOGNAME); SAFE_STRCPY(tconf.accesslog, ACCESS_LOGNAME);
strcpy(tconf.errorlog, ERROR_LOGNAME); SAFE_STRCPY(tconf.errorlog, ERROR_LOGNAME);
sprintf(tconf.docroot, "%s/%s", APACHE_BASE,DATA_SUBDIR); sprintf(tconf.docroot, "%s/%s", APACHE_BASE,DATA_SUBDIR);
@ -399,21 +399,21 @@ configApache(dialogMenuItem *self)
} }
/*** Fix defaults for invalid value ***/ /*** Fix defaults for invalid value ***/
if (!tconf.logdir[0]) if (!tconf.logdir[0])
strcpy(tconf.logdir, LOGS_SUBDIR); SAFE_STRCPY(tconf.logdir, LOGS_SUBDIR);
if (!tconf.accesslog[0]) if (!tconf.accesslog[0])
strcpy(tconf.accesslog, ACCESS_LOGNAME); SAFE_STRCPY(tconf.accesslog, ACCESS_LOGNAME);
if (!tconf.errorlog[0]) if (!tconf.errorlog[0])
strcpy(tconf.errorlog, ERROR_LOGNAME); SAFE_STRCPY(tconf.errorlog, ERROR_LOGNAME);
if (!tconf.welcome[0]) if (!tconf.welcome[0])
strcpy(tconf.welcome, WELCOME_FILE); SAFE_STRCPY(tconf.welcome, WELCOME_FILE);
if (!tconf.userdir[0]) if (!tconf.userdir[0])
strcpy(tconf.userdir, USER_HOMEDIR); SAFE_STRCPY(tconf.userdir, USER_HOMEDIR);
if (!tconf.defuser[0]) if (!tconf.defuser[0])
strcpy(tconf.defuser, DEFAULT_USER); SAFE_STRCPY(tconf.defuser, DEFAULT_USER);
if (!tconf.defgroup[0]) if (!tconf.defgroup[0])
strcpy(tconf.defgroup, DEFAULT_GROUP); SAFE_STRCPY(tconf.defgroup, DEFAULT_GROUP);
/*** If the user did not specify a directory, use default ***/ /*** If the user did not specify a directory, use default ***/
@ -433,9 +433,9 @@ configApache(dialogMenuItem *self)
if (!file_readable(file)) { if (!file_readable(file)) {
tptr = msgGetInput(NULL, "What is your company name?"); tptr = msgGetInput(NULL, "What is your company name?");
if (tptr && tptr[0]) if (tptr && tptr[0])
strcpy(company, tptr); SAFE_STRCPY(company, tptr);
else else
strcpy(company, "our Web Page"); SAFE_STRCPY(company, "our Web Page");
msgNotify("Creating sample web page..."); msgNotify("Creating sample web page...");
fptr = fopen(file,"w"); fptr = fopen(file,"w");

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: attr.c,v 1.7 1996/06/11 05:06:31 jkh Exp $ * $Id: attr.c,v 1.8 1996/09/08 01:39:23 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -137,8 +137,8 @@ attr_parse(Attribs *attr, int fd)
break; break;
case COMMIT: case COMMIT:
strcpy(attr[num_attribs].name, hold_n); SAFE_STRCPY(attr[num_attribs].name, hold_n);
strcpy(attr[num_attribs].value, hold_v); SAFE_STRCPY(attr[num_attribs].value, hold_v);
state = LOOK; state = LOOK;
v = n = 0; v = n = 0;
++num_attribs; ++num_attribs;

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: config.c,v 1.60 1996/11/27 22:52:31 phk Exp $ * $Id: config.c,v 1.61 1996/12/02 05:01:00 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -275,7 +275,7 @@ configSysconfig(char *config)
/* Skip the comments */ /* Skip the comments */
if (lines[i][0] == '#') if (lines[i][0] == '#')
continue; continue;
strcpy(tmp, lines[i]); SAFE_STRCPY(tmp, lines[i]);
cp = index(tmp, '='); cp = index(tmp, '=');
if (!cp) if (!cp)
continue; continue;
@ -411,7 +411,7 @@ configResolv(void)
if (!index(hp, '.')) if (!index(hp, '.'))
cp2[0] = '\0'; cp2[0] = '\0';
else { else {
strcpy(cp2, hp); SAFE_STRCPY(cp2, hp);
*(index(cp2, '.')) = '\0'; *(index(cp2, '.')) = '\0';
} }
fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2); fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: devices.c,v 1.51 1996/11/27 01:01:52 joerg Exp $ * $Id: devices.c,v 1.52 1996/12/08 12:27:53 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -102,7 +102,7 @@ new_device(char *name)
dev = safe_malloc(sizeof(Device)); dev = safe_malloc(sizeof(Device));
bzero(dev, sizeof(Device)); bzero(dev, sizeof(Device));
if (name) if (name)
strcpy(dev->name, name); SAFE_STRCPY(dev->name, name);
return dev; return dev;
} }

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated for what's essentially a complete rewrite. * generation being slated for what's essentially a complete rewrite.
* *
* $Id: dmenu.c,v 1.26 1996/11/07 08:03:21 jkh Exp $ * $Id: dmenu.c,v 1.27 1996/11/09 16:46:56 joerg Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -182,7 +182,7 @@ dmenuVarCheck(dialogMenuItem *item)
w = (char *)item->data; w = (char *)item->data;
if (!w) if (!w)
return FALSE; return FALSE;
strncpy(tmp, w, 256); SAFE_STRCPY(tmp, w);
if ((cp = index(tmp, '=')) != NULL) { if ((cp = index(tmp, '=')) != NULL) {
*(cp++) = '\0'; *(cp++) = '\0';
if ((cp3 = index(cp, ',')) != NULL) if ((cp3 = index(cp, ',')) != NULL)

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: ftp_strat.c,v 1.28 1996/10/02 10:44:28 jkh Exp $ * $Id: ftp_strat.c,v 1.29 1996/10/12 23:48:31 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -87,7 +87,7 @@ mediaInitFTP(Device *dev)
else else
login_name = user; login_name = user;
if (variable_get(VAR_FTP_PASS)) if (variable_get(VAR_FTP_PASS))
strcpy(password, variable_get(VAR_FTP_PASS)); SAFE_STRCPY(password, variable_get(VAR_FTP_PASS));
else else
sprintf(password, "installer@%s", variable_get(VAR_HOSTNAME)); sprintf(password, "installer@%s", variable_get(VAR_HOSTNAME));
msgNotify("Logging in as %s..", login_name); msgNotify("Logging in as %s..", login_name);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: index.c,v 1.37 1996/08/01 12:02:24 jkh Exp $ * $Id: index.c,v 1.38 1996/08/03 10:10:54 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -491,7 +491,7 @@ index_menu(PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll)
char buf[256]; char buf[256];
/* Brutally adjust description to fit in menu */ /* Brutally adjust description to fit in menu */
strcpy(buf, kp->desc); SAFE_STRCPY(buf, kp->desc);
if (strlen(buf) > (_MAX_DESC - maxname)) if (strlen(buf) > (_MAX_DESC - maxname))
buf[_MAX_DESC - maxname] = '\0'; buf[_MAX_DESC - maxname] = '\0';
nitems = item_add(nitems, kp->name, buf, pkg_checked, pkg_fire, pkg_selected, kp, (int)plist, &curr, &max); nitems = item_add(nitems, kp->name, buf, pkg_checked, pkg_fire, pkg_selected, kp, (int)plist, &curr, &max);
@ -555,7 +555,7 @@ index_extract_one(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended)
if (id && id->deps && strlen(id->deps)) { if (id && id->deps && strlen(id->deps)) {
char t[1024], *cp, *cp2; char t[1024], *cp, *cp2;
strcpy(t, id->deps); SAFE_STRCPY(t, id->deps);
cp = t; cp = t;
while (cp && DITEM_STATUS(status) == DITEM_SUCCESS) { while (cp && DITEM_STATUS(status) == DITEM_SUCCESS) {
if ((cp2 = index(cp, ' ')) != NULL) if ((cp2 = index(cp, ' ')) != NULL)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: label.c,v 1.62 1996/10/04 14:53:52 jkh Exp $ * $Id: label.c,v 1.63 1996/10/06 11:40:31 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -248,7 +248,7 @@ new_part(char *mpoint, Boolean newfs, u_long size)
mpoint = "/change_me"; mpoint = "/change_me";
ret = (PartInfo *)safe_malloc(sizeof(PartInfo)); ret = (PartInfo *)safe_malloc(sizeof(PartInfo));
strncpy(ret->mountpoint, mpoint, FILENAME_MAX); sstrncpy(ret->mountpoint, mpoint, FILENAME_MAX);
strcpy(ret->newfs_cmd, "newfs -b 8192 -f 1024"); strcpy(ret->newfs_cmd, "newfs -b 8192 -f 1024");
ret->newfs = newfs; ret->newfs = newfs;
if (!size) if (!size)
@ -355,7 +355,7 @@ getNewfsCmd(PartInfo *p)
"Please enter the newfs command and options you'd like to use in\n" "Please enter the newfs command and options you'd like to use in\n"
"creating this file system."); "creating this file system.");
if (val) if (val)
strncpy(p->newfs_cmd, val, NEWFS_CMD_MAX); sstrncpy(p->newfs_cmd, val, NEWFS_CMD_MAX);
} }
#define MAX_MOUNT_NAME 12 #define MAX_MOUNT_NAME 12

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: media.c,v 1.64 1996/11/04 02:12:49 jkh Exp $ * $Id: media.c,v 1.65 1996/11/07 14:17:09 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -297,7 +297,7 @@ mediaSetFTP(dialogMenuItem *self)
variable_unset(VAR_FTP_PATH); variable_unset(VAR_FTP_PATH);
return DITEM_FAILURE | what; return DITEM_FAILURE | what;
} }
strcpy(ftpDevice.name, cp); SAFE_STRCPY(ftpDevice.name, cp);
dialog_clear_norefresh(); dialog_clear_norefresh();
if (RunningAsInit && if (RunningAsInit &&
@ -409,7 +409,7 @@ mediaSetNFS(dialogMenuItem *self)
"host:/full/pathname/to/FreeBSD/distdir"); "host:/full/pathname/to/FreeBSD/distdir");
return DITEM_FAILURE; return DITEM_FAILURE;
} }
strncpy(nfsDevice.name, cp, DEV_NAME_MAX); SAFE_STRCPY(nfsDevice.name, cp);
/* str == NULL means we were just called to change NFS paths, not network interfaces */ /* str == NULL means we were just called to change NFS paths, not network interfaces */
if (!tcpDeviceSelect()) if (!tcpDeviceSelect())
return DITEM_FAILURE; return DITEM_FAILURE;

View file

@ -1,7 +1,7 @@
/* /*
* Miscellaneous support routines.. * Miscellaneous support routines..
* *
* $Id: misc.c,v 1.21 1996/07/08 08:54:30 jkh Exp $ * $Id: misc.c,v 1.22 1996/07/09 14:28:17 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -76,6 +76,14 @@ string_concat(char *one, char *two)
return tmp; return tmp;
} }
/* sane strncpy() function */
char *
sstrncpy(char *dst, const char *src, int size)
{
*(dst + size) = '\0';
return strncpy(dst, src, size - 1);
}
/* Concatenate three strings into static storage */ /* Concatenate three strings into static storage */
char * char *
string_concat3(char *one, char *two, char *three) string_concat3(char *one, char *two, char *three)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: msg.c,v 1.40 1996/08/03 10:11:21 jkh Exp $ * $Id: msg.c,v 1.41 1996/10/01 04:56:34 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -257,7 +257,7 @@ msgGetInput(char *buf, char *fmt, ...)
use_helpline(NULL); use_helpline(NULL);
use_helpfile(NULL); use_helpfile(NULL);
if (buf) if (buf)
strcpy(input_buffer, buf); SAFE_STRCPY(input_buffer, buf);
else else
input_buffer[0] = '\0'; input_buffer[0] = '\0';
if (OnVTY) { if (OnVTY) {

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: network.c,v 1.19 1996/12/09 06:37:44 jkh Exp $ * $Id: network.c,v 1.20 1996/12/09 06:45:03 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -94,7 +94,7 @@ mediaInitNetwork(Device *dev)
if (!val) if (!val)
return FALSE; return FALSE;
else else
strncpy(attach, val, 256); SAFE_STRCPY(attach, val);
/* /*
* Doing this with vsystem() is actually bogus since we should be storing the pid of slattach * Doing this with vsystem() is actually bogus since we should be storing the pid of slattach
* for later killing. It's just too convenient to call vsystem(), however, rather than * for later killing. It's just too convenient to call vsystem(), however, rather than
@ -198,15 +198,17 @@ startPPP(Device *devp)
"maximum data rate since most modems can talk at one speed to the\n" "maximum data rate since most modems can talk at one speed to the\n"
"computer and at another speed to the remote end.\n\n" "computer and at another speed to the remote end.\n\n"
"If you're not sure what to put here, just select the default."); "If you're not sure what to put here, just select the default.");
strncpy(speed, (val && *val) ? val : "115200", 16); SAFE_STRCPY(speed, (val && *val) ? val : "115200");
val = variable_get(VAR_GATEWAY);
SAFE_STRCPY(provider, (val && *val) ? val : "0");
strncpy(provider, variable_get(VAR_GATEWAY) ? variable_get(VAR_GATEWAY) : "0", 16);
val = msgGetInput(provider, "Enter the IP address of your service provider or 0 if you\n" val = msgGetInput(provider, "Enter the IP address of your service provider or 0 if you\n"
"don't know it and would prefer to negotiate it dynamically."); "don't know it and would prefer to negotiate it dynamically.");
strncpy(provider, val ? val : "0", 16); SAFE_STRCPY(provider, (val && *val) ? val : "0");
if (devp->private && ((DevInfo *)devp->private)->ipaddr[0]) if (devp->private && ((DevInfo *)devp->private)->ipaddr[0])
strncpy(myaddr, ((DevInfo *)devp->private)->ipaddr, 16); SAFE_STRCPY(myaddr, ((DevInfo *)devp->private)->ipaddr);
else else
strcpy(myaddr, "0"); strcpy(myaddr, "0");

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: sysinstall.h,v 1.88 1996/12/09 06:02:31 jkh Exp $ * $Id: sysinstall.h,v 1.89 1996/12/09 06:37:45 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -147,6 +147,8 @@
#define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr) #define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr)
#define ATTR_TITLE button_active_attr #define ATTR_TITLE button_active_attr
/* Handy strncpy() macro */
#define SAFE_STRCPY(to, from) sstrncpy((to), (from), sizeof (to))
/*** Types ***/ /*** Types ***/
typedef unsigned int Boolean; typedef unsigned int Boolean;
@ -564,6 +566,7 @@ extern int Mkdir(char *);
extern int Mount(char *, void *data); extern int Mount(char *, void *data);
extern WINDOW *savescr(void); extern WINDOW *savescr(void);
extern void restorescr(WINDOW *w); extern void restorescr(WINDOW *w);
extern char *sstrncpy(char *dst, const char *src, int size);
/* msg.c */ /* msg.c */
extern Boolean isDebug(void); extern Boolean isDebug(void);

View file

@ -1,5 +1,5 @@
/* /*
* $Id: tcpip.c,v 1.49 1996/11/07 08:03:29 jkh Exp $ * $Id: tcpip.c,v 1.50 1996/12/09 06:37:46 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Gary J Palmer. All rights reserved. * Gary J Palmer. All rights reserved.
@ -210,51 +210,51 @@ tcpOpenDialog(Device *devp)
if (devp->private) { if (devp->private) {
DevInfo *di = (DevInfo *)devp->private; DevInfo *di = (DevInfo *)devp->private;
strcpy(ipaddr, di->ipaddr); SAFE_STRCPY(ipaddr, di->ipaddr);
strcpy(netmask, di->netmask); SAFE_STRCPY(netmask, di->netmask);
strcpy(extras, di->extras); SAFE_STRCPY(extras, di->extras);
} }
else { /* See if there are any defaults */ else { /* See if there are any defaults */
char *cp; char *cp;
if (!ipaddr[0]) { if (!ipaddr[0]) {
if ((cp = variable_get(VAR_IPADDR)) != NULL) if ((cp = variable_get(VAR_IPADDR)) != NULL)
strcpy(ipaddr, cp); SAFE_STRCPY(ipaddr, cp);
else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_IPADDR))) != NULL) else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_IPADDR))) != NULL)
strcpy(ipaddr, cp); SAFE_STRCPY(ipaddr, cp);
} }
if (!netmask[0]) { if (!netmask[0]) {
if ((cp = variable_get(VAR_NETMASK)) != NULL) if ((cp = variable_get(VAR_NETMASK)) != NULL)
strcpy(netmask, cp); SAFE_STRCPY(netmask, cp);
else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_NETMASK))) != NULL) else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_NETMASK))) != NULL)
strcpy(netmask, cp); SAFE_STRCPY(netmask, cp);
} }
if (!extras[0]) { if (!extras[0]) {
if ((cp = variable_get(VAR_EXTRAS)) != NULL) if ((cp = variable_get(VAR_EXTRAS)) != NULL)
strcpy(extras, cp); SAFE_STRCPY(extras, cp);
else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_EXTRAS))) != NULL) else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_EXTRAS))) != NULL)
strcpy(extras, cp); SAFE_STRCPY(extras, cp);
} }
} }
/* Look up values already recorded with the system, or blank the string variables ready to accept some new data */ /* Look up values already recorded with the system, or blank the string variables ready to accept some new data */
tmp = variable_get(VAR_HOSTNAME); tmp = variable_get(VAR_HOSTNAME);
if (tmp) if (tmp)
strcpy(hostname, tmp); SAFE_STRCPY(hostname, tmp);
else else
bzero(hostname, sizeof(hostname)); bzero(hostname, sizeof(hostname));
tmp = variable_get(VAR_DOMAINNAME); tmp = variable_get(VAR_DOMAINNAME);
if (tmp) if (tmp)
strcpy(domainname, tmp); SAFE_STRCPY(domainname, tmp);
else else
bzero(domainname, sizeof(domainname)); bzero(domainname, sizeof(domainname));
tmp = variable_get(VAR_GATEWAY); tmp = variable_get(VAR_GATEWAY);
if (tmp) if (tmp)
strcpy(gateway, tmp); SAFE_STRCPY(gateway, tmp);
else else
bzero(gateway, sizeof(gateway)); bzero(gateway, sizeof(gateway));
tmp = variable_get(VAR_NAMESERVER); tmp = variable_get(VAR_NAMESERVER);
if (tmp) if (tmp)
strcpy(nameserver, tmp); SAFE_STRCPY(nameserver, tmp);
else else
bzero(nameserver, sizeof(nameserver)); bzero(nameserver, sizeof(nameserver));
@ -314,8 +314,7 @@ tcpOpenDialog(Device *devp)
if (n == LAYOUT_HOSTNAME) { if (n == LAYOUT_HOSTNAME) {
/* We are in the Hostname field - calculate the domainname */ /* We are in the Hostname field - calculate the domainname */
if ((tmp = index(hostname, '.')) != NULL) { if ((tmp = index(hostname, '.')) != NULL) {
strncpy(domainname, tmp + 1, strlen(tmp + 1)); sstrncpy(domainname, tmp + 1, strlen(tmp + 1));
domainname[strlen(tmp+1)] = '\0';
RefreshStringObj(layout[LAYOUT_DOMAINNAME].obj); RefreshStringObj(layout[LAYOUT_DOMAINNAME].obj);
} }
} }
@ -385,8 +384,7 @@ tcpOpenDialog(Device *devp)
/* BODGE ALERT! */ /* BODGE ALERT! */
if (((tmp = index(hostname, '.')) != NULL) && (strlen(domainname)==0)) { if (((tmp = index(hostname, '.')) != NULL) && (strlen(domainname)==0)) {
strncpy(domainname, tmp + 1, strlen(tmp + 1)); sstrncpy(domainname, tmp + 1, strlen(tmp + 1));
domainname[strlen(tmp+1)] = '\0';
RefreshStringObj(layout[1].obj); RefreshStringObj(layout[1].obj);
} }
} }
@ -416,9 +414,9 @@ tcpOpenDialog(Device *devp)
if (!devp->private) if (!devp->private)
devp->private = (DevInfo *)safe_malloc(sizeof(DevInfo)); devp->private = (DevInfo *)safe_malloc(sizeof(DevInfo));
di = devp->private; di = devp->private;
strcpy(di->ipaddr, ipaddr); SAFE_STRCPY(di->ipaddr, ipaddr);
strcpy(di->netmask, netmask); SAFE_STRCPY(di->netmask, netmask);
strcpy(di->extras, extras); SAFE_STRCPY(di->extras, extras);
sprintf(temp, "inet %s %s netmask %s", ipaddr, extras, netmask); sprintf(temp, "inet %s %s netmask %s", ipaddr, extras, netmask);
sprintf(ifn, "%s%s", VAR_IFCONFIG, devp->name); sprintf(ifn, "%s%s", VAR_IFCONFIG, devp->name);

View file

@ -24,7 +24,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* library functions for userconfig library * library functions for userconfig library
* *
* $Id: uc_main.c,v 1.12 1996/10/06 16:04:49 jkh Exp $ * $Id: uc_main.c,v 1.13 1996/10/12 20:23:17 erich Exp $
*/ */
#include <sys/types.h> #include <sys/types.h>
@ -39,9 +39,7 @@
#include <fcntl.h> #include <fcntl.h>
#include "uc_main.h" #include "uc_main.h"
#include "sysinstall.h"
extern int isDebug(void);
extern void msgDebug(char *fmt, ...);
static struct nlist _nl[] = { static struct nlist _nl[] = {
{"_isa_devtab_bio"}, {"_isa_devtab_bio"},
@ -76,9 +74,9 @@ uc_open(char *name){
incore = 0; incore = 0;
if (incore || (strcmp(name,"-bootfile") == 0)) if (incore || (strcmp(name,"-bootfile") == 0))
strncpy(kname, getbootfile(), 79); SAFE_STRCPY(kname, getbootfile());
else else
strncpy(kname, name, 79); SAFE_STRCPY(kname, name);
if (isDebug()) if (isDebug())
msgDebug("uc_open: kernel name is %s, incore = %d\n", kname, incore); msgDebug("uc_open: kernel name is %s, incore = %d\n", kname, incore);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: variable.c,v 1.10 1996/04/29 06:47:10 jkh Exp $ * $Id: variable.c,v 1.11 1996/06/12 14:02:13 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -51,15 +51,15 @@ make_variable(char *var, char *value)
if (!strcmp(newvar->name, var)) { if (!strcmp(newvar->name, var)) {
if (isDebug()) if (isDebug())
msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value); msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value);
strncpy(newvar->value, value, VAR_VALUE_MAX); SAFE_STRCPY(newvar->value, value);
return; return;
} }
} }
/* No? Create a new one */ /* No? Create a new one */
newvar = (Variable *)safe_malloc(sizeof(Variable)); newvar = (Variable *)safe_malloc(sizeof(Variable));
strncpy(newvar->name, var, VAR_NAME_MAX); SAFE_STRCPY(newvar->name, var);
strncpy(newvar->value, value, VAR_VALUE_MAX); SAFE_STRCPY(newvar->value, value);
newvar->next = VarHead; newvar->next = VarHead;
VarHead = newvar; VarHead = newvar;
if (isDebug()) if (isDebug())
@ -75,7 +75,7 @@ variable_set(char *var)
msgFatal("NULL variable name & value passed."); msgFatal("NULL variable name & value passed.");
else if (!*var) else if (!*var)
msgDebug("Warning: Zero length name & value passed to variable_set()\n"); msgDebug("Warning: Zero length name & value passed to variable_set()\n");
strncpy(tmp, var, VAR_NAME_MAX + VAR_VALUE_MAX); SAFE_STRCPY(tmp, var);
if ((cp = index(tmp, '=')) == NULL) if ((cp = index(tmp, '=')) == NULL)
msgFatal("Invalid variable format: %s", var); msgFatal("Invalid variable format: %s", var);
*(cp++) = '\0'; *(cp++) = '\0';

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: config.c,v 1.60 1996/11/27 22:52:31 phk Exp $ * $Id: config.c,v 1.61 1996/12/02 05:01:00 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -275,7 +275,7 @@ configSysconfig(char *config)
/* Skip the comments */ /* Skip the comments */
if (lines[i][0] == '#') if (lines[i][0] == '#')
continue; continue;
strcpy(tmp, lines[i]); SAFE_STRCPY(tmp, lines[i]);
cp = index(tmp, '='); cp = index(tmp, '=');
if (!cp) if (!cp)
continue; continue;
@ -411,7 +411,7 @@ configResolv(void)
if (!index(hp, '.')) if (!index(hp, '.'))
cp2[0] = '\0'; cp2[0] = '\0';
else { else {
strcpy(cp2, hp); SAFE_STRCPY(cp2, hp);
*(index(cp2, '.')) = '\0'; *(index(cp2, '.')) = '\0';
} }
fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2); fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: devices.c,v 1.51 1996/11/27 01:01:52 joerg Exp $ * $Id: devices.c,v 1.52 1996/12/08 12:27:53 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -102,7 +102,7 @@ new_device(char *name)
dev = safe_malloc(sizeof(Device)); dev = safe_malloc(sizeof(Device));
bzero(dev, sizeof(Device)); bzero(dev, sizeof(Device));
if (name) if (name)
strcpy(dev->name, name); SAFE_STRCPY(dev->name, name);
return dev; return dev;
} }

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated for what's essentially a complete rewrite. * generation being slated for what's essentially a complete rewrite.
* *
* $Id: dmenu.c,v 1.26 1996/11/07 08:03:21 jkh Exp $ * $Id: dmenu.c,v 1.27 1996/11/09 16:46:56 joerg Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -182,7 +182,7 @@ dmenuVarCheck(dialogMenuItem *item)
w = (char *)item->data; w = (char *)item->data;
if (!w) if (!w)
return FALSE; return FALSE;
strncpy(tmp, w, 256); SAFE_STRCPY(tmp, w);
if ((cp = index(tmp, '=')) != NULL) { if ((cp = index(tmp, '=')) != NULL) {
*(cp++) = '\0'; *(cp++) = '\0';
if ((cp3 = index(cp, ',')) != NULL) if ((cp3 = index(cp, ',')) != NULL)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: label.c,v 1.62 1996/10/04 14:53:52 jkh Exp $ * $Id: label.c,v 1.63 1996/10/06 11:40:31 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -248,7 +248,7 @@ new_part(char *mpoint, Boolean newfs, u_long size)
mpoint = "/change_me"; mpoint = "/change_me";
ret = (PartInfo *)safe_malloc(sizeof(PartInfo)); ret = (PartInfo *)safe_malloc(sizeof(PartInfo));
strncpy(ret->mountpoint, mpoint, FILENAME_MAX); sstrncpy(ret->mountpoint, mpoint, FILENAME_MAX);
strcpy(ret->newfs_cmd, "newfs -b 8192 -f 1024"); strcpy(ret->newfs_cmd, "newfs -b 8192 -f 1024");
ret->newfs = newfs; ret->newfs = newfs;
if (!size) if (!size)
@ -355,7 +355,7 @@ getNewfsCmd(PartInfo *p)
"Please enter the newfs command and options you'd like to use in\n" "Please enter the newfs command and options you'd like to use in\n"
"creating this file system."); "creating this file system.");
if (val) if (val)
strncpy(p->newfs_cmd, val, NEWFS_CMD_MAX); sstrncpy(p->newfs_cmd, val, NEWFS_CMD_MAX);
} }
#define MAX_MOUNT_NAME 12 #define MAX_MOUNT_NAME 12

View file

@ -1,7 +1,7 @@
/* /*
* Miscellaneous support routines.. * Miscellaneous support routines..
* *
* $Id: misc.c,v 1.21 1996/07/08 08:54:30 jkh Exp $ * $Id: misc.c,v 1.22 1996/07/09 14:28:17 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -76,6 +76,14 @@ string_concat(char *one, char *two)
return tmp; return tmp;
} }
/* sane strncpy() function */
char *
sstrncpy(char *dst, const char *src, int size)
{
*(dst + size) = '\0';
return strncpy(dst, src, size - 1);
}
/* Concatenate three strings into static storage */ /* Concatenate three strings into static storage */
char * char *
string_concat3(char *one, char *two, char *three) string_concat3(char *one, char *two, char *three)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: msg.c,v 1.40 1996/08/03 10:11:21 jkh Exp $ * $Id: msg.c,v 1.41 1996/10/01 04:56:34 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -257,7 +257,7 @@ msgGetInput(char *buf, char *fmt, ...)
use_helpline(NULL); use_helpline(NULL);
use_helpfile(NULL); use_helpfile(NULL);
if (buf) if (buf)
strcpy(input_buffer, buf); SAFE_STRCPY(input_buffer, buf);
else else
input_buffer[0] = '\0'; input_buffer[0] = '\0';
if (OnVTY) { if (OnVTY) {

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: sysinstall.h,v 1.88 1996/12/09 06:02:31 jkh Exp $ * $Id: sysinstall.h,v 1.89 1996/12/09 06:37:45 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -147,6 +147,8 @@
#define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr) #define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr)
#define ATTR_TITLE button_active_attr #define ATTR_TITLE button_active_attr
/* Handy strncpy() macro */
#define SAFE_STRCPY(to, from) sstrncpy((to), (from), sizeof (to))
/*** Types ***/ /*** Types ***/
typedef unsigned int Boolean; typedef unsigned int Boolean;
@ -564,6 +566,7 @@ extern int Mkdir(char *);
extern int Mount(char *, void *data); extern int Mount(char *, void *data);
extern WINDOW *savescr(void); extern WINDOW *savescr(void);
extern void restorescr(WINDOW *w); extern void restorescr(WINDOW *w);
extern char *sstrncpy(char *dst, const char *src, int size);
/* msg.c */ /* msg.c */
extern Boolean isDebug(void); extern Boolean isDebug(void);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: variable.c,v 1.10 1996/04/29 06:47:10 jkh Exp $ * $Id: variable.c,v 1.11 1996/06/12 14:02:13 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -51,15 +51,15 @@ make_variable(char *var, char *value)
if (!strcmp(newvar->name, var)) { if (!strcmp(newvar->name, var)) {
if (isDebug()) if (isDebug())
msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value); msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value);
strncpy(newvar->value, value, VAR_VALUE_MAX); SAFE_STRCPY(newvar->value, value);
return; return;
} }
} }
/* No? Create a new one */ /* No? Create a new one */
newvar = (Variable *)safe_malloc(sizeof(Variable)); newvar = (Variable *)safe_malloc(sizeof(Variable));
strncpy(newvar->name, var, VAR_NAME_MAX); SAFE_STRCPY(newvar->name, var);
strncpy(newvar->value, value, VAR_VALUE_MAX); SAFE_STRCPY(newvar->value, value);
newvar->next = VarHead; newvar->next = VarHead;
VarHead = newvar; VarHead = newvar;
if (isDebug()) if (isDebug())
@ -75,7 +75,7 @@ variable_set(char *var)
msgFatal("NULL variable name & value passed."); msgFatal("NULL variable name & value passed.");
else if (!*var) else if (!*var)
msgDebug("Warning: Zero length name & value passed to variable_set()\n"); msgDebug("Warning: Zero length name & value passed to variable_set()\n");
strncpy(tmp, var, VAR_NAME_MAX + VAR_VALUE_MAX); SAFE_STRCPY(tmp, var);
if ((cp = index(tmp, '=')) == NULL) if ((cp = index(tmp, '=')) == NULL)
msgFatal("Invalid variable format: %s", var); msgFatal("Invalid variable format: %s", var);
*(cp++) = '\0'; *(cp++) = '\0';

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: anonFTP.c,v 1.16 1996/09/01 08:17:12 jkh Exp $ * $Id: anonFTP.c,v 1.17 1996/09/06 05:58:27 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Coranth Gryphon. All rights reserved. * Coranth Gryphon. All rights reserved.
@ -179,7 +179,7 @@ createFtpUser(void)
tptr = msgGetInput("14", "What group name to use for gid %d ?", gid); tptr = msgGetInput("14", "What group name to use for gid %d ?", gid);
if (tptr && *tptr) { if (tptr && *tptr) {
strcpy(tconf.group, tptr); SAFE_STRCPY(tconf.group, tptr);
if ((tgrp = getgrnam(tconf.group))) { if ((tgrp = getgrnam(tconf.group))) {
gid = tgrp->gr_gid; gid = tgrp->gr_gid;
} }
@ -250,10 +250,10 @@ anonftpOpenDialog(void)
bzero(&tconf, sizeof(tconf)); bzero(&tconf, sizeof(tconf));
strcpy(tconf.group, FTP_GROUP); SAFE_STRCPY(tconf.group, FTP_GROUP);
strcpy(tconf.upload, FTP_UPLOAD); SAFE_STRCPY(tconf.upload, FTP_UPLOAD);
strcpy(tconf.comment, FTP_COMMENT); SAFE_STRCPY(tconf.comment, FTP_COMMENT);
strcpy(tconf.homedir, FTP_HOMEDIR); SAFE_STRCPY(tconf.homedir, FTP_HOMEDIR);
sprintf(tconf.uid, "%d", FTP_UID); sprintf(tconf.uid, "%d", FTP_UID);
/* Loop over the layout list, create the objects, and add them /* Loop over the layout list, create the objects, and add them
@ -389,10 +389,10 @@ configAnonFTP(dialogMenuItem *self)
sprintf(tconf.uid, "%d", FTP_UID); sprintf(tconf.uid, "%d", FTP_UID);
if (!tconf.group[0]) if (!tconf.group[0])
strcpy(tconf.group, FTP_GROUP); SAFE_STRCPY(tconf.group, FTP_GROUP);
if (!tconf.upload[0]) if (!tconf.upload[0])
strcpy(tconf.upload, FTP_UPLOAD); SAFE_STRCPY(tconf.upload, FTP_UPLOAD);
/*** If the user did not specify a directory, use default ***/ /*** If the user did not specify a directory, use default ***/
@ -400,7 +400,7 @@ configAnonFTP(dialogMenuItem *self)
tconf.homedir[strlen(tconf.homedir) - 1] = '\0'; tconf.homedir[strlen(tconf.homedir) - 1] = '\0';
if (!tconf.homedir[0]) if (!tconf.homedir[0])
strcpy(tconf.homedir, FTP_HOMEDIR); SAFE_STRCPY(tconf.homedir, FTP_HOMEDIR);
/*** If HomeDir does not exist, create it ***/ /*** If HomeDir does not exist, create it ***/

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: config.c,v 1.60 1996/11/27 22:52:31 phk Exp $ * $Id: config.c,v 1.61 1996/12/02 05:01:00 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -275,7 +275,7 @@ configSysconfig(char *config)
/* Skip the comments */ /* Skip the comments */
if (lines[i][0] == '#') if (lines[i][0] == '#')
continue; continue;
strcpy(tmp, lines[i]); SAFE_STRCPY(tmp, lines[i]);
cp = index(tmp, '='); cp = index(tmp, '=');
if (!cp) if (!cp)
continue; continue;
@ -411,7 +411,7 @@ configResolv(void)
if (!index(hp, '.')) if (!index(hp, '.'))
cp2[0] = '\0'; cp2[0] = '\0';
else { else {
strcpy(cp2, hp); SAFE_STRCPY(cp2, hp);
*(index(cp2, '.')) = '\0'; *(index(cp2, '.')) = '\0';
} }
fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2); fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: devices.c,v 1.51 1996/11/27 01:01:52 joerg Exp $ * $Id: devices.c,v 1.52 1996/12/08 12:27:53 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -102,7 +102,7 @@ new_device(char *name)
dev = safe_malloc(sizeof(Device)); dev = safe_malloc(sizeof(Device));
bzero(dev, sizeof(Device)); bzero(dev, sizeof(Device));
if (name) if (name)
strcpy(dev->name, name); SAFE_STRCPY(dev->name, name);
return dev; return dev;
} }

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated for what's essentially a complete rewrite. * generation being slated for what's essentially a complete rewrite.
* *
* $Id: dmenu.c,v 1.26 1996/11/07 08:03:21 jkh Exp $ * $Id: dmenu.c,v 1.27 1996/11/09 16:46:56 joerg Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -182,7 +182,7 @@ dmenuVarCheck(dialogMenuItem *item)
w = (char *)item->data; w = (char *)item->data;
if (!w) if (!w)
return FALSE; return FALSE;
strncpy(tmp, w, 256); SAFE_STRCPY(tmp, w);
if ((cp = index(tmp, '=')) != NULL) { if ((cp = index(tmp, '=')) != NULL) {
*(cp++) = '\0'; *(cp++) = '\0';
if ((cp3 = index(cp, ',')) != NULL) if ((cp3 = index(cp, ',')) != NULL)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: index.c,v 1.37 1996/08/01 12:02:24 jkh Exp $ * $Id: index.c,v 1.38 1996/08/03 10:10:54 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -491,7 +491,7 @@ index_menu(PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll)
char buf[256]; char buf[256];
/* Brutally adjust description to fit in menu */ /* Brutally adjust description to fit in menu */
strcpy(buf, kp->desc); SAFE_STRCPY(buf, kp->desc);
if (strlen(buf) > (_MAX_DESC - maxname)) if (strlen(buf) > (_MAX_DESC - maxname))
buf[_MAX_DESC - maxname] = '\0'; buf[_MAX_DESC - maxname] = '\0';
nitems = item_add(nitems, kp->name, buf, pkg_checked, pkg_fire, pkg_selected, kp, (int)plist, &curr, &max); nitems = item_add(nitems, kp->name, buf, pkg_checked, pkg_fire, pkg_selected, kp, (int)plist, &curr, &max);
@ -555,7 +555,7 @@ index_extract_one(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended)
if (id && id->deps && strlen(id->deps)) { if (id && id->deps && strlen(id->deps)) {
char t[1024], *cp, *cp2; char t[1024], *cp, *cp2;
strcpy(t, id->deps); SAFE_STRCPY(t, id->deps);
cp = t; cp = t;
while (cp && DITEM_STATUS(status) == DITEM_SUCCESS) { while (cp && DITEM_STATUS(status) == DITEM_SUCCESS) {
if ((cp2 = index(cp, ' ')) != NULL) if ((cp2 = index(cp, ' ')) != NULL)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: label.c,v 1.62 1996/10/04 14:53:52 jkh Exp $ * $Id: label.c,v 1.63 1996/10/06 11:40:31 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -248,7 +248,7 @@ new_part(char *mpoint, Boolean newfs, u_long size)
mpoint = "/change_me"; mpoint = "/change_me";
ret = (PartInfo *)safe_malloc(sizeof(PartInfo)); ret = (PartInfo *)safe_malloc(sizeof(PartInfo));
strncpy(ret->mountpoint, mpoint, FILENAME_MAX); sstrncpy(ret->mountpoint, mpoint, FILENAME_MAX);
strcpy(ret->newfs_cmd, "newfs -b 8192 -f 1024"); strcpy(ret->newfs_cmd, "newfs -b 8192 -f 1024");
ret->newfs = newfs; ret->newfs = newfs;
if (!size) if (!size)
@ -355,7 +355,7 @@ getNewfsCmd(PartInfo *p)
"Please enter the newfs command and options you'd like to use in\n" "Please enter the newfs command and options you'd like to use in\n"
"creating this file system."); "creating this file system.");
if (val) if (val)
strncpy(p->newfs_cmd, val, NEWFS_CMD_MAX); sstrncpy(p->newfs_cmd, val, NEWFS_CMD_MAX);
} }
#define MAX_MOUNT_NAME 12 #define MAX_MOUNT_NAME 12

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: media.c,v 1.64 1996/11/04 02:12:49 jkh Exp $ * $Id: media.c,v 1.65 1996/11/07 14:17:09 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -297,7 +297,7 @@ mediaSetFTP(dialogMenuItem *self)
variable_unset(VAR_FTP_PATH); variable_unset(VAR_FTP_PATH);
return DITEM_FAILURE | what; return DITEM_FAILURE | what;
} }
strcpy(ftpDevice.name, cp); SAFE_STRCPY(ftpDevice.name, cp);
dialog_clear_norefresh(); dialog_clear_norefresh();
if (RunningAsInit && if (RunningAsInit &&
@ -409,7 +409,7 @@ mediaSetNFS(dialogMenuItem *self)
"host:/full/pathname/to/FreeBSD/distdir"); "host:/full/pathname/to/FreeBSD/distdir");
return DITEM_FAILURE; return DITEM_FAILURE;
} }
strncpy(nfsDevice.name, cp, DEV_NAME_MAX); SAFE_STRCPY(nfsDevice.name, cp);
/* str == NULL means we were just called to change NFS paths, not network interfaces */ /* str == NULL means we were just called to change NFS paths, not network interfaces */
if (!tcpDeviceSelect()) if (!tcpDeviceSelect())
return DITEM_FAILURE; return DITEM_FAILURE;

View file

@ -1,7 +1,7 @@
/* /*
* Miscellaneous support routines.. * Miscellaneous support routines..
* *
* $Id: misc.c,v 1.21 1996/07/08 08:54:30 jkh Exp $ * $Id: misc.c,v 1.22 1996/07/09 14:28:17 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -76,6 +76,14 @@ string_concat(char *one, char *two)
return tmp; return tmp;
} }
/* sane strncpy() function */
char *
sstrncpy(char *dst, const char *src, int size)
{
*(dst + size) = '\0';
return strncpy(dst, src, size - 1);
}
/* Concatenate three strings into static storage */ /* Concatenate three strings into static storage */
char * char *
string_concat3(char *one, char *two, char *three) string_concat3(char *one, char *two, char *three)

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: msg.c,v 1.40 1996/08/03 10:11:21 jkh Exp $ * $Id: msg.c,v 1.41 1996/10/01 04:56:34 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -257,7 +257,7 @@ msgGetInput(char *buf, char *fmt, ...)
use_helpline(NULL); use_helpline(NULL);
use_helpfile(NULL); use_helpfile(NULL);
if (buf) if (buf)
strcpy(input_buffer, buf); SAFE_STRCPY(input_buffer, buf);
else else
input_buffer[0] = '\0'; input_buffer[0] = '\0';
if (OnVTY) { if (OnVTY) {

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: network.c,v 1.19 1996/12/09 06:37:44 jkh Exp $ * $Id: network.c,v 1.20 1996/12/09 06:45:03 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -94,7 +94,7 @@ mediaInitNetwork(Device *dev)
if (!val) if (!val)
return FALSE; return FALSE;
else else
strncpy(attach, val, 256); SAFE_STRCPY(attach, val);
/* /*
* Doing this with vsystem() is actually bogus since we should be storing the pid of slattach * Doing this with vsystem() is actually bogus since we should be storing the pid of slattach
* for later killing. It's just too convenient to call vsystem(), however, rather than * for later killing. It's just too convenient to call vsystem(), however, rather than
@ -198,15 +198,17 @@ startPPP(Device *devp)
"maximum data rate since most modems can talk at one speed to the\n" "maximum data rate since most modems can talk at one speed to the\n"
"computer and at another speed to the remote end.\n\n" "computer and at another speed to the remote end.\n\n"
"If you're not sure what to put here, just select the default."); "If you're not sure what to put here, just select the default.");
strncpy(speed, (val && *val) ? val : "115200", 16); SAFE_STRCPY(speed, (val && *val) ? val : "115200");
val = variable_get(VAR_GATEWAY);
SAFE_STRCPY(provider, (val && *val) ? val : "0");
strncpy(provider, variable_get(VAR_GATEWAY) ? variable_get(VAR_GATEWAY) : "0", 16);
val = msgGetInput(provider, "Enter the IP address of your service provider or 0 if you\n" val = msgGetInput(provider, "Enter the IP address of your service provider or 0 if you\n"
"don't know it and would prefer to negotiate it dynamically."); "don't know it and would prefer to negotiate it dynamically.");
strncpy(provider, val ? val : "0", 16); SAFE_STRCPY(provider, (val && *val) ? val : "0");
if (devp->private && ((DevInfo *)devp->private)->ipaddr[0]) if (devp->private && ((DevInfo *)devp->private)->ipaddr[0])
strncpy(myaddr, ((DevInfo *)devp->private)->ipaddr, 16); SAFE_STRCPY(myaddr, ((DevInfo *)devp->private)->ipaddr);
else else
strcpy(myaddr, "0"); strcpy(myaddr, "0");

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next * This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite. * generation being slated to essentially a complete rewrite.
* *
* $Id: sysinstall.h,v 1.88 1996/12/09 06:02:31 jkh Exp $ * $Id: sysinstall.h,v 1.89 1996/12/09 06:37:45 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -147,6 +147,8 @@
#define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr) #define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr)
#define ATTR_TITLE button_active_attr #define ATTR_TITLE button_active_attr
/* Handy strncpy() macro */
#define SAFE_STRCPY(to, from) sstrncpy((to), (from), sizeof (to))
/*** Types ***/ /*** Types ***/
typedef unsigned int Boolean; typedef unsigned int Boolean;
@ -564,6 +566,7 @@ extern int Mkdir(char *);
extern int Mount(char *, void *data); extern int Mount(char *, void *data);
extern WINDOW *savescr(void); extern WINDOW *savescr(void);
extern void restorescr(WINDOW *w); extern void restorescr(WINDOW *w);
extern char *sstrncpy(char *dst, const char *src, int size);
/* msg.c */ /* msg.c */
extern Boolean isDebug(void); extern Boolean isDebug(void);

View file

@ -1,5 +1,5 @@
/* /*
* $Id: tcpip.c,v 1.49 1996/11/07 08:03:29 jkh Exp $ * $Id: tcpip.c,v 1.50 1996/12/09 06:37:46 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Gary J Palmer. All rights reserved. * Gary J Palmer. All rights reserved.
@ -210,51 +210,51 @@ tcpOpenDialog(Device *devp)
if (devp->private) { if (devp->private) {
DevInfo *di = (DevInfo *)devp->private; DevInfo *di = (DevInfo *)devp->private;
strcpy(ipaddr, di->ipaddr); SAFE_STRCPY(ipaddr, di->ipaddr);
strcpy(netmask, di->netmask); SAFE_STRCPY(netmask, di->netmask);
strcpy(extras, di->extras); SAFE_STRCPY(extras, di->extras);
} }
else { /* See if there are any defaults */ else { /* See if there are any defaults */
char *cp; char *cp;
if (!ipaddr[0]) { if (!ipaddr[0]) {
if ((cp = variable_get(VAR_IPADDR)) != NULL) if ((cp = variable_get(VAR_IPADDR)) != NULL)
strcpy(ipaddr, cp); SAFE_STRCPY(ipaddr, cp);
else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_IPADDR))) != NULL) else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_IPADDR))) != NULL)
strcpy(ipaddr, cp); SAFE_STRCPY(ipaddr, cp);
} }
if (!netmask[0]) { if (!netmask[0]) {
if ((cp = variable_get(VAR_NETMASK)) != NULL) if ((cp = variable_get(VAR_NETMASK)) != NULL)
strcpy(netmask, cp); SAFE_STRCPY(netmask, cp);
else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_NETMASK))) != NULL) else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_NETMASK))) != NULL)
strcpy(netmask, cp); SAFE_STRCPY(netmask, cp);
} }
if (!extras[0]) { if (!extras[0]) {
if ((cp = variable_get(VAR_EXTRAS)) != NULL) if ((cp = variable_get(VAR_EXTRAS)) != NULL)
strcpy(extras, cp); SAFE_STRCPY(extras, cp);
else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_EXTRAS))) != NULL) else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_EXTRAS))) != NULL)
strcpy(extras, cp); SAFE_STRCPY(extras, cp);
} }
} }
/* Look up values already recorded with the system, or blank the string variables ready to accept some new data */ /* Look up values already recorded with the system, or blank the string variables ready to accept some new data */
tmp = variable_get(VAR_HOSTNAME); tmp = variable_get(VAR_HOSTNAME);
if (tmp) if (tmp)
strcpy(hostname, tmp); SAFE_STRCPY(hostname, tmp);
else else
bzero(hostname, sizeof(hostname)); bzero(hostname, sizeof(hostname));
tmp = variable_get(VAR_DOMAINNAME); tmp = variable_get(VAR_DOMAINNAME);
if (tmp) if (tmp)
strcpy(domainname, tmp); SAFE_STRCPY(domainname, tmp);
else else
bzero(domainname, sizeof(domainname)); bzero(domainname, sizeof(domainname));
tmp = variable_get(VAR_GATEWAY); tmp = variable_get(VAR_GATEWAY);
if (tmp) if (tmp)
strcpy(gateway, tmp); SAFE_STRCPY(gateway, tmp);
else else
bzero(gateway, sizeof(gateway)); bzero(gateway, sizeof(gateway));
tmp = variable_get(VAR_NAMESERVER); tmp = variable_get(VAR_NAMESERVER);
if (tmp) if (tmp)
strcpy(nameserver, tmp); SAFE_STRCPY(nameserver, tmp);
else else
bzero(nameserver, sizeof(nameserver)); bzero(nameserver, sizeof(nameserver));
@ -314,8 +314,7 @@ tcpOpenDialog(Device *devp)
if (n == LAYOUT_HOSTNAME) { if (n == LAYOUT_HOSTNAME) {
/* We are in the Hostname field - calculate the domainname */ /* We are in the Hostname field - calculate the domainname */
if ((tmp = index(hostname, '.')) != NULL) { if ((tmp = index(hostname, '.')) != NULL) {
strncpy(domainname, tmp + 1, strlen(tmp + 1)); sstrncpy(domainname, tmp + 1, strlen(tmp + 1));
domainname[strlen(tmp+1)] = '\0';
RefreshStringObj(layout[LAYOUT_DOMAINNAME].obj); RefreshStringObj(layout[LAYOUT_DOMAINNAME].obj);
} }
} }
@ -385,8 +384,7 @@ tcpOpenDialog(Device *devp)
/* BODGE ALERT! */ /* BODGE ALERT! */
if (((tmp = index(hostname, '.')) != NULL) && (strlen(domainname)==0)) { if (((tmp = index(hostname, '.')) != NULL) && (strlen(domainname)==0)) {
strncpy(domainname, tmp + 1, strlen(tmp + 1)); sstrncpy(domainname, tmp + 1, strlen(tmp + 1));
domainname[strlen(tmp+1)] = '\0';
RefreshStringObj(layout[1].obj); RefreshStringObj(layout[1].obj);
} }
} }
@ -416,9 +414,9 @@ tcpOpenDialog(Device *devp)
if (!devp->private) if (!devp->private)
devp->private = (DevInfo *)safe_malloc(sizeof(DevInfo)); devp->private = (DevInfo *)safe_malloc(sizeof(DevInfo));
di = devp->private; di = devp->private;
strcpy(di->ipaddr, ipaddr); SAFE_STRCPY(di->ipaddr, ipaddr);
strcpy(di->netmask, netmask); SAFE_STRCPY(di->netmask, netmask);
strcpy(di->extras, extras); SAFE_STRCPY(di->extras, extras);
sprintf(temp, "inet %s %s netmask %s", ipaddr, extras, netmask); sprintf(temp, "inet %s %s netmask %s", ipaddr, extras, netmask);
sprintf(ifn, "%s%s", VAR_IFCONFIG, devp->name); sprintf(ifn, "%s%s", VAR_IFCONFIG, devp->name);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next * This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite. * generation being essentially a complete rewrite.
* *
* $Id: variable.c,v 1.10 1996/04/29 06:47:10 jkh Exp $ * $Id: variable.c,v 1.11 1996/06/12 14:02:13 jkh Exp $
* *
* Copyright (c) 1995 * Copyright (c) 1995
* Jordan Hubbard. All rights reserved. * Jordan Hubbard. All rights reserved.
@ -51,15 +51,15 @@ make_variable(char *var, char *value)
if (!strcmp(newvar->name, var)) { if (!strcmp(newvar->name, var)) {
if (isDebug()) if (isDebug())
msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value); msgDebug("variable %s was %s, now %s\n", newvar->name, newvar->value, value);
strncpy(newvar->value, value, VAR_VALUE_MAX); SAFE_STRCPY(newvar->value, value);
return; return;
} }
} }
/* No? Create a new one */ /* No? Create a new one */
newvar = (Variable *)safe_malloc(sizeof(Variable)); newvar = (Variable *)safe_malloc(sizeof(Variable));
strncpy(newvar->name, var, VAR_NAME_MAX); SAFE_STRCPY(newvar->name, var);
strncpy(newvar->value, value, VAR_VALUE_MAX); SAFE_STRCPY(newvar->value, value);
newvar->next = VarHead; newvar->next = VarHead;
VarHead = newvar; VarHead = newvar;
if (isDebug()) if (isDebug())
@ -75,7 +75,7 @@ variable_set(char *var)
msgFatal("NULL variable name & value passed."); msgFatal("NULL variable name & value passed.");
else if (!*var) else if (!*var)
msgDebug("Warning: Zero length name & value passed to variable_set()\n"); msgDebug("Warning: Zero length name & value passed to variable_set()\n");
strncpy(tmp, var, VAR_NAME_MAX + VAR_VALUE_MAX); SAFE_STRCPY(tmp, var);
if ((cp = index(tmp, '=')) == NULL) if ((cp = index(tmp, '=')) == NULL)
msgFatal("Invalid variable format: %s", var); msgFatal("Invalid variable format: %s", var);
*(cp++) = '\0'; *(cp++) = '\0';