Pass times as int64_t and eliminate the (long disabled) mount request.
authorguenther <guenther@openbsd.org>
Wed, 21 Jan 2015 09:50:25 +0000 (09:50 +0000)
committerguenther <guenther@openbsd.org>
Wed, 21 Jan 2015 09:50:25 +0000 (09:50 +0000)
ABI change, so roll the RPC protocol version; how about 57 for OpenBSD 5.7?

usr.sbin/amd/amd/amq_subr.c
usr.sbin/amd/amd/nfs_start.c
usr.sbin/amd/amq/amq.c

index 6340790..575bacf 100644 (file)
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#)amq_subr.c    8.1 (Berkeley) 6/6/93
- *     $Id: amq_subr.c,v 1.17 2015/01/21 08:24:41 guenther Exp $
+ *     $Id: amq_subr.c,v 1.18 2015/01/21 09:50:25 guenther Exp $
  */
 
 /*
@@ -46,7 +46,7 @@
 bool_t xdr_amq_mount_info_list(XDR *, amq_mount_info_list *);
 
 void *
-amqproc_null_1_svc(void *argp, struct svc_req *rqstp)
+amqproc_null_57_svc(void *argp, struct svc_req *rqstp)
 {
        static char res;
 
@@ -57,7 +57,7 @@ amqproc_null_1_svc(void *argp, struct svc_req *rqstp)
  * Return a sub-tree of mounts
  */
 amq_mount_tree_p *
