IFC @ r222830
This commit is contained in:
commit
a5615c9044
2
Makefile
2
Makefile
@ -19,7 +19,7 @@
|
||||
# kernel - buildkernel + installkernel.
|
||||
# kernel-toolchain - Builds the subset of world necessary to build a kernel
|
||||
# doxygen - Build API documentation of the kernel, needs doxygen.
|
||||
# update - Convenient way to update your source tree (cvs).
|
||||
# update - Convenient way to update your source tree(s).
|
||||
# check-old - List obsolete directories/files/libraries.
|
||||
# check-old-dirs - List obsolete directories.
|
||||
# check-old-files - List obsolete files.
|
||||
|
@ -12,6 +12,7 @@
|
||||
# -DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel
|
||||
# -DNO_PORTSUPDATE do not update ports in ${MAKE} update
|
||||
# -DNO_DOCUPDATE do not update doc in ${MAKE} update
|
||||
# -DNO_WWWUPDATE do not update www in ${MAKE} update
|
||||
# -DNO_CTF do not run the DTrace CTF conversion tools on built objects
|
||||
# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
|
||||
# TARGET="machine" to crossbuild world for a different machine type
|
||||
@ -904,7 +905,7 @@ doxygen:
|
||||
#
|
||||
# update
|
||||
#
|
||||
# Update the source tree, by running cvsup and/or running cvs to update to the
|
||||
# Update the source tree(s), by running cvsup/cvs/svn to update to the
|
||||
# latest copy.
|
||||
#
|
||||
update:
|
||||
@ -927,6 +928,9 @@ update:
|
||||
.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
|
||||
@${SUP} ${SUPFLAGS} ${DOCSUPFILE}
|
||||
.endif
|
||||
.if defined(WWWSUPFILE) && !defined(NO_WWWUPDATE)
|
||||
@${SUP} ${SUPFLAGS} ${WWWSUPFILE}
|
||||
.endif
|
||||
.endif
|
||||
.if defined(CVS_UPDATE)
|
||||
@cd ${.CURDIR} ; \
|
||||
|
39
UPDATING
39
UPDATING
@ -22,9 +22,48 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9.x IS SLOW:
|
||||
machines to maximize performance. (To disable malloc debugging, run
|
||||
ln -s aj /etc/malloc.conf.)
|
||||
|
||||
20110608:
|
||||
The following sysctls and tunables are retired on x86 platforms:
|
||||
machdep.hlt_cpus
|
||||
machdep.hlt_logical_cpus
|
||||
The following sysctl is retired:
|
||||
machdep.hyperthreading_allowed
|
||||
The sysctls were supposed to provide a way to dynamically offline and
|
||||
online selected CPUs on x86 platforms, but the implementation has not
|
||||
been reliable especially with SCHED_ULE scheduler.
|
||||
machdep.hyperthreading_allowed tunable is still available to ignore
|
||||
hyperthreading CPUs at OS level.
|
||||
Individual CPUs can be disabled using hint.lapic.X.disabled tunable,
|
||||
where X is an APIC ID of a CPU. Be advised, though, that disabling
|
||||
CPUs in non-uniform fashion will result in non-uniform topology and
|
||||
may lead to sub-optimal system performance with SCHED_ULE, which is
|
||||
a default scheduler.
|
||||
|
||||
20110607:
|
||||
cpumask_t type is retired and cpuset_t is used in order to describe
|
||||
a mask of CPUs.
|
||||
|
||||
20110531:
|
||||
Changes to ifconfig(8) for dynamic address family detection mandate
|
||||
that you are running a kernel of 20110525 or later. Make sure to
|
||||
follow the update procedure to boot a new kernel before installing
|
||||
world.
|
||||
|
||||
20110513:
|
||||
Support for sun4v architecture is officially dropped
|
||||
|
||||
20110503:
|
||||
Several KPI breaking changes have been committed to the mii(4) layer,
|
||||
the PHY drivers and consequently some Ethernet drivers using mii(4).
|
||||
This means that miibus.ko and the modules of the affected Ethernet
|
||||
drivers need to be recompiled.
|
||||
|
||||
Note to kernel developers: Given that the OUI bit reversion problem
|
||||
was fixed as part of these changes all mii(4) commits related to OUIs,
|
||||
i.e. to sys/dev/mii/miidevs, PHY driver probing and vendor specific
|
||||
handling, no longer can be merged verbatim to stable/8 and previous
|
||||
branches.
|
||||
|
||||
20110430:
|
||||
Users of the Atheros AR71xx SoC code now need to add 'device ar71xx_pci'
|
||||
into their kernel configurations along with 'device pci'.
|
||||
|
@ -70,6 +70,7 @@ void pmem(KINFO *, VARENT *);
|
||||
void pri(KINFO *, VARENT *);
|
||||
void printheader(void);
|
||||
void priorityr(KINFO *, VARENT *);
|
||||
void egroupname(KINFO *, VARENT *);
|
||||
void rgroupname(KINFO *, VARENT *);
|
||||
void runame(KINFO *, VARENT *);
|
||||
void rvar(KINFO *, VARENT *);
|
||||
@ -78,6 +79,7 @@ int s_cputime(KINFO *);
|
||||
int s_label(KINFO *);
|
||||
int s_loginclass(KINFO *);
|
||||
int s_logname(KINFO *);
|
||||
int s_egroupname(KINFO *);
|
||||
int s_rgroupname(KINFO *);
|
||||
int s_runame(KINFO *);
|
||||
int s_systime(KINFO *);
|
||||
|
@ -88,12 +88,19 @@ static VAR var[] = {
|
||||
{"cpu", "CPU", NULL, 0, kvar, NULL, 3, KOFF(ki_estcpu), UINT, "d",
|
||||
0},
|
||||
{"cputime", "", "time", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"egid", "", "gid", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"egroup", "", "group", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"emul", "EMUL", NULL, LJUST, emulname, NULL, EMULLEN, 0, CHAR,
|
||||
NULL, 0},
|
||||
{"etime", "ELAPSED", NULL, USER, elapsed, NULL, 12, 0, CHAR, NULL, 0},
|
||||
{"etimes", "ELAPSED", NULL, USER, elapseds, NULL, 12, 0, CHAR, NULL, 0},
|
||||
{"euid", "", "uid", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"f", "F", NULL, 0, kvar, NULL, 8, KOFF(ki_flag), INT, "x", 0},
|
||||
{"flags", "", "f", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"gid", "GID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_groups),
|
||||
UINT, UIDFMT, 0},
|
||||
{"group", "GROUP", NULL, LJUST, egroupname, s_egroupname,
|
||||
USERLEN, 0, CHAR, NULL, 0},
|
||||
{"ignored", "", "sigignore", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"inblk", "INBLK", NULL, USER, rvar, NULL, 4, ROFF(ru_inblock), LONG,
|
||||
"ld", 0},
|
||||
|
@ -340,6 +340,22 @@ s_uname(KINFO *k)
|
||||
return (strlen(user_from_uid(k->ki_p->ki_uid, 0)));
|
||||
}
|
||||
|
||||
void
|
||||
egroupname(KINFO *k, VARENT *ve)
|
||||
{
|
||||
VAR *v;
|
||||
|
||||
v = ve->var;
|
||||
(void)printf("%-*s", v->width,
|
||||
group_from_gid(k->ki_p->ki_groups[0], 0));
|
||||
}
|
||||
|
||||
int
|
||||
s_egroupname(KINFO *k)
|
||||
{
|
||||
return (strlen(group_from_gid(k->ki_p->ki_groups[0], 0)));
|
||||
}
|
||||
|
||||
void
|
||||
rgroupname(KINFO *k, VARENT *ve)
|
||||
{
|
||||
|
11
bin/ps/ps.1
11
bin/ps/ps.1
@ -29,7 +29,7 @@
|
||||
.\" @(#)ps.1 8.3 (Berkeley) 4/18/94
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd April 18, 2011
|
||||
.Dd June 14, 2011
|
||||
.Dt PS 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -502,6 +502,12 @@ elapsed running time, in decimal integer seconds
|
||||
.It Cm flags
|
||||
the process flags, in hexadecimal (alias
|
||||
.Cm f )
|
||||
.It Cm gid
|
||||
effective group ID (alias
|
||||
.Cm egid )
|
||||
.It Cm group
|
||||
group name (from egid) (alias
|
||||
.Cm egroup )
|
||||
.It Cm inblk
|
||||
total blocks read (alias
|
||||
.Cm inblock )
|
||||
@ -629,7 +635,8 @@ process pointer
|
||||
.It Cm ucomm
|
||||
name to be used for accounting
|
||||
.It Cm uid
|
||||
effective user ID
|
||||
effective user ID (alias
|
||||
.Cm euid )
|
||||
.It Cm upr
|
||||
scheduling priority on return from system call (alias
|
||||
.Cm usrpri )
|
||||
|
37
bin/sh/TOUR
37
bin/sh/TOUR
@ -27,10 +27,8 @@ programs is:
|
||||
mkbuiltins builtins builtins.h builtins.c
|
||||
mkinit *.c init.c
|
||||
mknodes nodetypes nodes.h nodes.c
|
||||
mksignames - signames.h signames.c
|
||||
mksyntax - syntax.h syntax.c
|
||||
mktokens - token.h
|
||||
bltin/mkexpr unary_op binary_op operators.h operators.c
|
||||
|
||||
There are undoubtedly too many of these. Mkinit searches all the
|
||||
C source files for entries looking like:
|
||||
@ -64,14 +62,6 @@ tion:
|
||||
Preprocessor #define statements are copied to init.c without any
|
||||
special action to request this.
|
||||
|
||||
INDENTATION: The ash source is indented in multiples of six
|
||||
spaces. The only study that I have heard of on the subject con-
|
||||
cluded that the optimal amount to indent is in the range of four
|
||||
to six spaces. I use six spaces since it is not too big a jump
|
||||
from the widely used eight spaces. If you really hate six space
|
||||
indentation, use the adjind (source included) program to change
|
||||
it to something else.
|
||||
|
||||
EXCEPTIONS: Code for dealing with exceptions appears in
|
||||
exceptions.c. The C language doesn't include exception handling,
|
||||
so I implement it using setjmp and longjmp. The global variable
|
||||
@ -115,7 +105,7 @@ repeatedly parses and executes commands.
|
||||
|
||||
OPTIONS.C: This file contains the option processing code. It is
|
||||
called from main to parse the shell arguments when the shell is
|
||||
invoked, and it also contains the set builtin. The -i and -j op-
|
||||
invoked, and it also contains the set builtin. The -i and -m op-
|
||||
tions (the latter turns on job control) require changes in signal
|
||||
handling. The routines setjobctl (in jobs.c) and setinteractive
|
||||
(in trap.c) are called to handle changes to these options.
|
||||
@ -123,10 +113,11 @@ handling. The routines setjobctl (in jobs.c) and setinteractive
|
||||
PARSING: The parser code is all in parser.c. A recursive des-
|
||||
cent parser is used. Syntax tables (generated by mksyntax) are
|
||||
used to classify characters during lexical analysis. There are
|
||||
three tables: one for normal use, one for use when inside single
|
||||
quotes, and one for use when inside double quotes. The tables
|
||||
are machine dependent because they are indexed by character vari-
|
||||
ables and the range of a char varies from machine to machine.
|
||||
four tables: one for normal use, one for use when inside single
|
||||
quotes and dollar single quotes, one for use when inside double
|
||||
quotes and one for use in arithmetic. The tables are machine
|
||||
dependent because they are indexed by character variables and
|
||||
the range of a char varies from machine to machine.
|
||||
|
||||
PARSE OUTPUT: The output of the parser consists of a tree of
|
||||
nodes. The various types of nodes are defined in the file node-
|
||||
@ -242,12 +233,7 @@ The routine shellexec is the interface to the exec system call.
|
||||
EXPAND.C: Arguments are processed in three passes. The first
|
||||
(performed by the routine argstr) performs variable and command
|
||||
substitution. The second (ifsbreakup) performs word splitting
|
||||
and the third (expandmeta) performs file name generation. If the
|
||||
"/u" directory is simulated, then when "/u/username" is replaced
|
||||
by the user's home directory, the flag "didudir" is set. This
|
||||
tells the cd command that it should print out the directory name,
|
||||
just as it would if the "/u" directory were implemented using
|
||||
symbolic links.
|
||||
and the third (expandmeta) performs file name generation.
|
||||
|
||||
VAR.C: Variables are stored in a hash table. Probably we should
|
||||
switch to extensible hashing. The variable name is stored in the
|
||||
@ -292,14 +278,7 @@ when the program is linked into ash. This #define should appear
|
||||
before bltin.h is included; bltin.h will #undef main if the pro-
|
||||
gram is to be compiled stand-alone.
|
||||
|
||||
CD.C: This file defines the cd and pwd builtins. The pwd com-
|
||||
mand runs /bin/pwd the first time it is invoked (unless the user
|
||||
has already done a cd to an absolute pathname), but then
|
||||
remembers the current directory and updates it when the cd com-
|
||||
mand is run, so subsequent pwd commands run very fast. The main
|
||||
complication in the cd command is in the docd command, which
|
||||
resolves symbolic links into actual names and informs the user
|
||||
where the user ended up if he crossed a symbolic link.
|
||||
CD.C: This file defines the cd and pwd builtins.
|
||||
|
||||
SIGNALS: Trap.c implements the trap command. The routine set-
|
||||
signal figures out what action should be taken when a signal is
|
||||
|
@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "mystring.h"
|
||||
#include "alias.h"
|
||||
#include "options.h" /* XXX for argptr (should remove?) */
|
||||
#include "builtins.h"
|
||||
|
||||
#define ATABSIZE 39
|
||||
|
||||
@ -238,7 +239,7 @@ aliascmd(int argc, char **argv)
|
||||
while ((n = *++argv) != NULL) {
|
||||
if ((v = strchr(n+1, '=')) == NULL) /* n+1: funny ksh stuff */
|
||||
if ((ap = lookupalias(n, 0)) == NULL) {
|
||||
warning("%s not found", n);
|
||||
warning("%s: not found", n);
|
||||
ret = 1;
|
||||
} else
|
||||
printalias(ap);
|
||||
|
@ -43,5 +43,3 @@ struct alias {
|
||||
};
|
||||
|
||||
struct alias *lookupalias(const char *, int);
|
||||
int aliascmd(int, char **);
|
||||
int unaliascmd(int, char **);
|
||||
|
@ -36,4 +36,3 @@
|
||||
|
||||
arith_t arith(const char *);
|
||||
void arith_lex_reset(void);
|
||||
int expcmd(int, char **);
|
||||
|
@ -344,7 +344,7 @@ arith_t arith(const char *s)
|
||||
* The exp(1) builtin.
|
||||
*/
|
||||
int
|
||||
expcmd(int argc, char **argv)
|
||||
letcmd(int argc, char **argv)
|
||||
{
|
||||
const char *p;
|
||||
char *concat;
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "../mystring.h"
|
||||
#ifdef SHELL
|
||||
#include "../output.h"
|
||||
#include "builtins.h"
|
||||
#define FILE struct output
|
||||
#undef stdout
|
||||
#define stdout out1
|
||||
@ -75,7 +76,4 @@ pointer stalloc(int);
|
||||
void error(const char *, ...) __printf0like(1, 2);
|
||||
pid_t getjobpgrp(char *);
|
||||
|
||||
int echocmd(int, char **);
|
||||
int testcmd(int, char **);
|
||||
|
||||
extern char *commandname;
|
||||
|
@ -60,7 +60,7 @@ echocmd echo
|
||||
evalcmd -s eval
|
||||
execcmd -s exec
|
||||
exitcmd -s exit
|
||||
expcmd exp let
|
||||
letcmd let
|
||||
exportcmd -s export -s readonly
|
||||
#exprcmd expr
|
||||
falsecmd false
|
||||
|
11
bin/sh/cd.c
11
bin/sh/cd.c
@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "mystring.h"
|
||||
#include "show.h"
|
||||
#include "cd.h"
|
||||
#include "builtins.h"
|
||||
|
||||
static int cdlogical(char *);
|
||||
static int cdphysical(char *);
|
||||
@ -86,6 +87,7 @@ cdcmd(int argc, char **argv)
|
||||
struct stat statb;
|
||||
int ch, phys, print = 0, getcwderr = 0;
|
||||
int rc;
|
||||
int errno1 = ENOENT;
|
||||
|
||||
optreset = 1; optind = 1; opterr = 0; /* initialize getopt */
|
||||
phys = Pflag;
|
||||
@ -122,7 +124,10 @@ cdcmd(int argc, char **argv)
|
||||
else
|
||||
dest = ".";
|
||||
}
|
||||
if (*dest == '/' || (path = bltinlookup("CDPATH", 1)) == NULL)
|
||||
if (dest[0] == '/' ||
|
||||
(dest[0] == '.' && (dest[1] == '/' || dest[1] == '\0')) ||
|
||||
(dest[0] == '.' && dest[1] == '.' && (dest[2] == '/' || dest[2] == '\0')) ||
|
||||
(path = bltinlookup("CDPATH", 1)) == NULL)
|
||||
path = nullstr;
|
||||
while ((p = padvance(&path, dest)) != NULL) {
|
||||
if (stat(p, &statb) >= 0 && S_ISDIR(statb.st_mode)) {
|
||||
@ -138,9 +143,11 @@ cdcmd(int argc, char **argv)
|
||||
rc = docd(p, print, phys);
|
||||
if (rc >= 0)
|
||||
return getcwderr ? rc : 0;
|
||||
if (errno != ENOENT)
|
||||
errno1 = errno;
|
||||
}
|
||||
}
|
||||
error("can't cd to %s", dest);
|
||||
error("%s: %s", dest, strerror(errno1));
|
||||
/*NOTREACHED*/
|
||||
return 0;
|
||||
}
|
||||
|
@ -30,5 +30,3 @@
|
||||
*/
|
||||
|
||||
void pwd_init(int);
|
||||
int cdcmd (int, char **);
|
||||
int pwdcmd(int, char **);
|
||||
|
@ -140,7 +140,7 @@ evalcmd(int argc, char **argv)
|
||||
STPUTC('\0', concat);
|
||||
p = grabstackstr(concat);
|
||||
}
|
||||
evalstring(p, builtin_flags & EV_TESTED);
|
||||
evalstring(p, builtin_flags);
|
||||
} else
|
||||
exitstatus = 0;
|
||||
return exitstatus;
|
||||
@ -165,7 +165,7 @@ evalstring(char *s, int flags)
|
||||
setstackmark(&smark);
|
||||
setinputstring(s, 1);
|
||||
while ((n = parsecmd(0)) != NEOF) {
|
||||
if (n != NULL) {
|
||||
if (n != NULL && !nflag) {
|
||||
if (flags_exit && preadateof())
|
||||
evaltree(n, flags | EV_EXIT);
|
||||
else
|
||||
@ -386,6 +386,14 @@ evalcase(union node *n, int flags)
|
||||
for (cp = n->ncase.cases ; cp && evalskip == 0 ; cp = cp->nclist.next) {
|
||||
for (patp = cp->nclist.pattern ; patp ; patp = patp->narg.next) {
|
||||
if (casematch(patp, arglist.list->text)) {
|
||||
while (cp->nclist.next &&
|
||||
cp->type == NCLISTFALLTHRU) {
|
||||
if (evalskip != 0)
|
||||
break;
|
||||
evaltree(cp->nclist.body,
|
||||
flags & ~EV_EXIT);
|
||||
cp = cp->nclist.next;
|
||||
}
|
||||
if (evalskip == 0) {
|
||||
evaltree(cp->nclist.body, flags);
|
||||
}
|
||||
@ -409,6 +417,7 @@ evalsubshell(union node *n, int flags)
|
||||
struct job *jp;
|
||||
int backgnd = (n->type == NBACKGND);
|
||||
|
||||
oexitstatus = exitstatus;
|
||||
expredir(n->nredir.redirect);
|
||||
if ((!backgnd && flags & EV_EXIT && !have_traps()) ||
|
||||
forkshell(jp = makejob(n, 1), n, backgnd) == 0) {
|
||||
@ -436,6 +445,7 @@ evalredir(union node *n, int flags)
|
||||
struct jmploc *savehandler;
|
||||
volatile int in_redirect = 1;
|
||||
|
||||
oexitstatus = exitstatus;
|
||||
expredir(n->nredir.redirect);
|
||||
savehandler = handler;
|
||||
if (setjmp(jmploc.loc)) {
|
||||
@ -478,7 +488,6 @@ expredir(union node *n)
|
||||
for (redir = n ; redir ; redir = redir->nfile.next) {
|
||||
struct arglist fn;
|
||||
fn.lastp = &fn.list;
|
||||
oexitstatus = exitstatus;
|
||||
switch (redir->type) {
|
||||
case NFROM:
|
||||
case NTO:
|
||||
@ -570,14 +579,8 @@ evalpipe(union node *n)
|
||||
static int
|
||||
is_valid_fast_cmdsubst(union node *n)
|
||||
{
|
||||
union node *argp;
|
||||
|
||||
if (n->type != NCMD)
|
||||
return 0;
|
||||
for (argp = n->ncmd.args ; argp ; argp = argp->narg.next)
|
||||
if (expandhassideeffects(argp->narg.text))
|
||||
return 0;
|
||||
return 1;
|
||||
return (n->type == NCMD);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -595,6 +598,7 @@ evalbackcmd(union node *n, struct backcmd *result)
|
||||
struct stackmark smark; /* unnecessary */
|
||||
struct jmploc jmploc;
|
||||
struct jmploc *savehandler;
|
||||
struct localvar *savelocalvars;
|
||||
|
||||
setstackmark(&smark);
|
||||
result->fd = -1;
|
||||
@ -607,12 +611,18 @@ evalbackcmd(union node *n, struct backcmd *result)
|
||||
}
|
||||
if (is_valid_fast_cmdsubst(n)) {
|
||||
exitstatus = oexitstatus;
|
||||
savelocalvars = localvars;
|
||||
localvars = NULL;
|
||||
forcelocal++;
|
||||
savehandler = handler;
|
||||
if (setjmp(jmploc.loc)) {
|
||||
if (exception == EXERROR || exception == EXEXEC)
|
||||
exitstatus = 2;
|
||||
else if (exception != 0) {
|
||||
handler = savehandler;
|
||||
forcelocal--;
|
||||
poplocalvars();
|
||||
localvars = savelocalvars;
|
||||
longjmp(handler->loc, 1);
|
||||
}
|
||||
} else {
|
||||
@ -620,6 +630,9 @@ evalbackcmd(union node *n, struct backcmd *result)
|
||||
evalcommand(n, EV_BACKCMD, result);
|
||||
}
|
||||
handler = savehandler;
|
||||
forcelocal--;
|
||||
poplocalvars();
|
||||
localvars = savelocalvars;
|
||||
} else {
|
||||
exitstatus = 0;
|
||||
if (pipe(pip) < 0)
|
||||
@ -744,8 +757,9 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
|
||||
/* Print the command if xflag is set. */
|
||||
if (xflag) {
|
||||
char sep = 0;
|
||||
const char *p;
|
||||
out2str(ps4val());
|
||||
const char *p, *ps4;
|
||||
ps4 = expandstr(ps4val());
|
||||
out2str(ps4 != NULL ? ps4 : ps4val());
|
||||
for (sp = varlist.list ; sp ; sp = sp->next) {
|
||||
if (sep != 0)
|
||||
out2c(' ');
|
||||
@ -880,14 +894,13 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
|
||||
}
|
||||
|
||||
/* Fork off a child process if necessary. */
|
||||
if (cmd->ncmd.backgnd
|
||||
|| ((cmdentry.cmdtype == CMDNORMAL || cmdentry.cmdtype == CMDUNKNOWN)
|
||||
if (((cmdentry.cmdtype == CMDNORMAL || cmdentry.cmdtype == CMDUNKNOWN)
|
||||
&& ((flags & EV_EXIT) == 0 || have_traps()))
|
||||
|| ((flags & EV_BACKCMD) != 0
|
||||
&& (cmdentry.cmdtype != CMDBUILTIN ||
|
||||
!safe_builtin(cmdentry.u.index, argc, argv)))) {
|
||||
jp = makejob(cmd, 1);
|
||||
mode = cmd->ncmd.backgnd;
|
||||
mode = FORK_FG;
|
||||
if (flags & EV_BACKCMD) {
|
||||
mode = FORK_NOJOB;
|
||||
if (pipe(pip) < 0)
|
||||
@ -902,6 +915,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
|
||||
dup2(pip[1], 1);
|
||||
close(pip[1]);
|
||||
}
|
||||
flags &= ~EV_BACKCMD;
|
||||
}
|
||||
flags |= EV_EXIT;
|
||||
}
|
||||
@ -1053,8 +1067,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
|
||||
backcmd->fd = pip[0];
|
||||
close(pip[1]);
|
||||
backcmd->jp = jp;
|
||||
} else
|
||||
exitstatus = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
if (lastarg)
|
||||
|
@ -51,19 +51,10 @@ struct backcmd { /* result of evalbackcmd */
|
||||
#define EV_TESTED 02 /* exit status is checked; ignore -e flag */
|
||||
#define EV_BACKCMD 04 /* command executing within back quotes */
|
||||
|
||||
int evalcmd(int, char **);
|
||||
void evalstring(char *, int);
|
||||
union node; /* BLETCH for ansi C */
|
||||
void evaltree(union node *, int);
|
||||
void evalbackcmd(union node *, struct backcmd *);
|
||||
int bltincmd(int, char **);
|
||||
int breakcmd(int, char **);
|
||||
int returncmd(int, char **);
|
||||
int falsecmd(int, char **);
|
||||
int truecmd(int, char **);
|
||||
int execcmd(int, char **);
|
||||
int timescmd(int, char **);
|
||||
int commandcmd(int, char **);
|
||||
|
||||
/* in_function returns nonzero if we are currently evaluating a function */
|
||||
#define in_function() funcnest
|
||||
|
@ -66,7 +66,6 @@ extern int exerrno; /* last exec error */
|
||||
|
||||
void shellexec(char **, char **, const char *, int) __dead2;
|
||||
char *padvance(const char **, const char *);
|
||||
int hashcmd(int, char **);
|
||||
void find_command(const char *, struct cmdentry *, int, const char *);
|
||||
int find_builtin(const char *, int *);
|
||||
void hashcd(void);
|
||||
@ -75,5 +74,4 @@ void addcmdentry(const char *, struct cmdentry *);
|
||||
void defun(const char *, union node *);
|
||||
int unsetfunc(const char *);
|
||||
int typecmd_impl(int, char **, int, const char *);
|
||||
int typecmd(int, char **);
|
||||
void clearcmdentry(void);
|
||||
|
127
bin/sh/expand.c
127
bin/sh/expand.c
@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
/*
|
||||
* Routines to expand arguments to commands. We have to deal with
|
||||
@ -76,6 +77,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "mystring.h"
|
||||
#include "arith.h"
|
||||
#include "show.h"
|
||||
#include "builtins.h"
|
||||
|
||||
/*
|
||||
* Structure specifying which parts of the string should be searched
|
||||
@ -174,6 +176,7 @@ expandarg(union node *arg, struct arglist *arglist, int flag)
|
||||
ifslastp = NULL;
|
||||
argstr(arg->narg.text, flag);
|
||||
if (arglist == NULL) {
|
||||
STACKSTRNUL(expdest);
|
||||
return; /* here document expanded */
|
||||
}
|
||||
STPUTC('\0', expdest);
|
||||
@ -761,7 +764,8 @@ evalvar(char *p, int flag)
|
||||
break;
|
||||
record:
|
||||
recordregion(startloc, expdest - stackblock(),
|
||||
varflags & VSQUOTE);
|
||||
varflags & VSQUOTE || (ifsset() && ifsval()[0] == '\0' &&
|
||||
(*var == '@' || *var == '*')));
|
||||
break;
|
||||
|
||||
case VSPLUS:
|
||||
@ -947,7 +951,9 @@ varvalue(char *name, int quoted, int subtype, int flag)
|
||||
sep = ' ';
|
||||
for (ap = shellparam.p ; (p = *ap++) != NULL ; ) {
|
||||
strtodest(p, flag, subtype, quoted);
|
||||
if (*ap && sep)
|
||||
if (!*ap)
|
||||
break;
|
||||
if (sep || (flag & EXP_FULL && !quoted && **ap != '\0'))
|
||||
STPUTC(sep, expdest);
|
||||
}
|
||||
break;
|
||||
@ -1395,6 +1401,36 @@ get_wc(const char **p)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* See if a character matches a character class, starting at the first colon
|
||||
* of "[:class:]".
|
||||
* If a valid character class is recognized, a pointer to the next character
|
||||
* after the final closing bracket is stored into *end, otherwise a null
|
||||
* pointer is stored into *end.
|
||||
*/
|
||||
static int
|
||||
match_charclass(const char *p, wchar_t chr, const char **end)
|
||||
{
|
||||
char name[20];
|
||||
const char *nameend;
|
||||
wctype_t cclass;
|
||||
|
||||
*end = NULL;
|
||||
p++;
|
||||
nameend = strstr(p, ":]");
|
||||
if (nameend == NULL || nameend - p >= sizeof(name) || nameend == p)
|
||||
return 0;
|
||||
memcpy(name, p, nameend - p);
|
||||
name[nameend - p] = '\0';
|
||||
*end = nameend + 2;
|
||||
cclass = wctype(name);
|
||||
/* An unknown class matches nothing but is valid nevertheless. */
|
||||
if (cclass == 0)
|
||||
return 0;
|
||||
return iswctype(chr, cclass);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Returns true if the pattern matches the string.
|
||||
*/
|
||||
@ -1402,7 +1438,7 @@ get_wc(const char **p)
|
||||
int
|
||||
patmatch(const char *pattern, const char *string, int squoted)
|
||||
{
|
||||
const char *p, *q;
|
||||
const char *p, *q, *end;
|
||||
char c;
|
||||
wchar_t wc, wc2;
|
||||
|
||||
@ -1426,7 +1462,7 @@ patmatch(const char *pattern, const char *string, int squoted)
|
||||
if (localeisutf8)
|
||||
wc = get_wc(&q);
|
||||
else
|
||||
wc = *q++;
|
||||
wc = (unsigned char)*q++;
|
||||
if (wc == '\0')
|
||||
return 0;
|
||||
break;
|
||||
@ -1483,13 +1519,18 @@ patmatch(const char *pattern, const char *string, int squoted)
|
||||
if (localeisutf8)
|
||||
chr = get_wc(&q);
|
||||
else
|
||||
chr = *q++;
|
||||
chr = (unsigned char)*q++;
|
||||
if (chr == '\0')
|
||||
return 0;
|
||||
c = *p++;
|
||||
do {
|
||||
if (c == CTLQUOTEMARK)
|
||||
continue;
|
||||
if (c == '[' && *p == ':') {
|
||||
found |= match_charclass(p, chr, &end);
|
||||
if (end != NULL)
|
||||
p = end;
|
||||
}
|
||||
if (c == CTLESC)
|
||||
c = *p++;
|
||||
if (localeisutf8 && c & 0x80) {
|
||||
@ -1498,7 +1539,7 @@ patmatch(const char *pattern, const char *string, int squoted)
|
||||
if (wc == 0) /* bad utf-8 */
|
||||
return 0;
|
||||
} else
|
||||
wc = c;
|
||||
wc = (unsigned char)c;
|
||||
if (*p == '-' && p[1] != ']') {
|
||||
p++;
|
||||
while (*p == CTLQUOTEMARK)
|
||||
@ -1510,7 +1551,7 @@ patmatch(const char *pattern, const char *string, int squoted)
|
||||
if (wc2 == 0) /* bad utf-8 */
|
||||
return 0;
|
||||
} else
|
||||
wc2 = *p++;
|
||||
wc2 = (unsigned char)*p++;
|
||||
if ( collate_range_cmp(chr, wc) >= 0
|
||||
&& collate_range_cmp(chr, wc2) <= 0
|
||||
)
|
||||
@ -1616,78 +1657,6 @@ cvtnum(int num, char *buf)
|
||||
return buf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check statically if expanding a string may have side effects.
|
||||
*/
|
||||
int
|
||||
expandhassideeffects(const char *p)
|
||||
{
|
||||
int c;
|
||||
int arinest;
|
||||
|
||||
arinest = 0;
|
||||
while ((c = *p++) != '\0') {
|
||||
switch (c) {
|
||||
case CTLESC:
|
||||
p++;
|
||||
break;
|
||||
case CTLVAR:
|
||||
c = *p++;
|
||||
/* Expanding $! sets the job to remembered. */
|
||||
if (*p == '!')
|
||||
return 1;
|
||||
if ((c & VSTYPE) == VSASSIGN)
|
||||
return 1;
|
||||
/*
|
||||
* If we are in arithmetic, the parameter may contain
|
||||
* '=' which may cause side effects. Exceptions are
|
||||
* the length of a parameter and $$, $# and $? which
|
||||
* are always numeric.
|
||||
*/
|
||||
if ((c & VSTYPE) == VSLENGTH) {
|
||||
while (*p != '=')
|
||||
p++;
|
||||
p++;
|
||||
break;
|
||||
}
|
||||
if ((*p == '$' || *p == '#' || *p == '?') &&
|
||||
p[1] == '=') {
|
||||
p += 2;
|
||||
break;
|
||||
}
|
||||
if (arinest > 0)
|
||||
return 1;
|
||||
break;
|
||||
case CTLBACKQ:
|
||||
case CTLBACKQ | CTLQUOTE:
|
||||
if (arinest > 0)
|
||||
return 1;
|
||||
break;
|
||||
case CTLARI:
|
||||
arinest++;
|
||||
break;
|
||||
case CTLENDARI:
|
||||
arinest--;
|
||||
break;
|
||||
case '=':
|
||||
if (*p == '=') {
|
||||
/* Allow '==' operator. */
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
if (arinest > 0)
|
||||
return 1;
|
||||
break;
|
||||
case '!': case '<': case '>':
|
||||
/* Allow '!=', '<=', '>=' operators. */
|
||||
if (*p == '=')
|
||||
p++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do most of the work for wordexp(3).
|
||||
*/
|
||||
|
@ -63,5 +63,3 @@ void expari(int);
|
||||
int patmatch(const char *, const char *, int);
|
||||
void rmescapes(char *);
|
||||
int casematch(union node *, const char *);
|
||||
int expandhassideeffects(const char *);
|
||||
int wordexpcmd(int, char **);
|
||||
|
@ -59,6 +59,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "error.h"
|
||||
#include "eval.h"
|
||||
#include "memalloc.h"
|
||||
#include "builtins.h"
|
||||
|
||||
#define MAXHISTLOOPS 4 /* max recursions through fc */
|
||||
#define DEFEDITOR "ed" /* default editor *should* be $EDITOR */
|
||||
|
@ -403,7 +403,7 @@ setinputfile(const char *fname, int push)
|
||||
|
||||
INTOFF;
|
||||
if ((fd = open(fname, O_RDONLY)) < 0)
|
||||
error("Can't open %s: %s", fname, strerror(errno));
|
||||
error("cannot open %s: %s", fname, strerror(errno));
|
||||
if (fd < 10) {
|
||||
fd2 = fcntl(fd, F_DUPFD, 10);
|
||||
close(fd);
|
||||
|
@ -70,6 +70,8 @@ __FBSDID("$FreeBSD$");
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include "var.h"
|
||||
#include "builtins.h"
|
||||
|
||||
|
||||
static struct job *jobtab; /* array of jobs */
|
||||
@ -798,6 +800,7 @@ forkshell(struct job *jp, union node *n, int mode)
|
||||
handler = &main_handler;
|
||||
closescript();
|
||||
INTON;
|
||||
forcelocal = 0;
|
||||
clear_traps();
|
||||
#if JOBS
|
||||
jobctl = 0; /* do job control only in root shell */
|
||||
@ -820,7 +823,7 @@ forkshell(struct job *jp, union node *n, int mode)
|
||||
! fd0_redirected_p ()) {
|
||||
close(0);
|
||||
if (open(_PATH_DEVNULL, O_RDONLY) != 0)
|
||||
error("Can't open %s: %s",
|
||||
error("cannot open %s: %s",
|
||||
_PATH_DEVNULL, strerror(errno));
|
||||
}
|
||||
}
|
||||
@ -832,7 +835,7 @@ forkshell(struct job *jp, union node *n, int mode)
|
||||
! fd0_redirected_p ()) {
|
||||
close(0);
|
||||
if (open(_PATH_DEVNULL, O_RDONLY) != 0)
|
||||
error("Can't open %s: %s",
|
||||
error("cannot open %s: %s",
|
||||
_PATH_DEVNULL, strerror(errno));
|
||||
}
|
||||
}
|
||||
@ -1121,7 +1124,7 @@ backgndpidset(void)
|
||||
pid_t
|
||||
backgndpidval(void)
|
||||
{
|
||||
if (bgjob != NULL)
|
||||
if (bgjob != NULL && !forcelocal)
|
||||
bgjob->remembered = 1;
|
||||
return backgndpid;
|
||||
}
|
||||
|
@ -88,12 +88,7 @@ extern int in_dowait; /* are we in dowait()? */
|
||||
extern volatile sig_atomic_t breakwaitcmd; /* break wait to process traps? */
|
||||
|
||||
void setjobctl(int);
|
||||
int fgcmd(int, char **);
|
||||
int bgcmd(int, char **);
|
||||
int jobscmd(int, char **);
|
||||
void showjobs(int, int);
|
||||
int waitcmd(int, char **);
|
||||
int jobidcmd(int, char **);
|
||||
struct job *makejob(union node *, int);
|
||||
pid_t forkshell(struct job *, union node *, int);
|
||||
int waitforjob(struct job *, int *);
|
||||
|
@ -72,13 +72,14 @@ __FBSDID("$FreeBSD$");
|
||||
#include "mystring.h"
|
||||
#include "exec.h"
|
||||
#include "cd.h"
|
||||
#include "builtins.h"
|
||||
|
||||
int rootpid;
|
||||
int rootshell;
|
||||
struct jmploc main_handler;
|
||||
int localeisutf8, initial_localeisutf8;
|
||||
|
||||
static void read_profile(const char *);
|
||||
static void read_profile(char *);
|
||||
static char *find_dot_file(char *);
|
||||
|
||||
/*
|
||||
@ -92,7 +93,7 @@ static char *find_dot_file(char *);
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct stackmark smark;
|
||||
struct stackmark smark, smark2;
|
||||
volatile int state;
|
||||
char *shinit;
|
||||
|
||||
@ -139,6 +140,7 @@ main(int argc, char *argv[])
|
||||
rootshell = 1;
|
||||
init();
|
||||
setstackmark(&smark);
|
||||
setstackmark(&smark2);
|
||||
procargs(argc, argv);
|
||||
pwd_init(iflag);
|
||||
if (iflag)
|
||||
@ -149,7 +151,7 @@ main(int argc, char *argv[])
|
||||
state1:
|
||||
state = 2;
|
||||
if (privileged == 0)
|
||||
read_profile(".profile");
|
||||
read_profile("${HOME-}/.profile");
|
||||
else
|
||||
read_profile("/etc/suid_profile");
|
||||
}
|
||||
@ -163,6 +165,7 @@ main(int argc, char *argv[])
|
||||
}
|
||||
state3:
|
||||
state = 4;
|
||||
popstackmark(&smark2);
|
||||
if (minusc) {
|
||||
evalstring(minusc, sflag ? 0 : EV_EXIT);
|
||||
}
|
||||
@ -235,12 +238,16 @@ cmdloop(int top)
|
||||
*/
|
||||
|
||||
static void
|
||||
read_profile(const char *name)
|
||||
read_profile(char *name)
|
||||
{
|
||||
int fd;
|
||||
const char *expandedname;
|
||||
|
||||
expandedname = expandstr(name);
|
||||
if (expandedname == NULL)
|
||||
return;
|
||||
INTOFF;
|
||||
if ((fd = open(name, O_RDONLY)) >= 0)
|
||||
if ((fd = open(expandedname, O_RDONLY)) >= 0)
|
||||
setinputfd(fd, 1);
|
||||
INTON;
|
||||
if (fd < 0)
|
||||
@ -264,7 +271,7 @@ readcmdfile(const char *name)
|
||||
if ((fd = open(name, O_RDONLY)) >= 0)
|
||||
setinputfd(fd, 1);
|
||||
else
|
||||
error("Can't open %s: %s", name, strerror(errno));
|
||||
error("cannot open %s: %s", name, strerror(errno));
|
||||
INTON;
|
||||
cmdloop(0);
|
||||
popfile();
|
||||
|
@ -39,5 +39,3 @@ extern struct jmploc main_handler; /* top level exception handler */
|
||||
|
||||
void readcmdfile(const char *);
|
||||
void cmdloop(int);
|
||||
int dotcmd(int, char **);
|
||||
int exitcmd(int, char **);
|
||||
|
@ -58,9 +58,7 @@ cat <<\!
|
||||
!
|
||||
awk '/^[^#]/ {if(('$havejobs' || $2 != "-j") && ('$havehist' || $2 != "-h")) \
|
||||
print $0}' builtins.def | sed 's/-[hj]//' > $temp
|
||||
awk '{ printf "int %s(int, char **);\n", $1}' $temp
|
||||
echo '
|
||||
int (*const builtinfunc[])(int, char **) = {'
|
||||
echo 'int (*const builtinfunc[])(int, char **) = {'
|
||||
awk '/^[^#]/ { printf "\t%s,\n", $1}' $temp
|
||||
echo '};
|
||||
|
||||
@ -94,5 +92,7 @@ struct builtincmd {
|
||||
};
|
||||
|
||||
extern int (*const builtinfunc[])(int, char **);
|
||||
extern const struct builtincmd builtincmd[];'
|
||||
extern const struct builtincmd builtincmd[];
|
||||
'
|
||||
awk '{ printf "int %s(int, char **);\n", $1}' $temp
|
||||
rm -f $temp
|
||||
|
@ -50,6 +50,7 @@ TPIPE 0 "|"
|
||||
TLP 0 "("
|
||||
TRP 1 ")"
|
||||
TENDCASE 1 ";;"
|
||||
TFALLTHRU 1 ";&"
|
||||
TREDIR 0 redirection
|
||||
TWORD 0 word
|
||||
TIF 0 "if"
|
||||
|
@ -39,8 +39,6 @@ extern int displayhist;
|
||||
void histedit(void);
|
||||
void sethistsize(const char *);
|
||||
void setterm(const char *);
|
||||
int histcmd(int, char **);
|
||||
int not_fcnumber(const char *);
|
||||
int str_to_event(const char *, int);
|
||||
int bindcmd(int, char **);
|
||||
|
||||
|
@ -56,7 +56,6 @@ NSEMI nbinary # two commands separated by a semicolon
|
||||
|
||||
NCMD ncmd # a simple command
|
||||
type int
|
||||
backgnd int # set to run command in background
|
||||
args nodeptr # the arguments
|
||||
redirect nodeptr # list of file redirections
|
||||
|
||||
@ -96,12 +95,13 @@ NCASE ncase # a case statement
|
||||
expr nodeptr # the word to switch on
|
||||
cases nodeptr # the list of cases (NCLIST nodes)
|
||||
|
||||
NCLIST nclist # a case
|
||||
NCLIST nclist # a case ending with ;;
|
||||
type int
|
||||
next nodeptr # the next case in list
|
||||
pattern nodeptr # list of patterns for this case
|
||||
body nodeptr # code to execute for this case
|
||||
|
||||
NCLISTFALLTHRU nclist # a case ending with ;&
|
||||
|
||||
NDEFUN narg # define a function. The "next" field contains
|
||||
# the body of the function.
|
||||
|
@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include "builtins.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
@ -83,6 +84,7 @@ void
|
||||
procargs(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
char *scriptname;
|
||||
|
||||
argptr = argv;
|
||||
if (argc > 0)
|
||||
@ -105,8 +107,9 @@ procargs(int argc, char **argv)
|
||||
optlist[i].val = 0;
|
||||
arg0 = argv[0];
|
||||
if (sflag == 0 && minusc == NULL) {
|
||||
commandname = arg0 = *argptr++;
|
||||
setinputfile(commandname, 0);
|
||||
scriptname = *argptr++;
|
||||
setinputfile(scriptname, 0);
|
||||
commandname = arg0 = scriptname;
|
||||
}
|
||||
/* POSIX 1003.2: first arg after -c cmd is $0, remainder $1... */
|
||||
if (argptr && minusc && *argptr)
|
||||
|
@ -62,8 +62,9 @@ struct shparam {
|
||||
#define privileged optlist[15].val
|
||||
#define Tflag optlist[16].val
|
||||
#define Pflag optlist[17].val
|
||||
#define hflag optlist[18].val
|
||||
|
||||
#define NOPTS 18
|
||||
#define NOPTS 19
|
||||
|
||||
struct optent {
|
||||
const char *name;
|
||||
@ -91,6 +92,7 @@ struct optent optlist[NOPTS] = {
|
||||
{ "privileged", 'p', 0 },
|
||||
{ "trapsasync", 'T', 0 },
|
||||
{ "physical", 'P', 0 },
|
||||
{ "trackall", 'h', 0 },
|
||||
};
|
||||
#else
|
||||
extern struct optent optlist[NOPTS];
|
||||
@ -108,8 +110,5 @@ void procargs(int, char **);
|
||||
void optschanged(void);
|
||||
void setparam(char **);
|
||||
void freeparam(struct shparam *);
|
||||
int shiftcmd(int, char **);
|
||||
int setcmd(int, char **);
|
||||
int getoptscmd(int, char **);
|
||||
int nextopt(const char *);
|
||||
void getoptsreset(const char *);
|
||||
|
@ -240,8 +240,8 @@ list(int nlflag, int erflag)
|
||||
n2 = andor();
|
||||
tok = readtoken();
|
||||
if (tok == TBACKGND) {
|
||||
if (n2->type == NCMD || n2->type == NPIPE) {
|
||||
n2->ncmd.backgnd = 1;
|
||||
if (n2->type == NPIPE) {
|
||||
n2->npipe.backgnd = 1;
|
||||
} else if (n2->type == NREDIR) {
|
||||
n2->type = NBACKGND;
|
||||
} else {
|
||||
@ -542,10 +542,13 @@ TRACE(("expecting DO got %s %s\n", tokname[got], got == TWORD ? wordtext : ""));
|
||||
|
||||
checkkwd = CHKNL | CHKKWD | CHKALIAS;
|
||||
if ((t = readtoken()) != TESAC) {
|
||||
if (t != TENDCASE)
|
||||
synexpect(TENDCASE);
|
||||
if (t == TENDCASE)
|
||||
;
|
||||
else if (t == TFALLTHRU)
|
||||
cp->type = NCLISTFALLTHRU;
|
||||
else
|
||||
checkkwd = CHKNL | CHKKWD, readtoken();
|
||||
synexpect(TENDCASE);
|
||||
checkkwd = CHKNL | CHKKWD, readtoken();
|
||||
}
|
||||
cpp = &cp->nclist.next;
|
||||
}
|
||||
@ -686,7 +689,6 @@ simplecmd(union node **rpp, union node *redir)
|
||||
*rpp = NULL;
|
||||
n = (union node *)stalloc(sizeof (struct ncmd));
|
||||
n->type = NCMD;
|
||||
n->ncmd.backgnd = 0;
|
||||
n->ncmd.args = args;
|
||||
n->ncmd.redirect = redir;
|
||||
return n;
|
||||
@ -931,8 +933,11 @@ xxreadtoken(void)
|
||||
pungetc();
|
||||
RETURN(TPIPE);
|
||||
case ';':
|
||||
if (pgetc() == ';')
|
||||
c = pgetc();
|
||||
if (c == ';')
|
||||
RETURN(TENDCASE);
|
||||
else if (c == '&')
|
||||
RETURN(TFALLTHRU);
|
||||
pungetc();
|
||||
RETURN(TSEMI);
|
||||
case '(':
|
||||
@ -2029,3 +2034,47 @@ getprompt(void *unused __unused)
|
||||
ps[i] = '\0';
|
||||
return (ps);
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
expandstr(char *ps)
|
||||
{
|
||||
union node n;
|
||||
struct jmploc jmploc;
|
||||
struct jmploc *const savehandler = handler;
|
||||
const int saveprompt = doprompt;
|
||||
struct parsefile *const savetopfile = getcurrentfile();
|
||||
struct parser_temp *const saveparser_temp = parser_temp;
|
||||
const char *result = NULL;
|
||||
|
||||
if (!setjmp(jmploc.loc)) {
|
||||
handler = &jmploc;
|
||||
parser_temp = NULL;
|
||||
setinputstring(ps, 1);
|
||||
doprompt = 0;
|
||||
readtoken1(pgetc(), DQSYNTAX, "\n\n", 0);
|
||||
if (backquotelist != NULL)
|
||||
error("Command substitution not allowed here");
|
||||
|
||||
n.narg.type = NARG;
|
||||
n.narg.next = NULL;
|
||||
n.narg.text = wordtext;
|
||||
n.narg.backquote = backquotelist;
|
||||
|
||||
expandarg(&n, NULL, 0);
|
||||
result = stackblock();
|
||||
INTOFF;
|
||||
}
|
||||
handler = savehandler;
|
||||
doprompt = saveprompt;
|
||||
popfilesupto(savetopfile);
|
||||
if (parser_temp != saveparser_temp) {
|
||||
parser_temp_free_all();
|
||||
parser_temp = saveparser_temp;
|
||||
}
|
||||
if (result != NULL) {
|
||||
INTON;
|
||||
} else if (exception == EXINT)
|
||||
raise(SIGINT);
|
||||
return result;
|
||||
}
|
||||
|
@ -82,3 +82,4 @@ void fixredir(union node *, const char *, int);
|
||||
int goodname(const char *);
|
||||
int isassignment(const char *);
|
||||
char *getprompt(void *);
|
||||
const char *expandstr(char *);
|
||||
|
34
bin/sh/sh.1
34
bin/sh/sh.1
@ -32,7 +32,7 @@
|
||||
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 21, 2011
|
||||
.Dd June 18, 2011
|
||||
.Dt SH 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -124,8 +124,8 @@ If the environment variable
|
||||
.Ev ENV
|
||||
is set on entry to a shell, or is set in the
|
||||
.Pa .profile
|
||||
of a login shell, the shell then reads commands from the file named in
|
||||
.Ev ENV .
|
||||
of a login shell, the shell then subjects its value to parameter expansion
|
||||
and arithmetic expansion and reads commands from the named file.
|
||||
Therefore, a user should place commands that are to be executed only
|
||||
at login time in the
|
||||
.Pa .profile
|
||||
@ -241,6 +241,10 @@ tested, all commands of the function are considered to be tested as
|
||||
well.
|
||||
.It Fl f Li noglob
|
||||
Disable pathname expansion.
|
||||
.It Fl h Li trackall
|
||||
A do-nothing option for
|
||||
.Tn POSIX
|
||||
compliance.
|
||||
.It Fl I Li ignoreeof
|
||||
Ignore
|
||||
.Dv EOF Ap s
|
||||
@ -324,7 +328,7 @@ Useful for debugging.
|
||||
Write each command
|
||||
(preceded by the value of the
|
||||
.Va PS4
|
||||
variable)
|
||||
variable subjected to parameter expansion and arithmetic expansion)
|
||||
to standard error before it is executed.
|
||||
Useful for debugging.
|
||||
.El
|
||||
@ -372,7 +376,7 @@ The following is a list of valid operators:
|
||||
.It Control operators:
|
||||
.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
|
||||
.It Li & Ta Li && Ta Li ( Ta Li ) Ta Li \en
|
||||
.It Li ;; Ta Li ; Ta Li | Ta Li ||
|
||||
.It Li ;; Ta Li ;& Ta Li ; Ta Li | Ta Li ||
|
||||
.El
|
||||
.It Redirection operators:
|
||||
.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
|
||||
@ -990,6 +994,11 @@ described later),
|
||||
separated by
|
||||
.Ql \&|
|
||||
characters.
|
||||
If the selected list is terminated by the control operator
|
||||
.Ql ;&
|
||||
instead of
|
||||
.Ql ;; ,
|
||||
execution continues with the next list.
|
||||
The exit code of the
|
||||
.Ic case
|
||||
command is the exit code of the last command executed in the list or
|
||||
@ -1536,10 +1545,7 @@ except that the built-in commands
|
||||
and
|
||||
.Ic trap
|
||||
return information about the main shell environment
|
||||
if they are the only command in a command substitution
|
||||
and the substitutions in the command cannot cause side effects
|
||||
(such as from assigning values to variables or referencing
|
||||
.Li $! ).
|
||||
if they are the only command in a command substitution.
|
||||
.Ss Arithmetic Expansion
|
||||
Arithmetic expansion provides a mechanism for evaluating an arithmetic
|
||||
expression and substituting its value.
|
||||
@ -1651,6 +1657,15 @@ matches a
|
||||
rather than introducing a character class.
|
||||
A character class matches any of the characters between the square brackets.
|
||||
A range of characters may be specified using a minus sign.
|
||||
A named class of characters (see
|
||||
.Xr wctype 3 )
|
||||
may be specified by surrounding the name with
|
||||
.Ql \&[:
|
||||
and
|
||||
.Ql :\&] .
|
||||
For example,
|
||||
.Ql \&[\&[:alpha:\&]\&]
|
||||
is a shell pattern that matches a single letter.
|
||||
The character class may be complemented by making an exclamation point
|
||||
.Pq Ql !\&
|
||||
the first character of the character class.
|
||||
@ -2575,6 +2590,7 @@ will return the argument.
|
||||
.Xr execve 2 ,
|
||||
.Xr getrlimit 2 ,
|
||||
.Xr umask 2 ,
|
||||
.Xr wctype 3 ,
|
||||
.Xr editrc 5
|
||||
.Sh HISTORY
|
||||
A
|
||||
|
@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "error.h"
|
||||
#include "trap.h"
|
||||
#include "mystring.h"
|
||||
#include "builtins.h"
|
||||
#include "myhistedit.h"
|
||||
|
||||
|
||||
|
@ -37,7 +37,6 @@ extern int pendingsigs;
|
||||
extern int in_dotrap;
|
||||
extern volatile sig_atomic_t gotwinch;
|
||||
|
||||
int trapcmd(int, char **);
|
||||
void clear_traps(void);
|
||||
int have_traps(void);
|
||||
void setsignal(int);
|
||||
|
24
bin/sh/var.c
24
bin/sh/var.c
@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include "parser.h"
|
||||
#include "builtins.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
@ -94,6 +95,8 @@ struct var vps4;
|
||||
struct var vvers;
|
||||
static struct var voptind;
|
||||
|
||||
int forcelocal;
|
||||
|
||||
static const struct varinit varinit[] = {
|
||||
#ifndef NO_HISTORY
|
||||
{ &vhistsize, VUNSET, "HISTSIZE=",
|
||||
@ -325,6 +328,8 @@ setvareq(char *s, int flags)
|
||||
|
||||
if (aflag)
|
||||
flags |= VEXPORT;
|
||||
if (forcelocal && !(flags & (VNOSET | VNOLOCAL)))
|
||||
mklocal(s);
|
||||
vp = find_var(s, &vpp, &nlen);
|
||||
if (vp != NULL) {
|
||||
if (vp->flags & VREADONLY)
|
||||
@ -607,6 +612,12 @@ showvarscmd(int argc __unused, char **argv __unused)
|
||||
|
||||
qsort(vars, n, sizeof(*vars), var_compare);
|
||||
for (i = 0; i < n; i++) {
|
||||
/*
|
||||
* Skip improper variable names so the output remains usable as
|
||||
* shell input.
|
||||
*/
|
||||
if (!isassignment(vars[i]))
|
||||
continue;
|
||||
s = strchr(vars[i], '=');
|
||||
s++;
|
||||
outbin(vars[i], s - vars[i], out1);
|
||||
@ -678,6 +689,13 @@ exportcmd(int argc, char **argv)
|
||||
for (vp = *vpp ; vp ; vp = vp->next) {
|
||||
if (vp->flags & flag) {
|
||||
if (values) {
|
||||
/*
|
||||
* Skip improper variable names
|
||||
* so the output remains usable
|
||||
* as shell input.
|
||||
*/
|
||||
if (!isassignment(vp->text))
|
||||
continue;
|
||||
out1str(cmdname);
|
||||
out1c(' ');
|
||||
}
|
||||
@ -740,9 +758,9 @@ mklocal(char *name)
|
||||
vp = find_var(name, &vpp, NULL);
|
||||
if (vp == NULL) {
|
||||
if (strchr(name, '='))
|
||||
setvareq(savestr(name), VSTRFIXED);
|
||||
setvareq(savestr(name), VSTRFIXED | VNOLOCAL);
|
||||
else
|
||||
setvar(name, NULL, VSTRFIXED);
|
||||
setvar(name, NULL, VSTRFIXED | VNOLOCAL);
|
||||
vp = *vpp; /* the new variable */
|
||||
lvp->text = NULL;
|
||||
lvp->flags = VUNSET;
|
||||
@ -751,7 +769,7 @@ mklocal(char *name)
|
||||
lvp->flags = vp->flags;
|
||||
vp->flags |= VSTRFIXED|VTEXTFIXED;
|
||||
if (name[vp->name_len] == '=')
|
||||
setvareq(savestr(name), 0);
|
||||
setvareq(savestr(name), VNOLOCAL);
|
||||
}
|
||||
}
|
||||
lvp->vp = vp;
|
||||
|
@ -46,6 +46,7 @@
|
||||
#define VUNSET 0x20 /* the variable is not set */
|
||||
#define VNOFUNC 0x40 /* don't call the callback function */
|
||||
#define VNOSET 0x80 /* do not set variable - just readonly test */
|
||||
#define VNOLOCAL 0x100 /* ignore forcelocal */
|
||||
|
||||
|
||||
struct var {
|
||||
@ -68,6 +69,7 @@ struct localvar {
|
||||
|
||||
|
||||
struct localvar *localvars;
|
||||
extern int forcelocal;
|
||||
|
||||
extern struct var vifs;
|
||||
extern struct var vmail;
|
||||
@ -121,11 +123,7 @@ void updatecharset(void);
|
||||
void initcharset(void);
|
||||
char **environment(void);
|
||||
int showvarscmd(int, char **);
|
||||
int exportcmd(int, char **);
|
||||
int localcmd(int, char **);
|
||||
void mklocal(char *);
|
||||
void poplocalvars(void);
|
||||
int setvarcmd(int, char **);
|
||||
int unsetcmd(int, char **);
|
||||
int unsetvar(const char *);
|
||||
int setvarsafe(const char *, const char *, int);
|
||||
|
@ -43,6 +43,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
static __inline void
|
||||
__assert(const char *expr, const char *file, int line)
|
||||
{
|
||||
@ -52,4 +56,9 @@ __assert(const char *expr, const char *file, int line)
|
||||
abort();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_ASSERT_H_ */
|
||||
|
@ -223,6 +223,7 @@ fsshare_main(const char *file, const char *mountpoint, const char *shareopts,
|
||||
error = errno;
|
||||
unlink(tmpfile);
|
||||
} else {
|
||||
fflush(newfd);
|
||||
/*
|
||||
* Send SIGHUP to mountd, but unlock exports file later.
|
||||
*/
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include <assert.h>
|
||||
#include <libgen.h>
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <dt_impl.h>
|
||||
|
||||
@ -811,15 +812,14 @@ dt_basename(char *str)
|
||||
ulong_t
|
||||
dt_popc(ulong_t x)
|
||||
{
|
||||
#ifdef _ILP32
|
||||
#if defined(_ILP32)
|
||||
x = x - ((x >> 1) & 0x55555555UL);
|
||||
x = (x & 0x33333333UL) + ((x >> 2) & 0x33333333UL);
|
||||
x = (x + (x >> 4)) & 0x0F0F0F0FUL;
|
||||
x = x + (x >> 8);
|
||||
x = x + (x >> 16);
|
||||
return (x & 0x3F);
|
||||
#endif
|
||||
#ifdef _LP64
|
||||
#elif defined(_LP64)
|
||||
x = x - ((x >> 1) & 0x5555555555555555ULL);
|
||||
x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL);
|
||||
x = (x + (x >> 4)) & 0x0F0F0F0F0F0F0F0FULL;
|
||||
@ -827,6 +827,8 @@ dt_popc(ulong_t x)
|
||||
x = x + (x >> 16);
|
||||
x = x + (x >> 32);
|
||||
return (x & 0x7F);
|
||||
#else
|
||||
/* This should be a #warning but for now ignore error. Err: "need td_popc() implementation" */
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -958,7 +960,7 @@ dtrace_uaddr2str(dtrace_hdl_t *dtp, pid_t pid,
|
||||
P = dt_proc_grab(dtp, pid, PGRAB_RDONLY | PGRAB_FORCE, 0);
|
||||
|
||||
if (P == NULL) {
|
||||
(void) snprintf(c, sizeof (c), "0x%llx", addr);
|
||||
(void) snprintf(c, sizeof (c), "0x%jx", (uintmax_t)addr);
|
||||
return (dt_string2str(c, str, nbytes));
|
||||
}
|
||||
|
||||
@ -976,10 +978,10 @@ dtrace_uaddr2str(dtrace_hdl_t *dtp, pid_t pid,
|
||||
(void) snprintf(c, sizeof (c), "%s`%s", obj, name);
|
||||
}
|
||||
} else if (Pobjname(P, addr, objname, sizeof (objname)) != 0) {
|
||||
(void) snprintf(c, sizeof (c), "%s`0x%llx",
|
||||
dt_basename(objname), addr);
|
||||
(void) snprintf(c, sizeof (c), "%s`0x%jx",
|
||||
dt_basename(objname), (uintmax_t)addr);
|
||||
} else {
|
||||
(void) snprintf(c, sizeof (c), "0x%llx", addr);
|
||||
(void) snprintf(c, sizeof (c), "0x%jx", (uintmax_t)addr);
|
||||
}
|
||||
|
||||
dt_proc_unlock(dtp, P);
|
||||
|
@ -1,3 +1,16 @@
|
||||
--- 9.6-ESV-R4-P1 released ---
|
||||
|
||||
3121. [security] An authoritative name server sending a negative
|
||||
response containing a very large RRset could
|
||||
trigger an off-by-one error in the ncache code
|
||||
and crash named. [RT #24650]
|
||||
|
||||
3120. [bug] Named could fail to validate zones listed in a DLV
|
||||
that validated insecure without using DLV and had
|
||||
DS records in the parent zone. [RT #24631]
|
||||
|
||||
--- 9.6-ESV-R4 released ---
|
||||
|
||||
--- 9.6.3 released ---
|
||||
|
||||
3009. [bug] clients-per-query code didn't work as expected with
|
||||
@ -50,51 +63,9 @@
|
||||
wrong lock which could lead to server deadlock.
|
||||
[RT #22614]
|
||||
|
||||
2972. [bug] win32: address windows socket errors. [RT #21906]
|
||||
|
||||
2971. [bug] Fixed a bug that caused journal files not to be
|
||||
compacted on Windows systems as a result of
|
||||
non-POSIX-compliant rename() semantics. [RT #22434]
|
||||
|
||||
2970. [security] Adding a NO DATA negative cache entry failed to clear
|
||||
any matching RRSIG records. A subsequent lookup of
|
||||
of NO DATA cache entry could trigger a INSIST when the
|
||||
unexpected RRSIG was also returned with the NO DATA
|
||||
cache entry.
|
||||
|
||||
CVE-2010-3613, VU#706148. [RT #22288]
|
||||
|
||||
2969. [security] Fix acl type processing so that allow-query works
|
||||
in options and view statements. Also add a new
|
||||
set of tests to verify proper functioning.
|
||||
|
||||
CVE-2010-3615, VU#510208. [RT #22418]
|
||||
|
||||
2968. [security] Named could fail to prove a data set was insecure
|
||||
before marking it as insecure. One set of conditions
|
||||
that can trigger this occurs naturally when rolling
|
||||
DNSKEY algorithms.
|
||||
|
||||
CVE-2010-3614, VU#837744. [RT #22309]
|
||||
|
||||
2967. [bug] 'host -D' now turns on debugging messages earlier.
|
||||
[RT #22361]
|
||||
|
||||
2966. [bug] isc_print_vsnprintf() failed to check if there was
|
||||
space available in the buffer when adding a left
|
||||
justified character with a non zero width,
|
||||
(e.g. "%-1c"). [RT #22270]
|
||||
|
||||
2965. [func] Test HMAC functions using test data from RFC 2104 and
|
||||
RFC 4634. [RT #21702]
|
||||
|
||||
2964. [bug] view->queryacl was being overloaded. Seperate the
|
||||
usage into view->queryacl, view->cacheacl and
|
||||
view->queryonacl. [RT #22114]
|
||||
|
||||
2962. [port] win32: add more dependencies to BINDBuild.dsw.
|
||||
[RT #22062]
|
||||
|
||||
2960. [func] Check that named accepts non-authoritative answers.
|
||||
[RT #21594]
|
||||
|
||||
@ -114,13 +85,6 @@
|
||||
exact match" message when returning a wildcard
|
||||
no data response. [RT #21744]
|
||||
|
||||
2952. [port] win32: named-checkzone and named-checkconf failed
|
||||
to initialise winsock. [RT #21932]
|
||||
|
||||
2951. [bug] named failed to generate a correct signed response
|
||||
in a optout, delegation only zone with no secure
|
||||
delegations. [RT #22007]
|
||||
|
||||
2950. [bug] named failed to perform a SOA up to date check when
|
||||
falling back to TCP on UDP timeouts when
|
||||
ixfr-from-differences was set. [RT #21595]
|
||||
@ -139,27 +103,6 @@
|
||||
2941. [bug] sdb and sdlz (dlz's zone database) failed to support
|
||||
DNAME at the zone apex. [RT #21610]
|
||||
|
||||
2939. [func] Check that named successfully skips NSEC3 records
|
||||
that fail to match the NSEC3PARAM record currently
|
||||
in use. [RT# 21868]
|
||||
|
||||
2937. [bug] Worked around an apparent race condition in over
|
||||
memory conditions. Without this fix a DNS cache DB or
|
||||
ADB could incorrectly stay in an over memory state,
|
||||
effectively refusing further caching, which
|
||||
subsequently made a BIND 9 caching server unworkable.
|
||||
This fix prevents this problem from happening by
|
||||
polling the state of the memory context, rather than
|
||||
making a copy of the state, which appeared to cause
|
||||
a race. This is a "workaround" in that it doesn't
|
||||
solve the possible race per se, but several experiments
|
||||
proved this change solves the symptom. Also, the
|
||||
polling overhead hasn't been reported to be an issue.
|
||||
This bug should only affect a caching server that
|
||||
specifies a finite max-cache-size. It's also quite
|
||||
likely that the bug happens only when enabling threads,
|
||||
but it's not confirmed yet. [RT #21818]
|
||||
|
||||
2935. [bug] nsupdate: improve 'file not found' error message.
|
||||
[RT #21871]
|
||||
|
||||
@ -189,17 +132,11 @@
|
||||
smaller)
|
||||
[RT #19737]
|
||||
|
||||
2925. [bug] Named failed to accept uncachable negative responses
|
||||
from insecure zones. [RT# 21555]
|
||||
|
||||
2923. [bug] 'dig +trace' could drop core after "connection
|
||||
timeout". [RT #21514]
|
||||
|
||||
2922. [contrib] Update zkt to version 1.0.
|
||||
|
||||
2921. [bug] The resolver could attempt to destroy a fetch context
|
||||
too soon. [RT #19878]
|
||||
|
||||
2918. [maint] Add AAAA address for I.ROOT-SERVERS.NET.
|
||||
|
||||
2916. [func] Add framework to use IPv6 in tests.
|
||||
@ -229,10 +166,6 @@
|
||||
|
||||
2901. [port] Use AC_C_FLEXIBLE_ARRAY_MEMBER. [RT #21316]
|
||||
|
||||
2900. [bug] The placeholder negative caching element was not
|
||||
properly constructed triggering a INSIST in
|
||||
dns_ncache_towire(). [RT #21346]
|
||||
|
||||
2899. [port] win32: Support linking against OpenSSL 1.0.0.
|
||||
|
||||
2898. [bug] nslookup leaked memory when -domain=value was
|
||||
@ -243,9 +176,6 @@
|
||||
2891. [maint] Update empty-zones list to match
|
||||
draft-ietf-dnsop-default-local-zones-13. [RT# 21099]
|
||||
|
||||
2890. [bug] Handle the introduction of new trusted-keys and
|
||||
DS, DLV RRsets better. [RT #21097]
|
||||
|
||||
2889. [bug] Elements of the grammar where not properly reported.
|
||||
[RT #21046]
|
||||
|
||||
@ -272,9 +202,6 @@
|
||||
2877. [bug] The validator failed to skip obviously mismatching
|
||||
RRSIGs. [RT #21138]
|
||||
|
||||
2876. [bug] Named could return SERVFAIL for negative responses
|
||||
from unsigned zones. [RT #21131]
|
||||
|
||||
2875. [bug] dns_time64_fromtext() could accept non digits.
|
||||
[RT #21033]
|
||||
|
||||
@ -284,9 +211,6 @@
|
||||
|
||||
2870. [maint] Add AAAA address for L.ROOT-SERVERS.NET.
|
||||
|
||||
2869. [bug] Fix arguments to dns_keytable_findnextkeynode() call.
|
||||
[RT #20877]
|
||||
|
||||
2868. [cleanup] Run "make clean" at the end of configure to ensure
|
||||
any changes made by configure are integrated.
|
||||
Use --with-make-clean=no to disable. [RT #20994]
|
||||
@ -322,11 +246,108 @@
|
||||
|
||||
2853. [bug] add_sigs() could run out of scratch space. [RT #21015]
|
||||
|
||||
2852. [bug] Handle broken DNSSEC trust chains better. [RT #15619]
|
||||
|
||||
2851. [doc] nslookup.1, removed <informalexample> from the docbook
|
||||
source as it produced bad nroff. [RT #21007]
|
||||
|
||||
--- 9.6-ESV-R3 released ---
|
||||
|
||||
2972. [bug] win32: address windows socket errors. [RT #21906]
|
||||
|
||||
2971. [bug] Fixed a bug that caused journal files not to be
|
||||
compacted on Windows systems as a result of
|
||||
non-POSIX-compliant rename() semantics. [RT #22434]
|
||||
|
||||
2970. [security] Adding a NO DATA negative cache entry failed to clear
|
||||
any matching RRSIG records. A subsequent lookup of
|
||||
of NO DATA cache entry could trigger a INSIST when the
|
||||
unexpected RRSIG was also returned with the NO DATA
|
||||
cache entry.
|
||||
|
||||
CVE-2010-3613, VU#706148. [RT #22288]
|
||||
|
||||
2969. [security] Fix acl type processing so that allow-query works
|
||||
in options and view statements. Also add a new
|
||||
set of tests to verify proper functioning.
|
||||
|
||||
CVE-2010-3615, VU#510208. [RT #22418]
|
||||
|
||||
2968. [security] Named could fail to prove a data set was insecure
|
||||
before marking it as insecure. One set of conditions
|
||||
that can trigger this occurs naturally when rolling
|
||||
DNSKEY algorithms.
|
||||
|
||||
CVE-2010-3614, VU#837744. [RT #22309]
|
||||
|
||||
2967. [bug] 'host -D' now turns on debugging messages earlier.
|
||||
[RT #22361]
|
||||
|
||||
2966. [bug] isc_print_vsnprintf() failed to check if there was
|
||||
space available in the buffer when adding a left
|
||||
justified character with a non zero width,
|
||||
(e.g. "%-1c"). [RT #22270]
|
||||
|
||||
2964. [bug] view->queryacl was being overloaded. Seperate the
|
||||
usage into view->queryacl, view->cacheacl and
|
||||
view->queryonacl. [RT #22114]
|
||||
|
||||
2962. [port] win32: add more dependencies to BINDBuild.dsw.
|
||||
[RT #22062]
|
||||
|
||||
2952. [port] win32: named-checkzone and named-checkconf failed
|
||||
to initialise winsock. [RT #21932]
|
||||
|
||||
2951. [bug] named failed to generate a correct signed response
|
||||
in a optout, delegation only zone with no secure
|
||||
delegations. [RT #22007]
|
||||
|
||||
--- 9.6-ESV-R2 released ---
|
||||
|
||||
2939. [func] Check that named successfully skips NSEC3 records
|
||||
that fail to match the NSEC3PARAM record currently
|
||||
in use. [RT# 21868]
|
||||
|
||||
2937. [bug] Worked around an apparent race condition in over
|
||||
memory conditions. Without this fix a DNS cache DB or
|
||||
ADB could incorrectly stay in an over memory state,
|
||||
effectively refusing further caching, which
|
||||
subsequently made a BIND 9 caching server unworkable.
|
||||
This fix prevents this problem from happening by
|
||||
polling the state of the memory context, rather than
|
||||
making a copy of the state, which appeared to cause
|
||||
a race. This is a "workaround" in that it doesn't
|
||||
solve the possible race per se, but several experiments
|
||||
proved this change solves the symptom. Also, the
|
||||
polling overhead hasn't been reported to be an issue.
|
||||
This bug should only affect a caching server that
|
||||
specifies a finite max-cache-size. It's also quite
|
||||
likely that the bug happens only when enabling threads,
|
||||
but it's not confirmed yet. [RT #21818]
|
||||
|
||||
2925. [bug] Named failed to accept uncachable negative responses
|
||||
from insecure zones. [RT# 21555]
|
||||
|
||||
2921. [bug] The resolver could attempt to destroy a fetch context
|
||||
too soon. [RT #19878]
|
||||
|
||||
2900. [bug] The placeholder negative caching element was not
|
||||
properly constructed triggering a INSIST in
|
||||
dns_ncache_towire(). [RT #21346]
|
||||
|
||||
2890. [bug] Handle the introduction of new trusted-keys and
|
||||
DS, DLV RRsets better. [RT #21097]
|
||||
|
||||
2869. [bug] Fix arguments to dns_keytable_findnextkeynode() call.
|
||||
[RT #20877]
|
||||
|
||||
--- 9.6-ESV-R1 released ---
|
||||
|
||||
2876. [bug] Named could return SERVFAIL for negative responses
|
||||
from unsigned zones. [RT #21131]
|
||||
|
||||
--- 9.6-ESV released ---
|
||||
|
||||
2852. [bug] Handle broken DNSSEC trust chains better. [RT #15619]
|
||||
|
||||
--- 9.6.2 released ---
|
||||
|
||||
2850. [bug] If isc_heap_insert() failed due to memory shortage
|
||||
|
@ -17,7 +17,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: FAQ.xml,v 1.46.56.9 2010/01/20 23:47:43 tbox Exp $ -->
|
||||
<!-- $Id: FAQ.xml,v 1.46.56.9 2010-01-20 23:47:43 tbox Exp $ -->
|
||||
|
||||
<article class="faq">
|
||||
<title>Frequently Asked Questions about BIND 9</title>
|
||||
|
@ -13,7 +13,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.52.48.2 2009/02/20 23:47:23 tbox Exp $
|
||||
# $Id: Makefile.in,v 1.52.48.2 2009-02-20 23:47:23 tbox Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -109,4 +109,4 @@ about idnkit and this patch.
|
||||
Bug reports and comments on this kit should be sent to
|
||||
mdnkit-bugs@nic.ad.jp and idn-cmt@nic.ad.jp, respectively.
|
||||
|
||||
; $Id: README.idnkit,v 1.2.762.1 2009/01/18 23:25:14 marka Exp $
|
||||
; $Id: README.idnkit,v 1.2.762.1 2009-01-18 23:25:14 marka Exp $
|
||||
|
@ -1,165 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><link rel="stylesheet" href="release-notes.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="article"><div class="titlepage"><hr /></div>
|
||||
|
||||
<div class="section" title="Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3026830"></a>Introduction</h2></div></div></div>
|
||||
|
||||
<p>
|
||||
BIND 9.6.3 is the current release of BIND 9.6.
|
||||
</p>
|
||||
<p>
|
||||
This document summarizes changes from BIND 9.6.2-P2 to BIND 9.6.3.
|
||||
Please see the CHANGES file in the source code release for a
|
||||
complete list of all changes.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="section" title="Download"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3893341"></a>Download</h2></div></div></div>
|
||||
|
||||
<p>
|
||||
The latest development version of BIND 9 software can always be found
|
||||
on our web site at
|
||||
<a class="ulink" href="http://www.isc.org/downloads/development" target="_top">http://www.isc.org/downloads/development</a>.
|
||||
There you will find additional information about each release,
|
||||
source code, and some pre-compiled versions for certain operating
|
||||
systems.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="section" title="Support"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3026768"></a>Support</h2></div></div></div>
|
||||
|
||||
<p>Product support information is available on
|
||||
<a class="ulink" href="http://www.isc.org/services/support" target="_top">http://www.isc.org/services/support</a>
|
||||
for paid support options. Free support is provided by our user
|
||||
community via a mailing list. Information on all public email
|
||||
lists is available at
|
||||
<a class="ulink" href="https://lists.isc.org/mailman/listinfo" target="_top">https://lists.isc.org/mailman/listinfo</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="section" title="New Features"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3893404"></a>New Features</h2></div></div></div>
|
||||
|
||||
<div class="section" title="9.6.3"><div class="titlepage"><div><div><h3 class="title"><a id="id3893409"></a>9.6.3</h3></div></div></div>
|
||||
|
||||
<p>None.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section" title="Feature Changes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3893420"></a>Feature Changes</h2></div></div></div>
|
||||
|
||||
<div class="section" title="9.6.3"><div class="titlepage"><div><div><h3 class="title"><a id="id3893425"></a>9.6.3</h3></div></div></div>
|
||||
|
||||
<p>None.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section" title="Security Fixes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3893436"></a>Security Fixes</h2></div></div></div>
|
||||
|
||||
<div class="section" title="9.6.2-P3"><div class="titlepage"><div><div><h3 class="title"><a id="id3893441"></a>9.6.2-P3</h3></div></div></div>
|
||||
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
|
||||
Adding a NO DATA signed negative response to cache failed to clear
|
||||
any matching RRSIG records already in cache. A subsequent lookup
|
||||
of the cached NO DATA entry could crash named (INSIST) when the
|
||||
unexpected RRSIG was also returned with the NO DATA cache entry.
|
||||
[RT #22288] [CVE-2010-3613] [VU#706148]
|
||||
</li><li class="listitem">
|
||||
BIND, acting as a DNSSEC validator, was determining if the NS RRset
|
||||
is insecure based on a value that could mean either that the RRset
|
||||
is actually insecure or that there wasn't a matching key for the RRSIG
|
||||
in the DNSKEY RRset when resuming from validating the DNSKEY RRset.
|
||||
This can happen when in the middle of a DNSKEY algorithm rollover,
|
||||
when two different algorithms were used to sign a zone but only the
|
||||
new set of keys are in the zone DNSKEY RRset.
|
||||
[RT #22309] [CVE-2010-3614] [VU#837744]
|
||||
</li></ul></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section" title="Bug Fixes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3026756"></a>Bug Fixes</h2></div></div></div>
|
||||
|
||||
<div class="section" title="9.6.3"><div class="titlepage"><div><div><h3 class="title"><a id="id3026817"></a>9.6.3</h3></div></div></div>
|
||||
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
|
||||
BIND now builds with threads disabled in versions of NetBSD earlier
|
||||
than 5.0 and with pthreads enabled by default in NetBSD versions 5.0
|
||||
and higher. Also removes support for unproven-pthreads, mit-pthreads
|
||||
and ptl2. [RT #19203]
|
||||
</li><li class="listitem">
|
||||
HPUX now correctly defaults to using /dev/poll, which should
|
||||
increase performance. [RT #21919]
|
||||
</li><li class="listitem">
|
||||
If named is running as a threaded application, after an "rndc stop"
|
||||
command has been issued, other inbound TCP requests can cause named
|
||||
to hang and never complete shutdown. [RT #22108]
|
||||
</li><li class="listitem">
|
||||
When performing a GSS-TSIG signed dynamic zone update, memory could be
|
||||
leaked. This causes an unclean shutdown and may affect long-running
|
||||
servers. [RT #22573]
|
||||
</li><li class="listitem">
|
||||
A bug in NetBSD and FreeBSD kernels with SO_ACCEPTFILTER enabled allows
|
||||
for a TCP DoS attack. Until there is a kernel fix, ISC is disabling
|
||||
SO_ACCEPTFILTER support in BIND. [RT #22589]
|
||||
</li><li class="listitem">
|
||||
Corrected a defect where a combination of dynamic updates and zone
|
||||
transfers incorrectly locked the in-memory zone database, causing
|
||||
named to freeze. [RT #22614]
|
||||
</li><li class="listitem">
|
||||
Don't run MX checks (check-mx) when the MX record points to ".".
|
||||
[RT #22645]
|
||||
</li><li class="listitem">
|
||||
DST key reference counts can now be incremented via dst_key_attach.
|
||||
[RT #22672]
|
||||
</li><li class="listitem">
|
||||
isc_mutex_init_errcheck() in phtreads/mutex.c failed to destroy attr. [RT #22766]
|
||||
</li><li class="listitem">
|
||||
The Kerberos realm was being truncated when being pulled from the
|
||||
the host prinicipal, make krb5-self updates fail. [RT #22770]
|
||||
</li><li class="listitem">
|
||||
named failed to preserve the case of domain names in RDATA which is not compressible when writing master files. [RT #22863]
|
||||
</li><li class="listitem">
|
||||
There was a bug in how the clients-per-query code worked with some
|
||||
query patterns. This could result, in rare circumstances, in having all
|
||||
the client query slots filled with queries for the same DNS label,
|
||||
essentially ignoring the max-clients-per-query setting.
|
||||
[RT #22972]
|
||||
</li></ul></div>
|
||||
</div>
|
||||
<div class="section" title="9.6.2-P3"><div class="titlepage"><div><div><h3 class="title"><a id="id3893557"></a>9.6.2-P3</h3></div></div></div>
|
||||
|
||||
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
|
||||
Worked around a race condition in the cache database memory
|
||||
handling. Without this fix a DNS cache DB or ADB could
|
||||
incorrectly stay in an over memory state, effectively refusing
|
||||
further caching, which subsequently made a BIND 9 caching
|
||||
server unworkable.
|
||||
[RT #21818]
|
||||
</li><li class="listitem">
|
||||
Microsoft changed the behavior of sockets between NT/XP based
|
||||
stacks vs Vista/windows7 stacks. Server 2003/2008 have the older
|
||||
behavior, 2008r2 has the new behavior. With the change, different
|
||||
error results are possible, so ISC adapted BIND to handle the new
|
||||
error results.
|
||||
This resolves an issue where sockets would shut down on
|
||||
Windows servers causing named to stop responding to queries.
|
||||
[RT #21906]
|
||||
</li><li class="listitem">
|
||||
Windows has non-POSIX compliant behavior in its rename() and unlink()
|
||||
calls. This caused journal compaction to fail on Windows BIND servers
|
||||
with the log error: "dns_journal_compact failed: failure".
|
||||
[RT #22434]
|
||||
</li></ul></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section" title="Thank You"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id3893594"></a>Thank You</h2></div></div></div>
|
||||
|
||||
<p>
|
||||
Thank you to everyone who assisted us in making this release possible.
|
||||
If you would like to contribute to ISC to assist us in continuing to make
|
||||
quality open source software, please visit our donations page at
|
||||
<a class="ulink" href="http://www.isc.org/supportisc" target="_top">http://www.isc.org/supportisc</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div></body></html>
|
Binary file not shown.
@ -1,118 +0,0 @@
|
||||
__________________________________________________________________
|
||||
|
||||
Introduction
|
||||
|
||||
BIND 9.6.3 is the current release of BIND 9.6.
|
||||
|
||||
This document summarizes changes from BIND 9.6.2-P2 to BIND 9.6.3.
|
||||
Please see the CHANGES file in the source code release for a complete
|
||||
list of all changes.
|
||||
|
||||
Download
|
||||
|
||||
The latest development version of BIND 9 software can always be found
|
||||
on our web site at http://www.isc.org/downloads/development. There you
|
||||
will find additional information about each release, source code, and
|
||||
some pre-compiled versions for certain operating systems.
|
||||
|
||||
Support
|
||||
|
||||
Product support information is available on
|
||||
http://www.isc.org/services/support for paid support options. Free
|
||||
support is provided by our user community via a mailing list.
|
||||
Information on all public email lists is available at
|
||||
https://lists.isc.org/mailman/listinfo.
|
||||
|
||||
New Features
|
||||
|
||||
9.6.3
|
||||
|
||||
None.
|
||||
|
||||
Feature Changes
|
||||
|
||||
9.6.3
|
||||
|
||||
None.
|
||||
|
||||
Security Fixes
|
||||
|
||||
9.6.2-P3
|
||||
|
||||
* Adding a NO DATA signed negative response to cache failed to clear
|
||||
any matching RRSIG records already in cache. A subsequent lookup of
|
||||
the cached NO DATA entry could crash named (INSIST) when the
|
||||
unexpected RRSIG was also returned with the NO DATA cache entry.
|
||||
[RT #22288] [CVE-2010-3613] [VU#706148]
|
||||
* BIND, acting as a DNSSEC validator, was determining if the NS RRset
|
||||
is insecure based on a value that could mean either that the RRset
|
||||
is actually insecure or that there wasn't a matching key for the
|
||||
RRSIG in the DNSKEY RRset when resuming from validating the DNSKEY
|
||||
RRset. This can happen when in the middle of a DNSKEY algorithm
|
||||
rollover, when two different algorithms were used to sign a zone
|
||||
but only the new set of keys are in the zone DNSKEY RRset. [RT
|
||||
#22309] [CVE-2010-3614] [VU#837744]
|
||||
|
||||
Bug Fixes
|
||||
|
||||
9.6.3
|
||||
|
||||
* BIND now builds with threads disabled in versions of NetBSD earlier
|
||||
than 5.0 and with pthreads enabled by default in NetBSD versions
|
||||
5.0 and higher. Also removes support for unproven-pthreads,
|
||||
mit-pthreads and ptl2. [RT #19203]
|
||||
* HPUX now correctly defaults to using /dev/poll, which should
|
||||
increase performance. [RT #21919]
|
||||
* If named is running as a threaded application, after an "rndc stop"
|
||||
command has been issued, other inbound TCP requests can cause named
|
||||
to hang and never complete shutdown. [RT #22108]
|
||||
* When performing a GSS-TSIG signed dynamic zone update, memory could
|
||||
be leaked. This causes an unclean shutdown and may affect
|
||||
long-running servers. [RT #22573]
|
||||
* A bug in NetBSD and FreeBSD kernels with SO_ACCEPTFILTER enabled
|
||||
allows for a TCP DoS attack. Until there is a kernel fix, ISC is
|
||||
disabling SO_ACCEPTFILTER support in BIND. [RT #22589]
|
||||
* Corrected a defect where a combination of dynamic updates and zone
|
||||
transfers incorrectly locked the in-memory zone database, causing
|
||||
named to freeze. [RT #22614]
|
||||
* Don't run MX checks (check-mx) when the MX record points to ".".
|
||||
[RT #22645]
|
||||
* DST key reference counts can now be incremented via dst_key_attach.
|
||||
[RT #22672]
|
||||
* isc_mutex_init_errcheck() in phtreads/mutex.c failed to destroy
|
||||
attr. [RT #22766]
|
||||
* The Kerberos realm was being truncated when being pulled from the
|
||||
the host prinicipal, make krb5-self updates fail. [RT #22770]
|
||||
* named failed to preserve the case of domain names in RDATA which is
|
||||
not compressible when writing master files. [RT #22863]
|
||||
* There was a bug in how the clients-per-query code worked with some
|
||||
query patterns. This could result, in rare circumstances, in having
|
||||
all the client query slots filled with queries for the same DNS
|
||||
label, essentially ignoring the max-clients-per-query setting. [RT
|
||||
#22972]
|
||||
|
||||
9.6.2-P3
|
||||
|
||||
* Worked around a race condition in the cache database memory
|
||||
handling. Without this fix a DNS cache DB or ADB could incorrectly
|
||||
stay in an over memory state, effectively refusing further caching,
|
||||
which subsequently made a BIND 9 caching server unworkable. [RT
|
||||
#21818]
|
||||
* Microsoft changed the behavior of sockets between NT/XP based
|
||||
stacks vs Vista/windows7 stacks. Server 2003/2008 have the older
|
||||
behavior, 2008r2 has the new behavior. With the change, different
|
||||
error results are possible, so ISC adapted BIND to handle the new
|
||||
error results. This resolves an issue where sockets would shut down
|
||||
on Windows servers causing named to stop responding to queries. [RT
|
||||
#21906]
|
||||
* Windows has non-POSIX compliant behavior in its rename() and
|
||||
unlink() calls. This caused journal compaction to fail on Windows
|
||||
BIND servers with the log error: "dns_journal_compact failed:
|
||||
failure". [RT #22434]
|
||||
|
||||
Thank You
|
||||
|
||||
Thank you to everyone who assisted us in making this release possible.
|
||||
If you would like to contribute to ISC to assist us in continuing to
|
||||
make quality open source software, please visit our donations page at
|
||||
http://www.isc.org/supportisc.
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: acconfig.h,v 1.51.334.2 2009/02/16 23:47:15 tbox Exp $ */
|
||||
/* $Id: acconfig.h,v 1.51.334.2 2009-02-16 23:47:15 tbox Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.25 2007/06/19 23:46:59 tbox Exp $
|
||||
# $Id: Makefile.in,v 1.25 2007-06-19 23:46:59 tbox Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -13,7 +13,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.32 2007/06/19 23:46:59 tbox Exp $
|
||||
# $Id: Makefile.in,v 1.32 2007-06-19 23:46:59 tbox Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -13,7 +13,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: named-checkconf.8,v 1.30.334.1 2009/07/11 01:55:20 tbox Exp $
|
||||
.\" $Id: named-checkconf.8,v 1.30.334.1 2009-07-11 01:55:20 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -18,7 +18,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: named-checkconf.docbook,v 1.19 2007/06/19 06:58:03 marka Exp $ -->
|
||||
<!-- $Id: named-checkconf.docbook,v 1.19 2007-06-19 06:58:03 marka Exp $ -->
|
||||
<refentry id="man.named-checkconf">
|
||||
<refentryinfo>
|
||||
<date>June 14, 2000</date>
|
||||
|
@ -14,7 +14,7 @@
|
||||
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
<!-- $Id: named-checkconf.html,v 1.30.334.1 2009/07/11 01:55:20 tbox Exp $ -->
|
||||
<!-- $Id: named-checkconf.html,v 1.30.334.1 2009-07-11 01:55:20 tbox Exp $ -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
|
@ -13,7 +13,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: named-checkzone.8,v 1.42.334.3 2009/11/11 01:56:22 tbox Exp $
|
||||
.\" $Id: named-checkzone.8,v 1.42.334.3 2009-11-11 01:56:22 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -18,7 +18,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: named-checkzone.docbook,v 1.34.334.3 2009/11/10 20:01:41 each Exp $ -->
|
||||
<!-- $Id: named-checkzone.docbook,v 1.34.334.3 2009-11-10 20:01:41 each Exp $ -->
|
||||
<refentry id="man.named-checkzone">
|
||||
<refentryinfo>
|
||||
<date>June 13, 2000</date>
|
||||
|
@ -14,7 +14,7 @@
|
||||
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
<!-- $Id: named-checkzone.html,v 1.42.334.3 2009/11/11 01:56:22 tbox Exp $ -->
|
||||
<!-- $Id: named-checkzone.html,v 1.42.334.3 2009-11-11 01:56:22 tbox Exp $ -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
|
@ -13,7 +13,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.41 2007/06/19 23:46:59 tbox Exp $
|
||||
# $Id: Makefile.in,v 1.41 2007-06-19 23:46:59 tbox Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -13,7 +13,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: dig.1,v 1.50.44.3 2009/07/11 01:55:20 tbox Exp $
|
||||
.\" $Id: dig.1,v 1.50.44.3 2009-07-11 01:55:20 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -18,7 +18,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: dig.docbook,v 1.42.44.3 2009/02/02 04:42:48 marka Exp $ -->
|
||||
<!-- $Id: dig.docbook,v 1.42.44.3 2009-02-02 04:42:48 marka Exp $ -->
|
||||
<refentry id="man.dig">
|
||||
|
||||
<refentryinfo>
|
||||
|
@ -14,7 +14,7 @@
|
||||
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
<!-- $Id: dig.html,v 1.45.44.3 2009/07/11 01:55:20 tbox Exp $ -->
|
||||
<!-- $Id: dig.html,v 1.45.44.3 2009-07-11 01:55:20 tbox Exp $ -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
|
@ -13,7 +13,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: host.1,v 1.29.114.2 2009/07/11 01:55:20 tbox Exp $
|
||||
.\" $Id: host.1,v 1.29.114.2 2009-07-11 01:55:20 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -18,7 +18,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: host.docbook,v 1.18.114.2 2009/01/22 23:47:05 tbox Exp $ -->
|
||||
<!-- $Id: host.docbook,v 1.18.114.2 2009-01-22 23:47:05 tbox Exp $ -->
|
||||
<refentry id="man.host">
|
||||
|
||||
<refentryinfo>
|
||||
|
@ -14,7 +14,7 @@
|
||||
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
<!-- $Id: host.html,v 1.28.114.2 2009/07/11 01:55:20 tbox Exp $ -->
|
||||
<!-- $Id: host.html,v 1.28.114.2 2009-07-11 01:55:20 tbox Exp $ -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dig.h,v 1.107.120.2 2009/01/06 23:47:26 tbox Exp $ */
|
||||
/* $Id: dig.h,v 1.107.120.2 2009-01-06 23:47:26 tbox Exp $ */
|
||||
|
||||
#ifndef DIG_H
|
||||
#define DIG_H
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nslookup.c,v 1.117.334.5 2009/10/20 01:11:22 marka Exp $ */
|
||||
/* $Id: nslookup.c,v 1.117.334.5 2009-10-20 01:11:22 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.35 2008/11/07 02:28:49 marka Exp $
|
||||
# $Id: Makefile.in,v 1.35 2008-11-07 02:28:49 marka Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -14,7 +14,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-dsfromkey.c,v 1.2.14.6 2010/01/11 23:47:22 tbox Exp $ */
|
||||
/* $Id: dnssec-dsfromkey.c,v 1.2.14.6 2010-01-11 23:47:22 tbox Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: dnssec-dsfromkey.docbook,v 1.6 2008/11/07 13:54:11 jreed Exp $ -->
|
||||
<!-- $Id: dnssec-dsfromkey.docbook,v 1.6 2008-11-07 13:54:11 jreed Exp $ -->
|
||||
<refentry id="man.dnssec-dsfromkey">
|
||||
<refentryinfo>
|
||||
<date>November 29, 2008</date>
|
||||
|
@ -12,7 +12,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: dnssec-keyfromlabel.8,v 1.6.14.3 2010/01/16 01:55:32 tbox Exp $
|
||||
.\" $Id: dnssec-keyfromlabel.8,v 1.6.14.3 2010-01-16 01:55:32 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -14,7 +14,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-keyfromlabel.c,v 1.4.50.2 2010/01/15 23:47:31 tbox Exp $ */
|
||||
/* $Id: dnssec-keyfromlabel.c,v 1.4.50.2 2010-01-15 23:47:31 tbox Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: dnssec-keyfromlabel.docbook,v 1.6.14.2 2010/01/15 23:47:31 tbox Exp $ -->
|
||||
<!-- $Id: dnssec-keyfromlabel.docbook,v 1.6.14.2 2010-01-15 23:47:31 tbox Exp $ -->
|
||||
<refentry id="man.dnssec-keyfromlabel">
|
||||
<refentryinfo>
|
||||
<date>February 8, 2008</date>
|
||||
|
@ -13,7 +13,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: dnssec-keygen.8,v 1.40.44.4 2010/01/16 01:55:32 tbox Exp $
|
||||
.\" $Id: dnssec-keygen.8,v 1.40.44.4 2010-01-16 01:55:32 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -29,7 +29,7 @@
|
||||
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-keygen.c,v 1.81.48.2 2010/01/15 23:47:31 tbox Exp $ */
|
||||
/* $Id: dnssec-keygen.c,v 1.81.48.2 2010-01-15 23:47:31 tbox Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: dnssec-keygen.docbook,v 1.22.44.4 2010/01/15 23:47:33 tbox Exp $ -->
|
||||
<!-- $Id: dnssec-keygen.docbook,v 1.22.44.4 2010-01-15 23:47:33 tbox Exp $ -->
|
||||
<refentry id="man.dnssec-keygen">
|
||||
<refentryinfo>
|
||||
<date>June 30, 2000</date>
|
||||
|
@ -13,7 +13,7 @@
|
||||
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
.\" PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.\" $Id: dnssec-signzone.8,v 1.47.44.8 2009/11/07 01:56:11 tbox Exp $
|
||||
.\" $Id: dnssec-signzone.8,v 1.47.44.8 2009-11-07 01:56:11 tbox Exp $
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
|
@ -18,7 +18,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: dnssec-signzone.docbook,v 1.31.44.8 2009/11/06 21:36:22 each Exp $ -->
|
||||
<!-- $Id: dnssec-signzone.docbook,v 1.31.44.8 2009-11-06 21:36:22 each Exp $ -->
|
||||
<refentry id="man.dnssec-signzone">
|
||||
<refentryinfo>
|
||||
<date>June 08, 2009</date>
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssectool.c,v 1.45.334.5 2009/06/22 05:05:00 marka Exp $ */
|
||||
/* $Id: dnssectool.c,v 1.45.334.5 2009-06-22 05:05:00 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssectool.h,v 1.22.48.2 2009/09/04 23:46:58 tbox Exp $ */
|
||||
/* $Id: dnssectool.h,v 1.22.48.2 2009-09-04 23:46:58 tbox Exp $ */
|
||||
|
||||
#ifndef DNSSECTOOL_H
|
||||
#define DNSSECTOOL_H 1
|
||||
|
@ -13,7 +13,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.101 2008/09/23 17:25:47 jinmei Exp $
|
||||
# $Id: Makefile.in,v 1.101 2008-09-23 17:25:47 jinmei Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
@ -15,7 +15,7 @@
|
||||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: bind9.xsl,v 1.19.82.2 2009/01/29 23:47:43 tbox Exp $ -->
|
||||
<!-- $Id: bind9.xsl,v 1.19.82.2 2009-01-29 23:47:43 tbox Exp $ -->
|
||||
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: config.c,v 1.93.14.2 2009/03/17 23:47:28 tbox Exp $ */
|
||||
/* $Id: config.c,v 1.93.14.2 2009-03-17 23:47:28 tbox Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: controlconf.c,v 1.60 2008/07/23 23:27:54 marka Exp $ */
|
||||
/* $Id: controlconf.c,v 1.60 2008-07-23 23:27:54 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -14,12 +14,12 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: convertxsl.pl,v 1.14 2008/07/17 23:43:26 jinmei Exp $
|
||||
# $Id: convertxsl.pl,v 1.14 2008-07-17 23:43:26 jinmei Exp $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $rev = '$Id: convertxsl.pl,v 1.14 2008/07/17 23:43:26 jinmei Exp $';
|
||||
my $rev = '$Id: convertxsl.pl,v 1.14 2008-07-17 23:43:26 jinmei Exp $';
|
||||
$rev =~ s/\$//g;
|
||||
$rev =~ s/,v//g;
|
||||
$rev =~ s/Id: //;
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: builtin.h,v 1.6 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: builtin.h,v 1.6 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_BUILTIN_H
|
||||
#define NAMED_BUILTIN_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: client.h,v 1.86.120.2 2009/01/18 23:47:34 tbox Exp $ */
|
||||
/* $Id: client.h,v 1.86.120.2 2009-01-18 23:47:34 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_CLIENT_H
|
||||
#define NAMED_CLIENT_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: config.h,v 1.14 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: config.h,v 1.14 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_CONFIG_H
|
||||
#define NAMED_CONFIG_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: control.h,v 1.25 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: control.h,v 1.25 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_CONTROL_H
|
||||
#define NAMED_CONTROL_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: interfacemgr.h,v 1.33 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: interfacemgr.h,v 1.33 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_INTERFACEMGR_H
|
||||
#define NAMED_INTERFACEMGR_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: listenlist.h,v 1.15 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: listenlist.h,v 1.15 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_LISTENLIST_H
|
||||
#define NAMED_LISTENLIST_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: log.h,v 1.25.332.2 2009/01/07 23:47:16 tbox Exp $ */
|
||||
/* $Id: log.h,v 1.25.332.2 2009-01-07 23:47:16 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_LOG_H
|
||||
#define NAMED_LOG_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: logconf.h,v 1.17 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: logconf.h,v 1.17 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_LOGCONF_H
|
||||
#define NAMED_LOGCONF_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwaddr.h,v 1.8 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: lwaddr.h,v 1.8 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwdclient.h,v 1.18.332.2 2009/01/18 23:47:34 tbox Exp $ */
|
||||
/* $Id: lwdclient.h,v 1.18.332.2 2009-01-18 23:47:34 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_LWDCLIENT_H
|
||||
#define NAMED_LWDCLIENT_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwresd.h,v 1.19 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: lwresd.h,v 1.19 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_LWRESD_H
|
||||
#define NAMED_LWRESD_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: lwsearch.h,v 1.9 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: lwsearch.h,v 1.9 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_LWSEARCH_H
|
||||
#define NAMED_LWSEARCH_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: main.h,v 1.15 2007/06/19 23:46:59 tbox Exp $ */
|
||||
/* $Id: main.h,v 1.15 2007-06-19 23:46:59 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_MAIN_H
|
||||
#define NAMED_MAIN_H 1
|
||||
|
@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: notify.h,v 1.14.332.2 2009/01/18 23:47:34 tbox Exp $ */
|
||||
/* $Id: notify.h,v 1.14.332.2 2009-01-18 23:47:34 tbox Exp $ */
|
||||
|
||||
#ifndef NAMED_NOTIFY_H
|
||||
#define NAMED_NOTIFY_H 1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user