PORTMAP: Add support for v3 TADDR2UADDR
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Tue, 18 Mar 2014 04:20:12 +0000 (21:20 -0700)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 20 Mar 2014 01:25:50 +0000 (18:25 -0700)
include/nfsc/libnfs-raw.h
lib/libnfs-win32.def
portmap/libnfs-raw-portmap.h
portmap/portmap.c
portmap/portmap.x

index f3113a60e67f48381242c3ca4e0e45b54cdd05bb..ce419ff9d3a0320732f0aad9bec4e5dce46f1df7 100644 (file)
@@ -352,6 +352,23 @@ EXTERN int rpc_pmap3_gettime_async(struct rpc_context *rpc, rpc_cb cb, void *pri
  */
 EXTERN int rpc_pmap3_uaddr2taddr_async(struct rpc_context *rpc, char *uaddr, rpc_cb cb, void *private_data);
 
+/*
+ * Call PORTMAPPER3/TADDR2UADDR.
+ * Function returns
+ *  0 : The connection was initiated. Once the connection establish finishes, the callback will be invoked.
+ * <0 : An error occured when trying to set up the connection. The callback will not be invoked.
+ *
+ * When the callback is invoked, status indicates the result:
+ * RPC_STATUS_SUCCESS : We got a successful response from the portmapper daemon.
+ *                      data is a struct pmap3_getaddr_result *.
+ * RPC_STATUS_ERROR   : An error occured when trying to contact the portmapper.
+ *                      data is the error string.
+ * RPC_STATUS_CANCEL : The connection attempt was aborted before it could complete.
+ *                     data is NULL.
+ */
+struct pmap3_netbuf;
+EXTERN int rpc_pmap3_taddr2uaddr_async(struct rpc_context *rpc, struct pmap3_netbuf *netbuf, rpc_cb cb, void *private_data);
+
 /*
  * MOUNT v3 FUNCTIONS
  */
index 81ec68e9c1d08aaee8cf0683e601eb058b9347a5..72d6be63bf904a7be95676b3d7098f8a04de2bcd 100644 (file)
@@ -110,6 +110,7 @@ rpc_pmap3_dump_async
 rpc_pmap3_callit_async
 rpc_pmap3_gettime_async
 rpc_pmap3_uaddr2taddr_async
+rpc_pmap3_taddr2uaddr_async
 rpc_mount_null_async
 rpc_mount_mnt_async
 rpc_mount_dump_async
index 1c5ec05fb99e3bd0f8165d5f108a872b24178293..bc94871b942a51a6aa996f8be3b1b6e5dfe36c50 100644 (file)
@@ -180,6 +180,9 @@ extern  u_int * pmap3_gettime_3_svc(void *, struct svc_req *);
 #define PMAP3_UADDR2TADDR 7
 extern  pmap3_netbuf * pmap3_uaddr2taddr_3(char **, CLIENT *);
 extern  pmap3_netbuf * pmap3_uaddr2taddr_3_svc(char **, struct svc_req *);
+#define PMAP3_TADDR2UADDR 8
+extern  struct pmap3_getaddr_result * pmap3_taddr2uaddr_3(pmap3_netbuf *, CLIENT *);
+extern  struct pmap3_getaddr_result * pmap3_taddr2uaddr_3_svc(pmap3_netbuf *, struct svc_req *);
 extern int pmap_program_3_freeresult (SVCXPRT *, zdrproc_t, caddr_t);
 
 #else /* K&R C */
@@ -207,6 +210,9 @@ extern  u_int * pmap3_gettime_3_svc();
 #define PMAP3_UADDR2TADDR 7
 extern  pmap3_netbuf * pmap3_uaddr2taddr_3();
 extern  pmap3_netbuf * pmap3_uaddr2taddr_3_svc();
+#define PMAP3_TADDR2UADDR 8
+extern  struct pmap3_getaddr_result * pmap3_taddr2uaddr_3();
+extern  struct pmap3_getaddr_result * pmap3_taddr2uaddr_3_svc();
 extern int pmap_program_3_freeresult ();
 #endif /* K&R C */
 
index e6aea825d729b7a7488aa5ba07a4583bd69d139c..2e9f653bec13abd8b4953f80188d5fece7bfd1cd 100644 (file)
@@ -376,3 +376,27 @@ int rpc_pmap3_uaddr2taddr_async(struct rpc_context *rpc, char *uaddr, rpc_cb cb,
 
        return 0;
 }
+
+int rpc_pmap3_taddr2uaddr_async(struct rpc_context *rpc, struct pmap3_netbuf *nb, rpc_cb cb, void *private_data)
+{
+       struct rpc_pdu *pdu;
+
+       pdu = rpc_allocate_pdu(rpc, PMAP_PROGRAM, PMAP_V3, PMAP3_TADDR2UADDR, cb, private_data, (zdrproc_t)zdr_pmap3_getaddr_result, sizeof(pmap3_getaddr_result));
+       if (pdu == NULL) {
+               rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for PORTMAP3/TADDR2UADDR call");
+               return -1;
+       }
+
+       if (zdr_pmap3_netbuf(&pdu->zdr, nb) == 0) {
+               rpc_set_error(rpc, "ZDR error: Failed to encode data for PORTMAP3/TADDR2UADDR call");
+               rpc_free_pdu(rpc, pdu);
+               return -1;
+       }
+
+       if (rpc_queue_pdu(rpc, pdu) != 0) {
+               rpc_set_error(rpc, "Failed to queue PORTMAP3/TADDR2UADDR pdu: %s", rpc_get_error(rpc));
+               return -1;
+       }
+
+       return 0;
+}
index 45c87af475d9abc604091dd092b6783e6e08a9c6..157250562558f0cdc6188156ce10aa2fae489af6 100644 (file)
@@ -114,6 +114,9 @@ program PMAP_PROGRAM {
 
                pmap3_netbuf
                PMAP3_UADDR2TADDR(string)     = 7;
+
+               struct pmap3_getaddr_result
+               PMAP3_TADDR2UADDR(pmap3_netbuf) = 8;
        } = 3;
 } = 100000;