-amqproc_mnttree_1_svc(amq_string *argp, struct svc_req *rqstp)
+amqproc_mnttree_57_svc(amq_string *argp, struct svc_req *rqstp)
 {
        static am_node *mp;
 
@@ -69,7 +69,7 @@ amqproc_mnttree_1_svc(amq_string *argp, struct svc_req *rqstp)
  * Unmount a single node
  */
 void *
-amqproc_umnt_1_svc(amq_string *argp, struct svc_req *rqstp)
+amqproc_umnt_57_svc(amq_string *argp, struct svc_req *rqstp)
 {
        static char res;
 
@@ -84,7 +84,7 @@ amqproc_umnt_1_svc(amq_string *argp, struct svc_req *rqstp)
  * Return global statistics
  */
 amq_mount_stats *
-amqproc_stats_1_svc(void *argp, struct svc_req *rqstp)
+amqproc_stats_57_svc(void *argp, struct svc_req *rqstp)
 {
        return (amq_mount_stats *) &amd_stats;
 }
@@ -93,7 +93,7 @@ amqproc_stats_1_svc(void *argp, struct svc_req *rqstp)
  * Return the entire tree of mount nodes
  */
 amq_mount_tree_list *
-amqproc_export_1_svc(void *argp, struct svc_req *rqstp)
+amqproc_export_57_svc(void *argp, struct svc_req *rqstp)
 {
        static amq_mount_tree_list aml;
 
@@ -104,7 +104,7 @@ amqproc_export_1_svc(void *argp, struct svc_req *rqstp)
 }
 
 int *
-amqproc_setopt_1_svc(amq_setopt *argp, struct svc_req *rqstp)
+amqproc_setopt_57_svc(amq_setopt *argp, struct svc_req *rqstp)
 {
        static int rc;
 
@@ -146,98 +146,14 @@ amqproc_setopt_1_svc(amq_setopt *argp, struct svc_req *rqstp)
 }
 
 amq_mount_info_list *
-amqproc_getmntfs_1_svc(void *argp, struct svc_req *rqstp)
+amqproc_getmntfs_57_svc(void *argp, struct svc_req *rqstp)
 {
        extern qelem mfhead;
        return (amq_mount_info_list *) &mfhead; /* XXX */
 }
 
-#if 0
-/*
- * amd does not allocate a separate socket to distinguish local
- * connects so this "security" check is useless.
- */
-static int ok_security(rqstp)
-struct svc_req *rqstp;
-{
-       struct sockaddr_in *sin;
-
-       sin = svc_getcaller(rqstp->rq_xprt);
-       if (ntohs(sin->sin_port) >= 1024 ||
-           !(sin->sin_addr.s_addr == htonl(0x7f000001) ||
-             sin->sin_addr.s_addr == myipaddr.s_addr)) {
-               char dq[20];
-               plog(XLOG_INFO, "AMQ request from %s.%d DENIED",
-                    inet_dquad(dq, sizeof(dq), sin->sin_addr.s_addr),
-                    ntohs(sin->sin_port));
-               return(0);
-       }
-       return(1);
-}
-
-int *
-amqproc_mount_1_svc(amq_string *argp, struct svc_req *rqstp)
-{
-       static int rc;
-       char *s = *argp;
-       char *cp;
-
-       plog(XLOG_INFO, "amq requested mount of %s", s);
-
-       /*
-        * Minimalist (read useless) security check.
-        */
-       if (!ok_security(rqstp)) {
-               rc = EACCES;
-               return &rc;
-       }
-
-       /*
-        * Find end of key
-        */
-       for (cp = (char *) s;
-           *cp&&(!isascii((unsigned char)*cp) || !isspace((unsigned char)*cp));
-           cp++)
-               ;
-
-       if (!*cp) {
-               plog(XLOG_INFO, "amqproc_mount: Invalid arguments");
-               rc = EINVAL;
-               return &rc;
-       }
-       *cp++ = '\0';
-
-       /*
-        * Find start of value
-        */
-       while (isascii((unsigned char)*cp) && isspace((unsigned char)*cp))
-               cp++;
-
-       root_newmap(s, cp, (char *) 0);
-       rc = mount_auto_node(s, root_node);
-       if (rc < 0)
-               return 0;
-       return &rc;
-}
-#else
-/*
- * Disable "amq -M" functionality since it is inherently insecure.
- */
-int *
-amqproc_mount_1_svc(amq_string *argp, struct svc_req *rqstp)
-{
-       static int rc;
-       char *s = *argp;
-
-       plog(XLOG_ERROR, "amq requested mount of %s, but code is disabled", s);
-
-       rc = EACCES;
-       return &rc;
-}
-#endif
-
 amq_string *
-amqproc_getvers_1_svc(void *argp, struct svc_req *rqstp)
+amqproc_getvers_57_svc(void *argp, struct svc_req *rqstp)
 {
        static amq_string res;
 
@@ -276,6 +192,7 @@ static bool_t
 xdr_amq_mount_tree_node(XDR *xdrs, amq_mount_tree *objp)
 {
        am_node *mp = (am_node *) objp;
+       long long mounttime = mp->am_stats.s_mtime;
 
        if (!xdr_amq_string(xdrs, &mp->am_mnt->mf_info)) {
                return (FALSE);
@@ -289,8 +206,7 @@ xdr_amq_mount_tree_node(XDR *xdrs, amq_mount_tree *objp)
        if (!xdr_amq_string(xdrs, &mp->am_mnt->mf_ops->fs_type)) {
                return (FALSE);
        }
-       /* XXX really a time_t, but need to transmit a 32-bit integer */
-       if (!xdr_int(xdrs, (int *)&mp->am_stats.s_mtime)) {
+       if (!xdr_int64_t(xdrs, &mounttime)) {
                return (FALSE);
        }
        if (!xdr_u_short(xdrs, &mp->am_stats.s_uid)) {
index c91f899..96054c0 100644 (file)
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#)nfs_start.c   8.1 (Berkeley) 6/6/93
- *     $Id: nfs_start.c,v 1.18 2014/10/26 03:03:34 guenther Exp $
+ *     $Id: nfs_start.c,v 1.19 2015/01/21 09:50:25 guenther Exp $
  */
 
 #include "am.h"
@@ -442,7 +442,7 @@ mount_automounter(pid_t ppid)
         */
        unregister_amq();
 
-       if (!svc_register(amqp, AMQ_PROGRAM, AMQ_VERSION, amq_program_1, IPPROTO_UDP)) {
+       if (!svc_register(amqp, AMQ_PROGRAM, AMQ_VERSION, amq_program_57, IPPROTO_UDP)) {
                plog(XLOG_FATAL, "unable to register (AMQ_PROGRAM, AMQ_VERSION, udp)");
                return 3;
        }
index a28a23d..640c617 100644 (file)
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#)amq.c 8.1 (Berkeley) 6/7/93
- *     $Id: amq.c,v 1.17 2015/01/21 08:24:41 guenther Exp $
+ *     $Id: amq.c,v 1.18 2015/01/21 09:50:25 guenther Exp $
  */
 
 /*
@@ -55,7 +55,6 @@ static int stats_flag;
 static int getvers_flag;
 static char *debug_opts;
 static char *logfile;
-static char *mount_map;
 static char *xlog_optstr;
 static char localhost[] = "localhost";
 static char *def_server = localhost;
@@ -231,7 +230,7 @@ main(int argc, char *argv[])
        /*
         * Parse arguments
         */
-       while ((opt_ch = getopt(argc, argv, "fh:l:msuvx:D:M:")) != -1)
+       while ((opt_ch = getopt(argc, argv, "fh:l:msuvx:D:")) != -1)
                switch (opt_ch) {
                case 'f':
                        flush_flag = 1;
@@ -277,11 +276,6 @@ main(int argc, char *argv[])
                        nodefault = 1;
                        break;
 
-               case 'M':
-                       mount_map = optarg;
-                       nodefault = 1;
-                       break;
-
                default:
                        errs = 1;
                        break;
@@ -343,7 +337,7 @@ show_usage:
                amq_setopt opt;
                opt.as_opt = AMOPT_DEBUG;
                opt.as_str = debug_opts;
-               rc = amqproc_setopt_1(&opt, clnt);
+               rc = amqproc_setopt_57(&opt, clnt);
                if (rc && *rc < 0) {
                        fprintf(stderr,
                            "%s: daemon not compiled for debug", __progname);
@@ -364,7 +358,7 @@ show_usage:
                amq_setopt opt;
                opt.as_opt = AMOPT_XLOG;
                opt.as_str = xlog_optstr;
-               rc = amqproc_setopt_1(&opt, clnt);
+               rc = amqproc_setopt_57(&opt, clnt);
                if (!rc || *rc) {
                        fprintf(stderr, "%s: setting log level to \"%s\" failed\n",
                            __progname, xlog_optstr);
@@ -380,7 +374,7 @@ show_usage:
                amq_setopt opt;
                opt.as_opt = AMOPT_LOGFILE;
                opt.as_str = logfile;
-               rc = amqproc_setopt_1(&opt, clnt);
+               rc = amqproc_setopt_57(&opt, clnt);
                if (!rc || *rc) {
                        fprintf(stderr, "%s: setting logfile to \"%s\" failed\n",
                            __progname, logfile);
@@ -396,7 +390,7 @@ show_usage:
                amq_setopt opt;
                opt.as_opt = AMOPT_FLUSHMAPC;
                opt.as_str = "";
-               rc = amqproc_setopt_1(&opt, clnt);
+               rc = amqproc_setopt_57(&opt, clnt);
                if (!rc || *rc) {
                        fprintf(stderr,
                            "%s: amd on %s cannot flush the map cache\n",
@@ -410,7 +404,7 @@ show_usage:
         */
        if (minfo_flag) {
                int dummy;
-               amq_mount_info_list *ml = amqproc_getmntfs_1(&dummy, clnt);
+               amq_mount_info_list *ml = amqproc_getmntfs_57(&dummy, clnt);
                if (ml) {
                        int mwid = 0, dwid = 0, twid = 0;
                        show_mi(ml, Calc, &mwid, &dwid, &twid);
@@ -422,29 +416,11 @@ show_usage:
                }
        }
 
-       /*
-        * Mount map
-        */
-       if (mount_map) {
-               int *rc;
-               do {
-                       rc = amqproc_mount_1(&mount_map, clnt);
-               } while (rc && *rc < 0);
-               if (!rc || *rc > 0) {
-                       if (rc)
-                               errno = *rc;
-                       else
-                               errno = ETIMEDOUT;
-                       fprintf(stderr, "%s: could not start new ", __progname);
-                       perror("autmount point");
-               }
-       }
-
        /*
         * Get Version
         */
        if (getvers_flag) {
-               amq_string *spp = amqproc_getvers_1(NULL, clnt);
+               amq_string *spp = amqproc_getvers_57(NULL, clnt);
                if (spp && *spp) {
                        printf("%s.\n", *spp);
                        free(*spp);
@@ -465,12 +441,12 @@ show_usage:
                                /*
                                 * Unmount request
                                 */
-                               amqproc_umnt_1(&fs, clnt);
+                               amqproc_umnt_57(&fs, clnt);
                        } else {
                                /*
                                 * Stats request
                                 */
-                               amq_mount_tree_p *mtp = amqproc_mnttree_1(&fs, clnt);
+                               amq_mount_tree_p *mtp = amqproc_mnttree_57(&fs, clnt);
                                if (mtp) {
                                        amq_mount_tree *mt = *mtp;
                                        if (mt) {
@@ -502,7 +478,7 @@ show_usage:
        } else if (unmount_flag) {
                goto show_usage;
        } else if (stats_flag) {
-               amq_mount_stats *ms = amqproc_stats_1(NULL, clnt);
+               amq_mount_stats *ms = amqproc_stats_57(NULL, clnt);
                if (ms) {
                        show_ms(ms);
                } else {
@@ -511,7 +487,7 @@ show_usage:
                        errs = 1;
                }
        } else if (!nodefault) {
-               amq_mount_tree_list *mlp = amqproc_export_1(NULL, clnt);
+               amq_mount_tree_list *mlp = amqproc_export_57(NULL, clnt);
                if (mlp) {
                        enum show_opt e = Calc;
                        int mwid = 0, dwid = 0, pwid = 0;