summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pkg_install/create/perform.c
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1995-04-26 11:43:20 +0000
committerjkh <jkh@FreeBSD.org>1995-04-26 11:43:20 +0000
commit4d406202b113fd4ac8d578c24fdfd836572ed762 (patch)
tree88d454b2c750da908f8e38751428897d3faf00a3 /usr.sbin/pkg_install/create/perform.c
parent9f7c1b77acb518b161fa64c37b40fcae91f1229a (diff)
downloadFreeBSD-src-4d406202b113fd4ac8d578c24fdfd836572ed762.zip
FreeBSD-src-4d406202b113fd4ac8d578c24fdfd836572ed762.tar.gz
As per Bruce's advice, use sysconf to get the max argument size and
dynamically allocate that much space, also using snprintf() and strncat() to do proper bounds checking.
Diffstat (limited to 'usr.sbin/pkg_install/create/perform.c')
-rw-r--r--usr.sbin/pkg_install/create/perform.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/usr.sbin/pkg_install/create/perform.c b/usr.sbin/pkg_install/create/perform.c
index 0efb41ac..309eaac 100644
--- a/usr.sbin/pkg_install/create/perform.c
+++ b/usr.sbin/pkg_install/create/perform.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char *rcsid = "$Id: perform.c,v 1.21 1995/04/22 14:55:07 jkh Exp $";
+static const char *rcsid = "$Id: perform.c,v 1.22 1995/04/24 21:50:11 jkh Exp $";
#endif
/*
@@ -179,44 +179,48 @@ static void
make_dist(char *home, char *pkg, char *suffix, Package *plist)
{
char tball[FILENAME_MAX];
- char cmd[ARG_MAX];
- int ret;
+ char *cmd;
+ int ret, max;
PackingList p;
+ max = sysconf(_SC_ARG_MAX);
+ cmd = alloca(max);
+ if (!cmd)
+ barf("Couldn't allocate temporary storage for dist name!");
strcpy(cmd, "tar ");
if (*pkg == '/')
- sprintf(tball, "%s.%s", pkg, suffix);
+ snprintf(tball, max, "%s.%s", pkg, suffix);
else
- sprintf(tball, "%s/%s.%s", home, pkg, suffix);
+ snprintf(tball, max, "%s/%s.%s", home, pkg, suffix);
if (index(suffix, 'z')) /* Compress/gzip? */
- strcat(cmd, "-z");
+ stnrcat(cmd, "-z", max - strlen(cmd));
if (Dereference)
- strcat(cmd, "h");
+ strncat(cmd, "h", max - strlen(cmd));
if (Verbose)
printf("Creating gzip'd tar ball in '%s'\n", tball);
- strcat(cmd, "cf ");
- strcat(cmd, tball);
+ strncat(cmd, "cf ", max - strlen(cmd));
+ strncat(cmd, tball, max - strlen(cmd));
if (ExcludeFrom)
- sprintf(&cmd[strlen(cmd)], " -X %s", ExcludeFrom);
- sprintf(&cmd[strlen(cmd)], " %s %s %s", CONTENTS_FNAME,
+ snprintf(&cmd[strlen(cmd)], max, " -X %s", ExcludeFrom);
+ snprintf(&cmd[strlen(cmd)], max, " %s %s %s", CONTENTS_FNAME,
COMMENT_FNAME, DESC_FNAME);
if (Install)
- sprintf(&cmd[strlen(cmd)], " %s", INSTALL_FNAME);
+ snprintf(&cmd[strlen(cmd)], max, " %s", INSTALL_FNAME);
if (DeInstall)
- sprintf(&cmd[strlen(cmd)], " %s", DEINSTALL_FNAME);
+ snprintf(&cmd[strlen(cmd)], max, " %s", DEINSTALL_FNAME);
if (Require)
- sprintf(&cmd[strlen(cmd)], " %s", REQUIRE_FNAME);
+ snprintf(&cmd[strlen(cmd)], max, " %s", REQUIRE_FNAME);
if (Display)
- sprintf(&cmd[strlen(cmd)], " %s", DISPLAY_FNAME);
+ snprintf(&cmd[strlen(cmd)], max, " %s", DISPLAY_FNAME);
if (Mtree)
- sprintf(&cmd[strlen(cmd)], " %s", MTREE_FNAME);
+ snprintf(&cmd[strlen(cmd)], max, " %s", MTREE_FNAME);
for (p = plist->head; p; p = p->next) {
if (p->type == PLIST_FILE)
- sprintf(&cmd[strlen(cmd)], " %s", p->name);
+ snprintf(&cmd[strlen(cmd)], max, " %s", p->name);
else if (p->type == PLIST_CWD)
- sprintf(&cmd[strlen(cmd)], " -C %s", p->name);
+ snprintf(&cmd[strlen(cmd)], max, " -C %s", p->name);
else if (p->type == PLIST_SRC)
- sprintf(&cmd[strlen(cmd)], " -C %s", p->name);
+ snprintf(&cmd[strlen(cmd)], max, " -C %s", p->name);
else if (p->type == PLIST_IGNORE)
p = p->next;
}
OpenPOWER on IntegriCloud