mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-31 21:06:18 +01:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5eb97b547 |
No files matched your search
+1
-2
@@ -552,11 +552,10 @@ includes:
|
||||
cd ${.CURDIR}/lib/libftpio; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libmd; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libmytinfo; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libncurses; ${MAKE} beforeinstall
|
||||
.if !defined(WANT_CSRG_LIBM)
|
||||
cd ${.CURDIR}/lib/msun; ${MAKE} beforeinstall
|
||||
.endif
|
||||
cd ${.CURDIR}/lib/libncurses; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libnetgraph; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libopie; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libpam/libpam; ${MAKE} beforeinstall
|
||||
cd ${.CURDIR}/lib/libpcap; ${MAKE} beforeinstall
|
||||
|
||||
+1
-1
@@ -135,7 +135,7 @@ respectively.
|
||||
.Pp
|
||||
Note that not all medium changers support the
|
||||
.Ic exchange
|
||||
operation; the changer must have multiple free pickers or emulate
|
||||
operation; The changer must have multiple free pickers or emulate
|
||||
multiple free pickers with transient storage.
|
||||
.It Xo Nm position
|
||||
.Ar <to ET> <to EU>
|
||||
|
||||
+57
-100
@@ -34,12 +34,11 @@
|
||||
* Additional Copyright (c) 1997, by Matthew Jacob, for NASA/Ames Research Ctr.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1996 Jason R. Thorpe. All rights reserved.";
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif /* not lint */
|
||||
__COPYRIGHT("@(#) Copyright (c) 1996 Jason R. Thorpe. All rights reserved.");
|
||||
__RCSID("$NetBSD: chio.c,v 1.6 1998/01/04 23:53:58 thorpej Exp $");
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/chio.h>
|
||||
@@ -56,44 +55,45 @@ static const char rcsid[] =
|
||||
extern char *__progname; /* from crt0.o */
|
||||
extern int optreset; /* from getopt.o */
|
||||
|
||||
static void usage __P((void));
|
||||
static void cleanup __P((void));
|
||||
static int parse_element_type __P((char *));
|
||||
static int parse_element_unit __P((char *));
|
||||
static const char * element_type_name __P((int et));
|
||||
static int parse_special __P((char *));
|
||||
static int is_special __P((char *));
|
||||
static const char *bits_to_string __P((int, const char *));
|
||||
int main(int, char *[]);
|
||||
static void usage(void);
|
||||
static void cleanup(void);
|
||||
static int parse_element_type(char *);
|
||||
static int parse_element_unit(char *);
|
||||
static const char * element_type_name(int et);
|
||||
static int parse_special(char *);
|
||||
static int is_special(char *);
|
||||
static char *bits_to_string(int, const char *);
|
||||
|
||||
static int do_move __P((char *, int, char **));
|
||||
static int do_exchange __P((char *, int, char **));
|
||||
static int do_position __P((char *, int, char **));
|
||||
static int do_params __P((char *, int, char **));
|
||||
static int do_getpicker __P((char *, int, char **));
|
||||
static int do_setpicker __P((char *, int, char **));
|
||||
static int do_status __P((char *, int, char **));
|
||||
static int do_ielem __P((char *, int, char **));
|
||||
static int do_voltag __P((char *, int, char **));
|
||||
static int do_move(char *, int, char **);
|
||||
static int do_exchange(char *, int, char **);
|
||||
static int do_position(char *, int, char **);
|
||||
static int do_params(char *, int, char **);
|
||||
static int do_getpicker(char *, int, char **);
|
||||
static int do_setpicker(char *, int, char **);
|
||||
static int do_status(char *, int, char **);
|
||||
static int do_ielem(char *, int, char **);
|
||||
static int do_voltag(char *, int, char **);
|
||||
|
||||
/* Valid changer element types. */
|
||||
const struct element_type elements[] = {
|
||||
{ "drive", CHET_DT },
|
||||
{ "picker", CHET_MT },
|
||||
{ "portal", CHET_IE },
|
||||
{ "slot", CHET_ST },
|
||||
{ "portal", CHET_IE },
|
||||
{ "drive", CHET_DT },
|
||||
{ NULL, 0 },
|
||||
};
|
||||
|
||||
/* Valid commands. */
|
||||
const struct changer_command commands[] = {
|
||||
{ "exchange", do_exchange },
|
||||
{ "getpicker", do_getpicker },
|
||||
{ "ielem", do_ielem },
|
||||
{ "move", do_move },
|
||||
{ "params", do_params },
|
||||
{ "exchange", do_exchange },
|
||||
{ "position", do_position },
|
||||
{ "params", do_params },
|
||||
{ "getpicker", do_getpicker },
|
||||
{ "setpicker", do_setpicker },
|
||||
{ "status", do_status },
|
||||
{ "ielem", do_ielem },
|
||||
{ "voltag", do_voltag },
|
||||
{ NULL, 0 },
|
||||
};
|
||||
@@ -107,12 +107,10 @@ const struct special_word specials[] = {
|
||||
};
|
||||
|
||||
static int changer_fd;
|
||||
static const char *changer_name;
|
||||
static char *changer_name;
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int ch, i;
|
||||
|
||||
@@ -149,26 +147,15 @@ main(argc, argv)
|
||||
for (i = 0; commands[i].cc_name != NULL; ++i)
|
||||
if (strcmp(*argv, commands[i].cc_name) == 0)
|
||||
break;
|
||||
if (commands[i].cc_name == NULL) {
|
||||
/* look for abbreviation */
|
||||
for (i = 0; commands[i].cc_name != NULL; ++i)
|
||||
if (strncmp(*argv, commands[i].cc_name,
|
||||
strlen(*argv)) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (commands[i].cc_name == NULL)
|
||||
errx(1, "unknown command: %s", *argv);
|
||||
|
||||
exit ((*commands[i].cc_handler)(commands[i].cc_name, argc, argv));
|
||||
exit((*commands[i].cc_handler)(commands[i].cc_name, argc, argv));
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
static int
|
||||
do_move(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_move(char *cname, int argc, char **argv)
|
||||
{
|
||||
struct changer_move cmd;
|
||||
int val;
|
||||
@@ -236,10 +223,7 @@ do_move(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
do_exchange(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_exchange(char *cname, int argc, char **argv)
|
||||
{
|
||||
struct changer_exchange cmd;
|
||||
int val;
|
||||
@@ -334,10 +318,7 @@ do_exchange(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
do_position(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_position(char *cname, int argc, char **argv)
|
||||
{
|
||||
struct changer_position cmd;
|
||||
int val;
|
||||
@@ -398,10 +379,7 @@ do_position(cname, argc, argv)
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
do_params(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_params(char *cname, int argc, char **argv)
|
||||
{
|
||||
struct changer_params data;
|
||||
int picker;
|
||||
@@ -444,10 +422,7 @@ do_params(cname, argc, argv)
|
||||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
do_getpicker(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_getpicker(char *cname, int argc, char **argv)
|
||||
{
|
||||
int picker;
|
||||
|
||||
@@ -474,10 +449,7 @@ do_getpicker(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
do_setpicker(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_setpicker(char *cname, int argc, char **argv)
|
||||
{
|
||||
int picker;
|
||||
|
||||
@@ -505,10 +477,7 @@ do_setpicker(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
do_status(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_status(char *cname, int argc, char **argv)
|
||||
{
|
||||
struct changer_params cp;
|
||||
struct changer_element_status_request cesr;
|
||||
@@ -527,7 +496,7 @@ do_status(cname, argc, argv)
|
||||
description = NULL;
|
||||
|
||||
optind = optreset = 1;
|
||||
while ((c = getopt(argc, argv, "vVsSbaI")) != -1) {
|
||||
while ((c = getopt(argc, argv, "vVsSbaI")) != EOF) {
|
||||
switch (c) {
|
||||
case 'v':
|
||||
pvoltag = 1;
|
||||
@@ -687,7 +656,7 @@ do_status(cname, argc, argv)
|
||||
printf(" avoltag: <%s:%d>",
|
||||
ces->ces_avoltag.cv_volid,
|
||||
ces->ces_avoltag.cv_serial);
|
||||
if (source) {
|
||||
if (source)
|
||||
if (ces->ces_flags & CES_SOURCE_VALID)
|
||||
printf(" source: <%s %d>",
|
||||
element_type_name(
|
||||
@@ -695,7 +664,6 @@ do_status(cname, argc, argv)
|
||||
ces->ces_source_addr);
|
||||
else
|
||||
printf(" source: <>");
|
||||
}
|
||||
if (intaddr)
|
||||
printf(" intaddr: <%d>", ces->ces_int_addr);
|
||||
if (scsi) {
|
||||
@@ -727,10 +695,7 @@ do_status(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
do_ielem(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_ielem(char *cname, int argc, char **argv)
|
||||
{
|
||||
int timeout = 0;
|
||||
|
||||
@@ -753,10 +718,7 @@ do_ielem(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
do_voltag(cname, argc, argv)
|
||||
char *cname;
|
||||
int argc;
|
||||
char **argv;
|
||||
do_voltag(char *cname, int argc, char **argv)
|
||||
{
|
||||
int force = 0;
|
||||
int clear = 0;
|
||||
@@ -767,7 +729,7 @@ do_voltag(cname, argc, argv)
|
||||
bzero(&csvr, sizeof(csvr));
|
||||
|
||||
optind = optreset = 1;
|
||||
while ((c = getopt(argc, argv, "fca")) != -1) {
|
||||
while ((c = getopt(argc, argv, "fca")) != EOF) {
|
||||
switch (c) {
|
||||
case 'f':
|
||||
force = 1;
|
||||
@@ -841,8 +803,7 @@ do_voltag(cname, argc, argv)
|
||||
}
|
||||
|
||||
static int
|
||||
parse_element_type(cp)
|
||||
char *cp;
|
||||
parse_element_type(char *cp)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -855,8 +816,7 @@ parse_element_type(cp)
|
||||
}
|
||||
|
||||
static const char *
|
||||
element_type_name(et)
|
||||
int et;
|
||||
element_type_name(int et)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -868,8 +828,7 @@ element_type_name(et)
|
||||
}
|
||||
|
||||
static int
|
||||
parse_element_unit(cp)
|
||||
char *cp;
|
||||
parse_element_unit(char *cp)
|
||||
{
|
||||
int i;
|
||||
char *p;
|
||||
@@ -882,8 +841,7 @@ parse_element_unit(cp)
|
||||
}
|
||||
|
||||
static int
|
||||
parse_special(cp)
|
||||
char *cp;
|
||||
parse_special(char *cp)
|
||||
{
|
||||
int val;
|
||||
|
||||
@@ -896,8 +854,7 @@ parse_special(cp)
|
||||
}
|
||||
|
||||
static int
|
||||
is_special(cp)
|
||||
char *cp;
|
||||
is_special(char *cp)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -908,10 +865,8 @@ is_special(cp)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static const char *
|
||||
bits_to_string(v, cp)
|
||||
int v;
|
||||
const char *cp;
|
||||
static char *
|
||||
bits_to_string(int v, const char *cp)
|
||||
{
|
||||
const char *np;
|
||||
char f, sep, *bp;
|
||||
@@ -925,9 +880,7 @@ bits_to_string(v, cp)
|
||||
np++;
|
||||
if ((v & (1 << (f - 1))) == 0)
|
||||
continue;
|
||||
(void) snprintf(bp, sizeof(buf) - (bp - &buf[0]),
|
||||
"%c%.*s", sep, (int)(long)(np - cp), cp);
|
||||
bp += strlen(bp);
|
||||
bp += sprintf(bp, "%c%.*s", sep, (int)(long)(np - cp), cp);
|
||||
sep = ',';
|
||||
}
|
||||
if (sep != '<')
|
||||
@@ -946,7 +899,11 @@ cleanup()
|
||||
static void
|
||||
usage()
|
||||
{
|
||||
(void) fprintf(stderr, "usage: %s [-f changer] command [-<flags>] "
|
||||
"arg1 arg2 [arg3 [...]]\n", __progname);
|
||||
|
||||
(void) fprintf(stderr, "usage: %s command arg1 arg2 ...\n", __progname);
|
||||
(void) fprintf(stderr, "Examples:\n");
|
||||
(void) fprintf(stderr, "\tchio -f /dev/ch0 move slot 1 drive 0\n");
|
||||
(void) fprintf(stderr, "\tchio ielem\n");
|
||||
(void) fprintf(stderr, "\tchio -f /dev/ch1 status\n");
|
||||
exit(1);
|
||||
}
|
||||
+2
-10
@@ -48,7 +48,7 @@
|
||||
.Op Fl H | Fl L | Fl P
|
||||
.Oc
|
||||
.Op Fl f | i
|
||||
.Op Fl pv
|
||||
.Op Fl p
|
||||
.Ar source_file target_file
|
||||
.Nm cp
|
||||
.Oo
|
||||
@@ -56,7 +56,7 @@
|
||||
.Op Fl H | Fl L | Fl P
|
||||
.Oc
|
||||
.Op Fl f | i
|
||||
.Op Fl pv
|
||||
.Op Fl p
|
||||
.Ar source_file ... target_directory
|
||||
.Sh DESCRIPTION
|
||||
In the first synopsis form, the
|
||||
@@ -145,10 +145,6 @@ If the source file has both its set user ID and set group ID bits on,
|
||||
and either the user ID or group ID cannot be preserved, neither
|
||||
the set user ID nor set group ID bits are preserved in the copy's
|
||||
permissions.
|
||||
.It Fl v
|
||||
Cause
|
||||
.Nm
|
||||
to be verbose, showing files as they are copied.
|
||||
.El
|
||||
.Pp
|
||||
For each destination file that already exists, its contents are
|
||||
@@ -214,10 +210,6 @@ option.
|
||||
This implementation supports that option, however, its use is strongly
|
||||
discouraged, as it does not correctly copy special files, symbolic links
|
||||
or fifo's.
|
||||
.Pp
|
||||
The
|
||||
.Fl v
|
||||
option is non-standard and its use in scripts is not recommended.
|
||||
.Sh SEE ALSO
|
||||
.Xr mv 1 ,
|
||||
.Xr rcp 1 ,
|
||||
|
||||
+19
-26
@@ -69,7 +69,6 @@ static const char rcsid[] =
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fts.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -80,10 +79,10 @@ static const char rcsid[] =
|
||||
*--(p).p_end = 0; \
|
||||
}
|
||||
|
||||
PATH_T to = { to.p_path, "", "" };
|
||||
PATH_T to = { to.p_path, "" };
|
||||
|
||||
uid_t myuid;
|
||||
int Rflag, iflag, pflag, rflag, fflag, vflag;
|
||||
int Rflag, iflag, pflag, rflag, fflag;
|
||||
int myumask;
|
||||
|
||||
enum op { FILE_TO_FILE, FILE_TO_DIR, DIR_TO_DNE };
|
||||
@@ -102,7 +101,7 @@ main(argc, argv)
|
||||
char *target;
|
||||
|
||||
Hflag = Lflag = Pflag = 0;
|
||||
while ((ch = getopt(argc, argv, "HLPRfiprv")) != -1)
|
||||
while ((ch = getopt(argc, argv, "HLPRfipr")) != -1)
|
||||
switch (ch) {
|
||||
case 'H':
|
||||
Hflag = 1;
|
||||
@@ -133,9 +132,6 @@ main(argc, argv)
|
||||
case 'r':
|
||||
rflag = 1;
|
||||
break;
|
||||
case 'v':
|
||||
vflag = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
@@ -253,23 +249,23 @@ copy(argv, type, fts_options)
|
||||
struct stat to_stat;
|
||||
FTS *ftsp;
|
||||
FTSENT *curr;
|
||||
int base = 0, dne, badcp, nlen, rval;
|
||||
int base = 0, dne, nlen, rval;
|
||||
char *p, *target_mid;
|
||||
|
||||
if ((ftsp = fts_open(argv, fts_options, mastercmp)) == NULL)
|
||||
err(1, NULL);
|
||||
for (badcp = rval = 0; (curr = fts_read(ftsp)) != NULL; badcp = 0) {
|
||||
for (rval = 0; (curr = fts_read(ftsp)) != NULL;) {
|
||||
switch (curr->fts_info) {
|
||||
case FTS_NS:
|
||||
case FTS_DNR:
|
||||
case FTS_ERR:
|
||||
warnx("%s: %s",
|
||||
curr->fts_path, strerror(curr->fts_errno));
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
continue;
|
||||
case FTS_DC: /* Warn, continue. */
|
||||
warnx("%s: directory causes a cycle", curr->fts_path);
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
continue;
|
||||
case FTS_DP: /* Ignore, continue. */
|
||||
continue;
|
||||
@@ -299,7 +295,7 @@ copy(argv, type, fts_options)
|
||||
* Since the first level MUST be FTS_ROOTLEVEL, base
|
||||
* is always initialized.
|
||||
*/
|
||||
if (curr->fts_level == FTS_ROOTLEVEL) {
|
||||
if (curr->fts_level == FTS_ROOTLEVEL)
|
||||
if (type != DIR_TO_DNE) {
|
||||
p = strrchr(curr->fts_path, '/');
|
||||
base = (p == NULL) ? 0 :
|
||||
@@ -310,7 +306,6 @@ copy(argv, type, fts_options)
|
||||
base += 1;
|
||||
} else
|
||||
base = curr->fts_pathlen;
|
||||
}
|
||||
|
||||
p = &curr->fts_path[base];
|
||||
nlen = curr->fts_pathlen - base;
|
||||
@@ -321,7 +316,7 @@ copy(argv, type, fts_options)
|
||||
if (target_mid - to.p_path + nlen > MAXPATHLEN) {
|
||||
warnx("%s%s: name too long (not copied)",
|
||||
to.p_path, p);
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
continue;
|
||||
}
|
||||
(void)strncat(target_mid, p, nlen);
|
||||
@@ -338,7 +333,7 @@ copy(argv, type, fts_options)
|
||||
to_stat.st_ino == curr->fts_statp->st_ino) {
|
||||
warnx("%s and %s are identical (not copied).",
|
||||
to.p_path, curr->fts_path);
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
if (S_ISDIR(curr->fts_statp->st_mode))
|
||||
(void)fts_set(ftsp, curr, FTS_SKIP);
|
||||
continue;
|
||||
@@ -347,7 +342,7 @@ copy(argv, type, fts_options)
|
||||
S_ISDIR(to_stat.st_mode)) {
|
||||
warnx("cannot overwrite directory %s with non-directory %s",
|
||||
to.p_path, curr->fts_path);
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
continue;
|
||||
}
|
||||
dne = 0;
|
||||
@@ -356,14 +351,14 @@ copy(argv, type, fts_options)
|
||||
switch (curr->fts_statp->st_mode & S_IFMT) {
|
||||
case S_IFLNK:
|
||||
if (copy_link(curr, !dne))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
break;
|
||||
case S_IFDIR:
|
||||
if (!Rflag && !rflag) {
|
||||
warnx("%s is a directory (not copied).",
|
||||
curr->fts_path);
|
||||
(void)fts_set(ftsp, curr, FTS_SKIP);
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
@@ -389,7 +384,7 @@ copy(argv, type, fts_options)
|
||||
* forever.
|
||||
*/
|
||||
if (pflag && setfile(curr->fts_statp, 0))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
else if (dne)
|
||||
(void)chmod(to.p_path,
|
||||
curr->fts_statp->st_mode);
|
||||
@@ -398,28 +393,26 @@ copy(argv, type, fts_options)
|
||||
case S_IFCHR:
|
||||
if (Rflag) {
|
||||
if (copy_special(curr->fts_statp, !dne))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
} else {
|
||||
if (copy_file(curr, dne))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
}
|
||||
break;
|
||||
case S_IFIFO:
|
||||
if (Rflag) {
|
||||
if (copy_fifo(curr->fts_statp, !dne))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
} else {
|
||||
if (copy_file(curr, dne))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (copy_file(curr, dne))
|
||||
badcp = rval = 1;
|
||||
rval = 1;
|
||||
break;
|
||||
}
|
||||
if (vflag && !badcp)
|
||||
(void)printf("%s -> %s\n", curr->fts_path, to.p_path);
|
||||
}
|
||||
if (errno)
|
||||
err(1, "fts_read");
|
||||
|
||||
+4
-7
@@ -50,7 +50,6 @@ static const char rcsid[] =
|
||||
#include <fcntl.h>
|
||||
#include <fts.h>
|
||||
#include <stdio.h>
|
||||
#include <sysexits.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "extern.h"
|
||||
@@ -184,7 +183,7 @@ copy_file(entp, dne)
|
||||
*/
|
||||
#define RETAINBITS \
|
||||
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
|
||||
else if (fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid) {
|
||||
else if (fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid)
|
||||
if (fstat(to_fd, &to_stat)) {
|
||||
warn("%s", to.p_path);
|
||||
rval = 1;
|
||||
@@ -193,7 +192,6 @@ copy_file(entp, dne)
|
||||
warn("%s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
}
|
||||
(void)close(from_fd);
|
||||
if (close(to_fd)) {
|
||||
warn("%s", to.p_path);
|
||||
@@ -321,9 +319,8 @@ setfile(fs, fd)
|
||||
void
|
||||
usage()
|
||||
{
|
||||
|
||||
(void)fprintf(stderr, "%s\n%s\n",
|
||||
"usage: cp [-R [-H | -L | -P]] [-f | -i] [-pv] src target",
|
||||
" cp [-R [-H | -L | -P]] [-f | -i] [-pv] src1 ... srcN directory");
|
||||
exit(EX_USAGE);
|
||||
"usage: cp [-R [-H | -L | -P]] [-f | -i] [-p] src target",
|
||||
" cp [-R [-H | -L | -P]] [-f | -i] [-p] src1 ... srcN directory");
|
||||
exit(1);
|
||||
}
|
||||
+4
-4
@@ -15,10 +15,10 @@ SRCS= alloc.c char.c const.c csh.c dir.c dol.c err.c exec.c exp.c file.c \
|
||||
.PATH: ${.CURDIR}/../../usr.bin/printf
|
||||
|
||||
MAN1= csh.1
|
||||
# MLINKS for Shell built in commands for which there are no userland
|
||||
# utilities of the same name are handled with the associated manpage,
|
||||
# builtin.1 in share/man/man1/.
|
||||
|
||||
MLINKS= csh.1 limit.1 csh.1 alias.1 csh.1 bg.1 csh.1 dirs.1 csh.1 fg.1 \
|
||||
csh.1 foreach.1 csh.1 history.1 csh.1 jobs.1 csh.1 popd.1 \
|
||||
csh.1 pushd.1 csh.1 rehash.1 csh.1 repeat.1 csh.1 suspend.1 \
|
||||
csh.1 stop.1 csh.1 source.1
|
||||
CLEANFILES+=const.h errnum.h
|
||||
|
||||
const.h: errnum.h
|
||||
|
||||
+12
-27
@@ -55,9 +55,8 @@ job control facilities (see
|
||||
interactive file name
|
||||
and user name completion (see
|
||||
.Sx File Name Completion ) ,
|
||||
and a C-like syntax.
|
||||
It is used both as an interactive login shell and
|
||||
a shell script command processor.
|
||||
and a C-like syntax. It is used both as an interactive
|
||||
login shell and a shell script command processor.
|
||||
.Ss Argument list processing
|
||||
If the first argument (argument 0) to the shell is
|
||||
.Ql Fl \& ,
|
||||
@@ -237,9 +236,8 @@ may be a component of a pipeline, etc.).
|
||||
It is also possible to separate pipelines with `\&|\&|' or `&&' showing,
|
||||
as in the C language,
|
||||
that the second is to be executed only if the first fails or succeeds
|
||||
respectively.
|
||||
See
|
||||
.Sx Expressions .
|
||||
respectively. (See
|
||||
.Em Expressions . )
|
||||
.Ss Jobs
|
||||
The shell associates a
|
||||
.Ar job
|
||||
@@ -319,15 +317,12 @@ The job control mechanism requires that the
|
||||
.Xr stty 1
|
||||
option
|
||||
.Ic new
|
||||
be set.
|
||||
It is an artifact from a
|
||||
be set. It is an artifact from a
|
||||
.Em new
|
||||
implementation
|
||||
of the
|
||||
tty driver that allows generation of interrupt characters from
|
||||
the keyboard to tell jobs to stop. See
|
||||
.Xr stty 1
|
||||
for details
|
||||
the keyboard to tell jobs to stop. See stty(1) for details
|
||||
on setting options in the new tty driver.
|
||||
.Ss Status reporting
|
||||
This shell learns immediately whenever a process changes state.
|
||||
@@ -571,8 +566,8 @@ Repeat the previous substitution.
|
||||
Apply the change once on each word, prefixing the above, e.g., `g&'.
|
||||
.It a
|
||||
Apply the change as many times as possible on a single word, prefixing
|
||||
the above.
|
||||
It can be used together with `g' to apply a substitution globally.
|
||||
the above. It can be used together with `g' to apply a substitution
|
||||
globally.
|
||||
.It p
|
||||
Print the new command line but do not execute it.
|
||||
.It q
|
||||
@@ -1492,7 +1487,7 @@ entry in the stack.
|
||||
The members of the directory stack are numbered from the top starting at 0.
|
||||
.Pp
|
||||
.It Ic printf Ar format-string values
|
||||
Invokes a builtin version of
|
||||
Invokes a built-in version of
|
||||
.Ic printf
|
||||
after evaluating the
|
||||
.Ar format-string
|
||||
@@ -2139,18 +2134,9 @@ To detect looping, the shell restricts the number of
|
||||
.Ic alias
|
||||
substitutions on a single line to 20.
|
||||
.Sh SEE ALSO
|
||||
.Xr builtin 1 ,
|
||||
.Xr echo 1 ,
|
||||
.Xr kill 1 ,
|
||||
.Xr login 1 ,
|
||||
.Xr nice 1 ,
|
||||
.Xr nohup 1 ,
|
||||
.Xr printenv 1 ,
|
||||
.Xr printf 1 ,
|
||||
.Xr sh 1 ,
|
||||
.Xr su 1 ,
|
||||
.Xr time 1 ,
|
||||
.Xr which 1 ,
|
||||
.Xr access 2 ,
|
||||
.Xr execve 2 ,
|
||||
.Xr fork 2 ,
|
||||
@@ -2163,9 +2149,8 @@ substitutions on a single line to 20.
|
||||
.Xr tty 4 ,
|
||||
.Xr a.out 5 ,
|
||||
.Xr environ 7
|
||||
.Rs
|
||||
.%T "An introduction to the C shell"
|
||||
.Re
|
||||
.br
|
||||
.Em An introduction to the C shell
|
||||
.Sh HISTORY
|
||||
.Nm Csh
|
||||
appeared in
|
||||
@@ -2209,7 +2194,7 @@ shell procedures should be provided instead of aliases.
|
||||
Commands within loops, prompted for by `?', are not placed on the
|
||||
.Ic history
|
||||
list.
|
||||
Control structure should be parsed instead of being recognized as builtin
|
||||
Control structure should be parsed instead of being recognized as built-in
|
||||
commands. This would allow control commands to be placed anywhere,
|
||||
to be combined with `\&|', and to be used with `&' and `;' metasyntax.
|
||||
.Pp
|
||||
|
||||
+2
-4
@@ -49,7 +49,7 @@
|
||||
.Op Fl t Ar minutes_west
|
||||
.Op Fl v Ns Ar [+|-]val Ns Op ymwdHMS
|
||||
.Ar ...
|
||||
.Op Fl f Ar fmt Ar date | [[[[[cc]yy]mm]dd]HH]MM[\&.ss]
|
||||
.Op Fl f Ar fmt Ar date | [[[[yy]mm]dd]HH]MM[\&.ss]
|
||||
.Op Cm + Ns Ar format
|
||||
.Sh DESCRIPTION
|
||||
.Nm Date
|
||||
@@ -74,7 +74,7 @@ Use
|
||||
.Ar fmt
|
||||
as the format string to parse the date provided rather than using
|
||||
the default
|
||||
.Ar [[[[[cc]yy]mm]dd]HH]MM[.ss]
|
||||
.Ar [[[[yy]mm]dd]HH]MM[.ss]
|
||||
format. Parsing is done using
|
||||
.Xr strptime 3 .
|
||||
.It Fl n
|
||||
@@ -162,8 +162,6 @@ a value for setting the system's notion of the current date and time.
|
||||
The canonical representation for setting the date and time is:
|
||||
.Pp
|
||||
.Bl -tag -width Ds -compact -offset indent
|
||||
.It Ar cc
|
||||
Century (either 19 or 20) prepended to the abbreviated year.
|
||||
.It Ar yy
|
||||
Year in abbreviated form (e.g. 89 for 1989, 06 for 2006).
|
||||
.It Ar mm
|
||||
|
||||
+2
-10
@@ -170,8 +170,6 @@ main(argc, argv)
|
||||
}
|
||||
|
||||
#define ATOI2(ar) ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
|
||||
#define ATOI4(ar) ((ar)[0] - '0') * 1000 + ((ar)[1] - '0') * 100 + \
|
||||
((ar)[2] - '0') * 10 + ((ar)[3] - '0'); (ar) += 4;
|
||||
void
|
||||
setthetime(fmt, p)
|
||||
const char *fmt;
|
||||
@@ -217,16 +215,11 @@ setthetime(fmt, p)
|
||||
|
||||
/* if p has a ".ss" field then let's pretend it's not there */
|
||||
switch (strlen(p) - ((dot != NULL) ? 3 : 0)) {
|
||||
case 12: /* cc */
|
||||
lt->tm_year = -1900 + ATOI4(p);
|
||||
if (lt->tm_year < 0)
|
||||
badformat();
|
||||
goto year_done;
|
||||
case 10: /* yy */
|
||||
lt->tm_year = ATOI2(p);
|
||||
if (lt->tm_year < 69) /* hack for 2000 ;-} */
|
||||
lt->tm_year += 100;
|
||||
year_done: /* FALLTHROUGH */
|
||||
/* FALLTHROUGH */
|
||||
case 8: /* mm */
|
||||
lt->tm_mon = ATOI2(p);
|
||||
if (lt->tm_mon > 12)
|
||||
@@ -285,7 +278,6 @@ usage()
|
||||
(void)fprintf(stderr, "%s\n%s\n",
|
||||
"usage: date [-nu] [-d dst] [-r seconds] [-t west] "
|
||||
"[-v[+|-]val[ymwdHMS]] ... ",
|
||||
" "
|
||||
"[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]");
|
||||
" [-f fmt date | [[[[yy]mm]dd]HH]MM[.ss]] [+format]");
|
||||
exit(1);
|
||||
}
|
||||
@@ -4,6 +4,4 @@
|
||||
PROG= dd
|
||||
SRCS= args.c conv.c conv_tab.c dd.c misc.c position.c
|
||||
|
||||
MAINTAINER= [email protected]
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
+57
-96
@@ -67,11 +67,10 @@ static void f_obs __P((char *));
|
||||
static void f_of __P((char *));
|
||||
static void f_seek __P((char *));
|
||||
static void f_skip __P((char *));
|
||||
static quad_t get_num __P((char *));
|
||||
static off_t get_offset __P((char *));
|
||||
static u_long get_bsz __P((char *));
|
||||
|
||||
static const struct arg {
|
||||
const char *name;
|
||||
static struct arg {
|
||||
char *name;
|
||||
void (*f) __P((char *));
|
||||
u_int set, noset;
|
||||
} args[] = {
|
||||
@@ -142,14 +141,14 @@ jcl(argv)
|
||||
* Ascii/ebcdic and cbs implies block/unblock.
|
||||
* Block/unblock requires cbs and vice-versa.
|
||||
*/
|
||||
if (ddflags & (C_BLOCK | C_UNBLOCK)) {
|
||||
if (ddflags & (C_BLOCK|C_UNBLOCK)) {
|
||||
if (!(ddflags & C_CBS))
|
||||
errx(1, "record operations require cbs");
|
||||
if (cbsz == 0)
|
||||
errx(1, "cbs cannot be zero");
|
||||
cfunc = ddflags & C_BLOCK ? block : unblock;
|
||||
} else if (ddflags & C_CBS) {
|
||||
if (ddflags & (C_ASCII | C_EBCDIC)) {
|
||||
if (ddflags & (C_ASCII|C_EBCDIC)) {
|
||||
if (ddflags & C_ASCII) {
|
||||
ddflags |= C_UNBLOCK;
|
||||
cfunc = unblock;
|
||||
@@ -159,14 +158,23 @@ jcl(argv)
|
||||
}
|
||||
} else
|
||||
errx(1, "cbs meaningless if not doing record operations");
|
||||
if (cbsz == 0)
|
||||
errx(1, "cbs cannot be zero");
|
||||
} else
|
||||
cfunc = def;
|
||||
|
||||
if (in.dbsz == 0 || out.dbsz == 0)
|
||||
errx(1, "buffer sizes cannot be zero");
|
||||
|
||||
/*
|
||||
* Bail out if the calculation of a file offset would overflow.
|
||||
* Read, write and seek calls take ints as arguments. Seek sizes
|
||||
* could be larger if we wanted to do it in stages or check only
|
||||
* regular files, but it's probably not worth it.
|
||||
*/
|
||||
if (in.offset > QUAD_MAX / in.dbsz || out.offset > QUAD_MAX / out.dbsz)
|
||||
errx(1, "seek offsets cannot be larger than %qd", QUAD_MAX);
|
||||
if (in.dbsz > INT_MAX || out.dbsz > INT_MAX)
|
||||
errx(1, "buffer sizes cannot be greater than %d", INT_MAX);
|
||||
if (in.offset > INT_MAX / in.dbsz || out.offset > INT_MAX / out.dbsz)
|
||||
errx(1, "seek offsets cannot be larger than %d", INT_MAX);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -174,32 +182,23 @@ c_arg(a, b)
|
||||
const void *a, *b;
|
||||
{
|
||||
|
||||
return (strcmp(((const struct arg *)a)->name,
|
||||
((const struct arg *)b)->name));
|
||||
return (strcmp(((struct arg *)a)->name, ((struct arg *)b)->name));
|
||||
}
|
||||
|
||||
static void
|
||||
f_bs(arg)
|
||||
char *arg;
|
||||
{
|
||||
quad_t res;
|
||||
|
||||
res = get_num(arg);
|
||||
if (res < 1 || res > SSIZE_MAX)
|
||||
errx(1, "bs must be between 1 and %d", SSIZE_MAX);
|
||||
in.dbsz = out.dbsz = (size_t)res;
|
||||
in.dbsz = out.dbsz = (int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
f_cbs(arg)
|
||||
char *arg;
|
||||
{
|
||||
quad_t res;
|
||||
|
||||
res = get_num(arg);
|
||||
if (res < 1 || res > SSIZE_MAX)
|
||||
errx(1, "cbs must be between 1 and %d", SSIZE_MAX);
|
||||
cbsz = (size_t)res;
|
||||
cbsz = (int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -207,11 +206,9 @@ f_count(arg)
|
||||
char *arg;
|
||||
{
|
||||
|
||||
cpy_cnt = get_num(arg);
|
||||
if (cpy_cnt < 0)
|
||||
errx(1, "count cannot be negative");
|
||||
if (cpy_cnt == 0)
|
||||
cpy_cnt = -1;
|
||||
cpy_cnt = (u_int)get_bsz(arg);
|
||||
if (!cpy_cnt)
|
||||
terminate(0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -219,23 +216,16 @@ f_files(arg)
|
||||
char *arg;
|
||||
{
|
||||
|
||||
files_cnt = get_num(arg);
|
||||
if (files_cnt < 1)
|
||||
errx(1, "files must be between 1 and %qd", QUAD_MAX);
|
||||
files_cnt = (int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
f_ibs(arg)
|
||||
char *arg;
|
||||
{
|
||||
quad_t res;
|
||||
|
||||
if (!(ddflags & C_BS)) {
|
||||
res = get_num(arg);
|
||||
if (res < 1 || res > SSIZE_MAX)
|
||||
errx(1, "ibs must be between 1 and %d", SSIZE_MAX);
|
||||
in.dbsz = (size_t)res;
|
||||
}
|
||||
if (!(ddflags & C_BS))
|
||||
in.dbsz = (int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -250,14 +240,9 @@ static void
|
||||
f_obs(arg)
|
||||
char *arg;
|
||||
{
|
||||
quad_t res;
|
||||
|
||||
if (!(ddflags & C_BS)) {
|
||||
res = get_num(arg);
|
||||
if (res < 1 || res > SSIZE_MAX)
|
||||
errx(1, "obs must be between 1 and %d", SSIZE_MAX);
|
||||
out.dbsz = (size_t)res;
|
||||
}
|
||||
if (!(ddflags & C_BS))
|
||||
out.dbsz = (int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -273,7 +258,7 @@ f_seek(arg)
|
||||
char *arg;
|
||||
{
|
||||
|
||||
out.offset = get_offset(arg);
|
||||
out.offset = (u_int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -281,13 +266,13 @@ f_skip(arg)
|
||||
char *arg;
|
||||
{
|
||||
|
||||
in.offset = get_offset(arg);
|
||||
in.offset = (u_int)get_bsz(arg);
|
||||
}
|
||||
|
||||
static const struct conv {
|
||||
const char *name;
|
||||
static struct conv {
|
||||
char *name;
|
||||
u_int set, noset;
|
||||
const u_char *ctab;
|
||||
u_char *ctab;
|
||||
} clist[] = {
|
||||
{ "ascii", C_ASCII, C_EBCDIC, e2a_POSIX },
|
||||
{ "block", C_BLOCK, C_UNBLOCK, NULL },
|
||||
@@ -315,9 +300,9 @@ f_conv(arg)
|
||||
|
||||
while (arg != NULL) {
|
||||
tmp.name = strsep(&arg, ",");
|
||||
cp = bsearch(&tmp, clist, sizeof(clist) / sizeof(struct conv),
|
||||
sizeof(struct conv), c_conv);
|
||||
if (cp == NULL)
|
||||
if (!(cp = (struct conv *)bsearch(&tmp, clist,
|
||||
sizeof(clist)/sizeof(struct conv), sizeof(struct conv),
|
||||
c_conv)))
|
||||
errx(1, "unknown conversion %s", tmp.name);
|
||||
if (ddflags & cp->noset)
|
||||
errx(1, "%s: illegal conversion combination", tmp.name);
|
||||
@@ -332,38 +317,34 @@ c_conv(a, b)
|
||||
const void *a, *b;
|
||||
{
|
||||
|
||||
return (strcmp(((const struct conv *)a)->name,
|
||||
((const struct conv *)b)->name));
|
||||
return (strcmp(((struct conv *)a)->name, ((struct conv *)b)->name));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an expression of the following forms to a quad_t.
|
||||
* Convert an expression of the following forms to an unsigned long.
|
||||
* 1) A positive decimal number.
|
||||
* 2) A positive decimal number followed by a b (mult by 512.)
|
||||
* 3) A positive decimal number followed by a k (mult by 1 << 10.)
|
||||
* 4) A positive decimal number followed by a m (mult by 1 << 20.)
|
||||
* 5) A positive decimal number followed by a g (mult by 1 << 30.)
|
||||
* 5) A positive decimal number followed by a w (mult by sizeof int.)
|
||||
* 6) Two or more positive decimal numbers (with/without [bkmgw])
|
||||
* 2) A positive decimal number followed by a b (mult by 512).
|
||||
* 3) A positive decimal number followed by a k (mult by 1024).
|
||||
* 4) A positive decimal number followed by a m (mult by 512).
|
||||
* 5) A positive decimal number followed by a w (mult by sizeof int)
|
||||
* 6) Two or more positive decimal numbers (with/without k,b or w).
|
||||
* separated by x (also * for backwards compatibility), specifying
|
||||
* the product of the indicated values.
|
||||
*/
|
||||
static quad_t
|
||||
get_num(val)
|
||||
static u_long
|
||||
get_bsz(val)
|
||||
char *val;
|
||||
{
|
||||
quad_t num, t;
|
||||
u_long num, t;
|
||||
char *expr;
|
||||
|
||||
errno = 0;
|
||||
num = strtoq(val, &expr, 0);
|
||||
if (errno != 0) /* Overflow or underflow. */
|
||||
num = strtoul(val, &expr, 0);
|
||||
if (num == ULONG_MAX) /* Overflow. */
|
||||
err(1, "%s", oper);
|
||||
|
||||
if (expr == val) /* No valid digits. */
|
||||
if (expr == val) /* No digits. */
|
||||
errx(1, "%s: illegal numeric value", oper);
|
||||
|
||||
switch (*expr) {
|
||||
switch(*expr) {
|
||||
case 'b':
|
||||
t = num;
|
||||
num *= 512;
|
||||
@@ -373,21 +354,14 @@ get_num(val)
|
||||
break;
|
||||
case 'k':
|
||||
t = num;
|
||||
num *= 1 << 10;
|
||||
num *= 1024;
|
||||
if (t > num)
|
||||
goto erange;
|
||||
++expr;
|
||||
break;
|
||||
case 'm':
|
||||
t = num;
|
||||
num *= 1 << 20;
|
||||
if (t > num)
|
||||
goto erange;
|
||||
++expr;
|
||||
break;
|
||||
case 'g':
|
||||
t = num;
|
||||
num *= 1 << 30;
|
||||
num *= 1048576;
|
||||
if (t > num)
|
||||
goto erange;
|
||||
++expr;
|
||||
@@ -401,31 +375,18 @@ get_num(val)
|
||||
break;
|
||||
}
|
||||
|
||||
switch (*expr) {
|
||||
switch(*expr) {
|
||||
case '\0':
|
||||
break;
|
||||
case '*': /* Backward compatible. */
|
||||
case 'x':
|
||||
t = num;
|
||||
num *= get_num(expr + 1);
|
||||
if (t <= num)
|
||||
break;
|
||||
erange:
|
||||
errx(1, "%s: %s", oper, strerror(ERANGE));
|
||||
num *= get_bsz(expr + 1);
|
||||
if (t > num)
|
||||
erange: errx(1, "%s: %s", oper, strerror(ERANGE));
|
||||
break;
|
||||
default:
|
||||
errx(1, "%s: illegal numeric value", oper);
|
||||
}
|
||||
return (num);
|
||||
}
|
||||
|
||||
static off_t
|
||||
get_offset(val)
|
||||
char *val;
|
||||
{
|
||||
quad_t num;
|
||||
|
||||
num = get_num(val);
|
||||
if (num > QUAD_MAX || num < 0) /* XXX quad_t != off_t */
|
||||
errx(1, "%s: illegal offset", oper); /* Too big/negative. */
|
||||
return ((off_t)num);
|
||||
}
|
||||
+24
-29
@@ -60,9 +60,8 @@ static const char rcsid[] =
|
||||
void
|
||||
def()
|
||||
{
|
||||
u_char *inp;
|
||||
const u_char *t;
|
||||
size_t cnt;
|
||||
int cnt;
|
||||
u_char *inp, *t;
|
||||
|
||||
if ((t = ctab) != NULL)
|
||||
for (inp = in.dbp - (cnt = in.dbrcnt); cnt--; ++inp)
|
||||
@@ -104,11 +103,9 @@ def_close()
|
||||
void
|
||||
block()
|
||||
{
|
||||
u_char *inp, *outp;
|
||||
const u_char *t;
|
||||
size_t cnt, maxlen;
|
||||
static int intrunc;
|
||||
int ch;
|
||||
int ch, cnt, maxlen;
|
||||
u_char *inp, *outp, *t;
|
||||
|
||||
/*
|
||||
* Record truncation can cross block boundaries. If currently in a
|
||||
@@ -117,8 +114,8 @@ block()
|
||||
* left empty.
|
||||
*/
|
||||
if (intrunc) {
|
||||
for (inp = in.db, cnt = in.dbrcnt; cnt && *inp++ != '\n'; --cnt)
|
||||
;
|
||||
for (inp = in.db, cnt = in.dbrcnt;
|
||||
cnt && *inp++ != '\n'; --cnt);
|
||||
if (!cnt) {
|
||||
in.dbcnt = 0;
|
||||
in.dbp = in.db;
|
||||
@@ -138,19 +135,19 @@ block()
|
||||
for (inp = in.dbp - in.dbcnt, outp = out.dbp; in.dbcnt;) {
|
||||
maxlen = MIN(cbsz, in.dbcnt);
|
||||
if ((t = ctab) != NULL)
|
||||
for (cnt = 0; cnt < maxlen && (ch = *inp++) != '\n';
|
||||
++cnt)
|
||||
for (cnt = 0;
|
||||
cnt < maxlen && (ch = *inp++) != '\n'; ++cnt)
|
||||
*outp++ = t[ch];
|
||||
else
|
||||
for (cnt = 0; cnt < maxlen && (ch = *inp++) != '\n';
|
||||
++cnt)
|
||||
for (cnt = 0;
|
||||
cnt < maxlen && (ch = *inp++) != '\n'; ++cnt)
|
||||
*outp++ = ch;
|
||||
/*
|
||||
* Check for short record without a newline. Reassemble the
|
||||
* input block.
|
||||
*/
|
||||
if (ch != '\n' && in.dbcnt < cbsz) {
|
||||
(void)memmove(in.db, in.dbp - in.dbcnt, in.dbcnt);
|
||||
memmove(in.db, in.dbp - in.dbcnt, in.dbcnt);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -200,9 +197,9 @@ block_close()
|
||||
*/
|
||||
if (in.dbcnt) {
|
||||
++st.trunc;
|
||||
(void)memmove(out.dbp, in.dbp - in.dbcnt, in.dbcnt);
|
||||
(void)memset(out.dbp + in.dbcnt, ctab ? ctab[' '] : ' ',
|
||||
cbsz - in.dbcnt);
|
||||
memmove(out.dbp, in.dbp - in.dbcnt, in.dbcnt);
|
||||
(void)memset(out.dbp + in.dbcnt,
|
||||
ctab ? ctab[' '] : ' ', cbsz - in.dbcnt);
|
||||
out.dbcnt += cbsz;
|
||||
}
|
||||
}
|
||||
@@ -217,9 +214,8 @@ block_close()
|
||||
void
|
||||
unblock()
|
||||
{
|
||||
u_char *inp;
|
||||
const u_char *t;
|
||||
size_t cnt;
|
||||
int cnt;
|
||||
u_char *inp, *t;
|
||||
|
||||
/* Translation and case conversion. */
|
||||
if ((t = ctab) != NULL)
|
||||
@@ -231,36 +227,35 @@ unblock()
|
||||
* spaces.
|
||||
*/
|
||||
for (inp = in.db; in.dbcnt >= cbsz; inp += cbsz, in.dbcnt -= cbsz) {
|
||||
for (t = inp + cbsz - 1; t >= inp && *t == ' '; --t)
|
||||
;
|
||||
for (t = inp + cbsz - 1; t >= inp && *t == ' '; --t);
|
||||
if (t >= inp) {
|
||||
cnt = t - inp + 1;
|
||||
(void)memmove(out.dbp, inp, cnt);
|
||||
memmove(out.dbp, inp, cnt);
|
||||
out.dbp += cnt;
|
||||
out.dbcnt += cnt;
|
||||
}
|
||||
++out.dbcnt;
|
||||
*out.dbp++ = '\n';
|
||||
if (++out.dbcnt >= out.dbsz)
|
||||
if (out.dbcnt >= out.dbsz)
|
||||
dd_out(0);
|
||||
}
|
||||
if (in.dbcnt)
|
||||
(void)memmove(in.db, in.dbp - in.dbcnt, in.dbcnt);
|
||||
memmove(in.db, in.dbp - in.dbcnt, in.dbcnt);
|
||||
in.dbp = in.db + in.dbcnt;
|
||||
}
|
||||
|
||||
void
|
||||
unblock_close()
|
||||
{
|
||||
int cnt;
|
||||
u_char *t;
|
||||
size_t cnt;
|
||||
|
||||
if (in.dbcnt) {
|
||||
warnx("%s: short input record", in.name);
|
||||
for (t = in.db + in.dbcnt - 1; t >= in.db && *t == ' '; --t)
|
||||
;
|
||||
for (t = in.db + in.dbcnt - 1; t >= in.db && *t == ' '; --t);
|
||||
if (t >= in.db) {
|
||||
cnt = t - in.db + 1;
|
||||
(void)memmove(out.dbp, in.db, cnt);
|
||||
memmove(out.dbp, in.db, cnt);
|
||||
out.dbp += cnt;
|
||||
out.dbcnt += cnt;
|
||||
}
|
||||
|
||||
+15
-8
@@ -46,7 +46,10 @@ static const char rcsid[] =
|
||||
#include <sys/types.h>
|
||||
|
||||
/*
|
||||
* There are currently six tables:
|
||||
* There are currently eight tables:
|
||||
*
|
||||
* lower-case -> upper-case conv=upper
|
||||
* upper-case -> lower-case conv=lower
|
||||
*
|
||||
* ebcdic -> ascii 32V conv=oldascii
|
||||
* ascii -> ebcdic 32V conv=oldebcdic
|
||||
@@ -69,10 +72,14 @@ static const char rcsid[] =
|
||||
* ACM, Volume 11, Number 11, November 1968, pp. 783-789.
|
||||
*/
|
||||
|
||||
u_char casetab[256];
|
||||
/* Lower-case to upper-case */
|
||||
u_char l2u[256];
|
||||
|
||||
/* Upper-case to lower-case */
|
||||
u_char u2l[256];
|
||||
|
||||
/* EBCDIC to ASCII -- 32V compatible. */
|
||||
const u_char e2a_32V[] = {
|
||||
u_char e2a_32V[] = {
|
||||
0000, 0001, 0002, 0003, 0234, 0011, 0206, 0177, /* 0000 */
|
||||
0227, 0215, 0216, 0013, 0014, 0015, 0016, 0017, /* 0010 */
|
||||
0020, 0021, 0022, 0023, 0235, 0205, 0010, 0207, /* 0020 */
|
||||
@@ -108,7 +115,7 @@ const u_char e2a_32V[] = {
|
||||
};
|
||||
|
||||
/* ASCII to EBCDIC -- 32V compatible. */
|
||||
const u_char a2e_32V[] = {
|
||||
u_char a2e_32V[] = {
|
||||
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057, /* 0000 */
|
||||
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017, /* 0010 */
|
||||
0020, 0021, 0022, 0023, 0074, 0075, 0062, 0046, /* 0020 */
|
||||
@@ -144,7 +151,7 @@ const u_char a2e_32V[] = {
|
||||
};
|
||||
|
||||
/* ASCII to IBM EBCDIC -- 32V compatible. */
|
||||
const u_char a2ibm_32V[] = {
|
||||
u_char a2ibm_32V[] = {
|
||||
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057, /* 0000 */
|
||||
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017, /* 0010 */
|
||||
0020, 0021, 0022, 0023, 0074, 0075, 0062, 0046, /* 0020 */
|
||||
@@ -180,7 +187,7 @@ const u_char a2ibm_32V[] = {
|
||||
};
|
||||
|
||||
/* EBCDIC to ASCII -- POSIX and System V compatible. */
|
||||
const u_char e2a_POSIX[] = {
|
||||
u_char e2a_POSIX[] = {
|
||||
0000, 0001, 0002, 0003, 0234, 0011, 0206, 0177, /* 0000 */
|
||||
0227, 0215, 0216, 0013, 0014, 0015, 0016, 0017, /* 0010 */
|
||||
0020, 0021, 0022, 0023, 0235, 0205, 0010, 0207, /* 0020 */
|
||||
@@ -216,7 +223,7 @@ const u_char e2a_POSIX[] = {
|
||||
};
|
||||
|
||||
/* ASCII to EBCDIC -- POSIX and System V compatible. */
|
||||
const u_char a2e_POSIX[] = {
|
||||
u_char a2e_POSIX[] = {
|
||||
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057, /* 0000 */
|
||||
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017, /* 0010 */
|
||||
0020, 0021, 0022, 0023, 0074, 0075, 0062, 0046, /* 0020 */
|
||||
@@ -252,7 +259,7 @@ const u_char a2e_POSIX[] = {
|
||||
};
|
||||
|
||||
/* ASCII to IBM EBCDIC -- POSIX and System V compatible. */
|
||||
const u_char a2ibm_POSIX[] = {
|
||||
u_char a2ibm_POSIX[] = {
|
||||
0000, 0001, 0002, 0003, 0067, 0055, 0056, 0057, /* 0000 */
|
||||
0026, 0005, 0045, 0013, 0014, 0015, 0016, 0017, /* 0010 */
|
||||
0020, 0021, 0022, 0023, 0074, 0075, 0062, 0046, /* 0020 */
|
||||
|
||||
+3
-3
@@ -283,9 +283,9 @@ appended.
|
||||
.El
|
||||
.Pp
|
||||
Where sizes are specified, a decimal number of bytes is expected.
|
||||
If the number ends with a ``b'', ``k'', ``m'', ``g'', or ``w'', the
|
||||
number is multiplied by 512, 1024 (1K), 1048576 (1M), 1073741824 (1G)
|
||||
or the number of bytes in an integer, respectively.
|
||||
If the number ends with a ``b'', ``k'', ``m'' or ``w'', the number
|
||||
is multiplied by 512, 1024 (1K), 1048576 (1M) or the number of bytes
|
||||
in an integer, respectively.
|
||||
Two or more numbers may be separated by an ``x'' to indicate a product.
|
||||
.Pp
|
||||
When finished,
|
||||
|
||||
+63
-76
@@ -51,8 +51,6 @@ static const char rcsid[] =
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/disklabel.h>
|
||||
#include <sys/mtio.h>
|
||||
|
||||
#include <ctype.h>
|
||||
@@ -76,12 +74,12 @@ static void setup __P((void));
|
||||
IO in, out; /* input/output state */
|
||||
STAT st; /* statistics */
|
||||
void (*cfunc) __P((void)); /* conversion function */
|
||||
quad_t cpy_cnt; /* # of blocks to copy */
|
||||
off_t pending = 0; /* pending seek if sparse */
|
||||
u_long cpy_cnt; /* # of blocks to copy */
|
||||
u_long pending = 0; /* pending seek if sparse */
|
||||
u_int ddflags; /* conversion options */
|
||||
size_t cbsz; /* conversion block size */
|
||||
quad_t files_cnt = 1; /* # of files to copy */
|
||||
const u_char *ctab; /* conversion table */
|
||||
u_int cbsz; /* conversion block size */
|
||||
u_int files_cnt = 1; /* # of files to copy */
|
||||
u_char *ctab; /* conversion table */
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
@@ -115,7 +113,7 @@ setup()
|
||||
in.fd = STDIN_FILENO;
|
||||
} else {
|
||||
in.fd = open(in.name, O_RDONLY, 0);
|
||||
if (in.fd == -1)
|
||||
if (in.fd < 0)
|
||||
err(1, "%s", in.name);
|
||||
}
|
||||
|
||||
@@ -137,11 +135,11 @@ setup()
|
||||
* Without read we may have a problem if output also does
|
||||
* not support seeks.
|
||||
*/
|
||||
if (out.fd == -1) {
|
||||
if (out.fd < 0) {
|
||||
out.fd = open(out.name, O_WRONLY | OFLAGS, DEFFILEMODE);
|
||||
out.flags |= NOREAD;
|
||||
}
|
||||
if (out.fd == -1)
|
||||
if (out.fd < 0)
|
||||
err(1, "%s", out.name);
|
||||
}
|
||||
|
||||
@@ -151,13 +149,14 @@ setup()
|
||||
* Allocate space for the input and output buffers. If not doing
|
||||
* record oriented I/O, only need a single buffer.
|
||||
*/
|
||||
if (!(ddflags & (C_BLOCK | C_UNBLOCK))) {
|
||||
if (!(ddflags & (C_BLOCK|C_UNBLOCK))) {
|
||||
if ((in.db = malloc(out.dbsz + in.dbsz - 1)) == NULL)
|
||||
err(1, "input buffer");
|
||||
err(1, NULL);
|
||||
out.db = in.db;
|
||||
} else if ((in.db = malloc(MAX(in.dbsz, cbsz) + cbsz)) == NULL ||
|
||||
(out.db = malloc(out.dbsz + cbsz)) == NULL)
|
||||
err(1, "output buffer");
|
||||
} else if ((in.db =
|
||||
malloc((u_int)(MAX(in.dbsz, cbsz) + cbsz))) == NULL ||
|
||||
(out.db = malloc((u_int)(out.dbsz + cbsz))) == NULL)
|
||||
err(1, NULL);
|
||||
in.dbp = in.db;
|
||||
out.dbp = out.db;
|
||||
|
||||
@@ -172,34 +171,50 @@ setup()
|
||||
* kinds of output files, tapes, for example.
|
||||
*/
|
||||
if ((ddflags & (C_OF | C_SEEK | C_NOTRUNC)) == (C_OF | C_SEEK))
|
||||
(void)ftruncate(out.fd, out.offset * out.dbsz);
|
||||
(void)ftruncate(out.fd, (off_t)out.offset * out.dbsz);
|
||||
|
||||
/*
|
||||
* If converting case at the same time as another conversion, build a
|
||||
* table that does both at once. If just converting case, use the
|
||||
* built-in tables.
|
||||
*/
|
||||
if (ddflags & (C_LCASE | C_UCASE)) {
|
||||
if (ddflags & (C_ASCII | C_EBCDIC)) {
|
||||
if (ddflags & (C_LCASE|C_UCASE))
|
||||
if (ddflags & C_ASCII)
|
||||
if (ddflags & C_LCASE) {
|
||||
for (cnt = 0; cnt <= 0377; ++cnt)
|
||||
casetab[cnt] = tolower(ctab[cnt]);
|
||||
if (isupper(ctab[cnt]))
|
||||
ctab[cnt] = tolower(ctab[cnt]);
|
||||
} else {
|
||||
for (cnt = 0; cnt <= 0377; ++cnt)
|
||||
casetab[cnt] = toupper(ctab[cnt]);
|
||||
if (islower(ctab[cnt]))
|
||||
ctab[cnt] = toupper(ctab[cnt]);
|
||||
}
|
||||
} else {
|
||||
else if (ddflags & C_EBCDIC)
|
||||
if (ddflags & C_LCASE) {
|
||||
for (cnt = 0; cnt <= 0377; ++cnt)
|
||||
casetab[cnt] = tolower(cnt);
|
||||
if (isupper(cnt))
|
||||
ctab[cnt] = ctab[tolower(cnt)];
|
||||
} else {
|
||||
for (cnt = 0; cnt <= 0377; ++cnt)
|
||||
casetab[cnt] = toupper(cnt);
|
||||
if (islower(cnt))
|
||||
ctab[cnt] = ctab[toupper(cnt)];
|
||||
}
|
||||
else {
|
||||
ctab = ddflags & C_LCASE ? u2l : l2u;
|
||||
if (ddflags & C_LCASE) {
|
||||
for (cnt = 0; cnt <= 0377; ++cnt)
|
||||
if (isupper(cnt))
|
||||
ctab[cnt] = tolower(cnt);
|
||||
else
|
||||
ctab[cnt] = cnt;
|
||||
} else {
|
||||
for (cnt = 0; cnt <= 0377; ++cnt)
|
||||
if (islower(cnt))
|
||||
ctab[cnt] = toupper(cnt);
|
||||
else
|
||||
ctab[cnt] = cnt;
|
||||
}
|
||||
}
|
||||
ctab = casetab;
|
||||
}
|
||||
|
||||
(void)gettimeofday(&tv, (struct timezone *)NULL);
|
||||
st.start = tv.tv_sec + tv.tv_usec * 1e-6;
|
||||
}
|
||||
@@ -208,59 +223,35 @@ static void
|
||||
getfdtype(io)
|
||||
IO *io;
|
||||
{
|
||||
struct stat sb;
|
||||
struct disklabel dkl;
|
||||
struct mtget mt;
|
||||
int type;
|
||||
struct stat sb;
|
||||
|
||||
if (fstat(io->fd, &sb) == -1)
|
||||
if (fstat(io->fd, &sb))
|
||||
err(1, "%s", io->name);
|
||||
if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode)) {
|
||||
if (ioctl(io->fd, DIOCGDINFO, &dkl) == 0 ||
|
||||
/* XXX {,k}mem hack: This sucks. */
|
||||
(major(sb.st_rdev) == 2 &&
|
||||
(minor(sb.st_rdev) == 0 || minor(sb.st_rdev) == 1)))
|
||||
io->flags |= ISSEEK;
|
||||
else if (ioctl(io->fd, MTIOCGET, &mt) == 0)
|
||||
io->flags |= ISTAPE;
|
||||
if (S_ISCHR(sb.st_mode) && (io->flags & ISTAPE) == 0)
|
||||
io->flags |= ISCHR;
|
||||
return;
|
||||
}
|
||||
errno = 0;
|
||||
if (lseek(io->fd, (off_t)0, SEEK_CUR) == -1 && errno == ESPIPE)
|
||||
io->flags |= ISPIPE;
|
||||
else
|
||||
io->flags |= ISSEEK;
|
||||
if (S_ISCHR(sb.st_mode))
|
||||
io->flags |= ioctl(io->fd, MTIOCGET, &mt) ? ISCHR : ISTAPE;
|
||||
else if (lseek(io->fd, (off_t)0, SEEK_CUR) == -1 && errno == ESPIPE)
|
||||
io->flags |= ISPIPE; /* XXX fixed in 4.4BSD */
|
||||
}
|
||||
|
||||
static void
|
||||
dd_in()
|
||||
{
|
||||
ssize_t n;
|
||||
int n;
|
||||
|
||||
for (;;) {
|
||||
switch (cpy_cnt) {
|
||||
case -1: /* count=0 was specified */
|
||||
if (cpy_cnt && (st.in_full + st.in_part) >= cpy_cnt)
|
||||
return;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
if (st.in_full + st.in_part >= cpy_cnt)
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Zero the buffer first if sync; if doing block operations,
|
||||
* Zero the buffer first if sync; If doing block operations
|
||||
* use spaces.
|
||||
*/
|
||||
if (ddflags & C_SYNC) {
|
||||
if (ddflags & (C_BLOCK | C_UNBLOCK))
|
||||
if (ddflags & C_SYNC)
|
||||
if (ddflags & (C_BLOCK|C_UNBLOCK))
|
||||
memset(in.dbp, ' ', in.dbsz);
|
||||
else
|
||||
memset(in.dbp, 0, in.dbsz);
|
||||
}
|
||||
|
||||
n = read(in.fd, in.dbp, in.dbsz);
|
||||
if (n == 0) {
|
||||
@@ -269,7 +260,7 @@ dd_in()
|
||||
}
|
||||
|
||||
/* Read error. */
|
||||
if (n == -1) {
|
||||
if (n < 0) {
|
||||
/*
|
||||
* If noerror not specified, die. POSIX requires that
|
||||
* the warning message be followed by an I/O display.
|
||||
@@ -280,12 +271,12 @@ dd_in()
|
||||
summary();
|
||||
|
||||
/*
|
||||
* If it's a seekable file descriptor, seek past the
|
||||
* If it's not a tape drive or a pipe, seek past the
|
||||
* error. If your OS doesn't do the right thing for
|
||||
* raw disks this section should be modified to re-read
|
||||
* in sector size chunks.
|
||||
*/
|
||||
if (in.flags & ISSEEK &&
|
||||
if (!(in.flags & (ISPIPE|ISTAPE)) &&
|
||||
lseek(in.fd, (off_t)in.dbsz, SEEK_CUR))
|
||||
warn("%s", in.name);
|
||||
|
||||
@@ -338,7 +329,7 @@ dd_in()
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean up any remaining I/O and flush output. If necessary, the output file
|
||||
* Cleanup any remaining I/O and flush output. If necesssary, output file
|
||||
* is truncated.
|
||||
*/
|
||||
static void
|
||||
@@ -351,7 +342,7 @@ dd_close()
|
||||
else if (cfunc == unblock)
|
||||
unblock_close();
|
||||
if (ddflags & C_OSYNC && out.dbcnt && out.dbcnt < out.dbsz) {
|
||||
if (ddflags & (C_BLOCK | C_UNBLOCK))
|
||||
if (ddflags & (C_BLOCK|C_UNBLOCK))
|
||||
memset(out.dbp, ' ', out.dbsz - out.dbcnt);
|
||||
else
|
||||
memset(out.dbp, 0, out.dbsz - out.dbcnt);
|
||||
@@ -365,11 +356,9 @@ void
|
||||
dd_out(force)
|
||||
int force;
|
||||
{
|
||||
u_char *outp;
|
||||
size_t cnt, i, n;
|
||||
ssize_t nw;
|
||||
static int warned;
|
||||
int sparse;
|
||||
int cnt, n, nw, i, sparse;
|
||||
u_char *outp;
|
||||
|
||||
/*
|
||||
* Write one or more blocks out. The common case is writing a full
|
||||
@@ -406,8 +395,7 @@ dd_out(force)
|
||||
if (pending != 0) {
|
||||
if (force)
|
||||
pending--;
|
||||
if (lseek(out.fd, pending, SEEK_CUR) ==
|
||||
-1)
|
||||
if (lseek (out.fd, pending, SEEK_CUR) == -1)
|
||||
err(2, "%s: seek error creating sparse file",
|
||||
out.name);
|
||||
if (force)
|
||||
@@ -439,14 +427,13 @@ dd_out(force)
|
||||
++st.out_part;
|
||||
if (nw == cnt)
|
||||
break;
|
||||
if (out.flags & ISTAPE)
|
||||
errx(1, "%s: short write on tape device",
|
||||
out.name);
|
||||
if (out.flags & ISCHR && !warned) {
|
||||
warned = 1;
|
||||
warnx("%s: short write on character device",
|
||||
out.name);
|
||||
}
|
||||
if (out.flags & ISTAPE)
|
||||
errx(1, "%s: short write on tape device", out.name);
|
||||
}
|
||||
if ((out.dbcnt -= n) < out.dbsz)
|
||||
break;
|
||||
@@ -454,6 +441,6 @@ dd_out(force)
|
||||
|
||||
/* Reassemble the output block. */
|
||||
if (out.dbcnt)
|
||||
(void)memmove(out.db, out.dbp - out.dbcnt, out.dbcnt);
|
||||
memmove(out.db, out.dbp - out.dbcnt, out.dbcnt);
|
||||
out.dbp = out.db + out.dbcnt;
|
||||
}
|
||||
+24
-26
@@ -40,39 +40,37 @@
|
||||
|
||||
/* Input/output stream state. */
|
||||
typedef struct {
|
||||
u_char *db; /* buffer address */
|
||||
u_char *dbp; /* current buffer I/O address */
|
||||
/* XXX ssize_t? */
|
||||
size_t dbcnt; /* current buffer byte count */
|
||||
size_t dbrcnt; /* last read byte count */
|
||||
size_t dbsz; /* buffer size */
|
||||
u_char *db; /* buffer address */
|
||||
u_char *dbp; /* current buffer I/O address */
|
||||
u_long dbcnt; /* current buffer byte count */
|
||||
int dbrcnt; /* last read byte count */
|
||||
u_long dbsz; /* buffer size */
|
||||
|
||||
#define ISCHR 0x01 /* character device (warn on short) */
|
||||
#define ISPIPE 0x02 /* pipe-like (not truncatable) */
|
||||
#define ISTAPE 0x04 /* tape */
|
||||
#define ISSEEK 0x08 /* valid to seek on */
|
||||
#define NOREAD 0x10 /* not readable */
|
||||
u_int flags;
|
||||
#define ISPIPE 0x02 /* pipe (not truncatable) */
|
||||
#define ISTAPE 0x04 /* tape (not seekable) */
|
||||
#define NOREAD 0x08 /* not readable */
|
||||
u_int flags;
|
||||
|
||||
char *name; /* name */
|
||||
int fd; /* file descriptor */
|
||||
off_t offset; /* # of blocks to skip */
|
||||
char *name; /* name */
|
||||
int fd; /* file descriptor */
|
||||
u_long offset; /* # of blocks to skip */
|
||||
|
||||
u_quad_t f_stats; /* # of full blocks processed */
|
||||
u_quad_t p_stats; /* # of partial blocks processed */
|
||||
u_quad_t s_stats; /* # of odd swab blocks */
|
||||
u_quad_t t_stats; /* # of truncations */
|
||||
u_long f_stats; /* # of full blocks processed */
|
||||
u_long p_stats; /* # of partial blocks processed */
|
||||
u_long s_stats; /* # of odd swab blocks */
|
||||
u_long t_stats; /* # of truncations */
|
||||
} IO;
|
||||
|
||||
typedef struct {
|
||||
u_quad_t in_full; /* # of full input blocks */
|
||||
u_quad_t in_part; /* # of partial input blocks */
|
||||
u_quad_t out_full; /* # of full output blocks */
|
||||
u_quad_t out_part; /* # of partial output blocks */
|
||||
u_quad_t trunc; /* # of truncated records */
|
||||
u_quad_t swab; /* # of odd-length swab blocks */
|
||||
u_quad_t bytes; /* # of bytes written */
|
||||
double start; /* start time of dd */
|
||||
u_long in_full; /* # of full input blocks */
|
||||
u_long in_part; /* # of partial input blocks */
|
||||
u_long out_full; /* # of full output blocks */
|
||||
u_long out_part; /* # of partial output blocks */
|
||||
u_long trunc; /* # of truncated records */
|
||||
u_long swab; /* # of odd-length swab blocks */
|
||||
u_int64_t bytes; /* # of bytes written */
|
||||
double start; /* start time of dd */
|
||||
} STAT;
|
||||
|
||||
/* Flags (in ddflags). */
|
||||
|
||||
+6
-8
@@ -57,12 +57,10 @@ void unblock_close __P((void));
|
||||
extern IO in, out;
|
||||
extern STAT st;
|
||||
extern void (*cfunc)();
|
||||
extern quad_t cpy_cnt;
|
||||
extern size_t cbsz;
|
||||
extern u_long cpy_cnt;
|
||||
extern u_int cbsz;
|
||||
extern u_int ddflags;
|
||||
extern quad_t files_cnt;
|
||||
extern const u_char *ctab;
|
||||
extern const u_char a2e_32V[], a2e_POSIX[];
|
||||
extern const u_char e2a_32V[], e2a_POSIX[];
|
||||
extern const u_char a2ibm_32V[], a2ibm_POSIX[];
|
||||
extern u_char casetab[];
|
||||
extern u_int files_cnt;
|
||||
extern u_char *ctab;
|
||||
extern u_char a2e_32V[], a2e_POSIX[], a2ibm_32V[], a2ibm_POSIX[], e2a_32V[];
|
||||
extern u_char e2a_POSIX[], l2u[], u2l[];
|
||||
+3
-3
@@ -66,16 +66,16 @@ summary()
|
||||
secs = 1e-6;
|
||||
/* Use snprintf(3) so that we don't reenter stdio(3). */
|
||||
(void)snprintf(buf, sizeof(buf),
|
||||
"%qu+%qu records in\n%qu+%qu records out\n",
|
||||
"%lu+%lu records in\n%lu+%lu records out\n",
|
||||
st.in_full, st.in_part, st.out_full, st.out_part);
|
||||
(void)write(STDERR_FILENO, buf, strlen(buf));
|
||||
if (st.swab) {
|
||||
(void)snprintf(buf, sizeof(buf), "%qu odd length swab %s\n",
|
||||
(void)snprintf(buf, sizeof(buf), "%lu odd length swab %s\n",
|
||||
st.swab, (st.swab == 1) ? "block" : "blocks");
|
||||
(void)write(STDERR_FILENO, buf, strlen(buf));
|
||||
}
|
||||
if (st.trunc) {
|
||||
(void)snprintf(buf, sizeof(buf), "%qu truncated %s\n",
|
||||
(void)snprintf(buf, sizeof(buf), "%lu truncated %s\n",
|
||||
st.trunc, (st.trunc == 1) ? "block" : "blocks");
|
||||
(void)write(STDERR_FILENO, buf, strlen(buf));
|
||||
}
|
||||
|
||||
+9
-17
@@ -47,7 +47,6 @@ static const char rcsid[] =
|
||||
#include <sys/mtio.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dd.h"
|
||||
@@ -62,16 +61,11 @@ static const char rcsid[] =
|
||||
void
|
||||
pos_in()
|
||||
{
|
||||
off_t cnt;
|
||||
int warned;
|
||||
ssize_t nr;
|
||||
size_t bcnt;
|
||||
int bcnt, cnt, nr, warned;
|
||||
|
||||
/* If known to be seekable, try to seek on it. */
|
||||
if (in.flags & ISSEEK) {
|
||||
errno = 0;
|
||||
if (lseek(in.fd, in.offset * in.dbsz, SEEK_CUR) == -1 &&
|
||||
errno != 0)
|
||||
/* If not a character, pipe or tape device, try to seek on it. */
|
||||
if (!(in.flags & (ISCHR|ISPIPE|ISTAPE))) {
|
||||
if (lseek(in.fd, (off_t)in.offset * in.dbsz, SEEK_CUR) == -1)
|
||||
err(1, "%s", in.name);
|
||||
return;
|
||||
}
|
||||
@@ -122,8 +116,7 @@ void
|
||||
pos_out()
|
||||
{
|
||||
struct mtop t_op;
|
||||
off_t cnt;
|
||||
ssize_t n;
|
||||
int cnt, n;
|
||||
|
||||
/*
|
||||
* If not a tape, try seeking on the file. Seeking on a pipe is
|
||||
@@ -131,9 +124,8 @@ pos_out()
|
||||
* have specified the seek operand.
|
||||
*/
|
||||
if (!(out.flags & ISTAPE)) {
|
||||
errno = 0;
|
||||
if (lseek(out.fd, out.offset * out.dbsz, SEEK_CUR) == -1 &&
|
||||
errno != 0)
|
||||
if (lseek(out.fd,
|
||||
(off_t)out.offset * out.dbsz, SEEK_SET) == -1)
|
||||
err(1, "%s", out.name);
|
||||
return;
|
||||
}
|
||||
@@ -143,7 +135,7 @@ pos_out()
|
||||
t_op.mt_op = MTFSR;
|
||||
t_op.mt_count = out.offset;
|
||||
|
||||
if (ioctl(out.fd, MTIOCTOP, &t_op) == -1)
|
||||
if (ioctl(out.fd, MTIOCTOP, &t_op) < 0)
|
||||
err(1, "%s", out.name);
|
||||
return;
|
||||
}
|
||||
@@ -153,7 +145,7 @@ pos_out()
|
||||
if ((n = read(out.fd, out.db, out.dbsz)) > 0)
|
||||
continue;
|
||||
|
||||
if (n == -1)
|
||||
if (n < 0)
|
||||
err(1, "%s", out.name);
|
||||
|
||||
/*
|
||||
|
||||
-10
@@ -44,11 +44,9 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm mv
|
||||
.Op Fl f | Fl i
|
||||
.Op Fl v
|
||||
.Ar source target
|
||||
.Nm mv
|
||||
.Op Fl f | Fl i
|
||||
.Op Fl v
|
||||
.Ar source ... directory
|
||||
.Sh DESCRIPTION
|
||||
In its first form, the
|
||||
@@ -97,10 +95,6 @@ the move is attempted.
|
||||
option overrides any previous
|
||||
.Fl f
|
||||
options.)
|
||||
.It Fl v
|
||||
Cause
|
||||
.Nm
|
||||
to be verbose, showing files after they are moved.
|
||||
.El
|
||||
.Pp
|
||||
It is an error for either the
|
||||
@@ -136,10 +130,6 @@ utility exits 0 on success, and >0 if an error occurs.
|
||||
.Xr cp 1 ,
|
||||
.Xr rm 1 ,
|
||||
.Xr symlink 7
|
||||
.Sh COMPATIBILITY
|
||||
The
|
||||
.Fl v
|
||||
option is non-standard and its use in scripts is not recommended.
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm
|
||||
|
||||
+7
-17
@@ -60,12 +60,11 @@ static const char rcsid[] =
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sysexits.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "pathnames.h"
|
||||
|
||||
int fflg, iflg, vflg;
|
||||
int fflg, iflg;
|
||||
|
||||
int copy __P((char *, char *));
|
||||
int do_move __P((char *, char *));
|
||||
@@ -83,7 +82,7 @@ main(argc, argv)
|
||||
int ch;
|
||||
char path[MAXPATHLEN];
|
||||
|
||||
while ((ch = getopt(argc, argv, "fiv")) != -1)
|
||||
while ((ch = getopt(argc, argv, "fi")) != -1)
|
||||
switch (ch) {
|
||||
case 'i':
|
||||
iflg = 1;
|
||||
@@ -93,9 +92,6 @@ main(argc, argv)
|
||||
fflg = 1;
|
||||
iflg = 0;
|
||||
break;
|
||||
case 'v':
|
||||
vflg = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
@@ -192,11 +188,8 @@ do_move(from, to)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!rename(from, to)) {
|
||||
if (vflg)
|
||||
printf("%s -> %s\n", from, to);
|
||||
if (!rename(from, to))
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (errno == EXDEV) {
|
||||
struct statfs sfs;
|
||||
@@ -306,8 +299,6 @@ err: if (unlink(to))
|
||||
warn("%s: remove", from);
|
||||
return (1);
|
||||
}
|
||||
if (vflg)
|
||||
printf("%s -> %s\n", from, to);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -318,7 +309,7 @@ copy(from, to)
|
||||
int pid, status;
|
||||
|
||||
if ((pid = fork()) == 0) {
|
||||
execl(_PATH_CP, "mv", vflg ? "-PRpv" : "-PRp", from, to, NULL);
|
||||
execl(_PATH_CP, "mv", "-PRp", from, to, NULL);
|
||||
warn("%s", _PATH_CP);
|
||||
_exit(1);
|
||||
}
|
||||
@@ -359,9 +350,8 @@ copy(from, to)
|
||||
void
|
||||
usage()
|
||||
{
|
||||
|
||||
(void)fprintf(stderr, "%s\n%s\n",
|
||||
"usage: mv [-f | -i] [-v] source target",
|
||||
" mv [-f | -i] [-v] source ... directory");
|
||||
exit(EX_USAGE);
|
||||
"usage: mv [-f | -i] source target",
|
||||
" mv [-f | -i] source ... directory");
|
||||
exit(1);
|
||||
}
|
||||
+2
-10
@@ -43,7 +43,7 @@
|
||||
.Nd remove directory entries
|
||||
.Sh SYNOPSIS
|
||||
.Nm rm
|
||||
.Op Fl dfiPRrvW
|
||||
.Op Fl dfiPRrW
|
||||
.Ar file ...
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
@@ -99,8 +99,6 @@ that directory is skipped.
|
||||
.It Fl r
|
||||
Equivalent to
|
||||
.Fl R .
|
||||
.It Fl v
|
||||
Be verbose when deleting files, showing them as they are removed.
|
||||
.It Fl W
|
||||
Attempt to undelete the named files.
|
||||
Currently, this option can only be used to recover
|
||||
@@ -111,10 +109,7 @@ The
|
||||
.Nm
|
||||
utility removes symbolic links, not the files referenced by the links.
|
||||
.Pp
|
||||
It is an error to attempt to remove the files
|
||||
.Dq \&.
|
||||
or
|
||||
.Dq .. .
|
||||
It is an error to attempt to remove the files ``.'' and ``..''.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
@@ -166,9 +161,6 @@ utility differs from historical implementations in that the
|
||||
.Fl f
|
||||
option only masks attempts to remove non-existent files instead of
|
||||
masking a large variety of errors.
|
||||
The
|
||||
.Fl v
|
||||
option is non-standard and its use in scripts is not recommended.
|
||||
.Pp
|
||||
Also, historical
|
||||
.Bx
|
||||
|
||||
+15
-47
@@ -48,8 +48,6 @@ static const char rcsid[] =
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
@@ -58,12 +56,11 @@ static const char rcsid[] =
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sysexits.h>
|
||||
#include <unistd.h>
|
||||
|
||||
extern char *flags_to_string __P((u_long, char *));
|
||||
|
||||
int dflag, eval, fflag, iflag, Pflag, vflag, Wflag, stdin_ok;
|
||||
int dflag, eval, fflag, iflag, Pflag, Wflag, stdin_ok;
|
||||
uid_t uid;
|
||||
|
||||
int check __P((char *, char *, struct stat *));
|
||||
@@ -88,7 +85,7 @@ main(argc, argv)
|
||||
int ch, rflag;
|
||||
|
||||
Pflag = rflag = 0;
|
||||
while ((ch = getopt(argc, argv, "dfiPRrvW")) != -1)
|
||||
while ((ch = getopt(argc, argv, "dfiPRrW")) != -1)
|
||||
switch(ch) {
|
||||
case 'd':
|
||||
dflag = 1;
|
||||
@@ -108,9 +105,6 @@ main(argc, argv)
|
||||
case 'r': /* Compatibility. */
|
||||
rflag = 1;
|
||||
break;
|
||||
case 'v':
|
||||
vflag = 1;
|
||||
break;
|
||||
case 'W':
|
||||
Wflag = 1;
|
||||
break;
|
||||
@@ -225,7 +219,7 @@ rm_tree(argv)
|
||||
!(p->fts_statp->st_flags & (SF_APPEND|SF_IMMUTABLE)))
|
||||
rval = chflags(p->fts_accpath,
|
||||
p->fts_statp->st_flags &= ~(UF_APPEND|UF_IMMUTABLE));
|
||||
if (rval == 0) {
|
||||
if (!rval) {
|
||||
/*
|
||||
* If we can't read or search the directory, may still be
|
||||
* able to remove it. Don't print out the un{read,search}able
|
||||
@@ -234,35 +228,21 @@ rm_tree(argv)
|
||||
switch (p->fts_info) {
|
||||
case FTS_DP:
|
||||
case FTS_DNR:
|
||||
rval = rmdir(p->fts_accpath);
|
||||
if (rval == 0 || (fflag && errno == ENOENT)) {
|
||||
if (rval == 0 && vflag)
|
||||
(void)printf("%s\n",
|
||||
p->fts_accpath);
|
||||
if (!rmdir(p->fts_accpath) || (fflag && errno == ENOENT))
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
||||
case FTS_W:
|
||||
rval = undelete(p->fts_accpath);
|
||||
if (rval == 0 && (fflag && errno == ENOENT)) {
|
||||
if (vflag)
|
||||
(void)printf("%s\n",
|
||||
p->fts_accpath);
|
||||
if (!undelete(p->fts_accpath) ||
|
||||
(fflag && errno == ENOENT))
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (Pflag)
|
||||
rm_overwrite(p->fts_accpath, NULL);
|
||||
rval = unlink(p->fts_accpath);
|
||||
if (rval == 0 || (fflag && errno == ENOENT)) {
|
||||
if (rval == 0 && vflag)
|
||||
(void)printf("%s\n",
|
||||
p->fts_accpath);
|
||||
if (!unlink(p->fts_accpath) || (fflag && errno == ENOENT))
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
err:
|
||||
@@ -315,7 +295,7 @@ rm_file(argv)
|
||||
(sb.st_flags & (UF_APPEND|UF_IMMUTABLE)) &&
|
||||
!(sb.st_flags & (SF_APPEND|SF_IMMUTABLE)))
|
||||
rval = chflags(f, sb.st_flags & ~(UF_APPEND|UF_IMMUTABLE));
|
||||
if (rval == 0) {
|
||||
if (!rval) {
|
||||
if (S_ISWHT(sb.st_mode))
|
||||
rval = undelete(f);
|
||||
else if (S_ISDIR(sb.st_mode))
|
||||
@@ -330,8 +310,6 @@ rm_file(argv)
|
||||
warn("%s", f);
|
||||
eval = 1;
|
||||
}
|
||||
if (vflag && rval == 0)
|
||||
(void)printf("%s\n", f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,10 +330,9 @@ rm_overwrite(file, sbp)
|
||||
struct stat *sbp;
|
||||
{
|
||||
struct stat sb;
|
||||
struct statfs fsb;
|
||||
off_t len;
|
||||
int bsize, fd, wlen;
|
||||
char *buf = NULL;
|
||||
int fd, wlen;
|
||||
char buf[8 * 1024];
|
||||
|
||||
fd = -1;
|
||||
if (sbp == NULL) {
|
||||
@@ -367,16 +344,11 @@ rm_overwrite(file, sbp)
|
||||
return;
|
||||
if ((fd = open(file, O_WRONLY, 0)) == -1)
|
||||
goto err;
|
||||
if (fstatfs(fd, &fsb) == -1)
|
||||
goto err;
|
||||
bsize = MAX(fsb.f_iosize, 1024);
|
||||
if ((buf = malloc(bsize)) == NULL)
|
||||
err(1, "malloc");
|
||||
|
||||
#define PASS(byte) { \
|
||||
memset(buf, byte, bsize); \
|
||||
memset(buf, byte, sizeof(buf)); \
|
||||
for (len = sbp->st_size; len > 0; len -= wlen) { \
|
||||
wlen = len < bsize ? len : bsize; \
|
||||
wlen = len < sizeof(buf) ? len : sizeof(buf); \
|
||||
if (write(fd, buf, wlen) != wlen) \
|
||||
goto err; \
|
||||
} \
|
||||
@@ -388,14 +360,10 @@ rm_overwrite(file, sbp)
|
||||
if (fsync(fd) || lseek(fd, (off_t)0, SEEK_SET))
|
||||
goto err;
|
||||
PASS(0xff);
|
||||
if (!fsync(fd) && !close(fd)) {
|
||||
free(buf);
|
||||
if (!fsync(fd) && !close(fd))
|
||||
return;
|
||||
}
|
||||
|
||||
err: eval = 1;
|
||||
if (buf)
|
||||
free(buf);
|
||||
warn("%s", file);
|
||||
}
|
||||
|
||||
@@ -472,6 +440,6 @@ void
|
||||
usage()
|
||||
{
|
||||
|
||||
(void)fprintf(stderr, "usage: rm [-f | -i] [-dPRrvW] file ...\n");
|
||||
exit(EX_USAGE);
|
||||
(void)fprintf(stderr, "usage: rm [-f | -i] [-dPRrW] file ...\n");
|
||||
exit(1);
|
||||
}
|
||||
@@ -10,10 +10,6 @@ GENSRCS= builtins.c init.c nodes.c syntax.c
|
||||
GENHDRS= builtins.h nodes.h syntax.h token.h y.tab.h
|
||||
SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS} y.tab.h
|
||||
|
||||
# MLINKS for Shell built in commands for which there are no userland
|
||||
# utilities of the same name are handled with the associated manpage,
|
||||
# builtin.1 in share/man/man1/.
|
||||
|
||||
DPADD+= ${LIBL} ${LIBEDIT} ${LIBTERMCAP}
|
||||
LDADD+= -ll -ledit -ltermcap
|
||||
|
||||
|
||||
+2
-10
@@ -275,14 +275,7 @@ evaltree(n, flags)
|
||||
out:
|
||||
if (pendingsigs)
|
||||
dotrap();
|
||||
/*
|
||||
* XXX - Like "!(n->type == NSEMI)", more types will probably
|
||||
* need to be excluded from this test. It's probably better
|
||||
* to set or unset EV_TESTED in the loop above than to bloat
|
||||
* the conditional here.
|
||||
*/
|
||||
if ((flags & EV_EXIT) || (eflag && exitstatus
|
||||
&& !(flags & EV_TESTED) && !(n->type == NSEMI)))
|
||||
if ((flags & EV_EXIT) || (eflag && exitstatus && !(flags & EV_TESTED)))
|
||||
exitshell(exitstatus);
|
||||
}
|
||||
|
||||
@@ -499,8 +492,7 @@ evalpipe(n)
|
||||
close(prevfd);
|
||||
}
|
||||
if (pip[1] >= 0) {
|
||||
if (!(prevfd >= 0 && pip[0] == 0))
|
||||
close(pip[0]);
|
||||
close(pip[0]);
|
||||
if (pip[1] != 1) {
|
||||
close(1);
|
||||
copyfd(pip[1], 1);
|
||||
|
||||
+569
-1034
File diff suppressed because it is too large.
Load diff
+14
-21
@@ -42,7 +42,7 @@
|
||||
.Nm sleep
|
||||
.Nd suspend execution for an interval of time
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Nm sleep
|
||||
.Ar seconds
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
@@ -50,34 +50,25 @@ The
|
||||
command
|
||||
suspends execution for a minimum of
|
||||
.Ar seconds .
|
||||
.Nm Sleep
|
||||
is used to schedule the execution of other commands (see
|
||||
.Sx EXAMPLES
|
||||
below).
|
||||
.Pp
|
||||
If the
|
||||
.Nm
|
||||
command receives a signal, it takes the standard action.
|
||||
.Sh IMPLEMENTATION NOTES
|
||||
The
|
||||
.Dv SIGALRM
|
||||
signal is not handled specially by this implementation.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
command will accept and honor a non-integer number of specified seconds
|
||||
.Po
|
||||
with a
|
||||
.Ql \&.
|
||||
character as a decimal point
|
||||
.Pc .
|
||||
.Bf Sy
|
||||
This is a non-portable extension, and its use will nearly guarantee that
|
||||
a shell script will not execute properly on another system.
|
||||
.Ef
|
||||
command
|
||||
receives a SIGALRM signal, it terminates normally with a zero exit status,
|
||||
for any other signal it takes the standard action.
|
||||
.Sh DIAGNOSTICS
|
||||
The
|
||||
.Nm
|
||||
utility exits with one of the following values:
|
||||
.Bl -tag -width flag
|
||||
.It Li \&0
|
||||
On successful completion.
|
||||
On successful completion, or if the signal
|
||||
.Dv SIGALRM
|
||||
was received.
|
||||
.It Li \&>\&0
|
||||
An error occurred.
|
||||
.El
|
||||
@@ -120,7 +111,9 @@ when the file is found, then another portion processing
|
||||
is done courteously by sleeping for 70 seconds in between each
|
||||
awk job.
|
||||
.Sh SEE ALSO
|
||||
.Xr nanosleep 2 ,
|
||||
.Xr at 1 ,
|
||||
.Xr setitimer 2 ,
|
||||
.Xr alarm 3 ,
|
||||
.Xr sleep 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
|
||||
+4
-56
@@ -45,11 +45,8 @@ static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void usage __P((void));
|
||||
@@ -59,71 +56,22 @@ main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
struct timespec time_to_sleep;
|
||||
long l;
|
||||
int ch, neg;
|
||||
char *p;
|
||||
int ch, secs;
|
||||
|
||||
while ((ch = getopt(argc, argv, "")) != -1)
|
||||
switch(ch) {
|
||||
case '?':
|
||||
default:
|
||||
usage();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
if (argc != 1) {
|
||||
if (argc != 1)
|
||||
usage();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
p = argv[0];
|
||||
|
||||
/* Skip over leading whitespaces. */
|
||||
while (isspace((unsigned char)*p))
|
||||
++p;
|
||||
|
||||
/* Check for optional `+' or `-' sign. */
|
||||
neg = 0;
|
||||
if (*p == '-') {
|
||||
neg = 1;
|
||||
++p;
|
||||
}
|
||||
else if (*p == '+')
|
||||
++p;
|
||||
|
||||
/* Calculate seconds. */
|
||||
if (isdigit((unsigned char)*p)) {
|
||||
l = strtol(p, &p, 10);
|
||||
if (l > INT_MAX) {
|
||||
/*
|
||||
* Avoid overflow when `seconds' is huge. This assumes
|
||||
* that the maximum value for a time_t is >= INT_MAX.
|
||||
*/
|
||||
l = INT_MAX;
|
||||
}
|
||||
} else
|
||||
l = 0;
|
||||
time_to_sleep.tv_sec = (time_t)l;
|
||||
|
||||
/* Calculate nanoseconds. */
|
||||
time_to_sleep.tv_nsec = 0;
|
||||
|
||||
if (*p == '.') { /* Decimal point. */
|
||||
l = 100000000L;
|
||||
do {
|
||||
if (isdigit((unsigned char)*++p))
|
||||
time_to_sleep.tv_nsec += (*p - '0') * l;
|
||||
else
|
||||
break;
|
||||
} while (l /= 10);
|
||||
}
|
||||
|
||||
if (!neg && (time_to_sleep.tv_sec > 0 || time_to_sleep.tv_nsec > 0))
|
||||
(void)nanosleep(&time_to_sleep, (struct timespec *)NULL);
|
||||
|
||||
if ((secs = atoi(*argv)) > 0)
|
||||
(void)sleep(secs);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PROG= test
|
||||
SRCS= test.c operators.c
|
||||
LINKS= ${BINDIR}/test ${BINDIR}/[
|
||||
MLINKS= test.1 '[.1'
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* Copyright (c) 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@@ -32,80 +29,137 @@
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/ctype.h>
|
||||
#include <machine/limits.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)operators.c 8.3 (Berkeley) 4/2/94";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
* Convert a string to an unsigned quad integer.
|
||||
*
|
||||
* Ignores `locale' stuff. Assumes that the upper and lower case
|
||||
* alphabets and digits are each contiguous.
|
||||
* Operators used in the test command.
|
||||
*/
|
||||
u_quad_t
|
||||
strtouq(const char *nptr, char **endptr, int base)
|
||||
{
|
||||
const char *s = nptr;
|
||||
u_quad_t acc;
|
||||
unsigned char c;
|
||||
u_quad_t qbase, cutoff;
|
||||
int neg, any, cutlim;
|
||||
|
||||
/*
|
||||
* See strtoq for comments as to the logic used.
|
||||
*/
|
||||
s = nptr;
|
||||
do {
|
||||
c = *s++;
|
||||
} while (isspace(c));
|
||||
if (c == '-') {
|
||||
neg = 1;
|
||||
c = *s++;
|
||||
} else {
|
||||
neg = 0;
|
||||
if (c == '+')
|
||||
c = *s++;
|
||||
}
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
if (base == 0)
|
||||
base = c == '0' ? 8 : 10;
|
||||
qbase = (unsigned)base;
|
||||
cutoff = (u_quad_t)UQUAD_MAX / qbase;
|
||||
cutlim = (u_quad_t)UQUAD_MAX % qbase;
|
||||
for (acc = 0, any = 0;; c = *s++) {
|
||||
if (!isascii(c))
|
||||
break;
|
||||
if (isdigit(c))
|
||||
c -= '0';
|
||||
else if (isalpha(c))
|
||||
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
|
||||
else
|
||||
break;
|
||||
if (c >= base)
|
||||
break;
|
||||
if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
|
||||
any = -1;
|
||||
else {
|
||||
any = 1;
|
||||
acc *= qbase;
|
||||
acc += c;
|
||||
}
|
||||
}
|
||||
if (any < 0) {
|
||||
acc = UQUAD_MAX;
|
||||
} else if (neg)
|
||||
acc = -acc;
|
||||
if (endptr != 0)
|
||||
*((const char **)endptr) = any ? s - 1 : nptr;
|
||||
return (acc);
|
||||
}
|
||||
#include <stdio.h>
|
||||
|
||||
#include "operators.h"
|
||||
|
||||
const char *const unary_op[] = {
|
||||
"!",
|
||||
"-b",
|
||||
"-c",
|
||||
"-d",
|
||||
"-e",
|
||||
"-f",
|
||||
"-g",
|
||||
"-h",
|
||||
"-k",
|
||||
"-n",
|
||||
"-p",
|
||||
"-r",
|
||||
"-s",
|
||||
"-t",
|
||||
"-u",
|
||||
"-w",
|
||||
"-x",
|
||||
"-z",
|
||||
"-S",
|
||||
NULL
|
||||
};
|
||||
|
||||
const char *const binary_op[] = {
|
||||
"-o",
|
||||
"|",
|
||||
"-a",
|
||||
"&",
|
||||
"=",
|
||||
"!=",
|
||||
"-eq",
|
||||
"-ne",
|
||||
"-gt",
|
||||
"-lt",
|
||||
"-le",
|
||||
"-ge",
|
||||
NULL
|
||||
};
|
||||
|
||||
const char *const andor_op[] = {
|
||||
"-o",
|
||||
"|",
|
||||
"-a",
|
||||
"&",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
|
||||
const char op_priority[] = {
|
||||
3,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
12,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
2,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
4,
|
||||
};
|
||||
|
||||
const char op_argflag[] = {
|
||||
0,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_STRING,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_INT,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_FILE,
|
||||
OP_STRING,
|
||||
OP_FILE,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
OP_STRING,
|
||||
OP_STRING,
|
||||
OP_INT,
|
||||
OP_INT,
|
||||
OP_INT,
|
||||
OP_INT,
|
||||
OP_INT,
|
||||
OP_INT,
|
||||
};
|
||||
@@ -1,11 +1,6 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1988, 1991, 1993
|
||||
* Copyright (c) 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -35,26 +30,51 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)operators.h 8.3 (Berkeley) 4/2/94
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CTYPE_H_
|
||||
#define _SYS_CTYPE_H_
|
||||
#define NOT 0
|
||||
#define ISBLOCK 1
|
||||
#define ISCHAR 2
|
||||
#define ISDIR 3
|
||||
#define ISEXIST 4
|
||||
#define ISFILE 5
|
||||
#define ISSETGID 6
|
||||
#define ISSYMLINK 7
|
||||
#define ISSTICKY 8
|
||||
#define STRLEN 9
|
||||
#define ISFIFO 10
|
||||
#define ISREAD 11
|
||||
#define ISSIZE 12
|
||||
#define ISTTY 13
|
||||
#define ISSETUID 14
|
||||
#define ISWRITE 15
|
||||
#define ISEXEC 16
|
||||
#define NULSTR 17
|
||||
#define ISSOCK 18
|
||||
|
||||
#ifdef KERNEL
|
||||
#define FIRST_BINARY_OP 19
|
||||
#define OR1 FIRST_BINARY_OP
|
||||
#define OR2 (FIRST_BINARY_OP + 1)
|
||||
#define AND1 (FIRST_BINARY_OP + 2)
|
||||
#define AND2 (FIRST_BINARY_OP + 3)
|
||||
#define STREQ (FIRST_BINARY_OP + 4)
|
||||
#define STRNE (FIRST_BINARY_OP + 5)
|
||||
#define EQ (FIRST_BINARY_OP + 6)
|
||||
#define NE (FIRST_BINARY_OP + 7)
|
||||
#define GT (FIRST_BINARY_OP + 8)
|
||||
#define LT (FIRST_BINARY_OP + 9)
|
||||
#define LE (FIRST_BINARY_OP + 10)
|
||||
#define GE (FIRST_BINARY_OP + 11)
|
||||
|
||||
#define isspace(c) ((c) == ' ' || ((c) >= '\t' && (c) <= '\r'))
|
||||
#define isascii(c) (((c) & ~0x7f) == 0)
|
||||
#define isupper(c) ((c) >= 'A' && (c) <= 'Z')
|
||||
#define islower(c) ((c) >= 'a' && (c) <= 'z')
|
||||
#define isalpha(c) (isupper(c) || islower(c))
|
||||
#define isdigit(c) ((c) >= '0' && (c) <= '9')
|
||||
#define isxdigit(c) (isdigit(c) \
|
||||
|| ((c) >= 'A' && (c) <= 'F') \
|
||||
|| ((c) >= 'a' && (c) <= 'f'))
|
||||
|
||||
#define toupper(c) ((c) - 0x20 * (((c) >= 'a') && ((c) <= 'z')))
|
||||
#define tolower(c) ((c) + 0x20 * (((c) >= 'A') && ((c) <= 'Z')))
|
||||
#define OP_INT 1 /* arguments to operator are integer */
|
||||
#define OP_STRING 2 /* arguments to operator are string */
|
||||
#define OP_FILE 3 /* argument is a file name */
|
||||
|
||||
#endif /* KERNEL */
|
||||
#endif /* !_SYS_CTYPE_H_ */
|
||||
extern const char *const unary_op[];
|
||||
extern const char *const binary_op[];
|
||||
extern const char *const andor_op[];
|
||||
extern const char op_priority[];
|
||||
extern const char op_argflag[];
|
||||
+17
-72
@@ -39,17 +39,14 @@
|
||||
.Dt TEST 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm test ,
|
||||
.Nm \&[
|
||||
.Nm test
|
||||
.Nd condition evaluation utility
|
||||
.Sh SYNOPSIS
|
||||
.Nm test
|
||||
.Ar expression
|
||||
.Nm [
|
||||
.Ar expression Cm ]
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
utility evaluates the expression and, if it evaluates
|
||||
to true, returns a zero (true) exit status; otherwise
|
||||
it returns 1 (false).
|
||||
@@ -57,11 +54,11 @@ If there is no expression, test also
|
||||
returns 1 (false).
|
||||
.Pp
|
||||
All operators and flags are separate arguments to the
|
||||
.Nm test
|
||||
.Nm
|
||||
utility.
|
||||
.Pp
|
||||
The following primaries are used to construct expression:
|
||||
.Bl -tag -width Ar
|
||||
.Bl -tag -width indent
|
||||
.It Fl b Ar file
|
||||
True if
|
||||
.Ar file
|
||||
@@ -93,14 +90,6 @@ is set.
|
||||
True if
|
||||
.Ar file
|
||||
exists and is a symbolic link.
|
||||
This operator is retained for compatibility with previous versions of
|
||||
this program. Do not rely on its existence; use
|
||||
.Fl L
|
||||
instead.
|
||||
.It Fl k Ar file
|
||||
True if
|
||||
.Ar file
|
||||
exists and its sticky bit is set.
|
||||
.It Fl n Ar string
|
||||
True if the length of
|
||||
.Ar string
|
||||
@@ -110,20 +99,25 @@ True if
|
||||
.Ar file
|
||||
is a named pipe
|
||||
.Po Tn FIFO Pc .
|
||||
.It Fl S Ar file
|
||||
True if
|
||||
.Ar file
|
||||
is a socket.
|
||||
.It Fl r Ar file
|
||||
True if
|
||||
.Ar file
|
||||
.Ar file
|
||||
exists and is readable.
|
||||
.It Fl s Ar file
|
||||
True if
|
||||
.Ar file
|
||||
exists and has a size greater
|
||||
than zero.
|
||||
.It Fl t Op Ar file_descriptor
|
||||
.It Fl t Ar [file_descriptor]
|
||||
True if the file whose file descriptor number
|
||||
is
|
||||
.Ar file_descriptor
|
||||
is open and is associated with a terminal.
|
||||
(default 1) is open and is
|
||||
associated with a terminal.
|
||||
.It Fl u Ar file
|
||||
True if
|
||||
.Ar file
|
||||
@@ -152,38 +146,6 @@ can be searched.
|
||||
True if the length of
|
||||
.Ar string
|
||||
is zero.
|
||||
.It Fl L Ar file
|
||||
True if
|
||||
.Ar file
|
||||
exists and is a symbolic link.
|
||||
.It Fl O Ar file
|
||||
True if
|
||||
.Ar file
|
||||
exists and its owner matches the effective user id of this process.
|
||||
.It Fl G Ar file
|
||||
True if
|
||||
.Ar file
|
||||
exists and its group matches the effective group id of this process.
|
||||
.It Fl S Ar file
|
||||
True if
|
||||
.Ar file
|
||||
exists and is a socket.
|
||||
.It Ar file1 Fl nt Ar file2
|
||||
True if
|
||||
.Ar file1
|
||||
exists and is newer than
|
||||
.Ar file2 .
|
||||
.It Ar file1 Fl ot Ar file2
|
||||
True if
|
||||
.Ar file1
|
||||
exists and is older than
|
||||
.Ar file2 .
|
||||
.It Ar file1 Fl ef Ar file2
|
||||
True if
|
||||
.Ar file1
|
||||
and
|
||||
.Ar file2
|
||||
exist and refer to the same file.
|
||||
.It Ar string
|
||||
True if
|
||||
.Ar string
|
||||
@@ -201,23 +163,6 @@ True if the strings
|
||||
and
|
||||
.Ar \&s\&2
|
||||
are not identical.
|
||||
.It Ar \&s\&1 Cm \&< Ar \&s\&2
|
||||
True if string
|
||||
.Ar \&s\&1
|
||||
comes before
|
||||
.Ar \&s\&2
|
||||
based on the ASCII value of their characters.
|
||||
.It Ar \&s\&1 Cm \&> Ar \&s\&2
|
||||
True if string
|
||||
.Ar \&s\&1
|
||||
comes after
|
||||
.Ar \&s\&2
|
||||
based on the ASCII value of their characters.
|
||||
.It Ar \&s\&1
|
||||
True if
|
||||
.Ar \&s\&1
|
||||
is not the null
|
||||
string.
|
||||
.It Ar \&n\&1 Fl \&eq Ar \&n\&2
|
||||
True if the integers
|
||||
.Ar \&n\&1
|
||||
@@ -287,7 +232,7 @@ operator has higher precedence than the
|
||||
operator.
|
||||
.Sh GRAMMAR AMBIGUITY
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
grammar is inherently ambiguous. In order to assure a degree of consistency,
|
||||
the cases described in the
|
||||
.St -p1003.2 ,
|
||||
@@ -297,7 +242,7 @@ standards document. All other cases are subject to the ambiguity in the
|
||||
command semantics.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
utility exits with one of the following values:
|
||||
.Bl -tag -width Ds
|
||||
.It 0
|
||||
@@ -313,7 +258,7 @@ An error occurred.
|
||||
.Xr sh 1
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm test
|
||||
utility implements a superset of the
|
||||
.Nm
|
||||
function is expected to be
|
||||
.St -p1003.2
|
||||
specification.
|
||||
compatible.
|
||||
+543
-423
File diff suppressed because it is too large.
Load diff
@@ -32,10 +32,6 @@ for hesiod zone files. Always use /etc/amd.conf if exists.
|
||||
|
||||
August 8, 1998: add detection support for NFS V.3 for NetBSD 1.3F.
|
||||
|
||||
February 1, 1998: fixes for NetBSD to better detect its features.
|
||||
|
||||
September 4, 1999: assorted fixes for NetBSD 1.4+.
|
||||
|
||||
* Hannes Reinecke <[email protected]>
|
||||
|
||||
Back in 1995, contributed code for linux. A new parser for file system
|
||||
@@ -116,15 +112,6 @@ February 24, 1998: lots of patches for ultrix 4.3 port.
|
||||
|
||||
February 28, 1998: lots of documentation fixes!
|
||||
|
||||
January 8, 1999: texi fixes, and more Ultrix 4.3 fixes, among others.
|
||||
|
||||
January 11, 1999: hesiod_isup function. Fix format errors in dlog/plog.
|
||||
Remove obsolete or unnecessary files/macros. Don't report disabled file
|
||||
systems. More misc fixes.
|
||||
|
||||
February 3, 1998: don't start autofs listener unless autofs maps were in
|
||||
use.
|
||||
|
||||
* Jason Thorpe <[email protected]>
|
||||
|
||||
August 25, 1997: make amd work when talking to NIS+ servers in NIS
|
||||
@@ -167,8 +154,6 @@ November 5, 1997: NFS v.3 support for AIX 4.2.1, which does *not* include
|
||||
headers for this. Bill had to guess at the right structures, field names,
|
||||
sizes, alignment, etc.
|
||||
|
||||
January 15, 1999: small ldap bug fixes.
|
||||
|
||||
* Stefan Vogel <[email protected]>
|
||||
|
||||
November 14, 1997: typo in the subscription instructions to amd-dev.
|
||||
@@ -217,8 +202,6 @@ April 20, 1998: allow arbitrary number of interfaces in wire listing.
|
||||
September 4, 1998: bug fix to avoid overrunning hostname buffer, and minor
|
||||
amd.conf man page typo correction.
|
||||
|
||||
September 22, 1999: use more secure vsnprintf in real_plog().
|
||||
|
||||
* Danny Rathjens <[email protected]>
|
||||
|
||||
October 29, 1998: swap arguments to kill(2) in amd.c.
|
||||
@@ -232,45 +215,3 @@ of a looked up entry before unmounting it.
|
||||
* Douglas K. Rand" <[email protected]>
|
||||
|
||||
December 3, 1998: case insensitive host name match for nfsl.
|
||||
|
||||
* David Wolfskill <[email protected]>
|
||||
January 28, 1999: don't turn on/off noconn option if it was already in that
|
||||
state.
|
||||
|
||||
* Jeffrey C Honig <[email protected]>
|
||||
March 14, 1999: clean up more autogenerated files upon "make distclean".
|
||||
|
||||
March 15, 1999: avoid overly verbose NIS warning even on systems that don't
|
||||
run NIS. On BSD systems, wire.c uses getifaddrs(), sysctl(), IRS routines,
|
||||
and more fixes. Numerous IP packet security fixes.
|
||||
|
||||
March 16, 1999: documentation typos. new cdfs options. ufs structure
|
||||
detection for bsdi4.
|
||||
|
||||
September 17, 1999: fixes to expn.
|
||||
|
||||
* Paul Balyoz <[email protected]>
|
||||
March 26, 1999: ensure lostaltmail displays Y2K compliant dates.
|
||||
|
||||
* Jon Peatfield <[email protected]>
|
||||
March 30, 1999: turn off incomplete NFS V.3 support in HPUX 10.20.
|
||||
|
||||
September 22, 1999: safe reloading of maps without first clearing old
|
||||
copies, and using cached copies if map failed to reload.
|
||||
|
||||
* Peter Breitenlohner <[email protected]>
|
||||
July 24, 1999: patch for linux 2.2.x to work with older libc5 systems, and
|
||||
nis_isup mis-logic fixes.
|
||||
|
||||
* Dale Talcott <[email protected]>
|
||||
July 26, 1999: added NFS3 support for AIX mounting.
|
||||
|
||||
* Christophe Kalt <[email protected]>
|
||||
July 14, 1999: add netgrpd() syntax function which uses FQHN.
|
||||
|
||||
* Andrew J. Korty <[email protected]>
|
||||
September 5, 1999: pawd works for type:=nfsl.
|
||||
|
||||
* Nick Williams <[email protected]>
|
||||
September 1, 1999: bug fix for incorrect symlinks when two locations are
|
||||
requested simultaneously.
|
||||
+6
-42
@@ -5,7 +5,7 @@
|
||||
|
||||
(1) mips-sgi-irix*
|
||||
|
||||
[1A] known to have flaky NFS V.3 and TCP. Amd tends to hang or spin
|
||||
[1A] known to have flakey NFS V.3 and TCP. Amd tends to hang or spin
|
||||
infinitely after a few hours or days of use. Users must install recommended
|
||||
patches from vendor. Patches help, but not all the time. Otherwise avoid
|
||||
using NFS V.3 and TCP on these systems, by setting
|
||||
@@ -14,12 +14,9 @@ using NFS V.3 and TCP on these systems, by setting
|
||||
|
||||
[1B] yp_all() leaks a file descriptor. Eventually amd runs out of file
|
||||
descriptors and hangs. Am-utils circumvents this by using its own version
|
||||
of yp_all which uses udp and iterates over NIS maps. The latter isn't as
|
||||
of yp_all which uses udp and iterats over NIS maps. The latter isn't as
|
||||
reliable as yp_all() which uses TCP, but it is better than hanging.
|
||||
|
||||
(I have some reports that older version of hpux-9, with older libc, also
|
||||
leak file descriptors.)
|
||||
|
||||
|
||||
(2) alpha-unknown-linux-gnu (RedHat Linux 4.2)
|
||||
|
||||
@@ -39,35 +36,12 @@ main()
|
||||
exit(0);
|
||||
}
|
||||
|
||||
It is possible that sufficiently newer version of libc for RH4.2 fix this
|
||||
problem.
|
||||
|
||||
|
||||
(3) mips-dec-ultrix4.3
|
||||
|
||||
Rainer Orth <[email protected]> reports
|
||||
|
||||
[3A] One needs the Kernel Config Files (UDTBIN430) subset installed to
|
||||
compile am-utils, otherwise essential header files (net/if.h, net/route.h,
|
||||
rpcsvc/mount.h, rpcsvc/yp_prot.h, rpcsvc/ypclnt.h, sys/proc.h) are
|
||||
missing.
|
||||
|
||||
[3B] It's probably impossible to build am-utils with DEC C on Ultrix V4.3.
|
||||
This compiler is pseudo-ANSI only. Maybe the new ANSI C compiler in V4.3A
|
||||
and beyond will do. I successfully used gcc 2.8.1.
|
||||
|
||||
[3C] You need to build against a recent libhesiod (I used 3.0.2) and
|
||||
libresolv/lib44bsd (I used BIND 4.9.5-P1). The resolver routines in
|
||||
libc seem to cause random memory corruption. It is necessary to specify
|
||||
LIBS=-l44bsd. lib44bsd is a helper library of libresolv used to supply
|
||||
functions like strdup which are missing on the host system. This isn't
|
||||
currently autoconfiscated.
|
||||
|
||||
[3D] You need to configure with CONFIG_SHELL=/bin/sh5 /bin/sh5 buildall;
|
||||
/bin/sh cannot handle the shell functions used in buildall and is both
|
||||
buggy and slow.
|
||||
|
||||
[3E] At least the gcc 2.7.0 fixincludes-mangled <sys/utsname.h> needs a
|
||||
[3A] At least the gcc 2.7.0 fixincludes-mangled <sys/utsname.h> needs a
|
||||
forward declaration of struct utsname to avoid lots of gcc warnings:
|
||||
|
||||
RCS file: RCS/utsname.h,v
|
||||
@@ -84,6 +58,9 @@ diff -u -r1.1 utsname.h
|
||||
#endif
|
||||
#define __SYS_NMLN 32
|
||||
|
||||
[3B] It autoconfigures and compiles cleanly, but currently hangs after a
|
||||
couple of hours without leaving any traces in the syslog output.
|
||||
|
||||
|
||||
(4) powerpc-ibm-aix4.2.1.0
|
||||
|
||||
@@ -113,16 +90,3 @@ but it is not yet in the glibc-2.0.7-19 RPM.
|
||||
A bug in libc results in an amq binary that doesn't work; amq -v dumps core
|
||||
in xdr_string. There is no known fix (source code or vendor patch) at this
|
||||
time. (Please let amd-dev know if you know of a fix.)
|
||||
|
||||
|
||||
(7) *-aix4.3.2.0
|
||||
|
||||
The plock() function appears to fail with ENOMEM (Not Enough Space). When
|
||||
it fails, it consumes a lot of memory. This appears to be an AIX bug. I
|
||||
think plock returns an error code, but it partially succeeds to lock some
|
||||
pages, thus increasing memory consumption. When partial failures occur, it
|
||||
is possible that AIX fails to unlock those pages it did lock. Solution:
|
||||
turn off usage of plock on AIX. Put plock=no in your amd.conf file (which
|
||||
is the default if you do nothing).
|
||||
|
||||
Erez.
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 1997-1999 Erez Zadok
|
||||
Copyright (c) 1997-1998 Erez Zadok
|
||||
Copyright (c) 1989 Jan-Simon Pendry
|
||||
Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
Copyright (c) 1989 The Regents of the University of California.
|
||||
|
||||
+9
-2811
File diff suppressed because it is too large.
Load diff
@@ -10,7 +10,6 @@ SYSTEM AUTOCONF COMPILE RUN SHLIB
|
||||
alpha-dec-osf2.1 ezk ezk ezk !ezk
|
||||
alpha-dec-osf4.0 ezk ezk dsr[3] ezk
|
||||
alphaev5-unknown-linux-gnu ezk ezk finkel ezk
|
||||
alphaev5-unknown-linux-gnu-rh5.2 ezk ezk ezk ezk
|
||||
hppa1.0-hp-hpux11.00 ezk ezk ezk
|
||||
hppa1.1-hp-hpux10.10 ezk ezk ezk ezk
|
||||
hppa1.1-hp-hpux10.20 ezk ezk ezk ezk
|
||||
@@ -22,7 +21,6 @@ i386-pc-bsdi2.1 ezk ezk ezk !ezk
|
||||
i386-pc-bsdi3.0 ezk ezk ezk !ezk
|
||||
i386-pc-bsdi3.1 ezk ezk ezk !ezk
|
||||
i386-pc-bsdi4.0 ezk ezk ezk ezk
|
||||
i386-pc-bsdi4.0.1 ezk ezk ezk ezk
|
||||
i386-pc-solaris2.5.1 ezk ezk ezk ezk
|
||||
i386-pc-solaris2.6 ezk ezk ezk ezk
|
||||
i386-pc-solaris2.7 ezk ezk ezk ezk
|
||||
@@ -32,36 +30,21 @@ i386-unknown-freebsd2.2.6 ezk ezk ezk ezk
|
||||
i386-unknown-freebsd2.2.7 ezk ezk ezk ezk
|
||||
i386-unknown-freebsd2.2.8 ezk ezk ezk ezk
|
||||
i386-unknown-freebsd3.0 ezk ezk ezk ezk
|
||||
i386-unknown-freebsdelf3.0 ezk ezk ezk ezk
|
||||
i386-unknown-freebsdelf3.1 ezk ezk ezk ezk
|
||||
i386-unknown-freebsdelf3.2 ezk ezk ezk ezk
|
||||
i386-unknown-freebsdelf3.3 ezk ezk ezk ezk
|
||||
i386-unknown-freebsdelf4.0 ezk ezk ezk ezk
|
||||
i386-unknown-netbsd1.2.1 ezk ezk ezk ezk
|
||||
i386-unknown-netbsd1.3 ezk ezk ezk ezk
|
||||
i386-unknown-netbsd1.3.1 ezk ezk ezk ezk
|
||||
i386-unknown-netbsd1.3.2 ezk ezk ezk ezk
|
||||
i386-unknown-netbsd1.3.3 ezk ezk ezk ezk
|
||||
i386-unknown-netbsd1.4 ezk ezk ezk ezk
|
||||
i386-unknown-openbsd2.1 ezk ezk ezk ezk
|
||||
i386-unknown-openbsd2.2 ezk ezk ezk ezk
|
||||
i386-unknown-openbsd2.3 ezk ezk ezk ezk
|
||||
i386-unknown-openbsd2.4 ezk ezk ezk ezk
|
||||
i386-unknown-openbsd2.5 ezk ezk ezk ezk
|
||||
i486-ncr-sysv4.3.03 ezk ezk ezk
|
||||
i486-pc-linux-gnu-rh6.0 ezk ezk ezk ezk
|
||||
i486-pc-linux-gnulibc1 ezk ezk ezk ezk
|
||||
i486-pc-linux-gnulibc1-rh4.2 ezk ezk ezk ezk
|
||||
i486-pc-linux-gnuoldld ezk ezk ezk ezk
|
||||
i586-pc-linux-gnu ezk ezk ezk ezk
|
||||
i586-pc-linux-gnu-rh5.2 ezk ezk ezk ezk
|
||||
i586-pc-linux-gnu-rh6.0 ezk ezk ezk ezk
|
||||
i586-pc-linux-gnu-rh6.1 ezk ezk ezk ezk
|
||||
i586-pc-linux-gnulibc1 ezk ezk ezk ezk
|
||||
i586-pc-linux-gnulibc1-rh4.2 ezk ezk ezk ezk
|
||||
i686-pc-linux-gnu ezk ezk ezk ezk
|
||||
i686-pc-linux-gnu-rh5.2 ezk ezk ezk ezk
|
||||
i686-pc-linux-gnu-rh6.0 ezk ezk ezk ezk
|
||||
i686-pc-linux-gnulibc ezk ezk ezk ezk
|
||||
i686-pc-linux-gnulibc1 ezk ezk ezk ezk
|
||||
m68k-hp-hpux9.00 ezk[4] ezk[4] nrh/ezk
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Begin3
|
||||
Title: am-utils
|
||||
Version: 6.0.1
|
||||
Entered-date: 08SEP99
|
||||
Version: 6.0
|
||||
Entered-date: 01JAN99
|
||||
Description: BSD Automounter Utilities
|
||||
Replaces the old amd-upl102. Offers NFS V3 support, many
|
||||
new features, and numerous ports. The home page for
|
||||
@@ -10,9 +10,9 @@ Keywords: amd amq hlfsd fsinfo wire-test fixmount mk-amd-map automount
|
||||
Author: [email protected] (Erez Zadok)
|
||||
Maintained-by: [email protected] (Erez Zadok)
|
||||
Primary-site: shekel.mcl.cs.columbia.edu /pub/am-utils
|
||||
1.3MB am-utils-6.0.1.tar.gz
|
||||
1.3MB am-utils.tar.gz
|
||||
1.3MB am-utils-snapshot.tar.gz
|
||||
1.6MB am-utils-6.0.tar.gz
|
||||
1.6MB am-utils.tar.gz
|
||||
1.6MB am-utils-snapshot.tar.gz
|
||||
Alternate-site: http://www.cs.columbia.edu/~ezk/am-utils/mirrors.html
|
||||
Original-site: ftp.cs.columbia.edu /pub/amd
|
||||
Platforms: all modern Unix systems
|
||||
|
||||
+4
-8
@@ -12,12 +12,11 @@ U.S.A:
|
||||
ftp://shekel.mcl.cs.columbia.edu/pub/am-utils
|
||||
Maintainer: [email protected]
|
||||
Minnesota:
|
||||
ftp://ftp.cs.umn.edu/pub/am-utils
|
||||
ftp://ftp.cs.umn.edu/pub/AMD
|
||||
Maintainer: [email protected]
|
||||
Virginia (Newport News):
|
||||
ftp://ftp.ferginc.com/pub/unix/am-utils
|
||||
ftp://www.ferginc.com/pub/unix/am-utils
|
||||
Maintainer: [email protected]
|
||||
Avoid for now: empty directory
|
||||
Ohio (Kent State University):
|
||||
ftp://info.mcs.kent.edu/pub/am-utils
|
||||
Maintainer: [email protected]
|
||||
@@ -26,14 +25,11 @@ Europe:
|
||||
Germany:
|
||||
ftp://ftp.fu-berlin.de/pub/unix/network/am-utils
|
||||
Maintainer: [email protected]
|
||||
Germany:
|
||||
ftp://ftp.tu-darmstadt.de/pub/networking/filesystems/am-utils/
|
||||
Maintainer: [email protected]
|
||||
Sweden:
|
||||
ftp://ftp.sunet.se/pub/unix/admin/am-utils
|
||||
Maintainer: [email protected]
|
||||
Sweden (Stockholm University, Math Depat):
|
||||
ftp://mirror.matematik.su.se/pub/am-utils
|
||||
Sweden:
|
||||
ftp://ftp.matematik.su.se/pub/mirrors/shekel.mcl.cs.columbia.edu/pub/am-utils
|
||||
Maintainer: [email protected]
|
||||
UK:
|
||||
ftp://sunsite.org.uk/packages/am-utils
|
||||
|
||||
@@ -1,89 +1,3 @@
|
||||
# -*- text -*-
|
||||
|
||||
*** Notes specific to am-utils version 6.0.2:
|
||||
|
||||
- safe map reloads: when a map needs to be reloaded, it is reloaded into a
|
||||
temporary copy first. Only if the reload was completely successful, Amd
|
||||
discards the old map and uses the new one. Otherwise Amd continues to use
|
||||
the old maps. This should help a lot with transient NIS problems.
|
||||
|
||||
- amq -f now also forces a (safe) map reload, but only if the timestamp on
|
||||
the maps was updated.
|
||||
|
||||
- two new selector variables: ${vendor} and ${full_os}, which are the same
|
||||
as the output seen in "amd -v".
|
||||
|
||||
- documentation fixes and updates
|
||||
|
||||
- updated or minor new ports:
|
||||
i386-unknown-freebsdelf3.3
|
||||
|
||||
- support 'ignore' flags (automntfs) in bsdi-4.1
|
||||
|
||||
- bugs fixed:
|
||||
expn.pl uses correct sockaddr_in() not, pack()
|
||||
make sure configure --enable-*args take an argument
|
||||
don't busy-loop trying to rebind to ldap servers
|
||||
use vsnprintf, not vsprintf (security)
|
||||
|
||||
*** Notes specific to am-utils version 6.0.1:
|
||||
|
||||
- updated or minor new ports:
|
||||
i386-pc-bsdi4.0.1
|
||||
i386-unknown-freebsdelf3.0
|
||||
i386-unknown-freebsdelf3.1
|
||||
i386-unknown-freebsdelf3.2
|
||||
i386-unknown-freebsdelf4.0
|
||||
i386-unknown-netbsd1.4
|
||||
i386-unknown-openbsd2.5
|
||||
powerpc-unknown-linux-gnu
|
||||
|
||||
- automount2amd added, a new script to convert Sun automount maps to Amd maps
|
||||
|
||||
- new map function netgrpd(ARG), same as netgrp() but matches FQHN
|
||||
|
||||
- 'ignore' is a generic mount option
|
||||
|
||||
- hesiod info service isup() function to check if service is up
|
||||
|
||||
- more Y2K fixes (see README.y2k for the full story)
|
||||
|
||||
- using alloca.c on systems that don't have it (hpux9 with /bin/cc)
|
||||
|
||||
- configure script reduced in size by using M4/sh loops instead of repeated
|
||||
entries
|
||||
|
||||
- documentation updates
|
||||
|
||||
- too many bugs fixed to list here:
|
||||
'addopts' option works with 'remopts' as well as 'opts'
|
||||
AIX can perform NFS V.3 mounts explicitly
|
||||
NIS is_up fixed, especially for NIS+ running in compatibility mode
|
||||
amd -v incorrectly listing file systems that don't really work
|
||||
amd's own mounts use reserved ports if possible
|
||||
browsable directories works for Linux 2.3 (NFS cookies)
|
||||
bsd44 systems check for isofs flags
|
||||
bsd44 systems check for new options: norrio, gens, and extatt
|
||||
buildall works better on Ultrix's /bin/sh
|
||||
compile and build on Linux kernels 2.2 and newer
|
||||
compile and build on RedHat Linux 6.0 (glibc 2.1)
|
||||
compile and build on Solaris 7 (with or without vendor LDAP)
|
||||
completely eliminate all of amd's amq -M code, when not enabled
|
||||
correctly interpret failure code of unmount of type:=program
|
||||
don't create autofs listener service unless used
|
||||
don't list or process amq's -M option unless feature was turned on
|
||||
don't turn on/off noconn option if it was already in that state
|
||||
ldap info service: don't strcmp null strings
|
||||
lostaltmail correctly sets struct sockaddr_in
|
||||
make sure Linux systems have configured kernel headers
|
||||
test for bsize/namlen fields in nfs_args (linux mount versions 2/3)
|
||||
turn off broken NFS V.3 support for HPUX
|
||||
use getifaddrs() on bsd44 systems makes wire.c more reliable
|
||||
use matching NFS rsize/wsize on Linux 2.0 and 2.[123] kernels.
|
||||
verify that RPC requests come from reserved, privileged local ports
|
||||
warn when Linux kernel headers mismatch with running kernel
|
||||
pawd works for type:=nfsl too
|
||||
|
||||
*** Notes specific to am-utils version 6.0:
|
||||
|
||||
- updated or minor new ports:
|
||||
|
||||
@@ -12,17 +12,6 @@ the ctime(3) call.
|
||||
However, on Friday, September 18th 1998, Matthew Crosby <[email protected]>
|
||||
reported that they evaluated 6.0a16 and found it to be compliant.
|
||||
|
||||
On March 26, 1999, Paul Balyoz <[email protected]> submitted a
|
||||
patch to lostaltmail which makes it print Y2K compliant dates. He used a
|
||||
code scanner and manually "eyeballed" the code and could not find any more
|
||||
problems. Paul's patch is included in am-utils-6.0.1s7 and newer versions.
|
||||
Paul also said that other 2-digit years used in am-utils are "harmless."
|
||||
|
||||
|
||||
NOTE: NONE OF THE PERSONS MENTIONED HERE, AUTHOR INCLUDED, ARE WILLING TO
|
||||
CERTIFY AM-UTILS AS Y2K COMPLIANT. USE AT YOUR OWN RISK.
|
||||
|
||||
---
|
||||
Erez Zadok.
|
||||
Maintainer, am-utils package and AMD-DEV list.
|
||||
Email: [email protected]
|
||||
|
||||
+10
-27
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: am_ops.c,v 1.4 1999/03/13 17:03:26 ezk Exp $
|
||||
* $Id: am_ops.c,v 1.2 1998/12/27 06:24:45 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -164,7 +164,7 @@ ops_showamfstypes(char *buf)
|
||||
if (ap[1])
|
||||
strcat(buf, ", ");
|
||||
l += strlen((*ap)->fs_type) + 2;
|
||||
if (l > 62) {
|
||||
if (l > 60) {
|
||||
l = 0;
|
||||
strcat(buf, "\n ");
|
||||
}
|
||||
@@ -413,32 +413,15 @@ ops_match(am_opts *fo, char *key, char *g_key, char *path, char *keym, char *map
|
||||
|
||||
/*
|
||||
* If addopts option was used, then append it to the
|
||||
* current options and remote mount options.
|
||||
* current options.
|
||||
*/
|
||||
if (fo->opt_addopts) {
|
||||
if (STREQ(fo->opt_opts, fo->opt_remopts)) {
|
||||
/* optimize things for the common case where opts==remopts */
|
||||
char *mergedstr;
|
||||
mergedstr = merge_opts(fo->opt_opts, fo->opt_addopts);
|
||||
plog(XLOG_USER, "merge rem/opts \"%s\" add \"%s\" => \"%s\"",
|
||||
fo->opt_opts, fo->opt_addopts, mergedstr);
|
||||
XFREE(fo->opt_opts);
|
||||
XFREE(fo->opt_remopts);
|
||||
fo->opt_opts = mergedstr;
|
||||
fo->opt_remopts = strdup(mergedstr);
|
||||
} else {
|
||||
char *mergedstr, *remmergedstr;
|
||||
mergedstr = merge_opts(fo->opt_opts, fo->opt_addopts);
|
||||
plog(XLOG_USER, "merge opts \"%s\" add \"%s\" => \"%s\"",
|
||||
fo->opt_opts, fo->opt_addopts, mergedstr);
|
||||
XFREE(fo->opt_opts);
|
||||
fo->opt_opts = mergedstr;
|
||||
remmergedstr = merge_opts(fo->opt_remopts, fo->opt_addopts);
|
||||
plog(XLOG_USER, "merge remopts \"%s\" add \"%s\" => \"%s\"",
|
||||
fo->opt_remopts, fo->opt_addopts, remmergedstr);
|
||||
XFREE(fo->opt_remopts);
|
||||
fo->opt_remopts = remmergedstr;
|
||||
}
|
||||
char *mergedstr;
|
||||
mergedstr = merge_opts(fo->opt_opts, fo->opt_addopts);
|
||||
plog(XLOG_USER, "merge opts \"%s\" add \"%s\" => \"%s\"",
|
||||
fo->opt_opts, fo->opt_addopts, mergedstr);
|
||||
XFREE(fo->opt_opts);
|
||||
fo->opt_opts = mergedstr;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+8
-17
@@ -1,5 +1,5 @@
|
||||
.\"
|
||||
.\" Copyright (c) 1997-1999 Erez Zadok
|
||||
.\" Copyright (c) 1997-1998 Erez Zadok
|
||||
.\" Copyright (c) 1989 Jan-Simon Pendry
|
||||
.\" Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
.\" Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,8 +38,7 @@
|
||||
.\"
|
||||
.\" %W% (Berkeley) %G%
|
||||
.\"
|
||||
.\" $Id: amd.8,v 1.3 1999/09/30 21:01:29 ezk Exp $
|
||||
.\" $FreeBSD$
|
||||
.\" $Id: amd.8,v 1.2 1998/09/05 05:52:24 obrien Exp $
|
||||
.\"
|
||||
.Dd April 19, 1994
|
||||
.Dt AMD 8
|
||||
@@ -60,7 +59,7 @@
|
||||
.Ek
|
||||
.Op Fl l Ar logfile
|
||||
.Op Fl o Ar op_sys_ver
|
||||
.Op Fl t Ar timeout.retransmit
|
||||
.Op Fl t Ar interval.interval
|
||||
.Bk -words
|
||||
.Op Fl w Ar interval
|
||||
.Ek
|
||||
@@ -175,21 +174,13 @@ been auto-mounted,
|
||||
.Nm amd
|
||||
.Em inherits
|
||||
it.
|
||||
.It Fl t Ar timeout.retransmit
|
||||
Specify the NFS timeout
|
||||
.It Fl t Ar interval.interval
|
||||
Specify the
|
||||
.Ar interval ,
|
||||
in tenths of a second, between
|
||||
.Tn NFS/RPC
|
||||
retries (for UDP only). The default
|
||||
is 0.8 seconds. The second value alters the restransmit counter, which
|
||||
defaults to 11 retransmissions. Both of these values are used by the kernel
|
||||
to communicate with amd. Useful defaults are supplied if either or both
|
||||
values are missing.
|
||||
.Pp
|
||||
Amd relies on the kernel RPC retransmit mechanism to trigger mount retries.
|
||||
The values of these parameters change the overall retry interval. Too long
|
||||
an interval gives poor interactive response; too short an interval causes
|
||||
excessive retries.
|
||||
.Tn NFS/RPC/UDP
|
||||
retries. The default is 0.8 seconds. The second values alters the retransmit
|
||||
counter. Useful defaults are supplied if either or both values are missing.
|
||||
.It Fl v
|
||||
Version. Displays version and configuration information on standard error.
|
||||
.It Fl w Ar interval
|
||||
|
||||
+15
-21
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,8 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amd.c,v 1.6 1999/09/30 21:01:29 ezk Exp $
|
||||
* $FreeBSD$
|
||||
* $Id: amd.c,v 1.3 1998/11/14 03:13:19 obrien Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -56,7 +55,13 @@
|
||||
struct amu_global_options gopt; /* where global options are stored */
|
||||
|
||||
char pid_fsname[16 + MAXHOSTNAMELEN]; /* "kiska.southseas.nz:(pid%d)" */
|
||||
#if 0
|
||||
char *progname; /* "amd" */
|
||||
#endif
|
||||
char *hostdomain = "unknown.domain";
|
||||
#if 0
|
||||
char hostname[MAXHOSTNAMELEN + 1] = "localhost"; /* Hostname */
|
||||
#endif
|
||||
char hostd[2 * MAXHOSTNAMELEN + 1]; /* Host+domain */
|
||||
char *endian = ARCH_ENDIAN; /* Big or Little endian */
|
||||
char *cpu = HOST_CPU; /* CPU type */
|
||||
@@ -68,6 +73,11 @@ int orig_umask = 022;
|
||||
int select_intr_valid;
|
||||
|
||||
jmp_buf select_intr;
|
||||
#if 0
|
||||
pid_t mypid; /* Current process id */
|
||||
serv_state amd_state;
|
||||
int foreground = 1; /* This is the top-level server */
|
||||
#endif
|
||||
struct amd_stats amd_stats; /* Server statistics */
|
||||
struct in_addr myipaddr; /* (An) IP address of this host */
|
||||
time_t do_mapc_reload = 0; /* mapc_reload() call required? */
|
||||
@@ -249,12 +259,6 @@ init_global_options(void)
|
||||
/* OS version */
|
||||
gopt.op_sys_ver = HOST_OS_VERSION;
|
||||
|
||||
/* full OS name and version */
|
||||
gopt.op_sys_full = HOST_OS;
|
||||
|
||||
/* OS version */
|
||||
gopt.op_sys_vendor = HOST_VENDOR;
|
||||
|
||||
/* pid file */
|
||||
gopt.pid_file = "/dev/stdout";
|
||||
|
||||
@@ -486,7 +490,7 @@ main(int argc, char *argv[])
|
||||
* can mount the automounter.
|
||||
*/
|
||||
amu_get_myaddress(&myipaddr);
|
||||
plog(XLOG_INFO, "My ip addr is %s", inet_ntoa(myipaddr));
|
||||
plog(XLOG_INFO, "My ip addr is 0x%x", htonl(myipaddr.s_addr));
|
||||
|
||||
/* avoid hanging on other NFS servers if started elsewhere */
|
||||
if (chdir("/") < 0)
|
||||
@@ -496,7 +500,7 @@ main(int argc, char *argv[])
|
||||
* Now check we are root.
|
||||
*/
|
||||
if (geteuid() != 0) {
|
||||
plog(XLOG_FATAL, "Must be root to mount filesystems (euid = %ld)", (long) geteuid());
|
||||
plog(XLOG_FATAL, "Must be root to mount filesystems (euid = %d)", geteuid());
|
||||
going_down(1);
|
||||
}
|
||||
|
||||
@@ -505,16 +509,6 @@ main(int argc, char *argv[])
|
||||
*/
|
||||
#ifdef HAVE_PLOCK
|
||||
if (gopt.flags & CFM_PROCESS_LOCK) {
|
||||
# ifdef _AIX
|
||||
/*
|
||||
* On AIX you must lower the stack size using ulimit() before calling
|
||||
* plock. Otherwise plock will reserve a lot of memory space based on
|
||||
* your maximum stack size limit. Since it is not easily possible to
|
||||
* tell what should the limit be, I print a warning before calling
|
||||
* plock(). See the manual pages for ulimit(1,3,4) on your AIX system.
|
||||
*/
|
||||
plog(XLOG_WARNING, "AIX: may need to lower stack size using ulimit(3) before calling plock");
|
||||
# endif /* _AIX */
|
||||
if (plock(PROCLOCK) != 0) {
|
||||
plog(XLOG_WARNING, "Couldn't lock process text and data segment in memory: %m");
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amd.h,v 1.4 1999/09/30 21:01:29 ezk Exp $
|
||||
* $Id: amd.h,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -106,10 +106,8 @@ struct amu_global_options {
|
||||
char *cluster; /* cluster name */
|
||||
char *karch; /* kernel architecture */
|
||||
char *logfile; /* amd log file */
|
||||
char *op_sys; /* operating system name ${os} */
|
||||
char *op_sys_ver; /* OS version ${osver} */
|
||||
char *op_sys_full; /* full OS name ${full_os} */
|
||||
char *op_sys_vendor; /* name of OS vendor ${vendor} */
|
||||
char *op_sys; /* operating system name */
|
||||
char *op_sys_ver; /* OS version */
|
||||
char *pid_file; /* PID file */
|
||||
char *sub_domain; /* local domain */
|
||||
char *map_options; /* global map options */
|
||||
@@ -165,7 +163,6 @@ struct mnt_map {
|
||||
short flags; /* Allocation flags */
|
||||
short alloc; /* Allocation mode */
|
||||
time_t modify; /* Modify time of map */
|
||||
u_int reloads; /* Number of times map was reloaded */
|
||||
char *map_name; /* Name of this map */
|
||||
char *wildcard; /* Wildcard value */
|
||||
reload_fn *reload; /* Function to be used for reloads */
|
||||
@@ -283,7 +280,6 @@ extern bool_t xdr_mountres3(XDR *xdrs, mountres3 *objp);
|
||||
#ifdef HAVE_FS_AUTOFS
|
||||
extern SVCXPRT *autofsxprt;
|
||||
extern u_short autofs_port;
|
||||
extern int amd_use_autofs;
|
||||
|
||||
extern int autofs_mount(am_node *mp);
|
||||
extern int autofs_umount(am_node *mp);
|
||||
|
||||
+78
-87
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_auto.c,v 1.5 1999/09/30 21:01:29 ezk Exp $
|
||||
* $Id: amfs_auto.c,v 1.1.1.1 1998/11/05 02:04:46 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -60,13 +60,12 @@
|
||||
/* DEVELOPERS: turn this on for special debugging of readdir code */
|
||||
#undef DEBUG_READDIR
|
||||
|
||||
#define DOT_DOT_COOKIE (u_int) 1
|
||||
|
||||
/****************************************************************************
|
||||
*** STRUCTURES ***
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
*** FORWARD DEFINITIONS ***
|
||||
****************************************************************************/
|
||||
@@ -449,59 +448,59 @@ try_mount(voidp mvp)
|
||||
* Pick a file system to try mounting and
|
||||
* do that in the background if necessary
|
||||
*
|
||||
For each location:
|
||||
if it is new -defaults then
|
||||
extract and process
|
||||
continue;
|
||||
fi
|
||||
if it is a cut then
|
||||
if a location has been tried then
|
||||
break;
|
||||
fi
|
||||
continue;
|
||||
fi
|
||||
parse mount location
|
||||
discard previous mount location if required
|
||||
find matching mounted filesystem
|
||||
if not applicable then
|
||||
this_error = No such file or directory
|
||||
continue
|
||||
fi
|
||||
if the filesystem failed to be mounted then
|
||||
this_error = error from filesystem
|
||||
elif the filesystem is mounting or unmounting then
|
||||
this_error = -1
|
||||
elif the fileserver is down then
|
||||
this_error = -1
|
||||
elif the filesystem is already mounted
|
||||
this_error = 0
|
||||
break
|
||||
fi
|
||||
if no error on this mount then
|
||||
this_error = initialize mount point
|
||||
fi
|
||||
if no error on this mount and mount is delayed then
|
||||
this_error = -1
|
||||
fi
|
||||
if this_error < 0 then
|
||||
retry = true
|
||||
fi
|
||||
if no error on this mount then
|
||||
make mount point if required
|
||||
fi
|
||||
if no error on this mount then
|
||||
if mount in background then
|
||||
run mount in background
|
||||
return -1
|
||||
else
|
||||
this_error = mount in foreground
|
||||
fi
|
||||
fi
|
||||
if an error occurred on this mount then
|
||||
update stats
|
||||
save error in mount point
|
||||
fi
|
||||
endfor
|
||||
For each location:
|
||||
if it is new -defaults then
|
||||
extract and process
|
||||
continue;
|
||||
fi
|
||||
if it is a cut then
|
||||
if a location has been tried then
|
||||
break;
|
||||
fi
|
||||
continue;
|
||||
fi
|
||||
parse mount location
|
||||
discard previous mount location if required
|
||||
find matching mounted filesystem
|
||||
if not applicable then
|
||||
this_error = No such file or directory
|
||||
continue
|
||||
fi
|
||||
if the filesystem failed to be mounted then
|
||||
this_error = error from filesystem
|
||||
elif the filesystem is mounting or unmounting then
|
||||
this_error = -1
|
||||
elif the fileserver is down then
|
||||
this_error = -1
|
||||
elif the filesystem is already mounted
|
||||
this_error = 0
|
||||
break
|
||||
fi
|
||||
if no error on this mount then
|
||||
this_error = initialize mount point
|
||||
fi
|
||||
if no error on this mount and mount is delayed then
|
||||
this_error = -1
|
||||
fi
|
||||
if this_error < 0 then
|
||||
retry = true
|
||||
fi
|
||||
if no error on this mount then
|
||||
make mount point if required
|
||||
fi
|
||||
if no error on this mount then
|
||||
if mount in background then
|
||||
run mount in background
|
||||
return -1
|
||||
else
|
||||
this_error = mount in foreground
|
||||
fi
|
||||
fi
|
||||
if an error occurred on this mount then
|
||||
update stats
|
||||
save error in mount point
|
||||
fi
|
||||
endfor
|
||||
*/
|
||||
static int
|
||||
amfs_auto_bgmount(struct continuation * cp, int mpe)
|
||||
@@ -610,8 +609,8 @@ amfs_auto_bgmount(struct continuation * cp, int mpe)
|
||||
* Don't try logging the string from mf, since it may be bad!
|
||||
*/
|
||||
if (cp->fs_opts.opt_fs != mf->mf_fo->opt_fs)
|
||||
plog(XLOG_ERROR, "use %s instead of 0x%lx",
|
||||
cp->fs_opts.opt_fs, (unsigned long) mf->mf_fo->opt_fs);
|
||||
plog(XLOG_ERROR, "use %s instead of 0x%x",
|
||||
cp->fs_opts.opt_fs, mf->mf_fo->opt_fs);
|
||||
|
||||
mp->am_link = str3cat((char *) 0,
|
||||
cp->fs_opts.opt_fs, "/", link_dir);
|
||||
@@ -696,7 +695,7 @@ amfs_auto_bgmount(struct continuation * cp, int mpe)
|
||||
int i = atoi(mf->mf_fo->opt_delay);
|
||||
if (i > 0 && clocktime() < (cp->start + i)) {
|
||||
#ifdef DEBUG
|
||||
dlog("Mount of %s delayed by %lds", mf->mf_mount, (long) (i - clocktime() + cp->start));
|
||||
dlog("Mount of %s delayed by %ds", mf->mf_mount, i - clocktime() + cp->start);
|
||||
#endif /* DEBUG */
|
||||
this_error = -1;
|
||||
}
|
||||
@@ -706,10 +705,6 @@ amfs_auto_bgmount(struct continuation * cp, int mpe)
|
||||
if (!mf_retry)
|
||||
mf_retry = dup_mntfs(mf);
|
||||
cp->retry = TRUE;
|
||||
#ifdef DEBUG
|
||||
dlog("will retry ...\n");
|
||||
#endif /* DEBUG */
|
||||
break;
|
||||
}
|
||||
|
||||
if (!this_error) {
|
||||
@@ -769,9 +764,8 @@ amfs_auto_bgmount(struct continuation * cp, int mpe)
|
||||
* Rewind the location vector and
|
||||
* reset the default options.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
dlog("(skipping rewind)\n");
|
||||
#endif /* DEBUG */
|
||||
cp->ivec = cp->xivec;
|
||||
cp->def_opts = strealloc(cp->def_opts, cp->auto_opts);
|
||||
/*
|
||||
* Arrange that amfs_auto_bgmount is called
|
||||
* after anything else happens.
|
||||
@@ -998,7 +992,7 @@ amfs_auto_lookuppn(am_node *mp, char *fname, int *error_return, int op)
|
||||
if (error) {
|
||||
#ifdef DEBUG
|
||||
errno = error; /* XXX */
|
||||
dlog("Returning error: %m");
|
||||
dlog("Returning error: %m", error);
|
||||
#endif /* DEBUG */
|
||||
XFREE(fname);
|
||||
ereturn(error);
|
||||
@@ -1327,7 +1321,7 @@ amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, i
|
||||
* fairly unbelievable) then tough.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
dlog("amfs_auto_readdir: default search");
|
||||
dlog("default search");
|
||||
#endif /* DEBUG */
|
||||
/*
|
||||
* Check for enough room. This is extremely approximate but is more
|
||||
@@ -1356,7 +1350,8 @@ amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, i
|
||||
ep[1].ne_fileid = mp->am_gen;
|
||||
ep[1].ne_name = "..";
|
||||
ep[1].ne_nextentry = 0;
|
||||
*(u_int *) ep[1].ne_cookie = (xp ? xp->am_gen : DOT_DOT_COOKIE);
|
||||
*(u_int *) ep[1].ne_cookie =
|
||||
xp ? xp->am_gen : ~(u_int) 0;
|
||||
|
||||
if (!xp)
|
||||
dp->dl_eof = TRUE; /* by default assume readdir done */
|
||||
@@ -1364,12 +1359,12 @@ amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, i
|
||||
return 0;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
dlog("amfs_auto_readdir: real child");
|
||||
dlog("real child");
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (gen == DOT_DOT_COOKIE) {
|
||||
if (gen == ~(u_int) 0) {
|
||||
#ifdef DEBUG
|
||||
dlog("amfs_auto_readdir: End of readdir in %s", mp->am_path);
|
||||
dlog("End of readdir in %s", mp->am_path);
|
||||
#endif /* DEBUG */
|
||||
dp->dl_eof = TRUE;
|
||||
dp->dl_entries = 0;
|
||||
@@ -1384,7 +1379,6 @@ amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, i
|
||||
if (xp) {
|
||||
int nbytes = count / 2; /* conservative */
|
||||
int todo = MAX_READDIR_ENTRIES;
|
||||
|
||||
dp->dl_entries = ep;
|
||||
do {
|
||||
am_node *xp_next = next_nonerror_node(xp->am_osib);
|
||||
@@ -1392,7 +1386,7 @@ amfs_auto_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, i
|
||||
if (xp_next) {
|
||||
*(u_int *) ep->ne_cookie = xp_next->am_gen;
|
||||
} else {
|
||||
*(u_int *) ep->ne_cookie = DOT_DOT_COOKIE;
|
||||
*(u_int *) ep->ne_cookie = ~(u_int) 0;
|
||||
dp->dl_eof = TRUE;
|
||||
}
|
||||
|
||||
@@ -1450,7 +1444,7 @@ amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsen
|
||||
* fairly unbelievable) then tough.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
dlog("amfs_auto_readdir_browsable: default search");
|
||||
dlog("default search");
|
||||
#endif /* DEBUG */
|
||||
/*
|
||||
* Check for enough room. This is extremely approximate but is more
|
||||
@@ -1490,7 +1484,7 @@ amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsen
|
||||
ep[1].ne_fileid = mp->am_gen;
|
||||
ep[1].ne_name = "..";
|
||||
ep[1].ne_nextentry = 0;
|
||||
*(u_int *) ep[1].ne_cookie = DOT_DOT_COOKIE;
|
||||
*(u_int *) ep[1].ne_cookie = ~(u_int) 0;
|
||||
|
||||
/*
|
||||
* If map is browsable, call a function make_entry_chain() to construct
|
||||
@@ -1502,7 +1496,8 @@ amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsen
|
||||
if (!te)
|
||||
return 0;
|
||||
#ifdef DEBUG_READDIR
|
||||
for (j=0,ne=te; ne; ne=ne->ne_nextentry)
|
||||
j = 0;
|
||||
for (ne=te; ne; ne=ne->ne_nextentry)
|
||||
plog(XLOG_INFO, "gen1 key %4d \"%s\"", j++, ne->ne_name);
|
||||
#endif /* DEBUG_READDIR */
|
||||
|
||||
@@ -1523,23 +1518,19 @@ amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsen
|
||||
}
|
||||
ep[1].ne_nextentry = te; /* append this chunk of "te" chain */
|
||||
#ifdef DEBUG_READDIR
|
||||
for (j=0,ne=te; ne; ne=ne->ne_nextentry)
|
||||
for (ne=te; ne; ne=ne->ne_nextentry)
|
||||
plog(XLOG_INFO, "gen2 key %4d \"%s\"", j++, ne->ne_name);
|
||||
for (j=0,ne=ep; ne; ne=ne->ne_nextentry)
|
||||
plog(XLOG_INFO, "gen2+ key %4d \"%s\" fi=%d ck=%d",
|
||||
j++, ne->ne_name, ne->ne_fileid, *(u_int *)ne->ne_cookie);
|
||||
plog(XLOG_INFO, "EOF is %d", dp->dl_eof);
|
||||
#endif /* DEBUG_READDIR */
|
||||
return 0;
|
||||
} /* end of "if (gen == 0)" statement */
|
||||
|
||||
#ifdef DEBUG
|
||||
dlog("amfs_auto_readdir_browsable: real child");
|
||||
dlog("real child");
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (gen == DOT_DOT_COOKIE) {
|
||||
if (gen == ~(u_int) 0) {
|
||||
#ifdef DEBUG
|
||||
dlog("amfs_auto_readdir_browsable: End of readdir in %s", mp->am_path);
|
||||
dlog("End of readdir in %s", mp->am_path);
|
||||
#endif /* DEBUG */
|
||||
dp->dl_eof = TRUE;
|
||||
dp->dl_entries = 0;
|
||||
@@ -1581,7 +1572,7 @@ amfs_auto_readdir_browsable(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsen
|
||||
dp->dl_entries = ep;
|
||||
#ifdef DEBUG_READDIR
|
||||
plog(XLOG_INFO, "dl_entries=0x%x, te_next=0x%x, dl_eof=%d",
|
||||
(int) dp->dl_entries, (int) te_next, dp->dl_eof);
|
||||
dp->dl_entries, te_next, dp->dl_eof);
|
||||
for (ne=te; ne; ne=ne->ne_nextentry)
|
||||
plog(XLOG_INFO, "gen3 key %4d \"%s\"", j++, ne->ne_name);
|
||||
#endif /* DEBUG_READDIR */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_direct.c,v 1.2 1999/01/10 21:53:41 ezk Exp $
|
||||
* $Id: amfs_direct.c,v 1.1.1.1 1998/11/05 02:04:46 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_error.c,v 1.2 1999/01/10 21:53:41 ezk Exp $
|
||||
* $Id: amfs_error.c,v 1.1.1.1 1998/11/05 02:04:46 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_host.c,v 1.3 1999/01/13 23:30:57 ezk Exp $
|
||||
* $Id: amfs_host.c,v 1.1.1.1 1998/11/05 02:04:46 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -224,7 +224,7 @@ fetch_fhandle(CLIENT * client, char *dir, am_nfs_handle_t *fhp, u_long nfs_versi
|
||||
* get the filehandle. Use NFS version specific call.
|
||||
*/
|
||||
|
||||
plog(XLOG_INFO, "fetch_fhandle: NFS version %d", (int) nfs_version);
|
||||
plog(XLOG_INFO, "fetch_fhandle: NFS version %d", nfs_version);
|
||||
#ifdef HAVE_FS_NFS3
|
||||
if (nfs_version == NFS_VERSION3) {
|
||||
memset((char *) &fhp->v3, 0, sizeof(fhp->v3));
|
||||
@@ -335,7 +335,7 @@ amfs_host_fmount(mntfs *mf)
|
||||
*/
|
||||
host = mf->mf_server->fs_host;
|
||||
sin = *mf->mf_server->fs_ip;
|
||||
plog(XLOG_INFO, "amfs_host_fmount: NFS version %d", (int) mf->mf_server->fs_version);
|
||||
plog(XLOG_INFO, "amfs_host_fmount: NFS version %d", mf->mf_server->fs_version);
|
||||
#ifdef HAVE_FS_NFS3
|
||||
if (mf->mf_server->fs_version == NFS_VERSION3)
|
||||
mnt_version = MOUNTVERS3;
|
||||
@@ -630,7 +630,7 @@ amfs_host_umounted(am_node *mp)
|
||||
*/
|
||||
host = mf->mf_server->fs_host;
|
||||
sin = *mf->mf_server->fs_ip;
|
||||
plog(XLOG_INFO, "amfs_host_umounted: NFS version %d", (int) mf->mf_server->fs_version);
|
||||
plog(XLOG_INFO, "amfs_host_umounted: NFS version %d", mf->mf_server->fs_version);
|
||||
#ifdef HAVE_FS_NFS3
|
||||
if (mf->mf_server->fs_version == NFS_VERSION3)
|
||||
mnt_version = MOUNTVERS3;
|
||||
@@ -674,7 +674,7 @@ amfs_host_umounted(am_node *mp)
|
||||
if (clnt_stat != RPC_SUCCESS && clnt_stat != RPC_SYSTEMERROR) {
|
||||
/* RPC_SYSTEMERROR seems to be returned for no good reason ... */
|
||||
const char *msg = clnt_sperrno(clnt_stat);
|
||||
plog(XLOG_ERROR, "unmount all from %s rpc failed: %s", host, msg);
|
||||
plog(XLOG_ERROR, "unmount all from %s rpc failed: %s", host, msg, clnt_stat);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_inherit.c,v 1.2 1999/01/10 21:53:41 ezk Exp $
|
||||
* $Id: amfs_inherit.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_link.c,v 1.2 1999/01/10 21:53:42 ezk Exp $
|
||||
* $Id: amfs_link.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_linkx.c,v 1.2 1999/01/10 21:53:42 ezk Exp $
|
||||
* $Id: amfs_linkx.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_nfsl.c,v 1.3 1999/01/10 21:53:42 ezk Exp $
|
||||
* $Id: amfs_nfsl.c,v 1.2 1998/12/27 06:24:45 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_nfsx.c,v 1.2 1999/01/10 21:53:42 ezk Exp $
|
||||
* $Id: amfs_nfsx.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_program.c,v 1.5 1999/09/30 21:01:30 ezk Exp $
|
||||
* $Id: amfs_program.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -89,7 +89,7 @@ amfs_program_match(am_opts *fo)
|
||||
char *prog;
|
||||
|
||||
if (!fo->opt_mount || !fo->opt_unmount) {
|
||||
plog(XLOG_ERROR, "program: both mount and unmount must be specified");
|
||||
plog(XLOG_USER, "program: no mount/unmount specified");
|
||||
return 0;
|
||||
}
|
||||
prog = strchr(fo->opt_mount, ' ');
|
||||
@@ -131,8 +131,6 @@ amfs_program_exec(char *info)
|
||||
* Put stdout to stderr
|
||||
*/
|
||||
(void) fclose(stdout);
|
||||
if (!logfp)
|
||||
logfp = stderr; /* initialize before possible first use */
|
||||
(void) dup(fileno(logfp));
|
||||
if (fileno(logfp) != fileno(stderr)) {
|
||||
(void) fclose(stderr);
|
||||
@@ -147,7 +145,7 @@ amfs_program_exec(char *info)
|
||||
char **cp = xivec;
|
||||
plog(XLOG_DEBUG, "executing (un)mount command...");
|
||||
while (*cp) {
|
||||
plog(XLOG_DEBUG, "arg[%ld] = '%s'", (long) (cp - xivec), *cp);
|
||||
plog(XLOG_DEBUG, "arg[%d] = '%s'", cp - xivec, *cp);
|
||||
cp++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_root.c,v 1.2 1999/01/10 21:53:43 ezk Exp $
|
||||
* $Id: amfs_root.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_toplvl.c,v 1.5 1999/02/04 07:24:14 ezk Exp $
|
||||
* $Id: amfs_toplvl.c,v 1.2 1998/12/27 06:24:45 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -177,11 +177,9 @@ mount_amfs_toplvl(char *dir, char *opts)
|
||||
#endif /* HOSTNAMESZ */
|
||||
|
||||
/*
|
||||
* Finally we can compute the mount genflags set above,
|
||||
* and add any automounter specific flags.
|
||||
* Finally we can compute the mount genflags set above.
|
||||
*/
|
||||
genflags = compute_mount_flags(&mnt);
|
||||
genflags |= compute_automounter_mount_flags(&mnt);
|
||||
|
||||
/* setup the many fields and flags within nfs_args */
|
||||
memmove(&anh.v2.fhs_fh, fhp, sizeof(*fhp));
|
||||
@@ -227,10 +225,8 @@ mount_amfs_toplvl(char *dir, char *opts)
|
||||
|
||||
/* This is it! Here we try to mount amd on its mount points */
|
||||
#ifdef DEBUG
|
||||
amuDebug(D_TRACE) {
|
||||
amuDebug(D_TRACE)
|
||||
print_nfs_args(&nfs_args, 0);
|
||||
plog(XLOG_DEBUG, "Generic mount flags 0x%x", genflags);
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
error = mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type,
|
||||
0, NULL, mnttab_file_name);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amfs_union.c,v 1.2 1999/01/10 21:53:43 ezk Exp $
|
||||
* $Id: amfs_union.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,8 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amq_subr.c,v 1.5 1999/08/24 21:31:06 ezk Exp $
|
||||
* $FreeBSD$
|
||||
* $Id: amq_subr.c,v 1.3 1999/01/13 20:03:54 obrien Exp $
|
||||
*
|
||||
*/
|
||||
/*
|
||||
@@ -188,7 +187,7 @@ ok_security(struct svc_req *rqstp)
|
||||
return(0); /* assume security is therefore not OK */
|
||||
}
|
||||
|
||||
if (ntohs(sin->sin_port) >= IPPORT_RESERVED ||
|
||||
if (ntohs(sin->sin_port) >= 1024 ||
|
||||
!(sin->sin_addr.s_addr == htonl(0x7f000001) ||
|
||||
sin->sin_addr.s_addr == myipaddr.s_addr)) {
|
||||
char dq[20];
|
||||
@@ -254,7 +253,21 @@ amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp)
|
||||
return 0;
|
||||
return &rc;
|
||||
}
|
||||
#endif /* ENABLE_AMQ_MOUNT */
|
||||
|
||||
#else /* not ENABLE_AMQ_MOUNT */
|
||||
|
||||
int *
|
||||
amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp)
|
||||
{
|
||||
static int rc;
|
||||
char *s = *(amq_string *) argp;
|
||||
|
||||
plog(XLOG_ERROR, "amq requested mount of %s, but code is disabled", s);
|
||||
|
||||
rc = EINVAL;
|
||||
return &rc;
|
||||
}
|
||||
#endif /* not ENABLE_AMQ_MOUNT */
|
||||
|
||||
|
||||
amq_string *
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: amq_svc.c,v 1.3 1999/08/24 21:31:06 ezk Exp $
|
||||
* $Id: amq_svc.c,v 1.1.1.2 1999/01/13 19:20:54 obrien Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: autil.c,v 1.3 1999/01/10 21:53:44 ezk Exp $
|
||||
* $Id: autil.c,v 1.2 1998/12/27 06:24:46 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: clock.c,v 1.3 1999/01/13 23:30:58 ezk Exp $
|
||||
* $Id: clock.c,v 1.1.1.1 1998/11/05 02:04:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -190,8 +190,7 @@ reschedule_timeouts(time_t now, time_t then)
|
||||
if (cp->c_time >= now && cp->c_time <= then) {
|
||||
plog(XLOG_WARNING, "job %d rescheduled to run immediately", cp->c_id);
|
||||
#ifdef DEBUG
|
||||
dlog("rescheduling job %d back %ld seconds",
|
||||
cp->c_id, (long) (cp->c_time - now));
|
||||
dlog("rescheduling job %d back %d seconds", cp->c_id, cp->c_time - now);
|
||||
#endif /* DEBUG */
|
||||
next_softclock = cp->c_time = now;
|
||||
}
|
||||
|
||||
+2
-24
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: conf.c,v 1.5 1999/09/30 21:01:30 ezk Exp $
|
||||
* $Id: conf.c,v 1.2 1998/12/27 06:24:46 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -82,7 +82,6 @@ static int gopt_cache_duration(const char *val);
|
||||
static int gopt_cluster(const char *val);
|
||||
static int gopt_debug_options(const char *val);
|
||||
static int gopt_dismount_interval(const char *val);
|
||||
static int gopt_full_os(const char *val);
|
||||
static int gopt_fully_qualified_hosts(const char *val);
|
||||
static int gopt_hesiod_base(const char *val);
|
||||
static int gopt_karch(const char *val);
|
||||
@@ -112,7 +111,6 @@ static int gopt_search_path(const char *val);
|
||||
static int gopt_selectors_on_default(const char *val);
|
||||
static int gopt_show_statfs_entries(const char *val);
|
||||
static int gopt_unmount_on_exit(const char *val);
|
||||
static int gopt_vendor(const char *val);
|
||||
static int process_global_option(const char *key, const char *val);
|
||||
static int process_regular_map(cf_map_t *cfm);
|
||||
static int process_regular_option(const char *section, const char *key, const char *val, cf_map_t *cfm);
|
||||
@@ -139,7 +137,6 @@ static struct _func_map glob_functable[] = {
|
||||
{"debug_options", gopt_debug_options},
|
||||
{"dismount_interval", gopt_dismount_interval},
|
||||
{"fully_qualified_hosts", gopt_fully_qualified_hosts},
|
||||
{"full_os", gopt_full_os},
|
||||
{"hesiod_base", gopt_hesiod_base},
|
||||
{"karch", gopt_karch},
|
||||
{"ldap_base", gopt_ldap_base},
|
||||
@@ -168,7 +165,6 @@ static struct _func_map glob_functable[] = {
|
||||
{"selectors_on_default", gopt_selectors_on_default},
|
||||
{"show_statfs_entries", gopt_show_statfs_entries},
|
||||
{"unmount_on_exit", gopt_unmount_on_exit},
|
||||
{"vendor", gopt_vendor},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -393,14 +389,6 @@ gopt_dismount_interval(const char *val)
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
gopt_full_os(const char *val)
|
||||
{
|
||||
gopt.op_sys_full = strdup((char *)val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
gopt_fully_qualified_hosts(const char *val)
|
||||
{
|
||||
@@ -562,7 +550,6 @@ gopt_mount_type(const char *val)
|
||||
if (STREQ(val, "autofs")) {
|
||||
#ifdef HAVE_FS_AUTOFS
|
||||
gopt.flags |= CFM_MOUNT_TYPE_AUTOFS;
|
||||
amd_use_autofs++;
|
||||
return 0;
|
||||
#else /* not HAVE_FS_AUTOFS */
|
||||
fprintf(stderr, "conf: no autofs support available\n");
|
||||
@@ -779,14 +766,6 @@ gopt_unmount_on_exit(const char *val)
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
gopt_vendor(const char *val)
|
||||
{
|
||||
gopt.op_sys_vendor = strdup((char *)val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Collect one entry for a regular map
|
||||
*/
|
||||
@@ -888,7 +867,6 @@ ropt_mount_type(const char *val, cf_map_t *cfm)
|
||||
if (STREQ(val, "autofs")) {
|
||||
#ifdef HAVE_FS_AUTOFS
|
||||
cfm->cfm_flags |= CFM_MOUNT_TYPE_AUTOFS;
|
||||
amd_use_autofs++;
|
||||
return 0;
|
||||
#else /* not HAVE_FS_AUTOFS */
|
||||
fprintf(stderr, "conf: no autofs support available\n");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: conf_parse.y,v 1.3 1999/04/16 14:20:59 ezk Exp $
|
||||
* $Id: conf_parse.y,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -49,22 +49,6 @@
|
||||
#include <am_defs.h>
|
||||
#include <amd.h>
|
||||
|
||||
/* AIX requires this to be the first thing in the file. */
|
||||
#ifndef __GNUC__
|
||||
# if HAVE_ALLOCA_H
|
||||
# include <alloca.h>
|
||||
# else /* not HAVE_ALLOCA_H */
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# else /* not _AIX */
|
||||
# ifndef alloca
|
||||
/* predefined by HP cc +Olibcalls */
|
||||
voidp alloca();
|
||||
# endif /* not alloca */
|
||||
# endif /* not _AIX */
|
||||
# endif /* not HAVE_ALLOCA_H */
|
||||
#endif /* not __GNUC__ */
|
||||
|
||||
extern char *yytext;
|
||||
extern int yylineno;
|
||||
extern int yylex(void);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%{
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -39,7 +39,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: conf_tok.l,v 1.2 1999/01/10 21:53:45 ezk Exp $
|
||||
* $Id: conf_tok.l,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,8 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: get_args.c,v 1.4 1999/09/30 21:01:31 ezk Exp $
|
||||
* $FreeBSD$
|
||||
* $Id: get_args.c,v 1.2 1998/09/05 06:06:00 obrien Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -86,7 +85,7 @@ get_version_string(void)
|
||||
|
||||
vers = xmalloc(2048 + wire_buf_len);
|
||||
sprintf(vers, "%s\n%s\n%s\n%s\n",
|
||||
"Copyright (c) 1997-1999 Erez Zadok",
|
||||
"Copyright (c) 1997-1998 Erez Zadok",
|
||||
"Copyright (c) 1990 Jan-Simon Pendry",
|
||||
"Copyright (c) 1990 Imperial College of Science, Technology & Medicine",
|
||||
"Copyright (c) 1990 The Regents of the University of California.");
|
||||
@@ -100,7 +99,7 @@ get_version_string(void)
|
||||
cpu, endian, gopt.arch, gopt.karch);
|
||||
strcat(vers, tmpbuf);
|
||||
sprintf(tmpbuf, "full_os=%s, os=%s, osver=%s, vendor=%s.\n",
|
||||
gopt.op_sys_full, gopt.op_sys, gopt.op_sys_ver, gopt.op_sys_vendor);
|
||||
HOST_OS, gopt.op_sys, gopt.op_sys_ver, HOST_VENDOR);
|
||||
strcat(vers, tmpbuf);
|
||||
|
||||
strcat(vers, "Map support for: ");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_file.c,v 1.2 1999/01/10 21:53:45 ezk Exp $
|
||||
* $Id: info_file.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_hesiod.c,v 1.5 1999/02/04 07:24:15 ezk Exp $
|
||||
* $Id: info_hesiod.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -58,15 +58,10 @@
|
||||
#ifdef HAVE_HESIOD_INIT
|
||||
/* bsdi3 does not define this extern in any header file */
|
||||
extern char **hesiod_resolve(void *context, const char *name, const char *type);
|
||||
extern int hesiod_init(void **context);
|
||||
|
||||
static voidp hesiod_context;
|
||||
#endif /* HAVE_HESIOD_INIT */
|
||||
|
||||
/* forward declarations */
|
||||
int amu_hesiod_init(mnt_map *m, char *map, time_t *tp);
|
||||
int hesiod_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp);
|
||||
int hesiod_isup(mnt_map *m, char *map);
|
||||
|
||||
/*
|
||||
* No easy way to probe the server - check the map name begins with "hesiod."
|
||||
* Note: this name includes 'amu_' so as to not conflict with libhesiod's
|
||||
@@ -103,8 +98,7 @@ hesiod_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp)
|
||||
#endif /* not HAVE_HESIOD_INIT */
|
||||
|
||||
#ifdef DEBUG
|
||||
dlog("hesiod_search(m=%lx, map=%s, key=%s, pval=%lx tp=%lx)",
|
||||
(unsigned long) m, map, key, (unsigned long) pval, (unsigned long) tp);
|
||||
dlog("hesiod_search(m=%x, map=%s, key=%s, pval=%x tp=%x)", m, map, key, pval, tp);
|
||||
#endif /* DEBUG */
|
||||
|
||||
sprintf(hes_key, "%s.%s", key, map + HES_PREFLEN);
|
||||
@@ -167,34 +161,3 @@ hesiod_search(mnt_map *m, char *map, char *key, char **pval, time_t *tp)
|
||||
return error;
|
||||
#endif /* not HAVE_HESIOD_INIT */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Check if Hesiod is up, so we can determine if to clear the map or not.
|
||||
* Test it by querying for /defaults.
|
||||
* Returns: 0 if Hesiod is down, 1 if it is up.
|
||||
*/
|
||||
int
|
||||
hesiod_isup(mnt_map *m, char *map)
|
||||
{
|
||||
int error;
|
||||
char *val;
|
||||
time_t mtime;
|
||||
static int last_status = 1; /* assume up by default */
|
||||
|
||||
error = hesiod_search(m, map, "/defaults", &val, &mtime);
|
||||
#ifdef DEBUG
|
||||
dlog("hesiod_isup(%s): %s", map, strerror(error));
|
||||
#endif /* DEBUG */
|
||||
if (error != 0 && error != ENOENT) {
|
||||
plog(XLOG_ERROR,
|
||||
"hesiod_isup: error getting `/defaults' entry in map %s: %m", map);
|
||||
last_status = 0;
|
||||
return 0; /* Hesiod is down */
|
||||
}
|
||||
if (last_status == 0) { /* if was down before */
|
||||
plog(XLOG_INFO, "hesiod_isup: Hesiod came back up for map %s", map);
|
||||
last_status = 1;
|
||||
}
|
||||
return 1; /* Hesiod is up */
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_ldap.c,v 1.6 1999/09/30 21:01:31 ezk Exp $
|
||||
* $Id: info_ldap.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -182,12 +182,7 @@ amu_ldap_init(mnt_map *m, char *map, time_t *ts)
|
||||
ALD *aldh;
|
||||
CR *creds;
|
||||
|
||||
/*
|
||||
* XXX: by checking that map_type must be defined, aren't we
|
||||
* excluding the possibility of automatic searches through all
|
||||
* map types?
|
||||
*/
|
||||
if (!gopt.map_type || !STREQ(gopt.map_type, AMD_LDAP_TYPE)) {
|
||||
if (!STREQ(gopt.map_type, AMD_LDAP_TYPE)) {
|
||||
return (ENOENT);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
@@ -224,7 +219,7 @@ amu_ldap_init(mnt_map *m, char *map, time_t *ts)
|
||||
if (get_ldap_timestamp(aldh->ldap, map, ts))
|
||||
return (ENOENT);
|
||||
#ifdef DEBUG
|
||||
dlog("Got timestamp for map %s: %ld\n", map, *ts);
|
||||
dlog("Got timestamp for map %s: %d\n", map, *ts);
|
||||
#endif /* DEBUG */
|
||||
|
||||
return (0);
|
||||
@@ -238,7 +233,6 @@ amu_ldap_rebind(ALD *a)
|
||||
HE *h;
|
||||
CR *c = a->credentials;
|
||||
time_t now = clocktime();
|
||||
int try;
|
||||
|
||||
if (a->ldap != NULL) {
|
||||
if ((a->timestamp - now) > AMD_LDAP_TTL) {
|
||||
@@ -251,7 +245,7 @@ amu_ldap_rebind(ALD *a)
|
||||
return (0);
|
||||
}
|
||||
|
||||
for (try=0; try<10; try++) { /* XXX: try up to 10 times (makes sense?) */
|
||||
while (TRUE) {
|
||||
for (h = a->hostent; h != NULL; h = h->next) {
|
||||
if ((ld = ldap_open(h->host, h->port)) == NULL) {
|
||||
plog(XLOG_WARNING, "Unable to ldap_open to %s:%d\n", h->host, h->port);
|
||||
@@ -283,7 +277,7 @@ get_ldap_timestamp(LDAP * ld, char *map, time_t *ts)
|
||||
struct timeval tv;
|
||||
char **vals, *end;
|
||||
char filter[MAXPATHLEN];
|
||||
int i, err = 0, nentries = 0;
|
||||
int i, err, nentries = 0;
|
||||
LDAPMessage *res, *entry;
|
||||
|
||||
tv.tv_sec = 3;
|
||||
@@ -305,9 +299,7 @@ get_ldap_timestamp(LDAP * ld, char *map, time_t *ts)
|
||||
&res);
|
||||
if (err == LDAP_SUCCESS)
|
||||
break;
|
||||
#ifdef DEBUG
|
||||
dlog("Timestamp search timed out, trying again...\n");
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
if (err != LDAP_SUCCESS) {
|
||||
@@ -347,7 +339,7 @@ get_ldap_timestamp(LDAP * ld, char *map, time_t *ts)
|
||||
err = ENOENT;
|
||||
}
|
||||
if (!*ts > 0) {
|
||||
plog(XLOG_USER, "Nonpositive timestamp %ld for map %s\n",
|
||||
plog(XLOG_USER, "Nonpositive timestamp %d for map %s\n",
|
||||
*ts, map);
|
||||
err = ENOENT;
|
||||
}
|
||||
@@ -361,7 +353,7 @@ get_ldap_timestamp(LDAP * ld, char *map, time_t *ts)
|
||||
ldap_msgfree(res);
|
||||
ldap_msgfree(entry);
|
||||
#ifdef DEBUG
|
||||
dlog("The timestamp for %s is %ld (err=%d)\n", map, *ts, err);
|
||||
dlog("The timestamp for %s is %d (err=%d)\n", map, *ts, err);
|
||||
#endif /* DEBUG */
|
||||
return (err);
|
||||
}
|
||||
@@ -372,7 +364,7 @@ amu_ldap_search(mnt_map *m, char *map, char *key, char **pval, time_t *ts)
|
||||
{
|
||||
char **vals, filter[MAXPATHLEN];
|
||||
struct timeval tv;
|
||||
int i, err = 0, nvals = 0, nentries = 0;
|
||||
int i, err, nvals = 0, nentries = 0;
|
||||
LDAPMessage *entry, *res;
|
||||
ALD *a = (ALD *) (m->map_data);
|
||||
|
||||
@@ -460,9 +452,7 @@ amu_ldap_mtime(mnt_map *m, char *map, time_t *ts)
|
||||
ALD *aldh = (ALD *) (m->map_data);
|
||||
|
||||
if (aldh == NULL) {
|
||||
#ifdef DEBUG
|
||||
dlog("LDAP panic: unable to find map data\n");
|
||||
#endif /* DEBUG */
|
||||
return (ENOENT);
|
||||
}
|
||||
if (amu_ldap_rebind(aldh)) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_ndbm.c,v 1.2 1999/01/10 21:53:46 ezk Exp $
|
||||
* $Id: info_ndbm.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
+15
-64
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_nis.c,v 1.5 1999/08/22 05:12:51 ezk Exp $
|
||||
* $Id: info_nis.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -55,12 +55,8 @@
|
||||
|
||||
/*
|
||||
* NIS+ servers in NIS compat mode don't have yp_order()
|
||||
*
|
||||
* has_yp_order = 1 NIS server
|
||||
* = 0 NIS+ server
|
||||
* = -1 server is down
|
||||
*/
|
||||
static int has_yp_order = -1;
|
||||
static int has_yp_order = FALSE;
|
||||
|
||||
/* forward declarations */
|
||||
int nis_reload(mnt_map *m, char *map, void (*fn) (mnt_map *, char *, char *));
|
||||
@@ -107,9 +103,7 @@ determine_nis_domain(void)
|
||||
}
|
||||
if (!*default_domain) {
|
||||
nis_not_running = 1;
|
||||
#ifdef DEBUG
|
||||
plog(XLOG_WARNING, "NIS domain name is not set. NIS ignored.");
|
||||
#endif /* DEBUG */
|
||||
return ENOENT;
|
||||
}
|
||||
gopt.nis_domain = strdup(default_domain);
|
||||
@@ -199,52 +193,25 @@ nis_isup(mnt_map *m, char *map)
|
||||
{
|
||||
YP_ORDER_OUTORDER_TYPE order;
|
||||
int error;
|
||||
char *master;
|
||||
static int last_status = 1; /* assume up by default */
|
||||
|
||||
switch (has_yp_order) {
|
||||
case 1:
|
||||
/*
|
||||
* NIS server with yp_order
|
||||
*/
|
||||
if (has_yp_order) {
|
||||
error = yp_order(gopt.nis_domain, map, &order);
|
||||
if (error != 0) {
|
||||
plog(XLOG_ERROR,
|
||||
"nis_isup: error getting the order of map %s: %s",
|
||||
"nis_isup: error getting the order of map of %s: %s",
|
||||
map, yperr_string(ypprot_err(error)));
|
||||
last_status = 0;
|
||||
return 0; /* NIS is down */
|
||||
}
|
||||
break;
|
||||
|
||||
case 0:
|
||||
/*
|
||||
* NIS+ server without yp_order
|
||||
*/
|
||||
error = yp_master(gopt.nis_domain, map, &master);
|
||||
if (error != 0) {
|
||||
plog(XLOG_ERROR,
|
||||
"nis_isup: error getting the master of map %s: %s",
|
||||
map, yperr_string(ypprot_err(error)));
|
||||
last_status = 0;
|
||||
return 0; /* NIS+ is down */
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/*
|
||||
* server was down
|
||||
*/
|
||||
last_status = 0;
|
||||
}
|
||||
|
||||
if (last_status == 0) { /* reinitialize if was down before */
|
||||
if (last_status == 0) { /* if was down before */
|
||||
time_t dummy;
|
||||
error = nis_init(m, map, &dummy);
|
||||
if (error)
|
||||
return 0; /* still down */
|
||||
plog(XLOG_INFO, "nis_isup: NIS came back up for map %s", map);
|
||||
last_status = 1;
|
||||
/* XXX: do we really need to reinitialize nis? */
|
||||
error = nis_init(m, map, &dummy);
|
||||
if (!error)
|
||||
last_status = 1;
|
||||
}
|
||||
return 1; /* NIS is up */
|
||||
}
|
||||
@@ -270,10 +237,8 @@ nis_search(mnt_map *m, char *map, char *key, char **val, time_t *tp)
|
||||
}
|
||||
|
||||
|
||||
switch (has_yp_order) {
|
||||
case 1:
|
||||
if (has_yp_order) {
|
||||
/*
|
||||
* NIS server with yp_order
|
||||
* Check if map has changed
|
||||
*/
|
||||
if (yp_order(gopt.nis_domain, map, &order))
|
||||
@@ -282,9 +247,7 @@ nis_search(mnt_map *m, char *map, char *key, char **val, time_t *tp)
|
||||
*tp = (time_t) order;
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0:
|
||||
} else {
|
||||
/*
|
||||
* NIS+ server without yp_order
|
||||
* Check if timeout has expired to invalidate the cache
|
||||
@@ -294,15 +257,6 @@ nis_search(mnt_map *m, char *map, char *key, char **val, time_t *tp)
|
||||
*tp = (time_t)order;
|
||||
return(-1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/*
|
||||
* server was down
|
||||
*/
|
||||
if (nis_isup(m, map))
|
||||
return -1;
|
||||
return EIO;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -347,16 +301,15 @@ nis_init(mnt_map *m, char *map, time_t *tp)
|
||||
yp_order_result = yp_order(gopt.nis_domain, map, &order);
|
||||
switch (yp_order_result) {
|
||||
case 0:
|
||||
/* NIS server found */
|
||||
has_yp_order = 1;
|
||||
has_yp_order = TRUE;
|
||||
*tp = (time_t) order;
|
||||
#ifdef DEBUG
|
||||
dlog("NIS master for %s@%s has order %lu", map, gopt.nis_domain, (unsigned long) order);
|
||||
dlog("NIS master for %s@%s has order %d", map, gopt.nis_domain, order);
|
||||
#endif /* DEBUG */
|
||||
break;
|
||||
case YPERR_YPERR:
|
||||
/* NIS+ server found ! */
|
||||
has_yp_order = 0;
|
||||
has_yp_order = FALSE;
|
||||
/* try yp_master() instead */
|
||||
if (yp_master(gopt.nis_domain, map, &master)) {
|
||||
return ENOENT;
|
||||
@@ -369,8 +322,6 @@ nis_init(mnt_map *m, char *map, time_t *tp)
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* server is down */
|
||||
has_yp_order = -1;
|
||||
return ENOENT;
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_nisplus.c,v 1.2 1999/01/10 21:53:46 ezk Exp $
|
||||
* $Id: info_nisplus.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_passwd.c,v 1.2 1999/01/10 21:53:46 ezk Exp $
|
||||
* $Id: info_passwd.c,v 1.1.1.1 1998/11/05 02:04:49 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: info_union.c,v 1.2 1999/01/10 21:53:47 ezk Exp $
|
||||
* $Id: info_union.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: map.c,v 1.5 1999/08/22 05:12:51 ezk Exp $
|
||||
* $Id: map.c,v 1.2 1998/12/27 06:24:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -615,7 +615,7 @@ root_fh(char *dir)
|
||||
long pid = getppid();
|
||||
((struct am_fh *) &nfh)->fhh_pid = pid;
|
||||
#ifdef DEBUG
|
||||
dlog("root_fh substitutes pid %ld", (long) pid);
|
||||
dlog("root_fh substitutes pid %d", pid);
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
return &nfh;
|
||||
@@ -913,7 +913,7 @@ free_map_if_success(int rc, int term, voidp closure)
|
||||
#endif /* DEBUG */
|
||||
amd_stats.d_uerr++;
|
||||
} else if (rc) {
|
||||
if (mf->mf_ops == &amfs_program_ops || rc == EBUSY) {
|
||||
if (rc == EBUSY) {
|
||||
plog(XLOG_STATS, "\"%s\" on %s still active", mp->am_path, mf->mf_mount);
|
||||
} else {
|
||||
errno = rc; /* XXX */
|
||||
@@ -1093,7 +1093,7 @@ timeout_mp(voidp v)
|
||||
if ((int) amd_state >= (int) Finishing)
|
||||
t = now + 1;
|
||||
#ifdef DEBUG
|
||||
dlog("Next mount timeout in %lds", (long) (t - now));
|
||||
dlog("Next mount timeout in %ds", t - now);
|
||||
#endif /* DEBUG */
|
||||
|
||||
timeout_mp_id = timeout(t - now, timeout_mp, 0);
|
||||
|
||||
+22
-68
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: mapc.c,v 1.5 1999/09/30 21:01:31 ezk Exp $
|
||||
* $Id: mapc.c,v 1.1.1.1 1998/11/05 02:04:48 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -139,7 +139,6 @@ qelem map_list_head = {&map_list_head, &map_list_head};
|
||||
static const char *get_full_path(const char *map, const char *path, const char *type);
|
||||
static int mapc_meta_search(mnt_map *, char *, char **, int);
|
||||
static void mapc_sync(mnt_map *);
|
||||
static void mapc_clear(mnt_map *);
|
||||
|
||||
/* ROOT MAP */
|
||||
static int root_init(mnt_map *, char *, time_t *);
|
||||
@@ -159,7 +158,6 @@ extern int passwd_search(mnt_map *, char *, char *, char **, time_t *);
|
||||
/* HESIOD MAPS */
|
||||
#ifdef HAVE_MAP_HESIOD
|
||||
extern int amu_hesiod_init(mnt_map *, char *map, time_t *tp);
|
||||
extern int hesiod_isup(mnt_map *, char *);
|
||||
extern int hesiod_search(mnt_map *, char *, char *, char **, time_t *);
|
||||
#endif /* HAVE_MAP_HESIOD */
|
||||
|
||||
@@ -238,7 +236,7 @@ static map_type maptypes[] =
|
||||
"hesiod",
|
||||
amu_hesiod_init,
|
||||
error_reload,
|
||||
hesiod_isup, /* is Hesiod up or not? */
|
||||
NULL, /* isup function */
|
||||
hesiod_search,
|
||||
error_mtime,
|
||||
MAPC_ALL
|
||||
@@ -489,65 +487,19 @@ mapc_find_wildcard(mnt_map *m)
|
||||
|
||||
|
||||
/*
|
||||
* Do a map reload.
|
||||
* Attempt to reload without losing current data by switching the hashes
|
||||
* round.
|
||||
* Do a map reload
|
||||
*/
|
||||
static void
|
||||
static int
|
||||
mapc_reload_map(mnt_map *m)
|
||||
{
|
||||
int error;
|
||||
kv *maphash[NKVHASH], *tmphash[NKVHASH];
|
||||
|
||||
/*
|
||||
* skip reloading maps that have not been modified, unless
|
||||
* amq -f was used (do_mapc_reload is 0)
|
||||
*/
|
||||
if (m->reloads != 0 && do_mapc_reload != 0) {
|
||||
time_t t;
|
||||
error = (*m->mtime) (m, m->map_name, &t);
|
||||
if (!error) {
|
||||
if (t <= m->modify) {
|
||||
plog(XLOG_INFO, "reload of map %s is not needed (in sync)", m->map_name);
|
||||
#ifdef DEBUG
|
||||
dlog("map %s last load time is %d, last modify time is %d",
|
||||
m->map_name, (int) m->modify, (int) t);
|
||||
#endif /* DEBUG */
|
||||
return;
|
||||
} else {
|
||||
/* reload of the map is needed, update map reload time */
|
||||
m->modify = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* copy the old hash and zero the map */
|
||||
memcpy((voidp) maphash, (voidp) m->kvhash, sizeof(m->kvhash));
|
||||
memset((voidp) m->kvhash, 0, sizeof(m->kvhash));
|
||||
|
||||
#ifdef DEBUG
|
||||
dlog("calling map reload on %s", m->map_name);
|
||||
#endif /* DEBUG */
|
||||
error = (*m->reload) (m, m->map_name, mapc_add_kv);
|
||||
if (error) {
|
||||
if (m->reloads == 0)
|
||||
plog(XLOG_FATAL, "first time load of map %s failed!", m->map_name);
|
||||
else
|
||||
plog(XLOG_ERROR, "reload of map %s failed - using old values",
|
||||
m->map_name);
|
||||
mapc_clear(m);
|
||||
memcpy((voidp) m->kvhash, (voidp) maphash, sizeof(m->kvhash));
|
||||
} else {
|
||||
if (m->reloads++ == 0)
|
||||
plog(XLOG_INFO, "first time load of map %s succeeded", m->map_name);
|
||||
else
|
||||
plog(XLOG_INFO, "reload #%d of map %s succeeded",
|
||||
m->reloads, m->map_name);
|
||||
memcpy((voidp) tmphash, (voidp) m->kvhash, sizeof(m->kvhash));
|
||||
memcpy((voidp) m->kvhash, (voidp) maphash, sizeof(m->kvhash));
|
||||
mapc_clear(m);
|
||||
memcpy((voidp) m->kvhash, (voidp) tmphash, sizeof(m->kvhash));
|
||||
}
|
||||
if (error)
|
||||
return error;
|
||||
m->wildcard = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
@@ -556,6 +508,8 @@ mapc_reload_map(mnt_map *m)
|
||||
error = mapc_search(m, wildcard, &m->wildcard);
|
||||
if (error)
|
||||
m->wildcard = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -666,7 +620,6 @@ mapc_create(char *map, char *opt, const char *type)
|
||||
m->map_name = strdup(map);
|
||||
m->refc = 1;
|
||||
m->wildcard = 0;
|
||||
m->reloads = 0;
|
||||
|
||||
/*
|
||||
* synchronize cache with reality
|
||||
@@ -927,16 +880,16 @@ mapc_sync(mnt_map *m)
|
||||
}
|
||||
}
|
||||
|
||||
if (m->alloc >= MAPC_ALL) {
|
||||
/* mapc_reload_map() always works */
|
||||
mapc_reload_map(m);
|
||||
} else {
|
||||
mapc_clear(m);
|
||||
/*
|
||||
* Attempt to find the wildcard entry
|
||||
*/
|
||||
mapc_clear(m);
|
||||
|
||||
if (m->alloc >= MAPC_ALL)
|
||||
if (mapc_reload_map(m))
|
||||
m->alloc = MAPC_INC;
|
||||
/*
|
||||
* Attempt to find the wildcard entry
|
||||
*/
|
||||
if (m->alloc < MAPC_ALL)
|
||||
mapc_find_wildcard(m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1098,7 +1051,7 @@ key_already_in_chain(char *keyname, const nfsentry *chain)
|
||||
nfsentry *
|
||||
make_entry_chain(am_node *mp, const nfsentry *current_chain, int fully_browsable)
|
||||
{
|
||||
static u_int last_cookie = (u_int) 2; /* monotonically increasing */
|
||||
static u_int last_cookie = ~(u_int) 0 - 1;
|
||||
static nfsentry chain[MAX_CHAIN];
|
||||
static int max_entries = MAX_CHAIN;
|
||||
char *key;
|
||||
@@ -1170,9 +1123,10 @@ make_entry_chain(am_node *mp, const nfsentry *current_chain, int fully_browsable
|
||||
}
|
||||
|
||||
/* we have space. put entry in next cell */
|
||||
++last_cookie;
|
||||
--last_cookie;
|
||||
chain[num_entries].ne_fileid = (u_int) last_cookie;
|
||||
*(u_int *) chain[num_entries].ne_cookie = (u_int) last_cookie;
|
||||
*(u_int *) chain[num_entries].ne_cookie =
|
||||
(u_int) last_cookie;
|
||||
chain[num_entries].ne_name = key;
|
||||
if (num_entries < max_entries - 1) { /* link to next one */
|
||||
chain[num_entries].ne_nextentry = &chain[num_entries + 1];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: mntfs.c,v 1.2 1999/01/10 21:53:47 ezk Exp $
|
||||
* $Id: mntfs.c,v 1.1.1.1 1998/11/05 02:04:48 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: nfs_prot_svc.c,v 1.4 1999/08/22 21:12:30 ezk Exp $
|
||||
* $Id: nfs_prot_svc.c,v 1.1.1.1 1998/11/05 02:04:48 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -98,27 +98,6 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
char *result;
|
||||
xdrproc_t xdr_argument, xdr_result;
|
||||
nfssvcproc_t local;
|
||||
struct sockaddr_in *sinp;
|
||||
char dq[20], dq2[28];
|
||||
|
||||
sinp = amu_svc_getcaller(rqstp->rq_xprt);
|
||||
#ifdef MNT2_NFS_OPT_RESVPORT
|
||||
/* Verify that the request comes from a reserved port */
|
||||
if (ntohs(sinp->sin_port) >= IPPORT_RESERVED) {
|
||||
plog(XLOG_WARNING, "ignoring request from %s:%u, port not reserved",
|
||||
inet_dquad(dq, sinp->sin_addr.s_addr),
|
||||
ntohs(sinp->sin_port));
|
||||
return;
|
||||
}
|
||||
#endif /* MNT2_NFS_OPT_RESVPORT */
|
||||
/* if the address does not match, ignore the request */
|
||||
if (sinp->sin_addr.s_addr && sinp->sin_addr.s_addr != myipaddr.s_addr) {
|
||||
plog(XLOG_WARNING, "ignoring request from %s:%u, expected %s",
|
||||
inet_dquad(dq, sinp->sin_addr.s_addr),
|
||||
ntohs(sinp->sin_port),
|
||||
inet_dquad(dq2, myipaddr.s_addr));
|
||||
return;
|
||||
}
|
||||
|
||||
nfs_program_2_transp = NULL;
|
||||
|
||||
@@ -249,7 +228,7 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
(SVC_IN_ARG_TYPE) &argument)) {
|
||||
plog(XLOG_ERROR,
|
||||
"NFS xdr decode failed for %d %d %d",
|
||||
(int) rqstp->rq_prog, (int) rqstp->rq_vers, (int) rqstp->rq_proc);
|
||||
rqstp->rq_prog, rqstp->rq_vers, rqstp->rq_proc);
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
|
||||
+15
-19
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: nfs_start.c,v 1.4 1999/02/04 07:24:16 ezk Exp $
|
||||
* $Id: nfs_start.c,v 1.1.1.1 1998/11/05 02:04:48 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -58,7 +58,6 @@ u_short nfs_port;
|
||||
#ifdef HAVE_FS_AUTOFS
|
||||
SVCXPRT *autofsxprt = NULL;
|
||||
u_short autofs_port = 0;
|
||||
int amd_use_autofs = 0;
|
||||
#endif /* HAVE_FS_AUTOFS */
|
||||
|
||||
#ifndef HAVE_SIGACTION
|
||||
@@ -87,12 +86,12 @@ checkup(void)
|
||||
}
|
||||
if (max_mem < next_mem) {
|
||||
#ifdef HAVE_GETPAGESIZE
|
||||
dlog("%#lx bytes of memory allocated; total is %#lx (%ld pages)",
|
||||
(long) (next_mem - max_mem), (unsigned long) next_mem,
|
||||
dlog("%#x bytes of memory allocated; total is %#x (%ld pages)",
|
||||
next_mem - max_mem, next_mem,
|
||||
((long) next_mem + getpagesize() - 1) / getpagesize());
|
||||
#else /* not HAVE_GETPAGESIZE */
|
||||
dlog("%#lx bytes of memory allocated; total is %#lx",
|
||||
(long) (next_mem - max_mem), (unsigned long) next_mem);
|
||||
dlog("%#x bytes of memory allocated; total is %#x",
|
||||
next_mem - max_mem, next_mem);
|
||||
#endif /* not HAVE_GETPAGESIZE */
|
||||
max_mem = next_mem;
|
||||
|
||||
@@ -266,7 +265,7 @@ run_rpc(void)
|
||||
tvv.tv_sec = SELECT_MAXWAIT;
|
||||
#ifdef DEBUG
|
||||
if (tvv.tv_sec) {
|
||||
dlog("Select waits for %ds", (int) tvv.tv_sec);
|
||||
dlog("Select waits for %ds", tvv.tv_sec);
|
||||
} else {
|
||||
dlog("Select waits for Godot");
|
||||
}
|
||||
@@ -375,17 +374,14 @@ mount_automounter(int ppid)
|
||||
return ret;
|
||||
|
||||
#ifdef HAVE_FS_AUTOFS
|
||||
if (amd_use_autofs) {
|
||||
/*
|
||||
* Create the autofs service for amd, but only if autofs maps
|
||||
* were defined (so amd doesn't clash with automountd.)
|
||||
*/
|
||||
plog(XLOG_INFO, "creating autofs service listener");
|
||||
ret = create_autofs_service(&soAUTOFS, &autofs_port, &autofsxprt, autofs_program_1);
|
||||
/* if autofs service fails it is OK if using a test amd */
|
||||
if (ret != 0 && gopt.portmap_program == AMQ_PROGRAM)
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
* Create the autofs service for amd.
|
||||
*/
|
||||
plog(XLOG_INFO, "creating autofs service listener");
|
||||
ret = create_autofs_service(&soAUTOFS, &autofs_port, &autofsxprt, autofs_program_1);
|
||||
/* if autofs service fails it is OK if using a test amd */
|
||||
if (ret != 0 && gopt.portmap_program == AMQ_PROGRAM)
|
||||
return ret;
|
||||
#endif /* HAVE_FS_AUTOFS */
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: nfs_subr.c,v 1.3 1999/01/13 23:31:00 ezk Exp $
|
||||
* $Id: nfs_subr.c,v 1.1.1.1 1998/11/05 02:04:48 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -131,7 +131,7 @@ nfsproc_getattr_2_svc(am_nfs_fh *argp, struct svc_req *rqstp)
|
||||
#ifdef DEBUG
|
||||
amuDebug(D_TRACE)
|
||||
plog(XLOG_DEBUG, "\tstat(%s), size = %d", mp->am_path,
|
||||
(int) attrp->ns_u.ns_attr_u.na_size);
|
||||
attrp->ns_u.ns_attr_u.na_size);
|
||||
#endif /* DEBUG */
|
||||
|
||||
mp->am_stats.s_getattr++;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_TEMPLATE.c,v 1.2 1999/01/10 21:53:48 ezk Exp $
|
||||
* $Id: ops_TEMPLATE.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_autofs.c,v 1.4 1999/01/13 23:31:00 ezk Exp $
|
||||
* $Id: ops_autofs.c,v 1.2 1998/12/27 06:24:47 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -356,7 +356,7 @@ autofs_program_1(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
(SVC_IN_ARG_TYPE) &argument)) {
|
||||
plog(XLOG_ERROR,
|
||||
"AUTOFS xdr decode failed for %d %d %d",
|
||||
(int) rqstp->rq_prog, (int) rqstp->rq_vers, (int) rqstp->rq_proc);
|
||||
rqstp->rq_prog, rqstp->rq_vers, rqstp->rq_proc);
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
@@ -433,13 +433,11 @@ autofs_unmount_1_svc(struct umntrequest *ur, struct umntres *result, struct auth
|
||||
int err = 0;
|
||||
|
||||
#ifdef HAVE_FIELD_UMNTREQUEST_RDEVID
|
||||
plog(XLOG_INFO, "XXX: autofs_unmount_1_svc: %d:%lu:%lu:0x%lx",
|
||||
ur->isdirect, (unsigned long) ur->devid, (unsigned long) ur->rdevid,
|
||||
(unsigned long) ur->next);
|
||||
plog(XLOG_INFO, "XXX: autofs_unmount_1_svc: %d:%u:%lu:0x%x",
|
||||
ur->isdirect, ur->devid, ur->rdevid, ur->next);
|
||||
#else /* HAVE_FIELD_UMNTREQUEST_RDEVID */
|
||||
plog(XLOG_INFO, "XXX: autofs_unmount_1_svc: %d:%lu:0x%lx",
|
||||
ur->isdirect, (unsigned long) ur->devid,
|
||||
(unsigned long) ur->next);
|
||||
plog(XLOG_INFO, "XXX: autofs_unmount_1_svc: %d:%u:0x%x",
|
||||
ur->isdirect, ur->devid, ur->next);
|
||||
#endif /* HAVE_FIELD_UMNTREQUEST_RDEVID */
|
||||
|
||||
err = EINVAL; /* XXX: not implemented yet */
|
||||
@@ -616,8 +614,8 @@ autofs_bgmount(struct continuation * cp, int mpe)
|
||||
* Don't try logging the string from mf, since it may be bad!
|
||||
*/
|
||||
if (cp->fs_opts.opt_fs != mf->mf_fo->opt_fs)
|
||||
plog(XLOG_ERROR, "use %s instead of 0x%lx",
|
||||
cp->fs_opts.opt_fs, (unsigned long) mf->mf_fo->opt_fs);
|
||||
plog(XLOG_ERROR, "use %s instead of 0x%x",
|
||||
cp->fs_opts.opt_fs, mf->mf_fo->opt_fs);
|
||||
|
||||
mp->am_link = str3cat((char *) 0,
|
||||
cp->fs_opts.opt_fs, "/", link_dir);
|
||||
@@ -702,7 +700,7 @@ autofs_bgmount(struct continuation * cp, int mpe)
|
||||
int i = atoi(mf->mf_fo->opt_delay);
|
||||
if (i > 0 && clocktime() < (cp->start + i)) {
|
||||
#ifdef DEBUG
|
||||
dlog("Mount of %s delayed by %lds", mf->mf_mount, i - clocktime() + cp->start);
|
||||
dlog("Mount of %s delayed by %ds", mf->mf_mount, i - clocktime() + cp->start);
|
||||
#endif /* DEBUG */
|
||||
this_error = -1;
|
||||
}
|
||||
@@ -1000,7 +998,7 @@ autofs_lookuppn(am_node *mp, char *fname, int *error_return, int op)
|
||||
if (error) {
|
||||
#ifdef DEBUG
|
||||
errno = error; /* XXX */
|
||||
dlog("Returning error: %m");
|
||||
dlog("Returning error: %m", error);
|
||||
#endif /* DEBUG */
|
||||
XFREE(fname);
|
||||
ereturn(error);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_cachefs.c,v 1.2 1999/01/10 21:53:49 ezk Exp $
|
||||
* $Id: ops_cachefs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_cdfs.c,v 1.3 1999/03/30 17:22:46 ezk Exp $
|
||||
* $Id: ops_cdfs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -148,19 +148,6 @@ mount_cdfs(char *dir, char *fs_name, char *opts)
|
||||
if (hasmntopt(&mnt, MNTTAB_OPT_RRIP))
|
||||
cdfs_flags |= MNT2_CDFS_OPT_RRIP;
|
||||
#endif /* defined(MNT2_CDFS_OPT_RRIP) && defined(MNTTAB_OPT_RRIP) */
|
||||
#if defined(MNT2_CDFS_OPT_NORRIP) && defined(MNTTAB_OPT_NORRIP)
|
||||
if (hasmntopt(&mnt, MNTTAB_OPT_NORRIP))
|
||||
cdfs_flags |= MNT2_CDFS_OPT_NORRIP;
|
||||
#endif /* defined(MNT2_CDFS_OPT_NORRIP) && defined(MNTTAB_OPT_NORRIP) */
|
||||
|
||||
#if defined(MNT2_CDFS_OPT_GENS) && defined(MNTTAB_OPT_GENS)
|
||||
if (hasmntopt(&mnt, MNTTAB_OPT_GENS))
|
||||
cdfs_flags |= MNT2_CDFS_OPT_GENS;
|
||||
#endif /* defined(MNT2_CDFS_OPT_GENS) && defined(MNTTAB_OPT_GENS) */
|
||||
#if defined(MNT2_CDFS_OPT_EXTATT) && defined(MNTTAB_OPT_EXTATT)
|
||||
if (hasmntopt(&mnt, MNTTAB_OPT_EXTATT))
|
||||
cdfs_flags |= MNT2_CDFS_OPT_EXTATT;
|
||||
#endif /* defined(MNT2_CDFS_OPT_EXTATT) && defined(MNTTAB_OPT_EXTATT) */
|
||||
|
||||
genflags = compute_mount_flags(&mnt);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_efs.c,v 1.2 1999/01/10 21:53:49 ezk Exp $
|
||||
* $Id: ops_efs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_lofs.c,v 1.2 1999/01/10 21:53:49 ezk Exp $
|
||||
* $Id: ops_lofs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_mfs.c,v 1.2 1999/01/10 21:53:50 ezk Exp $
|
||||
* $Id: ops_mfs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
+10
-15
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_nfs.c,v 1.5 1999/03/13 17:03:28 ezk Exp $
|
||||
* $Id: ops_nfs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -148,7 +148,7 @@ find_nfs_fhandle_cache(voidp idv, int done)
|
||||
|
||||
#ifdef DEBUG
|
||||
if (fp2) {
|
||||
dlog("fh cache gives fp %#lx, fs %s", (unsigned long) fp2, fp2->fh_path);
|
||||
dlog("fh cache gives fp %#x, fs %s", fp2, fp2->fh_path);
|
||||
} else {
|
||||
dlog("fh cache search failed");
|
||||
}
|
||||
@@ -198,7 +198,7 @@ got_nfs_fh(voidp pkt, int len, struct sockaddr_in * sa, struct sockaddr_in * ia,
|
||||
*/
|
||||
if (fp->fh_wchan) {
|
||||
#ifdef DEBUG
|
||||
dlog("Calling wakeup on %#lx", (unsigned long) fp->fh_wchan);
|
||||
dlog("Calling wakeup on %#x", fp->fh_wchan);
|
||||
#endif /* DEBUG */
|
||||
wakeup(fp->fh_wchan);
|
||||
}
|
||||
@@ -259,7 +259,7 @@ prime_nfs_fhandle_cache(char *path, fserver *fs, am_nfs_handle_t *fhbuf, voidp w
|
||||
if (fs == fp->fh_fs && STREQ(path, fp->fh_path)) {
|
||||
switch (fp->fh_error) {
|
||||
case 0:
|
||||
plog(XLOG_INFO, "prime_nfs_fhandle_cache: NFS version %d", (int) fp->fh_nfs_version);
|
||||
plog(XLOG_INFO, "prime_nfs_fhandle_cache: NFS version %d", fp->fh_nfs_version);
|
||||
#ifdef HAVE_FS_NFS3
|
||||
if (fp->fh_nfs_version == NFS_VERSION3)
|
||||
error = fp->fh_error = unx_error(fp->fh_nfs_handle.v3.fhs_status);
|
||||
@@ -449,7 +449,7 @@ call_mountd(fh_cache *fp, u_long proc, fwd_fun f, voidp wchan)
|
||||
#endif /* HAVE_FS_NFS3 */
|
||||
mnt_version = MOUNTVERS;
|
||||
plog(XLOG_INFO, "call_mountd: NFS version %d, mount version %d",
|
||||
(int) fp->fh_nfs_version, (int) mnt_version);
|
||||
fp->fh_nfs_version, mnt_version);
|
||||
|
||||
rpc_msg_init(&mnt_msg, MOUNTPROG, mnt_version, MOUNTPROC_NULL);
|
||||
len = make_rpc_packet(iobuf,
|
||||
@@ -585,13 +585,10 @@ mount_nfs_fh(am_nfs_handle_t *fhp, char *dir, char *fs_name, char *opts, mntfs *
|
||||
strcpy(host + MAXHOSTNAMELEN - 3, "..");
|
||||
#endif /* MAXHOSTNAMELEN */
|
||||
|
||||
if (mf->mf_remopts && *mf->mf_remopts &&
|
||||
!islocalnet(fs->fs_ip->sin_addr.s_addr)) {
|
||||
plog(XLOG_INFO, "Using remopts=\"%s\"", mf->mf_remopts);
|
||||
if (mf->mf_remopts && *mf->mf_remopts && !islocalnet(fs->fs_ip->sin_addr.s_addr))
|
||||
xopts = strdup(mf->mf_remopts);
|
||||
} else {
|
||||
else
|
||||
xopts = strdup(opts);
|
||||
}
|
||||
|
||||
memset((voidp) &mnt, 0, sizeof(mnt));
|
||||
mnt.mnt_dir = dir;
|
||||
@@ -625,7 +622,7 @@ mount_nfs_fh(am_nfs_handle_t *fhp, char *dir, char *fs_name, char *opts, mntfs *
|
||||
mnt.mnt_type = MNTTAB_TYPE_NFS;
|
||||
}
|
||||
#endif /* HAVE_FS_NFS3 */
|
||||
plog(XLOG_INFO, "mount_nfs_fh: NFS version %d", (int) nfs_version);
|
||||
plog(XLOG_INFO, "mount_nfs_fh: NFS version %d", nfs_version);
|
||||
#if defined(HAVE_FS_NFS3) || defined(HAVE_TRANSPORT_TYPE_TLI)
|
||||
plog(XLOG_INFO, "mount_nfs_fh: using NFS transport %s", nfs_proto);
|
||||
#endif /* defined(HAVE_FS_NFS3) || defined(HAVE_TRANSPORT_TYPE_TLI) */
|
||||
@@ -662,10 +659,8 @@ mount_nfs_fh(am_nfs_handle_t *fhp, char *dir, char *fs_name, char *opts, mntfs *
|
||||
|
||||
/* finally call the mounting function */
|
||||
#ifdef DEBUG
|
||||
amuDebug(D_TRACE) {
|
||||
amuDebug(D_TRACE)
|
||||
print_nfs_args(&nfs_args, nfs_version);
|
||||
plog(XLOG_DEBUG, "Generic mount flags 0x%x", genflags);
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
error = mount_fs(&mnt, genflags, (caddr_t) &nfs_args, retry, type,
|
||||
nfs_version, nfs_proto, mnttab_file_name);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_nfs3.c,v 1.2 1999/01/10 21:53:50 ezk Exp $
|
||||
* $Id: ops_nfs3.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_nullfs.c,v 1.2 1999/01/10 21:53:50 ezk Exp $
|
||||
* $Id: ops_nullfs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_pcfs.c,v 1.2 1999/01/10 21:53:50 ezk Exp $
|
||||
* $Id: ops_pcfs.c,v 1.1.1.1 1998/11/05 02:04:50 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_tfs.c,v 1.2 1999/01/10 21:53:51 ezk Exp $
|
||||
* $Id: ops_tfs.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_tmpfs.c,v 1.2 1999/01/10 21:53:51 ezk Exp $
|
||||
* $Id: ops_tmpfs.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_ufs.c,v 1.2 1999/01/10 21:53:51 ezk Exp $
|
||||
* $Id: ops_ufs.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -132,7 +132,7 @@ mount_ufs(char *dir, char *fs_name, char *opts)
|
||||
#endif /* HAVE_FIELD_UFS_ARGS_T_FLAGS */
|
||||
|
||||
#ifdef HAVE_FIELD_UFS_ARGS_T_UFS_FLAGS
|
||||
ufs_args.ufs_flags = genflags;
|
||||
ufs_args.ufs_flags = genflags; /* XXX: is this correct? */
|
||||
#endif /* HAVE_FIELD_UFS_ARGS_T_UFS_FLAGS */
|
||||
|
||||
#ifdef HAVE_FIELD_UFS_ARGS_T_FSPEC
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_umapfs.c,v 1.2 1999/01/10 21:53:51 ezk Exp $
|
||||
* $Id: ops_umapfs.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_unionfs.c,v 1.2 1999/01/10 21:53:51 ezk Exp $
|
||||
* $Id: ops_unionfs.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: ops_xfs.c,v 1.2 1999/01/10 21:53:52 ezk Exp $
|
||||
* $Id: ops_xfs.c,v 1.1.1.1 1998/11/05 02:04:51 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
+4
-24
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997-1999 Erez Zadok
|
||||
* Copyright (c) 1997-1998 Erez Zadok
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* %W% (Berkeley) %G%
|
||||
*
|
||||
* $Id: opts.c,v 1.6 1999/09/30 21:01:32 ezk Exp $
|
||||
* $Id: opts.c,v 1.2 1998/12/27 06:24:48 ezk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -95,7 +95,6 @@ struct functable {
|
||||
*/
|
||||
static int f_in_network(char *);
|
||||
static int f_netgrp(char *);
|
||||
static int f_netgrpd(char *);
|
||||
static int f_exists(char *);
|
||||
static int f_false(char *);
|
||||
static int f_true(char *);
|
||||
@@ -175,10 +174,6 @@ static struct opt opt_fields[] = {
|
||||
0, &gopt.op_sys, 0, TRUE },
|
||||
{ S("osver"),
|
||||
0, &gopt.op_sys_ver, 0, TRUE },
|
||||
{ S("full_os"),
|
||||
0, &gopt.op_sys_full, 0, TRUE },
|
||||
{ S("vendor"),
|
||||
0, &gopt.op_sys_vendor, 0, TRUE },
|
||||
{ S("remopts"),
|
||||
&fs_static.opt_remopts, 0, 0, FALSE },
|
||||
{ S("mount"),
|
||||
@@ -223,7 +218,6 @@ static struct opt opt_fields[] = {
|
||||
static struct functable functable[] = {
|
||||
{ "in_network", f_in_network },
|
||||
{ "netgrp", f_netgrp },
|
||||
{ "netgrpd", f_netgrpd },
|
||||
{ "exists", f_exists },
|
||||
{ "false", f_false },
|
||||
{ "true", f_true },
|
||||
@@ -500,7 +494,7 @@ eval_opts(char *opts, char *mapkey)
|
||||
continue;
|
||||
} else if (NSTREQ(f, "!", 1) && (func = functable_lookup(&f[1]))) {
|
||||
/* then this is a negated prefixed function such as "!exists" */
|
||||
plog(XLOG_INFO, "executing negated function %s", &f[1]);
|
||||
plog(XLOG_USER, "executing negated function %s", &f[1]);
|
||||
if ((*func) (arg)) {
|
||||
return (0);
|
||||
}
|
||||
@@ -736,7 +730,7 @@ f_in_network(char *arg)
|
||||
}
|
||||
|
||||
|
||||
/* test if this host (short hostname form) is in netgroup (arg) */
|
||||
/* test if this host is in netgroup (arg) */
|
||||
static int
|
||||
f_netgrp(char *arg)
|
||||
{
|
||||
@@ -750,20 +744,6 @@ f_netgrp(char *arg)
|
||||
}
|
||||
|
||||
|
||||
/* test if this host (fully-qualified name) is in netgroup (arg) */
|
||||
static int
|
||||
f_netgrpd(char *arg)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = innetgr(arg, opt_hostd, NULL, NULL);
|
||||
#ifdef DEBUG
|
||||
plog(XLOG_USER, "netgrp = %s status = %d hostd = %s", arg, status, opt_hostd);
|
||||
#endif /* DEBUG */
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/* test if file (arg) exists via lstat */
|
||||
static int
|
||||
f_exists(char *arg)
|
||||
|
||||
Loaded 100 of 1772 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user