Minimal libshare infrastructure
[zfs.git] / lib / libzfs / libzfs_mount.c
index 75ce367..42036a4 100644 (file)
@@ -121,20 +121,21 @@ zfs_share_proto_t share_all_proto[] = {
 };
 
 /*
- * Search the sharetab for the given mountpoint and protocol, returning
+ * Search for NFS and SMB exports for the given mountpoint and protocol, returning
  * a zfs_share_type_t value.
  */
 static zfs_share_type_t
 is_shared(libzfs_handle_t *hdl, const char *mountpoint, zfs_share_proto_t proto)
 {
        char buf[MAXPATHLEN], *tab;
-       char *ptr;
 
        if (hdl->libzfs_sharetab == NULL)
                return (SHARED_NOT_SHARED);
 
        (void) fseek(hdl->libzfs_sharetab, 0, SEEK_SET);
 
+       /* Search /etc/exports for NFS exports */
+       /* FIXME: Assumes the file is tab delimited. */
        while (fgets(buf, sizeof (buf), hdl->libzfs_sharetab) != NULL) {
 
                /* the mountpoint is the first entry on each line */
@@ -143,31 +144,15 @@ is_shared(libzfs_handle_t *hdl, const char *mountpoint, zfs_share_proto_t proto)
 
                *tab = '\0';
                if (strcmp(buf, mountpoint) == 0) {
-                       /*
-                        * the protocol field is the third field
-                        * skip over second field
-                        */
-                       ptr = ++tab;
-                       if ((tab = strchr(ptr, '\t')) == NULL)
-                               continue;
-                       ptr = ++tab;
-                       if ((tab = strchr(ptr, '\t')) == NULL)
-                               continue;
-                       *tab = '\0';
-                       if (strcmp(ptr,
-                           proto_table[proto].p_name) == 0) {
-                               switch (proto) {
-                               case PROTO_NFS:
-                                       return (SHARED_NFS);
-                               case PROTO_SMB:
-                                       return (SHARED_SMB);
-                               default:
-                                       return (0);
-                               }
-                       }
+                       if (proto == PROTO_NFS)
+                               return (SHARED_NFS);
+                       else
+                               return (SHARED_NOT_SHARED);
                }
        }
 
+       /* XXX: Search /etc/samba/smb.conf for SMB exports, return SHARED_SMB */
+
        return (SHARED_NOT_SHARED);
 }
 
@@ -808,10 +793,12 @@ zfs_share_proto(zfs_handle_t *zhp, zfs_share_proto_t *proto)
                return (0);
 
        if ((ret = zfs_init_libshare(hdl, SA_INIT_SHARE_API)) != SA_OK) {
+#ifdef HAVE_SHARE
                (void) zfs_error_fmt(hdl, EZFS_SHARENFSFAILED,
                    dgettext(TEXT_DOMAIN, "cannot share '%s': %s"),
                    zfs_get_name(zhp), _sa_errorstr != NULL ?
                    _sa_errorstr(ret) : "");
+#endif /* HAVE_SHARE */
                return (-1);
        }