summaryrefslogtreecommitdiffstats
path: root/contrib/amd/libamu
diff options
context:
space:
mode:
authormbr <mbr@FreeBSD.org>2003-09-02 15:27:38 +0000
committermbr <mbr@FreeBSD.org>2003-09-02 15:27:38 +0000
commit7d0df748b4c59651751f156e408f856a02073b69 (patch)
tree4674a9f108ae4334ed6a61634f703f67f6533f4d /contrib/amd/libamu
parent532be24b7ef077cdfe0129dee60ab1f934c24181 (diff)
downloadFreeBSD-src-7d0df748b4c59651751f156e408f856a02073b69.zip
FreeBSD-src-7d0df748b4c59651751f156e408f856a02073b69.tar.gz
Virgin import of AMD (am-utils) 20030828 (6.0.9)
Diffstat (limited to 'contrib/amd/libamu')
-rw-r--r--contrib/amd/libamu/.cvsignore1
-rw-r--r--contrib/amd/libamu/amu.h4
-rw-r--r--contrib/amd/libamu/hasmntopt.c4
-rw-r--r--contrib/amd/libamu/misc_rpc.c13
-rw-r--r--contrib/amd/libamu/mount_fs.c143
-rw-r--r--contrib/amd/libamu/mtab.c26
-rw-r--r--contrib/amd/libamu/nfs_prot_xdr.c4
-rw-r--r--contrib/amd/libamu/strerror.c68
-rw-r--r--contrib/amd/libamu/util.c4
-rw-r--r--contrib/amd/libamu/wire.c68
-rw-r--r--contrib/amd/libamu/xdr_func.c108
-rw-r--r--contrib/amd/libamu/xutil.c70
12 files changed, 248 insertions, 265 deletions
diff --git a/contrib/amd/libamu/.cvsignore b/contrib/amd/libamu/.cvsignore
new file mode 100644
index 0000000..70845e0
--- /dev/null
+++ b/contrib/amd/libamu/.cvsignore
@@ -0,0 +1 @@
+Makefile.in
diff --git a/contrib/amd/libamu/amu.h b/contrib/amd/libamu/amu.h
index 3769652..e6532fa 100644
--- a/contrib/amd/libamu/amu.h
+++ b/contrib/amd/libamu/amu.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: amu.h,v 1.3.2.1 2001/01/10 03:23:38 ezk Exp $
+ * $Id: amu.h,v 1.3.2.3 2002/12/27 22:45:11 ezk Exp $
*
*/
diff --git a/contrib/amd/libamu/hasmntopt.c b/contrib/amd/libamu/hasmntopt.c
index 9e76752..843ef2f 100644
--- a/contrib/amd/libamu/hasmntopt.c
+++ b/contrib/amd/libamu/hasmntopt.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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 @@ n * modification, are permitted provided that the following conditions
*
* %W% (Berkeley) %G%
*
- * $Id: hasmntopt.c,v 1.3.2.1 2001/01/10 03:23:39 ezk Exp $
+ * $Id: hasmntopt.c,v 1.3.2.3 2002/12/27 22:45:11 ezk Exp $
*
*/
diff --git a/contrib/amd/libamu/misc_rpc.c b/contrib/amd/libamu/misc_rpc.c
index 616ceed..ae413c3 100644
--- a/contrib/amd/libamu/misc_rpc.c
+++ b/contrib/amd/libamu/misc_rpc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: misc_rpc.c,v 1.4.2.1 2001/01/10 03:23:39 ezk Exp $
+ * $Id: misc_rpc.c,v 1.4.2.5 2002/12/29 00:46:43 ib42 Exp $
*
*/
@@ -127,6 +127,13 @@ make_rpc_packet(char *buf, int buflen, u_long proc, struct rpc_msg *mp, voidp ar
{
XDR msg_xdr;
int len;
+ /*
+ * Never cast pointers between different integer types, it breaks badly
+ * on big-endian platforms if those types have different sizes.
+ *
+ * Cast to a local variable instead, and use that variable's address.
+ */
+ enum_t local_proc = (enum_t) proc;
xdrmem_create(&msg_xdr, buf, buflen, XDR_ENCODE);
@@ -139,7 +146,7 @@ make_rpc_packet(char *buf, int buflen, u_long proc, struct rpc_msg *mp, voidp ar
/*
* Called procedure number
*/
- if (!xdr_enum(&msg_xdr, (enum_t *) & proc))
+ if (!xdr_enum(&msg_xdr, &local_proc))
return -EIO;
/*
diff --git a/contrib/amd/libamu/mount_fs.c b/contrib/amd/libamu/mount_fs.c
index c914663..c6a468f 100644
--- a/contrib/amd/libamu/mount_fs.c
+++ b/contrib/amd/libamu/mount_fs.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: mount_fs.c,v 1.11.2.5 2001/04/14 21:08:25 ezk Exp $
+ * $Id: mount_fs.c,v 1.11.2.11 2003/05/08 17:57:53 ib42 Exp $
*
*/
@@ -105,13 +105,10 @@ struct opt_tab mnt_flags[] =
{MNTTAB_OPT_OVERLAY, MNT2_GEN_OPT_OVERLAY},
#endif /* defined(MNT2_GEN_OPT_OVERLAY) && defined(MNTTAB_OPT_OVERLAY) */
-#if defined(MNT2_NFS_OPT_PROPLIST) && defined(MNTTAB_OPT_PROPLIST)
- {MNTTAB_OPT_PROPLIST, MNT2_NFS_OPT_PROPLIST},
-#endif /* defined(MNT2_NFS_OPT_PROPLIST) && defined(MNTTAB_OPT_PROPLIST) */
-
-#if defined(MNT2_NFS_OPT_NONLM) && defined(MNTTAB_OPT_NOLOCK)
- {MNTTAB_OPT_NOLOCK, MNT2_NFS_OPT_NONLM},
-#endif /* defined(MNT2_NFS_OPT_NONLM) && defined(MNTTAB_OPT_NOLOCK) */
+ /*
+ * Do not define MNT2_NFS_OPT_* entries here! This is for generic
+ * mount(2) options only, not for NFS mount options.
+ */
{0, 0}
};
@@ -122,27 +119,14 @@ int
compute_mount_flags(mntent_t *mntp)
{
struct opt_tab *opt;
- int flags;
+ int flags = 0;
- /* start: this must come first */
#ifdef MNT2_GEN_OPT_NEWTYPE
flags = MNT2_GEN_OPT_NEWTYPE;
-#else /* not MNT2_GEN_OPT_NEWTYPE */
- /* Not all machines have MNT2_GEN_OPT_NEWTYPE (HP-UX 9.01) */
- flags = 0;
-#endif /* not MNT2_GEN_OPT_NEWTYPE */
-
-#if defined(MNT2_GEN_OPT_OVERLAY) && defined(MNTTAB_OPT_OVERLAY)
- /*
- * Overlay this amd mount (presumably on another amd which died
- * before and left the machine hung). This will allow a new amd or
- * hlfsd to be remounted on top of another one.
- */
- if (hasmntopt(mntp, MNTTAB_OPT_OVERLAY)) {
- flags |= MNT2_GEN_OPT_OVERLAY;
- plog(XLOG_INFO, "using an overlay mount");
- }
-#endif /* defined(MNT2_GEN_OVERLAY) && defined(MNTOPT_OVERLAY) */
+#endif /* MNT2_GEN_OPT_NEWTYPE */
+#ifdef MNT2_GEN_OPT_AUTOMOUNTED
+ flags |= MNT2_GEN_OPT_AUTOMOUNTED;
+#endif /* not MNT2_GEN_OPT_AUTOMOUNTED */
/*
* Crack basic mount options
@@ -300,25 +284,25 @@ again:
* Additional fields in mntent_t
* are fixed up here
*/
-# ifdef HAVE_FIELD_MNTENT_T_MNT_CNODE
+# ifdef HAVE_MNTENT_T_MNT_CNODE
mnt->mnt_cnode = 0;
-# endif /* HAVE_FIELD_MNTENT_T_MNT_CNODE */
+# endif /* HAVE_MNTENT_T_MNT_CNODE */
-# ifdef HAVE_FIELD_MNTENT_T_MNT_RO
+# ifdef HAVE_MNTENT_T_MNT_RO
mnt->mnt_ro = (hasmntopt(mnt, MNTTAB_OPT_RO) != NULL);
-# endif /* HAVE_FIELD_MNTENT_T_MNT_RO */
+# endif /* HAVE_MNTENT_T_MNT_RO */
-# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME
-# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING
+# ifdef HAVE_MNTENT_T_MNT_TIME
+# ifdef HAVE_MNTENT_T_MNT_TIME_STRING
{ /* allocate enough space for a long */
char *str = (char *) xmalloc(13 * sizeof(char));
sprintf(str, "%ld", time((time_t *) NULL));
mnt->mnt_time = str;
}
-# else /* not HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */
+# else /* not HAVE_MNTENT_T_MNT_TIME_STRING */
mnt->mnt_time = time((time_t *) NULL);
-# endif /* not HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */
-# endif /* HAVE_FIELD_MNTENT_T_MNT_TIME */
+# endif /* not HAVE_MNTENT_T_MNT_TIME_STRING */
+# endif /* HAVE_MNTENT_T_MNT_TIME */
write_mntent(mnt, mnttabname);
@@ -374,7 +358,7 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
fhp->v3.mountres3_u.mountinfo.fhandle.fhandle3_val,
fh3.fh3_length);
-# if defined(HAVE_FIELD_NFS_ARGS_T_FHSIZE) || defined(HAVE_FIELD_NFS_ARGS_T_FH_LEN)
+# if defined(HAVE_NFS_ARGS_T_FHSIZE) || defined(HAVE_NFS_ARGS_T_FH_LEN)
/*
* Some systems (Irix/bsdi3) have a separate field in nfs_args for
* the length of the file handle for NFS V3. They insist that
@@ -382,9 +366,9 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
* include the length field.
*/
NFS_FH_DREF(nap->NFS_FH_FIELD, &(fh3.fh3_u.data));
-# else /* not defined(HAVE_FIELD_NFS_ARGS_T_FHSIZE) || defined(HAVE_FIELD_NFS_ARGS_T_FH_LEN) */
+# else /* not defined(HAVE_NFS_ARGS_T_FHSIZE) || defined(HAVE_NFS_ARGS_T_FH_LEN) */
NFS_FH_DREF(nap->NFS_FH_FIELD, &fh3);
-# endif /* not defined(HAVE_FIELD_NFS_ARGS_T_FHSIZE) || defined(HAVE_FIELD_NFS_ARGS_T_FH_LEN) */
+# endif /* not defined(HAVE_NFS_ARGS_T_FHSIZE) || defined(HAVE_NFS_ARGS_T_FH_LEN) */
# ifdef MNT2_NFS_OPT_NFSV3
nap->flags |= MNT2_NFS_OPT_NFSV3;
# endif /* MNT2_NFS_OPT_NFSV3 */
@@ -395,24 +379,24 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
#endif /* HAVE_FS_NFS3 */
NFS_FH_DREF(nap->NFS_FH_FIELD, &(fhp->v2.fhs_fh));
-#ifdef HAVE_FIELD_NFS_ARGS_T_FHSIZE
+#ifdef HAVE_NFS_ARGS_T_FHSIZE
# ifdef HAVE_FS_NFS3
if (nfs_version == NFS_VERSION3)
nap->fhsize = fh3.fh3_length;
else
# endif /* HAVE_FS_NFS3 */
nap->fhsize = FHSIZE;
-#endif /* HAVE_FIELD_NFS_ARGS_T_FHSIZE */
+#endif /* HAVE_NFS_ARGS_T_FHSIZE */
/* this is the version of the nfs_args structure, not of NFS! */
-#ifdef HAVE_FIELD_NFS_ARGS_T_FH_LEN
+#ifdef HAVE_NFS_ARGS_T_FH_LEN
# ifdef HAVE_FS_NFS3
if (nfs_version == NFS_VERSION3)
nap->fh_len = fh3.fh3_length;
else
# endif /* HAVE_FS_NFS3 */
nap->fh_len = FHSIZE;
-#endif /* HAVE_FIELD_NFS_ARGS_T_FH_LEN */
+#endif /* HAVE_NFS_ARGS_T_FH_LEN */
/************************************************************************/
/*** HOST NAME ***/
@@ -440,14 +424,14 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
#endif /* MNTTAB_OPT_ACTIMEO */
if (acval) {
-#ifdef HAVE_FIELD_NFS_ARGS_T_ACREGMIN
+#ifdef HAVE_NFS_ARGS_T_ACREGMIN
nap->acregmin = acval; /* min ac timeout for reg files (sec) */
nap->acregmax = acval; /* max ac timeout for reg files (sec) */
-#endif /* HAVE_FIELD_NFS_ARGS_T_ACREGMIN */
-#ifdef HAVE_FIELD_NFS_ARGS_T_ACDIRMIN
+#endif /* HAVE_NFS_ARGS_T_ACREGMIN */
+#ifdef HAVE_NFS_ARGS_T_ACDIRMIN
nap->acdirmin = acval; /* min ac timeout for dirs (sec) */
nap->acdirmax = acval; /* max ac timeout for dirs (sec) */
-#endif /* HAVE_FIELD_NFS_ARGS_T_ACDIRMIN */
+#endif /* HAVE_NFS_ARGS_T_ACDIRMIN */
} else {
#ifdef MNTTAB_OPT_ACREGMIN
nap->acregmin = hasmntval(mntp, MNTTAB_OPT_ACREGMIN);
@@ -503,7 +487,7 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
nap->flags |= MNT2_NFS_OPT_TCP;
#endif /* MNT2_NFS_OPT_TCP */
-#ifdef HAVE_FIELD_NFS_ARGS_T_SOTYPE
+#ifdef HAVE_NFS_ARGS_T_SOTYPE
/* bsdi3 uses this */
if (nfs_proto) {
if (STREQ(nfs_proto, "tcp"))
@@ -511,9 +495,9 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
else if (STREQ(nfs_proto, "udp"))
nap->sotype = SOCK_DGRAM;
}
-#endif /* HAVE_FIELD_NFS_ARGS_T_SOTYPE */
+#endif /* HAVE_NFS_ARGS_T_SOTYPE */
-#ifdef HAVE_FIELD_NFS_ARGS_T_PROTO
+#ifdef HAVE_NFS_ARGS_T_PROTO
nap->proto = 0; /* bsdi3 sets this field to zero */
# ifdef IPPROTO_TCP
if (nfs_proto) {
@@ -523,16 +507,16 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
nap->proto = IPPROTO_UDP;
}
# endif /* IPPROTO_TCP */
-#endif /* HAVE_FIELD_NFS_ARGS_T_SOTYPE */
+#endif /* HAVE_NFS_ARGS_T_SOTYPE */
-#ifdef HAVE_FIELD_NFS_ARGS_T_VERSION
+#ifdef HAVE_NFS_ARGS_T_VERSION
# ifdef NFS_ARGSVERSION
nap->version = NFS_ARGSVERSION; /* BSDI 3.0 and OpenBSD 2.2 */
# endif /* NFS_ARGSVERSION */
# ifdef DG_MOUNT_NFS_VERSION
nap->version = DG_MOUNT_NFS_VERSION; /* dg-ux */
# endif /* DG_MOUNT_NFS_VERSION */
-#endif /* HAVE_FIELD_NFS_ARGS_VERSION */
+#endif /* HAVE_NFS_ARGS_VERSION */
/************************************************************************/
/*** OTHER NFS SOCKET RELATED OPTIONS AND FLAGS ***/
@@ -714,18 +698,23 @@ compute_nfs_args(nfs_args_t *nap, mntent_t *mntp, int genflags, struct sockaddr_
nap->flags |= MNT2_NFS_OPT_MAXGRPS;
#endif /* defined(MNT2_NFS_OPT_MAXGRPS) && defined(MNTTAB_OPT_MAXGROUPS) */
-#ifdef HAVE_FIELD_NFS_ARGS_T_OPTSTR
+#if defined(MNT2_NFS_OPT_NONLM) && defined(MNTTAB_OPT_NOLOCK)
+ if (hasmntopt(mntp, MNTTAB_OPT_NOLOCK) != NULL)
+ nap->flags |= MNT2_NFS_OPT_NONLM;
+#endif /* defined(MNT2_NFS_OPT_NONLM) && defined(MNTTAB_OPT_NOLOCK) */
+
+#ifdef HAVE_NFS_ARGS_T_OPTSTR
nap->optstr = mntp->mnt_opts;
-#endif /* HAVE_FIELD_NFS_ARGS_T_OPTSTR */
+#endif /* HAVE_NFS_ARGS_T_OPTSTR */
/************************************************************************/
/*** FINAL ACTIONS ***/
/************************************************************************/
-#ifdef HAVE_FIELD_NFS_ARGS_T_GFS_FLAGS
+#ifdef HAVE_NFS_ARGS_T_GFS_FLAGS
/* Ultrix stores generic flags in nfs_args.gfs_flags. */
nap->gfs_flags = genflags;
-#endif /* HAVE_FIELD_NFS_ARGS_T_FLAGS */
+#endif /* HAVE_NFS_ARGS_T_FLAGS */
return; /* end of compute_nfs_args() function */
}
@@ -863,19 +852,19 @@ print_nfs_args(const nfs_args_t *nap, u_long nfs_version)
nbp = nap->syncaddr;
plog(XLOG_DEBUG, "NA->syncaddr {netbuf} 0x%x", (int) nbp);
kncp = nap->knconf;
- plog(XLOG_DEBUG, "NA->knconf->semantics %lu", (unsigned long) kncp->knc_semantics);
+ plog(XLOG_DEBUG, "NA->knconf->semantics %lu", (u_long) kncp->knc_semantics);
plog(XLOG_DEBUG, "NA->knconf->protofmly \"%s\"", kncp->knc_protofmly);
plog(XLOG_DEBUG, "NA->knconf->proto \"%s\"", kncp->knc_proto);
- plog(XLOG_DEBUG, "NA->knconf->rdev %lu", kncp->knc_rdev);
+ plog(XLOG_DEBUG, "NA->knconf->rdev %lu", (u_long) kncp->knc_rdev);
/* don't print knconf->unused field */
#else /* not HAVE_TRANSPORT_TYPE_TLI */
sap = (struct sockaddr_in *) &nap->addr;
plog(XLOG_DEBUG, "NA->addr {sockaddr_in} (len=%d) = \"%s\"",
(int) sizeof(struct sockaddr_in),
get_hex_string(sizeof(struct sockaddr_in), (const char *)sap));
-#ifdef HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
plog(XLOG_DEBUG, "NA->addr.sin_len = \"%d\"", sap->sin_len);
-#endif /* HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN */
+#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
plog(XLOG_DEBUG, "NA->addr.sin_family = \"%d\"", sap->sin_family);
plog(XLOG_DEBUG, "NA->addr.sin_port = \"%d\"", sap->sin_port);
plog(XLOG_DEBUG, "NA->addr.sin_addr = \"%s\"",
@@ -883,22 +872,22 @@ print_nfs_args(const nfs_args_t *nap, u_long nfs_version)
#endif /* not HAVE_TRANSPORT_TYPE_TLI */
plog(XLOG_DEBUG, "NA->hostname = \"%s\"", nap->hostname ? nap->hostname : "null");
-#ifdef HAVE_FIELD_NFS_ARGS_T_NAMLEN
+#ifdef HAVE_NFS_ARGS_T_NAMLEN
plog(XLOG_DEBUG, "NA->namlen = %d", nap->namlen);
-#endif /* HAVE_FIELD_NFS_ARGS_T_NAMLEN */
+#endif /* HAVE_NFS_ARGS_T_NAMLEN */
#ifdef MNT2_NFS_OPT_FSNAME
plog(XLOG_DEBUG, "NA->fsname = \"%s\"", nap->fsname ? nap->fsname : "null");
#endif /* MNT2_NFS_OPT_FSNAME */
-#ifdef HAVE_FIELD_NFS_ARGS_T_FHSIZE
+#ifdef HAVE_NFS_ARGS_T_FHSIZE
plog(XLOG_DEBUG, "NA->fhsize = %d", nap->fhsize);
fhlen = nap->fhsize;
-#endif /* HAVE_FIELD_NFS_ARGS_T_FHSIZE */
-#ifdef HAVE_FIELD_NFS_ARGS_T_FH_LEN
+#endif /* HAVE_NFS_ARGS_T_FHSIZE */
+#ifdef HAVE_NFS_ARGS_T_FH_LEN
plog(XLOG_DEBUG, "NA->fh_len = %d", nap->fh_len);
fhlen = nap->fh_len;
-#endif /* HAVE_FIELD_NFS_ARGS_T_FH_LEN */
+#endif /* HAVE_NFS_ARGS_T_FH_LEN */
/*
* XXX: need to figure out how to correctly print file handles,
@@ -909,32 +898,32 @@ print_nfs_args(const nfs_args_t *nap, u_long nfs_version)
plog(XLOG_DEBUG, "NA->filehandle = \"%s\"",
get_hex_string(fhlen, (const char *) &nap->NFS_FH_FIELD));
-#ifdef HAVE_FIELD_NFS_ARGS_T_SOTYPE
+#ifdef HAVE_NFS_ARGS_T_SOTYPE
plog(XLOG_DEBUG, "NA->sotype = %d", nap->sotype);
-#endif /* HAVE_FIELD_NFS_ARGS_T_SOTYPE */
-#ifdef HAVE_FIELD_NFS_ARGS_T_PROTO
+#endif /* HAVE_NFS_ARGS_T_SOTYPE */
+#ifdef HAVE_NFS_ARGS_T_PROTO
plog(XLOG_DEBUG, "NA->proto = %d", (int) nap->proto);
-#endif /* HAVE_FIELD_NFS_ARGS_T_PROTO */
-#ifdef HAVE_FIELD_NFS_ARGS_T_VERSION
+#endif /* HAVE_NFS_ARGS_T_PROTO */
+#ifdef HAVE_NFS_ARGS_T_VERSION
plog(XLOG_DEBUG, "NA->version = %d", nap->version);
-#endif /* HAVE_FIELD_NFS_ARGS_T_VERSION */
+#endif /* HAVE_NFS_ARGS_T_VERSION */
plog(XLOG_DEBUG, "NA->flags = 0x%x", (int) nap->flags);
plog(XLOG_DEBUG, "NA->rsize = %d", (int) nap->rsize);
plog(XLOG_DEBUG, "NA->wsize = %d", (int) nap->wsize);
-#ifdef HAVE_FIELD_NFS_ARGS_T_BSIZE
+#ifdef HAVE_NFS_ARGS_T_BSIZE
plog(XLOG_DEBUG, "NA->bsize = %d", nap->bsize);
-#endif /* HAVE_FIELD_NFS_ARGS_T_BSIZE */
+#endif /* HAVE_NFS_ARGS_T_BSIZE */
plog(XLOG_DEBUG, "NA->timeo = %d", (int) nap->timeo);
plog(XLOG_DEBUG, "NA->retrans = %d", (int) nap->retrans);
-#ifdef HAVE_FIELD_NFS_ARGS_T_ACREGMIN
+#ifdef HAVE_NFS_ARGS_T_ACREGMIN
plog(XLOG_DEBUG, "NA->acregmin = %d", (int) nap->acregmin);
plog(XLOG_DEBUG, "NA->acregmax = %d", (int) nap->acregmax);
plog(XLOG_DEBUG, "NA->acdirmin = %d", (int) nap->acdirmin);
plog(XLOG_DEBUG, "NA->acdirmax = %d", (int) nap->acdirmax);
-#endif /* HAVE_FIELD_NFS_ARGS_T_ACREGMIN */
+#endif /* HAVE_NFS_ARGS_T_ACREGMIN */
#ifdef MNTTAB_OPT_SYMTTL
plog(XLOG_DEBUG, "NA->symttl = %d", nap->symttl);
#endif /* MNTTAB_OPT_SYMTTL */
diff --git a/contrib/amd/libamu/mtab.c b/contrib/amd/libamu/mtab.c
index 1fb3a33..eab87b3 100644
--- a/contrib/amd/libamu/mtab.c
+++ b/contrib/amd/libamu/mtab.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: mtab.c,v 1.3.2.3 2001/04/14 21:08:25 ezk Exp $
+ * $Id: mtab.c,v 1.3.2.7 2002/12/27 22:45:12 ezk Exp $
*
*/
@@ -60,11 +60,11 @@ mnt_free(mntent_t *mp)
XFREE(mp->mnt_type);
XFREE(mp->mnt_opts);
-#ifdef HAVE_FIELD_MNTENT_T_MNT_TIME
-# ifdef HAVE_FIELD_MNTENT_T_MNT_TIME_STRING
+#ifdef HAVE_MNTENT_T_MNT_TIME
+# ifdef HAVE_MNTENT_T_MNT_TIME_STRING
XFREE(mp->mnt_time);
-# endif /* HAVE_FIELD_MNTENT_T_MNT_TIME_STRING */
-#endif /* HAVE_FIELD_MNTENT_T_MNT_TIME */
+# endif /* HAVE_MNTENT_T_MNT_TIME_STRING */
+#endif /* HAVE_MNTENT_T_MNT_TIME */
XFREE(mp);
}
@@ -154,22 +154,24 @@ hasmntval(mntent_t *mnt, char *opt)
if (eq) { /* and had an = after it */
char *endptr = NULL;
- long int i = strtol(eq,&endptr,0); /* hex and octal allowed ;-) */
+ long int i = strtol(eq, &endptr, 0); /* hex and octal allowed ;-) */
- if ( (! endptr) || /* endptr == NULL means all chars valid */
+ if (!endptr ||
/*
* endptr set means strtol saw a non-digit. If the
* non-digit is a comma, it's probably the start of the next
* option. If the comma is the first char though, complain about
* it (foo=,bar is made noticeable by this).
+ *
+ * Similar reasoning for '\0' instead of comma, it's the end
+ * of the string.
*/
- ((endptr == strchr(eq, ',')) && (endptr != eq))
- )
+ (endptr != eq && (*endptr == ',' || *endptr == '\0')))
return((int) i);
- /* whatever was after = wasn't a number */
+ /* whatever was after the '=' sign wasn't a number */
plog(XLOG_MAP, "invalid numeric option in \"%s\": \"%s\"", opt, str);
} else {
- /* No argument to option (= was missing) */
+ /* No argument to option ('=' sign was missing) */
plog(XLOG_MAP, "numeric option to \"%s\" missing", opt);
}
}
diff --git a/contrib/amd/libamu/nfs_prot_xdr.c b/contrib/amd/libamu/nfs_prot_xdr.c
index c126471..9a3ff9a 100644
--- a/contrib/amd/libamu/nfs_prot_xdr.c
+++ b/contrib/amd/libamu/nfs_prot_xdr.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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_xdr.c,v 1.3.2.1 2001/01/10 03:23:40 ezk Exp $
+ * $Id: nfs_prot_xdr.c,v 1.3.2.3 2002/12/27 22:45:12 ezk Exp $
*
*/
diff --git a/contrib/amd/libamu/strerror.c b/contrib/amd/libamu/strerror.c
new file mode 100644
index 0000000..7c230bc
--- /dev/null
+++ b/contrib/amd/libamu/strerror.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2002-2003 Ion Badulescu
+ * Copyright (c) 1997-2003 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.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Jan-Simon Pendry at Imperial College, London.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgment:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * 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.
+ *
+ *
+ * $Id: strerror.c,v 1.2.2.2 2002/12/27 22:45:13 ezk Exp $
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif /* HAVE_CONFIG_H */
+#include <am_defs.h>
+#include <amu.h>
+
+
+/*
+ * Convert errno to a string
+ */
+char *
+strerror(int errnum)
+{
+#ifdef HAVE_EXTERN_SYS_ERRLIST
+ if (errnum < 0 || errnum >= (sizeof(sys_errlist) >> 2)) {
+ static char errstr[30];
+ sprintf(errstr, "Unknown error #%d", errnum);
+ return errstr;
+ }
+ return sys_errlist[error];
+#else /* not HAVE_EXTERN_SYS_ERRLIST */
+ return "unknown (strerror not available)";
+#endif /* not HAVE_EXTERN_SYS_ERRLIST */
+}
diff --git a/contrib/amd/libamu/util.c b/contrib/amd/libamu/util.c
index ff84997..e9b83ed 100644
--- a/contrib/amd/libamu/util.c
+++ b/contrib/amd/libamu/util.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: util.c,v 1.3.2.1 2001/01/10 03:23:41 ezk Exp $
+ * $Id: util.c,v 1.3.2.3 2002/12/27 22:45:13 ezk Exp $
*
*/
diff --git a/contrib/amd/libamu/wire.c b/contrib/amd/libamu/wire.c
index 25a4427..649b336 100644
--- a/contrib/amd/libamu/wire.c
+++ b/contrib/amd/libamu/wire.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: wire.c,v 1.8.2.5 2001/01/10 03:23:41 ezk Exp $
+ * $Id: wire.c,v 1.8.2.9 2002/12/27 22:45:13 ezk Exp $
*
*/
@@ -304,9 +304,51 @@ is_network_member(const char *net)
{
addrlist *al;
- for (al = localnets; al; al = al->ip_next)
- if (STREQ(net, al->ip_net_name) || STREQ(net, al->ip_net_num))
- return TRUE;
+ /*
+ * If the network name string does not contain a '/', use old behavior.
+ * If it does contain a '/' then interpret the string as a network/netmask
+ * pair. If "netmask" doesn't exist, use the interface's own netmask.
+ * Also support fully explicit netmasks such as 255.255.255.0 as well as
+ * bit-length netmask such as /24 (hex formats such 0xffffff00 work too).
+ */
+ if (strchr(net, '/') == NULL) {
+ for (al = localnets; al; al = al->ip_next)
+ if (STREQ(net, al->ip_net_name) || STREQ(net, al->ip_net_num))
+ return TRUE;
+ } else {
+ char *netstr = strdup(net), *maskstr;
+ u_long netnum, masknum = 0;
+ maskstr = strchr(netstr, '/');
+ maskstr++;
+ maskstr[-1] = '\0'; /* null terminate netstr */
+ if (*maskstr == '\0') /* if empty string, make it NULL */
+ maskstr = NULL;
+ /* check if netmask uses a dotted-quad or bit-length, or not defined at all */
+ if (maskstr) {
+ if (strchr(maskstr, '.')) {
+ masknum = inet_addr(maskstr);
+ if (masknum < 0) /* can be invalid (-1) or all-1s */
+ masknum = 0xffffffff;
+ } else if (NSTRCEQ(maskstr, "0x", 2)) {
+ masknum = strtoul(maskstr, NULL, 16);
+ } else {
+ int bits = atoi(maskstr);
+ if (bits < 0)
+ bits = 0;
+ if (bits > 32)
+ bits = 32;
+ masknum = 0xffffffff << (32-bits);
+ }
+ }
+ netnum = inet_addr(netstr); /* not checking return value, b/c -1 (0xffffffff) is valid */
+ XFREE(netstr); /* netstr not needed any longer */
+
+ /* now check against each local interface */
+ for (al = localnets; al; al = al->ip_next) {
+ if ((al->ip_addr & (maskstr ? masknum : al->ip_mask)) == netnum)
+ return TRUE;
+ }
+ }
return FALSE;
}
@@ -318,22 +360,22 @@ getwire(char **name1, char **number1)
{
addrlist *al = NULL, *tail = NULL;
struct ifaddrs *ifaddrs, *ifap;
-#ifndef HAVE_FIELD_STRUCT_IFADDRS_IFA_NEXT
+#ifndef HAVE_STRUCT_IFADDRS_IFA_NEXT
int count = 0, i;
-#endif /* not HAVE_FIELD_STRUCT_IFADDRS_IFA_NEXT */
+#endif /* not HAVE_STRUCT_IFADDRS_IFA_NEXT */
ifaddrs = NULL;
-#ifdef HAVE_FIELD_STRUCT_IFADDRS_IFA_NEXT
+#ifdef HAVE_STRUCT_IFADDRS_IFA_NEXT
if (getifaddrs(&ifaddrs) < 0)
goto out;
for (ifap = ifaddrs; ifap != NULL; ifap = ifap->ifa_next) {
-#else /* not HAVE_FIELD_STRUCT_IFADDRS_IFA_NEXT */
+#else /* not HAVE_STRUCT_IFADDRS_IFA_NEXT */
if (getifaddrs(&ifaddrs, &count) < 0)
goto out;
for (i = 0,ifap = ifaddrs; i < count; ifap++, i++) {
-#endif /* HAVE_FIELD_STRUCT_IFADDRS_IFA_NEXT */
+#endif /* HAVE_STRUCT_IFADDRS_IFA_NEXT */
if (!ifap || !ifap->ifa_addr || ifap->ifa_addr->sa_family != AF_INET)
continue;
@@ -377,11 +419,11 @@ out:
#else /* not HAVE_GETIFADDRS */
-#if defined(HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN)
+#if defined(HAVE_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
# define SIZE(ifr) (MAX((ifr)->ifr_addr.sa_len, sizeof((ifr)->ifr_addr)) + sizeof(ifr->ifr_name))
-#else /* not defined(HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN) */
+#else /* not defined(HAVE_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_STRUCT_SOCKADDR_SA_LEN) */
# define SIZE(ifr) sizeof(struct ifreq)
-#endif /* not defined(HAVE_FIELD_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_FIELD_STRUCT_SOCKADDR_SA_LEN) */
+#endif /* not defined(HAVE_STRUCT_IFREQ_IFR_ADDR) && defined(HAVE_STRUCT_SOCKADDR_SA_LEN) */
#define clist (ifc.ifc_ifcu.ifcu_req)
#define count (ifc.ifc_len/sizeof(struct ifreq))
diff --git a/contrib/amd/libamu/xdr_func.c b/contrib/amd/libamu/xdr_func.c
index 1e8085d..eed657c 100644
--- a/contrib/amd/libamu/xdr_func.c
+++ b/contrib/amd/libamu/xdr_func.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: xdr_func.c,v 1.4.2.4 2001/02/02 18:28:27 ezk Exp $
+ * $Id: xdr_func.c,v 1.4.2.7 2002/12/27 22:45:14 ezk Exp $
*
*/
@@ -55,17 +55,6 @@
/*
* MACROS:
*/
-#ifdef HAVE_FS_AUTOFS
-# ifndef A_MAXNAME
-# define A_MAXNAME 255
-# endif /* not A_MAXNAME */
-# ifndef A_MAXOPTS
-# define A_MAXOPTS 255
-# endif /* not A_MAXOPTS */
-# ifndef A_MAXPATH
-# define A_MAXPATH 1024
-# endif /* not A_MAXPATH */
-#endif /* HAVE_FS_AUTOFS */
/* forward definitions, are they needed? */
extern bool_t xdr_exportnode(XDR *xdrs, exportnode *objp);
@@ -1053,96 +1042,3 @@ xdr_writeargs(XDR *xdrs, nfswriteargs *objp)
return (TRUE);
}
#endif /* not HAVE_XDR_WRITEARGS */
-
-
-/*
- * AUTOFS XDR FUNCTIONS:
- */
-#ifdef HAVE_FS_AUTOFS
-# ifndef HAVE_XDR_MNTREQUEST
-bool_t
-xdr_mntrequest(XDR *xdrs, mntrequest *objp)
-{
-#ifdef DEBUG
- amuDebug(D_XDRTRACE)
- plog(XLOG_DEBUG, "xdr_mntrequest:");
-#endif /* DEBUG */
-
- if (!xdr_string(xdrs, &objp->name, A_MAXNAME))
- return (FALSE);
-
- if (!xdr_string(xdrs, &objp->map, A_MAXNAME))
- return (FALSE);
-
- if (!xdr_string(xdrs, &objp->opts, A_MAXOPTS))
- return (FALSE);
-
- if (!xdr_string(xdrs, &objp->path, A_MAXPATH))
- return (FALSE);
-
- return (TRUE);
-}
-# endif /* not HAVE_XDR_MNTREQUEST */
-
-
-# ifndef HAVE_XDR_MNTRES
-bool_t
-xdr_mntres(XDR *xdrs, mntres *objp)
-{
-#ifdef DEBUG
- amuDebug(D_XDRTRACE)
- plog(XLOG_DEBUG, "xdr_mntres:");
-#endif /* DEBUG */
-
- if (!xdr_int(xdrs, &objp->status))
- return (FALSE);
-
- return (TRUE);
-}
-# endif /* not HAVE_XDR_MNTRES */
-
-
-# ifndef HAVE_XDR_UMNTREQUEST
-bool_t
-xdr_umntrequest(XDR *xdrs, umntrequest *objp)
-{
-#ifdef DEBUG
- amuDebug(D_XDRTRACE)
- plog(XLOG_DEBUG, "xdr_umntrequest:");
-#endif /* DEBUG */
-
- if (!xdr_int(xdrs, &objp->isdirect))
- return (FALSE);
-
- if (!xdr_u_int(xdrs, (u_int *) &objp->devid))
- return (FALSE);
-
-#ifdef HAVE_FIELD_UMNTREQUEST_RDEVID
- if (!xdr_u_long(xdrs, &objp->rdevid))
- return (FALSE);
-#endif /* HAVE_FIELD_UMNTREQUEST_RDEVID */
-
- if (!xdr_pointer(xdrs, (char **) &objp->next, sizeof(umntrequest), (XDRPROC_T_TYPE) xdr_umntrequest))
- return (FALSE);
-
- return (TRUE);
-}
-# endif /* not HAVE_XDR_UMNTREQUEST */
-
-
-# ifndef HAVE_XDR_UMNTRES
-bool_t
-xdr_umntres(XDR *xdrs, umntres *objp)
-{
-#ifdef DEBUG
- amuDebug(D_XDRTRACE)
- plog(XLOG_DEBUG, "xdr_mntres:");
-#endif /* DEBUG */
-
- if (!xdr_int(xdrs, &objp->status))
- return (FALSE);
-
- return (TRUE);
-}
-# endif /* not HAVE_XDR_UMNTRES */
-#endif /* HAVE_FS_AUTOFS */
diff --git a/contrib/amd/libamu/xutil.c b/contrib/amd/libamu/xutil.c
index 998d0d8..ca571b6 100644
--- a/contrib/amd/libamu/xutil.c
+++ b/contrib/amd/libamu/xutil.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Erez Zadok
+ * Copyright (c) 1997-2003 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: xutil.c,v 1.11.2.6 2001/01/10 03:23:41 ezk Exp $
+ * $Id: xutil.c,v 1.11.2.12 2003/04/04 15:53:35 ezk Exp $
*
*/
@@ -80,11 +80,10 @@ static int orig_mem_bytes;
#endif /* DEBUG_MEM */
/* forward definitions */
+/* for GCC format string auditing */
static void real_plog(int lvl, const char *fmt, va_list vargs)
__attribute__((__format__(__printf__, 2, 0)));
-/* for GCC format string auditing */
-static const char *expand_error(const char *f, char *e, int maxlen)
- __attribute__((__format_arg__(1)));
+
#ifdef DEBUG
/*
@@ -292,15 +291,6 @@ checkup_mem(void)
static const char *
expand_error(const char *f, char *e, int maxlen)
{
-#ifndef HAVE_STRERROR
- /*
- * XXX: we are assuming that if a system doesn't has strerror,
- * then it has sys_nerr. If this assumption turns out to be wrong on
- * some systems, we'll have to write a separate test to detect if
- * a system has sys_nerr. -Erez
- */
- extern int sys_nerr;
-#endif /* not HAVE_STRERROR */
const char *p;
char *q;
int error = errno;
@@ -308,23 +298,7 @@ expand_error(const char *f, char *e, int maxlen)
for (p = f, q = e; (*q = *p) && len < maxlen; len++, q++, p++) {
if (p[0] == '%' && p[1] == 'm') {
- const char *errstr;
-#ifdef HAVE_STRERROR
- if (error < 0)
-#else /* not HAVE_STRERROR */
- if (error < 0 || error >= sys_nerr)
-#endif /* not HAVE_STRERROR */
- errstr = NULL;
- else
-#ifdef HAVE_STRERROR
- errstr = strerror(error);
-#else /* not HAVE_STRERROR */
- errstr = sys_errlist[error];
-#endif /* not HAVE_STRERROR */
- if (errstr)
- strcpy(q, errstr);
- else
- sprintf(q, "Error %d", error);
+ strcpy(q, strerror(error));
len += strlen(q) - 1;
q += strlen(q) - 1;
p++;
@@ -851,7 +825,11 @@ switch_to_logfile(char *logfile, int old_umask)
(void) fclose(logfp);
logfp = new_logfp;
- plog(XLOG_INFO, "switched to logfile \"%s\"", logfile);
+ if (logfile)
+ plog(XLOG_INFO, "switched to logfile \"%s\"", logfile);
+ else
+ plog(XLOG_INFO, "no logfile defined; using stderr");
+
return 0;
}
@@ -923,24 +901,14 @@ amu_release_controlling_tty(void)
#endif /* TIOCNOTTY */
int tempfd;
-#ifdef HAVE_SETSID
- /* XXX: one day maybe use vhangup(2) */
- if (setsid() < 0) {
- plog(XLOG_WARNING, "Could not release controlling tty using setsid(): %m");
- } else {
- plog(XLOG_INFO, "released controlling tty using setsid()");
- return;
- }
-#endif /* HAVE_SETSID */
-
/*
* In daemon mode, leaving open file descriptors to terminals or pipes
* can be a really bad idea.
* Case in point: the redhat startup script calls us through their 'initlog'
- * program, which exits as soon as the original amd process exits. If, at some
- * point, a misbehaved library function decides to print something to the screen,
- * we get a SIGPIPE and die.
- * More precisely: NIS libc functions will attempt to print to stderr
+ * program, which exits as soon as the original amd process exits. If,
+ * at some point, a misbehaved library function decides to print something
+ * to the screen, we get a SIGPIPE and die.
+ * And guess what: NIS glibc functions will attempt to print to stderr
* "YPBINDPROC_DOMAIN: Domain not bound" if ypbind is running but can't find
* a ypserver.
*
@@ -955,6 +923,16 @@ amu_release_controlling_tty(void)
fflush(stderr); close(2); dup2(tempfd, 2);
close(tempfd);
+#ifdef HAVE_SETSID
+ /* XXX: one day maybe use vhangup(2) */
+ if (setsid() < 0) {
+ plog(XLOG_WARNING, "Could not release controlling tty using setsid(): %m");
+ } else {
+ plog(XLOG_INFO, "released controlling tty using setsid()");
+ return;
+ }
+#endif /* HAVE_SETSID */
+
#ifdef TIOCNOTTY
fd = open("/dev/tty", O_RDWR);
if (fd < 0) {
OpenPOWER on IntegriCloud