summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/rdist/Makefile5
-rw-r--r--usr.bin/rdist/client.c5
-rw-r--r--usr.bin/rdist/defs.h4
-rw-r--r--usr.bin/rdist/docmd.c34
-rw-r--r--usr.bin/rdist/gram.y24
-rw-r--r--usr.bin/rdist/rdist.c9
-rw-r--r--usr.bin/rdistd/Makefile5
7 files changed, 56 insertions, 30 deletions
diff --git a/usr.bin/rdist/Makefile b/usr.bin/rdist/Makefile
index 56f2ec2982b..8731f61ac6b 100644
--- a/usr.bin/rdist/Makefile
+++ b/usr.bin/rdist/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.12 2002/05/09 19:13:02 millert Exp $
+# $OpenBSD: Makefile,v 1.13 2003/05/06 22:10:11 millert Exp $
PROG= rdist
@@ -7,9 +7,6 @@ SRCS= gram.y child.c client.c common.c distopt.c docmd.c expand.c \
isexec.c lookup.c message.c rdist.c
CLEANFILES+=gram.c y.tab.h
-LDADD= -lcompat
-DPADD= ${LIBCOMPAT}
-
.include <bsd.prog.mk>
.if ${ELF_TOOLCHAIN} == "yes"
diff --git a/usr.bin/rdist/client.c b/usr.bin/rdist/client.c
index fd9f6ba13b5..0d50be51ed7 100644
--- a/usr.bin/rdist/client.c
+++ b/usr.bin/rdist/client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: client.c,v 1.16 2003/04/19 17:22:29 millert Exp $ */
+/* $OpenBSD: client.c,v 1.17 2003/05/06 22:10:11 millert Exp $ */
/*
* Copyright (c) 1983 Regents of the University of California.
@@ -39,7 +39,7 @@ static char RCSid[] =
"$From: client.c,v 6.80 1996/02/28 20:34:27 mcooper Exp $";
#else
static char RCSid[] =
-"$OpenBSD: client.c,v 1.16 2003/04/19 17:22:29 millert Exp $";
+"$OpenBSD: client.c,v 1.17 2003/05/06 22:10:11 millert Exp $";
#endif
static char sccsid[] = "@(#)client.c";
@@ -219,6 +219,7 @@ static void addcmdspecialfile(starget, rname, destdir)
if (isokay) {
new = (struct namelist *) xmalloc(sizeof(struct namelist));
new->n_name = xstrdup(rfile);
+ new->n_regex = NULL;
new->n_next = updfilelist;
updfilelist = new;
}
diff --git a/usr.bin/rdist/defs.h b/usr.bin/rdist/defs.h
index 17cdd722b32..c5dabb5d2cb 100644
--- a/usr.bin/rdist/defs.h
+++ b/usr.bin/rdist/defs.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: defs.h,v 1.11 2001/08/23 14:17:08 aaron Exp $ */
+/* $OpenBSD: defs.h,v 1.12 2003/05/06 22:10:11 millert Exp $ */
#ifndef __DEFS_H__
#define __DEFS_H__
@@ -52,6 +52,7 @@
#include <errno.h>
#include <pwd.h>
#include <grp.h>
+#include <regex.h>
#include <syslog.h>
#include <setjmp.h>
#include <sys/types.h>
@@ -257,6 +258,7 @@
*/
struct namelist { /* for making lists of strings */
char *n_name;
+ regex_t *n_regex;
struct namelist *n_next;
};
diff --git a/usr.bin/rdist/docmd.c b/usr.bin/rdist/docmd.c
index fdbe5801630..5772c5bb36b 100644
--- a/usr.bin/rdist/docmd.c
+++ b/usr.bin/rdist/docmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: docmd.c,v 1.13 2003/04/19 17:22:29 millert Exp $ */
+/* $OpenBSD: docmd.c,v 1.14 2003/05/06 22:10:11 millert Exp $ */
/*
* Copyright (c) 1983 Regents of the University of California.
@@ -39,7 +39,7 @@ static char RCSid[] =
"$From: docmd.c,v 6.86 1996/01/30 02:29:43 mcooper Exp $";
#else
static char RCSid[] =
-"$OpenBSD: docmd.c,v 1.13 2003/04/19 17:22:29 millert Exp $";
+"$OpenBSD: docmd.c,v 1.14 2003/05/06 22:10:11 millert Exp $";
#endif
static char sccsid[] = "@(#)docmd.c 5.1 (Berkeley) 6/6/85";
@@ -836,15 +836,31 @@ extern int except(file)
}
if (sc->sc_type == PATTERN) {
for (nl = sc->sc_args; nl != NULL; nl = nl->n_next) {
- char *cp, *re_comp();
-
- if ((cp = re_comp(nl->n_name)) != NULL) {
+ char ebuf[BUFSIZ];
+ int ecode = 0;
+
+ /* allocate and compile n_regex as needed */
+ if (nl->n_regex == NULL) {
+ nl->n_regex = (regex_t *)
+ xmalloc(sizeof(regex_t));
+ ecode = regcomp(nl->n_regex, nl->n_name,
+ REG_NOSUB);
+ }
+ if (ecode == 0) {
+ ecode = regexec(nl->n_regex, file, 0,
+ NULL, 0);
+ }
+ switch (ecode) {
+ case REG_NOMATCH:
+ break;
+ case 0:
+ return(1); /* match! */
+ default:
+ regerror(ecode, nl->n_regex, ebuf,
+ sizeof(ebuf));
error("Regex error \"%s\" for \"%s\".",
- cp, nl->n_name);
- return(0);
+ ebuf, nl->n_name);
}
- if (re_exec(file) > 0)
- return(1);
}
}
}
diff --git a/usr.bin/rdist/gram.y b/usr.bin/rdist/gram.y
index 6109f75e68a..463fc0351d1 100644
--- a/usr.bin/rdist/gram.y
+++ b/usr.bin/rdist/gram.y
@@ -1,5 +1,5 @@
%{
-/* $OpenBSD: gram.y,v 1.5 2002/05/30 07:36:44 deraadt Exp $ */
+/* $OpenBSD: gram.y,v 1.6 2003/05/06 22:10:11 millert Exp $ */
/*
* Copyright (c) 1993 Michael A. Cooper
@@ -41,7 +41,7 @@ static char RCSid[] =
"$From: gram.y,v 6.29 1994/04/11 23:59:15 mcooper Exp mcooper $";
#else
static char RCSid[] =
-"$OpenBSD: gram.y,v 1.5 2002/05/30 07:36:44 deraadt Exp $";
+"$OpenBSD: gram.y,v 1.6 2003/05/06 22:10:11 millert Exp $";
#endif
static char *sccsid = "@(#)gram.y 5.2 (Berkeley) 85/06/21";
@@ -196,11 +196,20 @@ cmd: INSTALL options opt_namelist ';' = {
}
| PATTERN namelist ';' = {
struct namelist *nl;
- char *cp, *re_comp();
-
- for (nl = $2; nl != NULL; nl = nl->n_next)
- if ((cp = re_comp(nl->n_name)) != NULL)
- yyerror(cp);
+ char ebuf[BUFSIZ];
+ regex_t reg;
+ int ecode;
+
+ for (nl = $2; nl != NULL; nl = nl->n_next) {
+ /* check for a valid regex */
+ ecode = regcomp(&reg, nl->n_name, REG_NOSUB);
+ if (ecode) {
+ regerror(ecode, &reg, ebuf,
+ sizeof(ebuf));
+ yyerror(ebuf);
+ }
+ regfree(&reg);
+ }
$1->sc_args = expand($2, E_VARS);
$$ = $1;
}
@@ -539,6 +548,7 @@ makenl(name)
nl = ALLOC(namelist);
nl->n_name = name;
+ nl->n_regex = NULL;
nl->n_next = NULL;
return(nl);
diff --git a/usr.bin/rdist/rdist.c b/usr.bin/rdist/rdist.c
index d25c4ea6209..7662a57f54e 100644
--- a/usr.bin/rdist/rdist.c
+++ b/usr.bin/rdist/rdist.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rdist.c,v 1.14 2003/04/05 20:31:58 deraadt Exp $ */
+/* $OpenBSD: rdist.c,v 1.15 2003/05/06 22:10:11 millert Exp $ */
/*
* Copyright (c) 1983 Regents of the University of California.
@@ -39,7 +39,7 @@ static char RCSid[] =
"$From: rdist.c,v 6.65 1995/12/12 00:20:39 mcooper Exp $";
#else
static char RCSid[] =
-"$OpenBSD: rdist.c,v 1.14 2003/04/05 20:31:58 deraadt Exp $";
+"$OpenBSD: rdist.c,v 1.15 2003/05/06 22:10:11 millert Exp $";
#endif
static char sccsid[] = "@(#)main.c 5.1 (Berkeley) 6/6/85";
@@ -90,6 +90,7 @@ static void addhostlist(name, hostlist)
new = (struct namelist *) xmalloc(sizeof(struct namelist));
new->n_name = xstrdup(name);
+ new->n_regex = NULL;
new->n_next = NULL;
if (*hostlist) {
@@ -401,7 +402,7 @@ docmdargs(nargs, args)
struct namelist *files, *hosts;
struct subcmd *cmds;
char *dest;
- static struct namelist tnl = { NULL, NULL };
+ static struct namelist tnl;
int i;
if (nargs < 2)
@@ -423,6 +424,8 @@ docmdargs(nargs, args)
if ((dest = strchr(cp, ':')) != NULL)
*dest++ = '\0';
tnl.n_name = cp;
+ tnl.n_regex = NULL;
+ tnl.n_next = NULL;
hosts = expand(&tnl, E_ALL);
if (nerrs)
exit(1);
diff --git a/usr.bin/rdistd/Makefile b/usr.bin/rdistd/Makefile
index 7d9c0cf7d62..7dcca7df29d 100644
--- a/usr.bin/rdistd/Makefile
+++ b/usr.bin/rdistd/Makefile
@@ -1,11 +1,8 @@
-# $OpenBSD: Makefile,v 1.3 1997/04/27 13:03:11 downsj Exp $
+# $OpenBSD: Makefile,v 1.4 2003/05/06 22:10:11 millert Exp $
PROG= rdistd
SRCS= common.c filesys-os.c filesys.c message.c rdistd.c server.c
.PATH: ${.CURDIR}/../rdist
CFLAGS+=-I${.CURDIR}/../rdist -DOS_H=\"os-openbsd.h\"
-LDADD= -lcompat
-DPADD= ${LIBCOMPAT}
-
.include <bsd.prog.mk>